diff --git a/reactos/Makefile b/reactos/Makefile
index 84b25040413..9660147d2cf 100644
--- a/reactos/Makefile
+++ b/reactos/Makefile
@@ -214,6 +214,7 @@ ifeq ($(HALFVERBOSEECHO),yes)
ECHO_BUILDNO =@echo $(QUOTE)[BUILDNO] $@$(QUOTE)
ECHO_INVOKE =@echo $(QUOTE)[INVOKE] $<$(QUOTE)
ECHO_PCH =@echo $(QUOTE)[PCH] $@$(QUOTE)
+ ECHO_CPP =@echo $(QUOTE)[CPP] $@$(QUOTE)
ECHO_CC =@echo $(QUOTE)[CC] $<$(QUOTE)
ECHO_CL =@echo $(QUOTE)[CL] $<$(QUOTE)
ECHO_GAS =@echo $(QUOTE)[GAS] $<$(QUOTE)
@@ -246,6 +247,7 @@ else
ECHO_BUILDNO =
ECHO_INVOKE =
ECHO_PCH =
+ ECHO_CPP =
ECHO_CC =
ECHO_GAS =
ECHO_NASM =
diff --git a/reactos/ReactOS-amd64.rbuild b/reactos/ReactOS-amd64.rbuild
index 46d9d728df4..bd763384bd3 100644
--- a/reactos/ReactOS-amd64.rbuild
+++ b/reactos/ReactOS-amd64.rbuild
@@ -19,7 +19,7 @@
- -enable-stdcall-fixup
+ -disable-stdcall-fixup
-U_X86_
@@ -43,9 +43,9 @@
-mpreferred-stack-boundary=4
-fno-strict-aliasing
-Wno-strict-aliasing
+ -fno-ira
-Wpointer-arith
- -Wno-uninitialized
- -enable-stdcall-fixup
+ -disable-stdcall-fixup
-static
diff --git a/reactos/ReactOS-generic.rbuild b/reactos/ReactOS-generic.rbuild
index e1cfc85985a..aac9b87f39b 100644
--- a/reactos/ReactOS-generic.rbuild
+++ b/reactos/ReactOS-generic.rbuild
@@ -110,7 +110,7 @@
-
+
diff --git a/reactos/base/applications/calc/lang/ru-RU.rc b/reactos/base/applications/calc/lang/ru-RU.rc
index 3f608ff23f1..41f94b469a2 100644
--- a/reactos/base/applications/calc/lang/ru-RU.rc
+++ b/reactos/base/applications/calc/lang/ru-RU.rc
@@ -448,7 +448,7 @@ BEGIN
IDS_CONV_CONSUMPTION "Расход топлива (двигатели)"
IDS_CONV_CURRENCY "Валюта"
IDS_CONV_ENERGY "Энергия"
- IDS_CONV_LENGTH "Длинна"
+ IDS_CONV_LENGTH "Длина"
IDS_CONV_POWER "Мощность"
IDS_CONV_PRESSURE "Давление"
IDS_CONV_TEMPERATURE "Температура"
diff --git a/reactos/base/applications/calc/lang/uk-UA.rc b/reactos/base/applications/calc/lang/uk-UA.rc
index cf2ac7b580d..fcc7e7f6344 100644
--- a/reactos/base/applications/calc/lang/uk-UA.rc
+++ b/reactos/base/applications/calc/lang/uk-UA.rc
@@ -239,20 +239,20 @@ END
IDD_DIALOG_CONVERSION DIALOGEX 0, 0, 320, 130
STYLE WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "ReactOS Calculator"
+CAPTION "Калькулятор ReactOS"
MENU IDR_MENU_STANDARD
FONT 8, "MS Shell Dlg"
BEGIN
- PUSHBUTTON "Convert",IDC_BUTTON_CONVERT,35,105,76,17
+ PUSHBUTTON "Перевести",IDC_BUTTON_CONVERT,35,105,76,17
COMBOBOX IDC_COMBO_CATEGORY,4,31,140,168,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP | CBS_SORT
- LTEXT "Category:",IDC_STATIC,4,20,56,8
+ LTEXT "Категорія:",IDC_STATIC,4,20,56,8
COMBOBOX IDC_COMBO_FROM,4,60,140,168,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP | CBS_SORT
- LTEXT "Convert from:",IDC_STATIC,4,49,56,8
+ LTEXT "Вихідна величина (""з""):",IDC_STATIC,4,49,56,8
COMBOBOX IDC_COMBO_TO,4,87,140,168,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP | CBS_SORT
- LTEXT "Convert to:",IDC_STATIC,4,76,56,8
+ LTEXT "Кінцева величина (""в""):",IDC_STATIC,4,76,56,8
CONTROL "C",IDC_BUTTON_CANC,"Button",BS_OWNERDRAW | BS_CENTER |
BS_VCENTER | BS_NOTIFY | WS_TABSTOP,276,24,40,17
CONTROL "CE",IDC_BUTTON_CE,"Button",BS_OWNERDRAW | BS_CENTER |
@@ -452,17 +452,17 @@ END
// types of conversion
STRINGTABLE DISCARDABLE
BEGIN
- IDS_CONV_AREA "Area"
- IDS_CONV_CONSUMPTION "Consumption (engines)"
- IDS_CONV_CURRENCY "Currencies"
- IDS_CONV_ENERGY "Energy"
- IDS_CONV_LENGTH "Lenghts"
- IDS_CONV_POWER "Power"
- IDS_CONV_PRESSURE "Pressure"
- IDS_CONV_TEMPERATURE "Temperature"
- IDS_CONV_VELOCITY "Velocity"
- IDS_CONV_VOLUME "Volume"
- IDS_CONV_WEIGHT "Weights"
+ IDS_CONV_AREA "Площа"
+ IDS_CONV_CONSUMPTION "Витрата палива (двигуни)"
+ IDS_CONV_CURRENCY "Валюта"
+ IDS_CONV_ENERGY "Енергія"
+ IDS_CONV_LENGTH "Довжина"
+ IDS_CONV_POWER "Потужність"
+ IDS_CONV_PRESSURE "Тиск"
+ IDS_CONV_TEMPERATURE "Температура"
+ IDS_CONV_VELOCITY "Швидкість"
+ IDS_CONV_VOLUME "Об'єм"
+ IDS_CONV_WEIGHT "Вага"
END
// TYPES OF AREAS
diff --git a/reactos/base/applications/kbswitch/kbswitch.c b/reactos/base/applications/kbswitch/kbswitch.c
index b173e139bc3..5521b61a60a 100644
--- a/reactos/base/applications/kbswitch/kbswitch.c
+++ b/reactos/base/applications/kbswitch/kbswitch.c
@@ -24,6 +24,8 @@ HINSTANCE hInst;
HANDLE hProcessHeap;
HMODULE hDllLib;
ULONG ulCurrentLayoutNum = 1;
+UINT cxSmIcon, cySmIcon;
+
static HICON
CreateTrayIcon(LPTSTR szLCID)
@@ -49,18 +51,18 @@ CreateTrayIcon(LPTSTR szLCID)
hdcsrc = GetDC(NULL);
hdc = CreateCompatibleDC(hdcsrc);
- hBitmap = CreateCompatibleBitmap(hdcsrc, 16, 16);
+ hBitmap = CreateCompatibleBitmap(hdcsrc, cxSmIcon, cySmIcon);
ReleaseDC(NULL, hdcsrc);
if (hdc && hBitmap)
{
- hBmpNew = CreateBitmap(16, 16, 1, 1, NULL);
+ hBmpNew = CreateBitmap(cxSmIcon, cySmIcon, 1, 1, NULL);
if (hBmpNew)
{
hBmpOld = SelectObject(hdc, hBitmap);
- rect.right = 16;
+ rect.right = cxSmIcon;
rect.left = 0;
- rect.bottom = 16;
+ rect.bottom = cySmIcon;
rect.top = 0;
bkColor = SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
@@ -68,14 +70,14 @@ CreateTrayIcon(LPTSTR szLCID)
ExtTextOut(hdc, rect.left, rect.top, ETO_OPAQUE, &rect, _T(""), 0, NULL);
- hFont = CreateFont(-11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
- OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
- DEFAULT_QUALITY, FF_DONTCARE, _T("Tahoma"));
+ hFont = (HFONT) GetStockObject(DEFAULT_GUI_FONT);
+ if (!hFont)
+ goto End;
hFontOld = SelectObject(hdc, hFont);
DrawText(hdc, _tcsupr(szBuf), 2, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER);
SelectObject(hdc, hBmpNew);
- PatBlt(hdc, 0, 0, 16, 16, BLACKNESS);
+ PatBlt(hdc, 0, 0, cxSmIcon, cySmIcon, BLACKNESS);
SelectObject(hdc, hBmpOld);
SelectObject(hdc, hFontOld);
@@ -84,15 +86,15 @@ CreateTrayIcon(LPTSTR szLCID)
IconInfo.fIcon = TRUE;
hIcon = CreateIconIndirect(&IconInfo);
-
- DeleteObject(hBmpNew);
- DeleteObject(hBmpOld);
- DeleteObject(hFont);
+End:
+ if (hBmpNew) DeleteObject(hBmpNew);
+ if (hBmpOld) DeleteObject(hBmpOld);
+ if (hFont) DeleteObject(hFont);
}
}
- DeleteDC(hdc);
- DeleteObject(hBitmap);
+ if (hdc) DeleteDC(hdc);
+ if (hBitmap) DeleteObject(hBitmap);
return hIcon;
}
@@ -384,6 +386,23 @@ GetNextLayout()
return -1;
}
+static VOID
+SettingsChanging(HWND hwnd)
+{
+ UINT cxSmIconCur = 0, cySmIconCur = 0;
+
+ cxSmIconCur = GetSystemMetrics(SM_CXSMICON);
+ cySmIconCur = GetSystemMetrics(SM_CYSMICON);
+
+ if ((cxSmIcon != cxSmIconCur) || (cySmIcon != cySmIconCur))
+ {
+ cxSmIcon = cxSmIconCur;
+ cySmIcon = cySmIconCur;
+ }
+
+ ActivateLayout(hwnd, ulCurrentLayoutNum);
+}
+
LRESULT CALLBACK
WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
@@ -394,6 +413,9 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
case WM_CREATE:
{
+ cxSmIcon = GetSystemMetrics(SM_CXSMICON);
+ cySmIcon = GetSystemMetrics(SM_CYSMICON);
+
SetHooks();
AddTrayIcon(hwnd);
hRightPopupMenu = GetSubMenu(LoadMenu(hInst, MAKEINTRESOURCE(IDR_POPUP)), 0);
@@ -489,6 +511,8 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
case WM_SETTINGCHANGE:
{
+ SettingsChanging(hwnd);
+
if (wParam == SPI_SETDEFAULTINPUTLANG)
{
//FIXME: Should detect default language changes by CPL applet or by other tools and update UI
diff --git a/reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc b/reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc
index 0285fb0a1c0..d38fc405e00 100644
--- a/reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc
+++ b/reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc
@@ -3,7 +3,7 @@
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/mscutils/eventvwr/lang/ru-RU.rc
* PURPOSE: Russian Language File for ReactOS Event Viewer
- * TRANSLATORS: Dmitry Chapyshev
+ * TRANSLATORS: Dmitry Chapyshev, Artem Reznikov
*/
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
@@ -93,12 +93,12 @@ END
STRINGTABLE
BEGIN
IDS_APP_TITLE "Просмотр событий"
- IDC_EVENTSTRINGIDNOTFOUND "The description for Event ID ( %lu ) in Source ( %s ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer."
- IDC_EVENTLOG_ERROR_TYPE "Error"
- IDC_EVENTLOG_WARNING_TYPE "Warning"
- IDC_EVENTLOG_INFORMATION_TYPE "Information"
- IDC_EVENTLOG_AUDIT_SUCCESS "Audit Success"
- IDC_EVENTLOG_AUDIT_FAILURE "Audit Failure"
- IDC_EVENTLOG_SUCCESS "Success"
- IDC_EVENTLOG_UNKNOWN_TYPE "Unknown Event"
+ IDC_EVENTSTRINGIDNOTFOUND "Не найдено описание для события с кодом ( %lu ) в источнике ( %s ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера."
+ IDC_EVENTLOG_ERROR_TYPE "Ошибка"
+ IDC_EVENTLOG_WARNING_TYPE "Предупреждение"
+ IDC_EVENTLOG_INFORMATION_TYPE "Уведомление"
+ IDC_EVENTLOG_AUDIT_SUCCESS "Аудит успехов"
+ IDC_EVENTLOG_AUDIT_FAILURE "Аудит отказов"
+ IDC_EVENTLOG_SUCCESS "Успех"
+ IDC_EVENTLOG_UNKNOWN_TYPE "Неизвестное событие"
END
diff --git a/reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc b/reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc
index eb073e0d3ef..61cf3073a39 100644
--- a/reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc
+++ b/reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc
@@ -3,7 +3,7 @@
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/mscutils/eventvwr/lang/uk-UA.rc
* PURPOSE: Ukraianian Language File for ReactOS Event Viewer
- * TRANSLATORS: Rostislav Zabolotny
+ * TRANSLATORS: Rostislav Zabolotny, Artem Reznikov
*/
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
@@ -94,11 +94,11 @@ STRINGTABLE
BEGIN
IDS_APP_TITLE "Оглядач подій"
IDC_EVENTSTRINGIDNOTFOUND "Опис для Ідентифікатора події( %lu ) за джерелом( %s ) не знайдено. Локальний комп'ютер може не мати необхідної інформації в реєстрі чи DLL файлів повідомлень для відображення повідомлень, що надходять від віддаленого комп'ютера."
- IDC_EVENTLOG_ERROR_TYPE "Error"
- IDC_EVENTLOG_WARNING_TYPE "Warning"
- IDC_EVENTLOG_INFORMATION_TYPE "Information"
- IDC_EVENTLOG_AUDIT_SUCCESS "Audit Success"
- IDC_EVENTLOG_AUDIT_FAILURE "Audit Failure"
- IDC_EVENTLOG_SUCCESS "Success"
- IDC_EVENTLOG_UNKNOWN_TYPE "Unknown Event"
+ IDC_EVENTLOG_ERROR_TYPE "Помилка"
+ IDC_EVENTLOG_WARNING_TYPE "Попередження"
+ IDC_EVENTLOG_INFORMATION_TYPE "Повідомлення"
+ IDC_EVENTLOG_AUDIT_SUCCESS "Аудит успіхів"
+ IDC_EVENTLOG_AUDIT_FAILURE "Аудит відмов"
+ IDC_EVENTLOG_SUCCESS "Успіх"
+ IDC_EVENTLOG_UNKNOWN_TYPE "Невідома подія"
END
diff --git a/reactos/base/applications/mscutils/servman/listview.c b/reactos/base/applications/mscutils/servman/listview.c
index b5a0f2ab574..ba1d68937be 100644
--- a/reactos/base/applications/mscutils/servman/listview.c
+++ b/reactos/base/applications/mscutils/servman/listview.c
@@ -174,11 +174,14 @@ ChangeListViewText(PMAIN_WND_INFO Info,
lpServiceConfig = GetServiceConfig(pService->lpServiceName);
- switch (lpServiceConfig->dwStartType)
+ if (lpServiceConfig)
{
- case 2: StringId = IDS_SERVICES_AUTO; break;
- case 3: StringId = IDS_SERVICES_MAN; break;
- case 4: StringId = IDS_SERVICES_DIS; break;
+ switch (lpServiceConfig->dwStartType)
+ {
+ case 2: StringId = IDS_SERVICES_AUTO; break;
+ case 3: StringId = IDS_SERVICES_MAN; break;
+ case 4: StringId = IDS_SERVICES_DIS; break;
+ }
}
if (StringId)
diff --git a/reactos/base/applications/mstsc/lang/uk-UA.rc b/reactos/base/applications/mstsc/lang/uk-UA.rc
index 6f4a6d05c6c..43212a0dfa2 100644
--- a/reactos/base/applications/mstsc/lang/uk-UA.rc
+++ b/reactos/base/applications/mstsc/lang/uk-UA.rc
@@ -66,6 +66,6 @@ BEGIN
IDS_PIXEL "%lu на %lu крапок"
IDS_FULLSCREEN "На весь екран"
IDS_BROWSESERVER "<Пошук інших...>"
- IDS_HEADERTEXT1 "Remote Desktop"
- IDS_HEADERTEXT2 "Connection"
+ IDS_HEADERTEXT1 "Віддалене керування робочим столом"
+ IDS_HEADERTEXT2 "Підключення"
END
diff --git a/reactos/base/applications/network/net/help.c b/reactos/base/applications/network/net/help.c
index 2ff632971c2..ae32525213b 100644
--- a/reactos/base/applications/network/net/help.c
+++ b/reactos/base/applications/network/net/help.c
@@ -19,148 +19,148 @@ INT cmdHelp(INT argc, CHAR **argv)
if (strcmp(argv[0],"ACCOUNTS")==0)
{
- printf("ACCOUNTS\n");
- printf("help text\n");
+ puts("ACCOUNTS");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"COMPUTER")==0)
{
- printf("COMPUTER\n");
- printf("help text\n");
+ puts("COMPUTER");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"CONFIG")==0)
{
- printf("CONFIG\n");
- printf("help text\n");
+ puts("CONFIG");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"CONTINUE")==0)
{
- printf("CONTINUE\n");
- printf("help text\n");
+ puts("CONTINUE");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"FILE")==0)
{
- printf("FILE\n");
- printf("help text\n");
+ puts("FILE");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"GROUP")==0)
{
- printf("GROUP\n");
- printf("help text\n");
+ puts("GROUP");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"HELP")==0)
{
- printf("HELP\n");
- printf("help text\n");
+ puts("HELP");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"HELPMSG")==0)
{
- printf("HELPMSG\n");
- printf("help text\n");
+ puts("HELPMSG");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"LOCALGROUP")==0)
{
- printf("LOCALGROUP\n");
- printf("help text\n");
+ puts("LOCALGROUP");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"NAME")==0)
{
- printf("NAME\n");
- printf("help text\n");
+ puts("NAME");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"PRINT")==0)
{
- printf("PRINT\n");
- printf("help text\n");
+ puts("PRINT");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"SEND")==0)
{
- printf("SEND\n");
- printf("help text\n");
+ puts("SEND");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"SESSION")==0)
{
- printf("SESSION\n");
- printf("help text\n");
+ puts("SESSION");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"SHARE")==0)
{
- printf("SHARE\n");
- printf("help text\n");
+ puts("SHARE");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"START")==0)
{
- printf("START\n");
- printf("help text\n");
+ puts("START");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"STATISTICS")==0)
{
- printf("STATISTICS\n");
- printf("help text\n");
+ puts("STATISTICS");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"STOP")==0)
{
- printf("STOP\n");
- printf("help text\n");
+ puts("STOP");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"TIME")==0)
{
- printf("TIME\n");
- printf("help text\n");
+ puts("TIME");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"USE")==0)
{
- printf("USE\n");
- printf("help text\n");
+ puts("USE");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"USER")==0)
{
- printf("USER\n");
- printf("help text\n");
+ puts("USER");
+ puts("help text");
return 0;
}
if (strcmp(argv[0],"VIEW")==0)
{
- printf("VIEW\n");
- printf("help text\n");
+ puts("VIEW");
+ puts("help text");
return 0;
}
@@ -170,30 +170,30 @@ INT cmdHelp(INT argc, CHAR **argv)
void help()
{
- printf("NET ACCOUNTS\n");
- printf("NET COMPUTER\n");
- printf("NET CONFIG\n");
- printf("NET CONFIG SERVER\n");
- printf("NET CONFIG WORKSTATION\n");
- printf("NET CONTINUE\n");
- printf("NET FILE\n");
- printf("NET GROUP\n");
+ puts("NET ACCOUNTS");
+ puts("NET COMPUTER");
+ puts("NET CONFIG");
+ puts("NET CONFIG SERVER");
+ puts("NET CONFIG WORKSTATION");
+ puts("NET CONTINUE");
+ puts("NET FILE");
+ puts("NET GROUP");
- printf("NET HELP\n");
- printf("NET HELPMSG\n");
- printf("NET LOCALGROUP\n");
- printf("NET NAME\n");
- printf("NET PAUSE\n");
- printf("NET PRINT\n");
- printf("NET SEND\n");
- printf("NET SESSION\n");
+ puts("NET HELP");
+ puts("NET HELPMSG");
+ puts("NET LOCALGROUP");
+ puts("NET NAME");
+ puts("NET PAUSE");
+ puts("NET PRINT");
+ puts("NET SEND");
+ puts("NET SESSION");
- printf("NET SHARE\n");
- printf("NET START\n");
- printf("NET STATISTICS\n");
- printf("NET STOP\n");
- printf("NET TIME\n");
- printf("NET USE\n");
- printf("NET USER\n");
- printf("NET VIEW\n");
+ puts("NET SHARE");
+ puts("NET START");
+ puts("NET STATISTICS");
+ puts("NET STOP");
+ puts("NET TIME");
+ puts("NET USE");
+ puts("NET USER");
+ puts("NET VIEW");
}
diff --git a/reactos/base/applications/network/net/main.c b/reactos/base/applications/network/net/main.c
index 51c2db647f7..425b0db393d 100644
--- a/reactos/base/applications/network/net/main.c
+++ b/reactos/base/applications/network/net/main.c
@@ -114,7 +114,7 @@ int main(int argc, char **argv)
int unimplement()
{
- printf("This command is not implement yet\n");
+ puts("This command is not implement yet");
return 1;
}
diff --git a/reactos/base/applications/network/ping/ping.c b/reactos/base/applications/network/ping/ping.c
index 69fb94277f2..549c7d7036e 100644
--- a/reactos/base/applications/network/ping/ping.c
+++ b/reactos/base/applications/network/ping/ping.c
@@ -14,19 +14,6 @@
#define NDEBUG
-#ifndef _MSC_VER
-
-/* Should be in the header files somewhere (exported by ntdll.dll) */
-long atol(const char *str);
-
-#ifndef __int64
-typedef long long __int64;
-#endif
-
-char * _i64toa(__int64 value, char *string, int radix);
-
-#endif /* _MSC_VER */
-
/* General ICMP constants */
#define ICMP_MINSIZE 8 /* Minimum ICMP packet size */
#define ICMP_MAXSIZE 65535 /* Maximum ICMP packet size */
diff --git a/reactos/base/applications/notepad/dialog.c b/reactos/base/applications/notepad/dialog.c
index 38a8131c443..52951599663 100644
--- a/reactos/base/applications/notepad/dialog.c
+++ b/reactos/base/applications/notepad/dialog.c
@@ -871,19 +871,15 @@ VOID DIALOG_GoTo(VOID)
VOID DIALOG_StatusBarUpdateCaretPos(VOID)
{
- int line;
- int col;
- int ccol;
- POINT point;
+ int line, col;
TCHAR buff[MAX_PATH];
+ DWORD dwStart, dwSize;
- GetCaretPos(&point);
- line = (int) SendMessage(Globals.hEdit, EM_LINEFROMCHAR, (WPARAM)-1, (LPARAM)0);
- ccol = (int) SendMessage(Globals.hEdit, EM_CHARFROMPOS, (WPARAM)0, (LPARAM)MAKELPARAM(point.x, point.y));
- ccol = LOWORD(ccol);
- col = ccol - (int) SendMessage(Globals.hEdit, EM_LINEINDEX, (WPARAM)line, (LPARAM)0);
+ SendMessage(Globals.hEdit, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwSize);
+ line = SendMessage(Globals.hEdit, EM_LINEFROMCHAR, (WPARAM)dwStart, 0);
+ col = dwStart - SendMessage(Globals.hEdit, EM_LINEINDEX, (WPARAM)line, 0);
- _stprintf(buff, TEXT("%S %d, %S %d"), Globals.szStatusBarLine, line+1, Globals.szStatusBarCol, col+1);
+ _stprintf(buff, Globals.szStatusBarLineCol, line+1, col+1);
SendMessage(Globals.hStatusBar, SB_SETTEXT, (WPARAM) SB_SIMPLEID, (LPARAM)buff);
}
@@ -896,8 +892,7 @@ VOID DIALOG_ViewStatusBar(VOID)
if ( !Globals.hStatusBar )
{
Globals.hStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_EX_STATICEDGE, TEXT("test"), Globals.hMainWnd, CMD_STATUSBAR_WND_ID );
- LoadString(Globals.hInstance, STRING_LINE, Globals.szStatusBarLine, MAX_PATH-1);
- LoadString(Globals.hInstance, STRING_COLUMN, Globals.szStatusBarCol, MAX_PATH-1);
+ LoadString(Globals.hInstance, STRING_LINE_COLUMN, Globals.szStatusBarLineCol, MAX_PATH-1);
SendMessage(Globals.hStatusBar, SB_SIMPLE, (WPARAM)TRUE, (LPARAM)0);
}
CheckMenuItem(GetMenu(Globals.hMainWnd), CMD_STATUSBAR,
diff --git a/reactos/base/applications/notepad/lang/bg-BG.rc b/reactos/base/applications/notepad/lang/bg-BG.rc
index cd46b0999f1..20aa32c5103 100644
--- a/reactos/base/applications/notepad/lang/bg-BG.rc
+++ b/reactos/base/applications/notepad/lang/bg-BG.rc
@@ -201,4 +201,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Уьиндоуьс"
STRING_LF, "Юникс"
STRING_CR, "Мак"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/cs-CZ.rc b/reactos/base/applications/notepad/lang/cs-CZ.rc
index e60e3e8b06b..065f051157b 100644
--- a/reactos/base/applications/notepad/lang/cs-CZ.rc
+++ b/reactos/base/applications/notepad/lang/cs-CZ.rc
@@ -203,4 +203,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/da-DK.rc b/reactos/base/applications/notepad/lang/da-DK.rc
index 606c75027cf..44ecfbc917a 100644
--- a/reactos/base/applications/notepad/lang/da-DK.rc
+++ b/reactos/base/applications/notepad/lang/da-DK.rc
@@ -200,4 +200,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/de-DE.rc b/reactos/base/applications/notepad/lang/de-DE.rc
index cd5a9e3d19d..e64bd1c85ab 100644
--- a/reactos/base/applications/notepad/lang/de-DE.rc
+++ b/reactos/base/applications/notepad/lang/de-DE.rc
@@ -202,4 +202,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Zeile %d, Spalte %d"
END
diff --git a/reactos/base/applications/notepad/lang/el-GR.rc b/reactos/base/applications/notepad/lang/el-GR.rc
index 699a4d1112d..8be10f85472 100644
--- a/reactos/base/applications/notepad/lang/el-GR.rc
+++ b/reactos/base/applications/notepad/lang/el-GR.rc
@@ -199,4 +199,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/en-US.rc b/reactos/base/applications/notepad/lang/en-US.rc
index d5585433031..c4c56075497 100644
--- a/reactos/base/applications/notepad/lang/en-US.rc
+++ b/reactos/base/applications/notepad/lang/en-US.rc
@@ -201,4 +201,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/es-ES.rc b/reactos/base/applications/notepad/lang/es-ES.rc
index 5ce33aafd70..16e8f8bd406 100644
--- a/reactos/base/applications/notepad/lang/es-ES.rc
+++ b/reactos/base/applications/notepad/lang/es-ES.rc
@@ -195,7 +195,7 @@ STRING_NOTFOUND, "No se encontr
STRING_OUT_OF_MEMORY, "No hay suficiente memoria para terminar esta \
tarea. \nCierre una o mбs aplicaciones para \
aumentar la cantidad \nde memoria libre."
-STRING_CANNOTFIND "No pudo encontrar '%s'"
+STRING_CANNOTFIND "No se encontrу '%s'"
STRING_ANSI, "ANSI"
STRING_UNICODE, "Unicode"
STRING_UNICODE_BE, "Unicode (big endian)"
@@ -203,5 +203,6 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Lнnea %d, columna %d"
END
diff --git a/reactos/base/applications/notepad/lang/eu-ES.rc b/reactos/base/applications/notepad/lang/eu-ES.rc
index ac22afefc70..819c1db0d30 100644
--- a/reactos/base/applications/notepad/lang/eu-ES.rc
+++ b/reactos/base/applications/notepad/lang/eu-ES.rc
@@ -179,5 +179,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
-
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/fi-FI.rc b/reactos/base/applications/notepad/lang/fi-FI.rc
index 2e9dba23283..13378c43e40 100644
--- a/reactos/base/applications/notepad/lang/fi-FI.rc
+++ b/reactos/base/applications/notepad/lang/fi-FI.rc
@@ -200,4 +200,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/fr-FR.rc b/reactos/base/applications/notepad/lang/fr-FR.rc
index 238190f83a0..0e8eaaac47a 100644
--- a/reactos/base/applications/notepad/lang/fr-FR.rc
+++ b/reactos/base/applications/notepad/lang/fr-FR.rc
@@ -201,4 +201,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Ligne %d, colonne %d"
END
diff --git a/reactos/base/applications/notepad/lang/hu-HU.rc b/reactos/base/applications/notepad/lang/hu-HU.rc
index 0e32ed520ce..86ba21d0648 100644
--- a/reactos/base/applications/notepad/lang/hu-HU.rc
+++ b/reactos/base/applications/notepad/lang/hu-HU.rc
@@ -202,4 +202,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/id-ID.rc b/reactos/base/applications/notepad/lang/id-ID.rc
index ed089684878..59b5ef7f6a8 100644
--- a/reactos/base/applications/notepad/lang/id-ID.rc
+++ b/reactos/base/applications/notepad/lang/id-ID.rc
@@ -202,4 +202,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/it-IT.rc b/reactos/base/applications/notepad/lang/it-IT.rc
index 2da2f358a38..542f27de158 100644
--- a/reactos/base/applications/notepad/lang/it-IT.rc
+++ b/reactos/base/applications/notepad/lang/it-IT.rc
@@ -204,4 +204,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Linea %d, colonna %d"
END
diff --git a/reactos/base/applications/notepad/lang/ja-JP.rc b/reactos/base/applications/notepad/lang/ja-JP.rc
index 49cc5fde18d..03536de14b4 100644
--- a/reactos/base/applications/notepad/lang/ja-JP.rc
+++ b/reactos/base/applications/notepad/lang/ja-JP.rc
@@ -201,4 +201,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows (CR+LF)"
STRING_LF, "Unix (LF)"
STRING_CR, "Mac (CR)"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/lt-LT.rc b/reactos/base/applications/notepad/lang/lt-LT.rc
index 4779b0e56c0..07d0b8d9995 100644
--- a/reactos/base/applications/notepad/lang/lt-LT.rc
+++ b/reactos/base/applications/notepad/lang/lt-LT.rc
@@ -202,4 +202,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/nl-NL.rc b/reactos/base/applications/notepad/lang/nl-NL.rc
index d7cdf9cb164..da4c8ad8108 100644
--- a/reactos/base/applications/notepad/lang/nl-NL.rc
+++ b/reactos/base/applications/notepad/lang/nl-NL.rc
@@ -198,4 +198,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/no-NO.rc b/reactos/base/applications/notepad/lang/no-NO.rc
index 79aaab8cad5..53046579e80 100644
--- a/reactos/base/applications/notepad/lang/no-NO.rc
+++ b/reactos/base/applications/notepad/lang/no-NO.rc
@@ -201,4 +201,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/pl-PL.rc b/reactos/base/applications/notepad/lang/pl-PL.rc
index e267b043c37..a8355ffaed0 100644
--- a/reactos/base/applications/notepad/lang/pl-PL.rc
+++ b/reactos/base/applications/notepad/lang/pl-PL.rc
@@ -207,4 +207,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/pt-PT.rc b/reactos/base/applications/notepad/lang/pt-PT.rc
index 046e481f883..4a5cae4edeb 100644
--- a/reactos/base/applications/notepad/lang/pt-PT.rc
+++ b/reactos/base/applications/notepad/lang/pt-PT.rc
@@ -200,4 +200,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/ru-RU.rc b/reactos/base/applications/notepad/lang/ru-RU.rc
index a4d4d761f6a..186d37a69f7 100644
--- a/reactos/base/applications/notepad/lang/ru-RU.rc
+++ b/reactos/base/applications/notepad/lang/ru-RU.rc
@@ -200,4 +200,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Макинтош"
+STRING_LINE_COLUMN, "Строка %d, столбец %d"
END
diff --git a/reactos/base/applications/notepad/lang/sk-SK.rc b/reactos/base/applications/notepad/lang/sk-SK.rc
index cdedb92238c..fbf236f2747 100644
--- a/reactos/base/applications/notepad/lang/sk-SK.rc
+++ b/reactos/base/applications/notepad/lang/sk-SK.rc
@@ -189,4 +189,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/sl-SI.rc b/reactos/base/applications/notepad/lang/sl-SI.rc
index 98679e9d614..8c3c3a8cc4f 100644
--- a/reactos/base/applications/notepad/lang/sl-SI.rc
+++ b/reactos/base/applications/notepad/lang/sl-SI.rc
@@ -198,4 +198,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/sv-SE.rc b/reactos/base/applications/notepad/lang/sv-SE.rc
index 127dd6380cd..4b54bbc75ae 100644
--- a/reactos/base/applications/notepad/lang/sv-SE.rc
+++ b/reactos/base/applications/notepad/lang/sv-SE.rc
@@ -201,4 +201,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/th-TH.rc b/reactos/base/applications/notepad/lang/th-TH.rc
index 131075dcca4..bdb359e2ee8 100644
--- a/reactos/base/applications/notepad/lang/th-TH.rc
+++ b/reactos/base/applications/notepad/lang/th-TH.rc
@@ -193,4 +193,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/uk-UA.rc b/reactos/base/applications/notepad/lang/uk-UA.rc
index c24d8cc5bab..11cc7183771 100644
--- a/reactos/base/applications/notepad/lang/uk-UA.rc
+++ b/reactos/base/applications/notepad/lang/uk-UA.rc
@@ -198,4 +198,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/lang/zh-CN.rc b/reactos/base/applications/notepad/lang/zh-CN.rc
index bb2fcf247ca..fe179b729a7 100644
--- a/reactos/base/applications/notepad/lang/zh-CN.rc
+++ b/reactos/base/applications/notepad/lang/zh-CN.rc
@@ -199,4 +199,5 @@ STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
STRING_LF, "Unix"
STRING_CR, "Mac"
+STRING_LINE_COLUMN, "Line %d, column %d"
END
diff --git a/reactos/base/applications/notepad/main.c b/reactos/base/applications/notepad/main.c
index 8b8b901641d..aa74631eb10 100644
--- a/reactos/base/applications/notepad/main.c
+++ b/reactos/base/applications/notepad/main.c
@@ -302,6 +302,7 @@ LRESULT CALLBACK EDIT_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
+ case WM_KEYDOWN:
case WM_KEYUP:
{
switch (wParam)
diff --git a/reactos/base/applications/notepad/main.h b/reactos/base/applications/notepad/main.h
index 37477bc6afe..180020fdb43 100644
--- a/reactos/base/applications/notepad/main.h
+++ b/reactos/base/applications/notepad/main.h
@@ -61,8 +61,7 @@ typedef struct
TCHAR szMarginRight[MAX_PATH];
TCHAR szHeader[MAX_PATH];
TCHAR szFooter[MAX_PATH];
- TCHAR szStatusBarLine[MAX_PATH];
- TCHAR szStatusBarCol[MAX_PATH];
+ TCHAR szStatusBarLineCol[MAX_PATH];
int iEncoding;
int iEoln;
diff --git a/reactos/base/applications/notepad/notepad_res.h b/reactos/base/applications/notepad/notepad_res.h
index 9d6d5cbd1cf..75fe6a67dba 100644
--- a/reactos/base/applications/notepad/notepad_res.h
+++ b/reactos/base/applications/notepad/notepad_res.h
@@ -101,5 +101,4 @@
#define STRING_CR 0x184
#define STRING_LICENSE 0x185
-#define STRING_LINE 0x186
-#define STRING_COLUMN 0x187
+#define STRING_LINE_COLUMN 0x186
diff --git a/reactos/base/applications/notepad/settings.c b/reactos/base/applications/notepad/settings.c
index 12e415939f3..d363c6e1da9 100644
--- a/reactos/base/applications/notepad/settings.c
+++ b/reactos/base/applications/notepad/settings.c
@@ -112,7 +112,7 @@ void LoadSettings(void)
base_length = (GetSystemMetrics(SM_CXSCREEN) > GetSystemMetrics(SM_CYSCREEN))?
GetSystemMetrics(SM_CYSCREEN) : GetSystemMetrics(SM_CXSCREEN);
- dx = base_length * .95;
+ dx = (INT)(base_length * .95);
dy = dx * 3 / 4;
SetRect( &Globals.main_rect, 0, 0, dx, dy );
diff --git a/reactos/base/applications/taskmgr/taskmgr.rbuild b/reactos/base/applications/taskmgr/taskmgr.rbuild
index 50518990a8e..a3bb904ea15 100644
--- a/reactos/base/applications/taskmgr/taskmgr.rbuild
+++ b/reactos/base/applications/taskmgr/taskmgr.rbuild
@@ -2,8 +2,7 @@
.
- msvcrt
- ntdll
+ ntsys
kernel32
advapi32
user32
diff --git a/reactos/base/applications/winhlp32/lang/uk-UA.rc b/reactos/base/applications/winhlp32/lang/uk-UA.rc
index 20f29088d58..a895a2fa14b 100644
--- a/reactos/base/applications/winhlp32/lang/uk-UA.rc
+++ b/reactos/base/applications/winhlp32/lang/uk-UA.rc
@@ -1,63 +1,112 @@
/*
* PROJECT: ReactOS Help Viewer
* LICENSE: GPL - See COPYING in the top level directory
- * FILE: applications/winhelp/lang/uk-UA.rc
+ * FILE: applications/winhlp32/lang/uk-UA.rc
* PURPOSE: Ukraianian Language File for ReactOS Help Viewer
- * PROGRAMMERS: Rostislav Zabolotny
+ * PROGRAMMERS: Rostislav Zabolotny, Artem Reznikov
*/
-LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
-
/* Menu */
-MAIN_MENU MENU
-BEGIN
- POPUP "&Файл"
- BEGIN
+MAIN_MENU MENU LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+{
+ POPUP "&Файл" {
MENUITEM "&Відкрити", MNID_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM "&Друк", MNID_FILE_PRINT
- MENUITEM "Налаштування &прінтера...", MNID_FILE_SETUP
+ MENUITEM "Пара&метри друку...", MNID_FILE_SETUP
MENUITEM SEPARATOR
MENUITEM "В&ихід", MNID_FILE_EXIT
- END
- POPUP "&Правка"
- BEGIN
+ }
+ POPUP "&Правка" {
MENUITEM "&Копіювати...", MNID_EDIT_COPYDLG
MENUITEM SEPARATOR
MENUITEM "&Опис...", MNID_EDIT_ANNOTATE
- END
- POPUP "&Закладка"
- BEGIN
+ }
+ POPUP "&Закладка" {
MENUITEM "&Визначити...", MNID_BKMK_DEFINE
- END
- POPUP "&Допомога"
- BEGIN
- MENUITEM "Допомога &по допомозі", MNID_HELP_HELPON
- MENUITEM "&Над усіма вікнами", MNID_HELP_HELPTOP
+ }
+ POPUP "П&араметри" {
+ POPUP "Довідку завжди видно"
+ BEGIN
+ MENUITEM "За промовчанням", MNID_OPTS_HELP_DEFAULT
+ MENUITEM "Видно", MNID_OPTS_HELP_VISIBLE
+ MENUITEM "Не видно", MNID_OPTS_HELP_NONVISIBLE
+ END
+ MENUITEM "Історія", MNID_OPTS_HISTORY
+ POPUP "Шрифт"
+ BEGIN
+ MENUITEM "Дрібний", MNID_OPTS_FONTS_SMALL
+ MENUITEM "Звичайний", MNID_OPTS_FONTS_NORMAL
+ MENUITEM "Великий", MNID_OPTS_FONTS_LARGE
+ END
+ MENUITEM "Використовувати системні кольори", MNID_OPTS_SYSTEM_COLORS
+ }
+ POPUP "&Довідка" {
+ MENUITEM "Довідка &по довідку", MNID_HELP_HELPON
+ MENUITEM "Над усіма вікнами", MNID_HELP_HELPTOP
MENUITEM SEPARATOR
MENUITEM "&Інформація...", MNID_HELP_ABOUT
#ifdef WINELIB
MENUITEM "&Про WINE", MNID_HELP_WINE
#endif
- END
-END
+ }
+}
+
+IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+FONT 8, "MS Shell Dlg"
+CAPTION "Предметний покажчик"
+{
+ LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
+}
+
+IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+FONT 8, "MS Shell Dlg"
+CAPTION "Search"
+{
+ LTEXT "Ще не реалізовано", -1, 10, 10, 180, 150
+}
/* Strings */
-
-STRINGTABLE DISCARDABLE
-BEGIN
-STID_WINE_HELP, "Допомога WINE"
+STRINGTABLE DISCARDABLE LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+{
+STID_WINE_HELP, "Довідка WINE"
STID_WHERROR, "ПОМИЛКА"
STID_WARNING, "ПОПЕРЕДЖЕННЯ"
-STID_INFO, "Інформація"
+STID_INFO, "Повідомлення"
STID_NOT_IMPLEMENTED, "Не реалізовано"
-STID_HLPFILE_ERROR_s, "Помилка під час читання файлу допомоги `%s'"
-STID_CONTENTS, "&Зміст"
-STID_SEARCH, "&Пошук"
+STID_HLPFILE_ERROR_s, "Помилка під час читання файлу довідки `%s'"
+STID_INDEX, "&Предметний покажчик"
+STID_CONTENTS, "Зміст"
STID_BACK, "&Назад"
-STID_TOPICS, "&Розділи"
-STID_ALL_FILES, "Всі файли (*.*)"
-STID_HELP_FILES_HLP, "Файли допомоги (*.hlp)"
+STID_ALL_FILES, "Усі файли (*.*)"
+STID_HELP_FILES_HLP, "Файли довідки (*.hlp)"
STID_FILE_NOT_FOUND_s "Не можу знайти '%s'. Чи не бажаєте вказати розташування самостійно?"
+STID_NO_RICHEDIT "Не можу знайти richedit... Перериваю роботу"
+STID_PSH_INDEX, "Теми довідки: "
+}
+
+CONTEXT_MENU MENU LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Нотатки...", MNID_CTXT_ANNOTATE
+ MENUITEM "Копіювати", MNID_CTXT_COPY
+ MENUITEM "Друк...", MNID_CTXT_PRINT
+ POPUP "Шрифт"
+ BEGIN
+ MENUITEM "Дрібний", MNID_CTXT_FONTS_SMALL
+ MENUITEM "Звичайний", MNID_CTXT_FONTS_NORMAL
+ MENUITEM "Великий", MNID_CTXT_FONTS_LARGE
+ END
+ POPUP "Довідку завжди видно"
+ BEGIN
+ MENUITEM "За промовчанням", MNID_CTXT_HELP_DEFAULT
+ MENUITEM "Видно", MNID_CTXT_HELP_VISIBLE
+ MENUITEM "Не видно", MNID_CTXT_HELP_NONVISIBLE
+ END
+ MENUITEM "Використовувати системні кольори", MNID_CTXT_SYSTEM_COLORS
+ END
END
diff --git a/reactos/base/applications/winhlp32/rsrc.rc b/reactos/base/applications/winhlp32/rsrc.rc
index f5bf5e20949..d6f0b692b0c 100644
--- a/reactos/base/applications/winhlp32/rsrc.rc
+++ b/reactos/base/applications/winhlp32/rsrc.rc
@@ -52,5 +52,5 @@ IDI_WINHELP ICON DISCARDABLE winhelp.ico
#include "lang/sk-SK.rc"
#include "lang/sv-SE.rc"
#include "lang/tr-TR.rc"
-// #include "lang/uk-UA.rc"
+#include "lang/uk-UA.rc"
#include "lang/zh-CN.rc"
diff --git a/reactos/base/applications/wordpad/wordpad.rbuild b/reactos/base/applications/wordpad/wordpad.rbuild
index c158254bca5..120f2355878 100644
--- a/reactos/base/applications/wordpad/wordpad.rbuild
+++ b/reactos/base/applications/wordpad/wordpad.rbuild
@@ -6,7 +6,6 @@
shell32
user32
gdi32
- msvcrt
advapi32
kernel32
comctl32
diff --git a/reactos/base/services/dhcp/util.c b/reactos/base/services/dhcp/util.c
index 3075fb8d0e5..2dd76235b79 100644
--- a/reactos/base/services/dhcp/util.c
+++ b/reactos/base/services/dhcp/util.c
@@ -97,7 +97,7 @@ int addr_eq( struct iaddr a, struct iaddr b ) {
void *dmalloc( int size, char *name ) { return malloc( size ); }
int read_client_conf(void) {
- /* What a strage dance */
+ /* What a strange dance */
struct client_config *config;
char ComputerName [MAX_COMPUTERNAME_LENGTH + 1];
LPSTR lpCompName;
@@ -113,14 +113,16 @@ int read_client_conf(void) {
GetComputerName(ComputerName, & ComputerNameSize);
+ debug("Hostname: %s, length: %lu",
+ ComputerName, ComputerNameSize);
/* This never gets freed since it's only called once */
lpCompName =
- HeapAlloc(GetProcessHeap(), 0, strlen(ComputerName) + 1);
+ HeapAlloc(GetProcessHeap(), 0, ComputerNameSize + 1);
if (lpCompName !=NULL) {
- GetComputerName(lpCompName, & ComputerNameSize);
+ memcpy(lpCompName, ComputerName, ComputerNameSize + 1);
/* Send our hostname, some dhcpds use this to update DNS */
config->send_options[DHO_HOST_NAME].data = (u_int8_t*)strlwr(lpCompName);
- config->send_options[DHO_HOST_NAME].len = strlen(ComputerName);
+ config->send_options[DHO_HOST_NAME].len = ComputerNameSize;
debug("Hostname: %s, length: %d",
config->send_options[DHO_HOST_NAME].data,
config->send_options[DHO_HOST_NAME].len);
diff --git a/reactos/base/services/eventlog/rpc.c b/reactos/base/services/eventlog/rpc.c
index 5a0e7b14c9a..83e06792722 100644
--- a/reactos/base/services/eventlog/rpc.c
+++ b/reactos/base/services/eventlog/rpc.c
@@ -44,7 +44,6 @@ DWORD STDCALL RpcThreadRoutine(LPVOID lpParameter)
/* Function 0 */
NTSTATUS ElfrClearELFW(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
PRPC_UNICODE_STRING BackupFileName)
{
@@ -55,7 +54,6 @@ NTSTATUS ElfrClearELFW(
/* Function 1 */
NTSTATUS ElfrBackupELFW(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
PRPC_UNICODE_STRING BackupFileName)
{
@@ -66,7 +64,6 @@ NTSTATUS ElfrBackupELFW(
/* Function 2 */
NTSTATUS ElfrCloseEL(
- handle_t BindingHandle,
IELF_HANDLE *LogHandle)
{
UNIMPLEMENTED;
@@ -76,7 +73,6 @@ NTSTATUS ElfrCloseEL(
/* Function 3 */
NTSTATUS ElfrDeregisterEventSource(
- handle_t BindingHandle,
IELF_HANDLE *LogHandle)
{
UNIMPLEMENTED;
@@ -86,7 +82,6 @@ NTSTATUS ElfrDeregisterEventSource(
/* Function 4 */
NTSTATUS ElfrNumberOfRecords(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD *NumberOfRecords)
{
@@ -97,7 +92,6 @@ NTSTATUS ElfrNumberOfRecords(
/* Function 5 */
NTSTATUS ElfrOldestRecord(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD *OldestRecordNumber)
{
@@ -108,7 +102,6 @@ NTSTATUS ElfrOldestRecord(
/* Function 6 */
NTSTATUS ElfrChangeNotify(
- handle_t BindingHandle,
IELF_HANDLE *LogHandle,
RPC_CLIENT_ID ClientId,
DWORD Event)
@@ -120,7 +113,6 @@ NTSTATUS ElfrChangeNotify(
/* Function 7 */
NTSTATUS ElfrOpenELW(
- handle_t BindingHandle,
EVENTLOG_HANDLE_W UNCServerName,
PRPC_UNICODE_STRING ModuleName,
PRPC_UNICODE_STRING RegModuleName,
@@ -136,7 +128,6 @@ NTSTATUS ElfrOpenELW(
/* Function 8 */
NTSTATUS ElfrRegisterEventSourceW(
- handle_t BindingHandle,
EVENTLOG_HANDLE_W UNCServerName,
PRPC_UNICODE_STRING ModuleName,
PRPC_UNICODE_STRING RegModuleName,
@@ -152,7 +143,6 @@ NTSTATUS ElfrRegisterEventSourceW(
/* Function 9 */
NTSTATUS ElfrOpenBELW(
- handle_t BindingHandle,
EVENTLOG_HANDLE_W UNCServerName,
PRPC_UNICODE_STRING BackupFileName,
DWORD MajorVersion,
@@ -166,7 +156,6 @@ NTSTATUS ElfrOpenBELW(
/* Function 10 */
NTSTATUS ElfrReadELW(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD ReadFlags,
DWORD RecordOffset,
@@ -182,7 +171,6 @@ NTSTATUS ElfrReadELW(
/* Function 11 */
NTSTATUS ElfrReportEventW(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD Time,
USHORT EventType,
@@ -233,7 +221,6 @@ NTSTATUS ElfrReportEventW(
/* Function 12 */
NTSTATUS ElfrClearELFA(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
PRPC_STRING BackupFileName)
{
@@ -244,7 +231,6 @@ NTSTATUS ElfrClearELFA(
/* Function 13 */
NTSTATUS ElfrBackupELFA(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
PRPC_STRING BackupFileName)
{
@@ -255,7 +241,6 @@ NTSTATUS ElfrBackupELFA(
/* Function 14 */
NTSTATUS ElfrOpenELA(
- handle_t BindingHandle,
EVENTLOG_HANDLE_A UNCServerName,
PRPC_STRING ModuleName,
PRPC_STRING RegModuleName,
@@ -290,7 +275,6 @@ NTSTATUS ElfrOpenELA(
}
Status = ElfrOpenELW(
- BindingHandle,
UNCServerName ? UNCServerNameW.Buffer : NULL,
ModuleName ? (PRPC_UNICODE_STRING)&ModuleNameW : NULL,
RegModuleName ? (PRPC_UNICODE_STRING)&RegModuleNameW : NULL,
@@ -308,7 +292,6 @@ NTSTATUS ElfrOpenELA(
/* Function 15 */
NTSTATUS ElfrRegisterEventSourceA(
- handle_t BindingHandle,
EVENTLOG_HANDLE_A UNCServerName,
PRPC_STRING ModuleName,
PRPC_STRING RegModuleName,
@@ -323,7 +306,6 @@ NTSTATUS ElfrRegisterEventSourceA(
/* Function 16 */
NTSTATUS ElfrOpenBELA(
- handle_t BindingHandle,
EVENTLOG_HANDLE_A UNCServerName,
PRPC_STRING BackupFileName,
DWORD MajorVersion,
@@ -337,7 +319,6 @@ NTSTATUS ElfrOpenBELA(
/* Function 17 */
NTSTATUS ElfrReadELA(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD ReadFlags,
DWORD RecordOffset,
@@ -353,7 +334,6 @@ NTSTATUS ElfrReadELA(
/* Function 18 */
NTSTATUS ElfrReportEventA(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD Time,
USHORT EventType,
@@ -403,7 +383,6 @@ NTSTATUS ElfrWriteClusterEvents(
/* Function 22 */
NTSTATUS ElfrGetLogInformation(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD InfoLevel,
BYTE *Buffer,
@@ -417,7 +396,6 @@ NTSTATUS ElfrGetLogInformation(
/* Function 23 */
NTSTATUS ElfrFlushEL(
- handle_t BindingHandle,
IELF_HANDLE LogHandle)
{
UNIMPLEMENTED;
@@ -427,7 +405,6 @@ NTSTATUS ElfrFlushEL(
/* Function 24 */
NTSTATUS ElfrReportEventAndSourceW(
- handle_t BindingHandle,
IELF_HANDLE LogHandle,
DWORD Time,
USHORT EventType,
diff --git a/reactos/base/services/rpcss/endpoint.c b/reactos/base/services/rpcss/endpoint.c
deleted file mode 100644
index f7e207eab5f..00000000000
--- a/reactos/base/services/rpcss/endpoint.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * PROJECT: ReactOS RpcSs service
- * LICENSE: GPL - See COPYING in the top level directory
- * FILE: services/rpcss/rpcss.c
- * PURPOSE: Endpoint mapper
- * COPYRIGHT: Copyright 2002 Eric Kohl
- */
-
-/* INCLUDES *****************************************************************/
-
-#include "rpc.h"
-
-/* FUNCTIONS ****************************************************************/
-
-VOID
-StartEndpointMapper(VOID)
-{
-#if 0
- RpcServerRegisterProtseqW("ncacn_np", 1, "\pipe\epmapper");
-
- RpcServerRegisterProtseqW("ncalrpc", 1, "epmapper");
-
- RpcServerRegisterIf(epmapper_InterfaceHandle, 0, 0);
-#endif
-}
-
-/* EOF */
diff --git a/reactos/dll/win32/rpcrt4/rpcss_np_client.h b/reactos/base/services/rpcss/epm.idl
similarity index 73%
rename from reactos/dll/win32/rpcrt4/rpcss_np_client.h
rename to reactos/base/services/rpcss/epm.idl
index db65d432bca..62f16f6774a 100644
--- a/reactos/dll/win32/rpcrt4/rpcss_np_client.h
+++ b/reactos/base/services/rpcss/epm.idl
@@ -1,26 +1,19 @@
-/*
- * Copyright (C) 2002 Greg Turner
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#ifndef __WINE_RPCSS_NP_CLIENT_H
-#define __WINE_RPCSS_NP_CLIENT_H
-
-/* rpcss_np_client.c */
-HANDLE RPC_RpcssNPConnect(void);
-BOOL RPCRT4_SendReceiveNPMsg(HANDLE, PRPCSS_NP_MESSAGE, char *, PRPCSS_NP_REPLY);
-
-#endif /* __RPCSS_NP_CLINET_H */
+/*
+ * Copyright 2008 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wine/epm.idl"
diff --git a/reactos/base/services/rpcss/epmp.c b/reactos/base/services/rpcss/epmp.c
new file mode 100644
index 00000000000..5cfef836cb8
--- /dev/null
+++ b/reactos/base/services/rpcss/epmp.c
@@ -0,0 +1,284 @@
+/*
+ * Endpoint Mapper
+ *
+ * Copyright (C) 2007 Robert Shearman for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "epm_s.h"
+
+#include "wine/debug.h"
+#include "wine/list.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(ole);
+
+struct registered_ept_entry
+{
+ struct list entry;
+ GUID object;
+ RPC_SYNTAX_IDENTIFIER iface;
+ RPC_SYNTAX_IDENTIFIER syntax;
+ char *protseq;
+ char *endpoint;
+ char *address;
+ char annotation[ept_max_annotation_size];
+};
+
+static struct list registered_ept_entry_list = LIST_INIT(registered_ept_entry_list);
+
+static CRITICAL_SECTION csEpm;
+static CRITICAL_SECTION_DEBUG critsect_debug =
+{
+ 0, 0, &csEpm,
+ { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
+ 0, 0, { (DWORD_PTR)(__FILE__ ": csEpm") }
+};
+static CRITICAL_SECTION csEpm = { &critsect_debug, -1, 0, 0, 0, 0 };
+
+static const UUID nil_object;
+
+/* must be called inside csEpm */
+static void delete_registered_ept_entry(struct registered_ept_entry *entry)
+{
+ I_RpcFree(entry->protseq);
+ I_RpcFree(entry->endpoint);
+ I_RpcFree(entry->address);
+ list_remove(&entry->entry);
+ HeapFree(GetProcessHeap(), 0, entry);
+}
+
+static struct registered_ept_entry *find_ept_entry(
+ const RPC_SYNTAX_IDENTIFIER *iface, const RPC_SYNTAX_IDENTIFIER *syntax,
+ const char *protseq, const char *endpoint, const char *address,
+ const UUID *object)
+{
+ struct registered_ept_entry *entry;
+ LIST_FOR_EACH_ENTRY(entry, ®istered_ept_entry_list, struct registered_ept_entry, entry)
+ {
+ if (memcmp(&entry->iface, iface, sizeof(RPC_SYNTAX_IDENTIFIER))) continue;
+ if (memcmp(&entry->syntax, syntax, sizeof(RPC_SYNTAX_IDENTIFIER))) continue;
+ if (strcmp(entry->protseq, protseq)) continue;
+ if (memcmp(&entry->object, object, sizeof(UUID))) continue;
+ WINE_TRACE("found entry with iface %d.%d %s, syntax %d.%d %s, protseq %s, object %s\n",
+ entry->iface.SyntaxVersion.MajorVersion, entry->iface.SyntaxVersion.MinorVersion,
+ wine_dbgstr_guid(&entry->iface.SyntaxGUID),
+ entry->syntax.SyntaxVersion.MajorVersion, entry->syntax.SyntaxVersion.MinorVersion,
+ wine_dbgstr_guid(&entry->syntax.SyntaxGUID), protseq,
+ wine_dbgstr_guid(&entry->object));
+ return entry;
+ }
+ WINE_TRACE("not found\n");
+ return NULL;
+}
+
+void __RPC_USER ept_lookup_handle_t_rundown(ept_lookup_handle_t entry_handle)
+{
+ WINE_FIXME("%p\n", entry_handle);
+}
+
+void ept_insert(handle_t h,
+ unsigned32 num_ents,
+ ept_entry_t entries[],
+ boolean32 replace,
+ error_status_t *status)
+{
+ unsigned32 i;
+ RPC_STATUS rpc_status;
+
+ WINE_TRACE("(%p, %lu, %p, %lu, %p)\n", h, num_ents, entries, replace, status);
+
+ *status = RPC_S_OK;
+
+ EnterCriticalSection(&csEpm);
+
+ for (i = 0; i < num_ents; i++)
+ {
+ struct registered_ept_entry *entry = HeapAlloc(GetProcessHeap(), 0, sizeof(*entry));
+ if (!entry)
+ {
+ /* FIXME: cleanup code to delete added entries */
+ *status = EPT_S_CANT_PERFORM_OP;
+ break;
+ }
+ list_init(&entry->entry);
+ memcpy(entry->annotation, entries[i].annotation, sizeof(entries[i].annotation));
+ rpc_status = TowerExplode(entries[i].tower, &entry->iface, &entry->syntax,
+ &entry->protseq, &entry->endpoint,
+ &entry->address);
+ if (rpc_status != RPC_S_OK)
+ {
+ WINE_WARN("TowerExplode failed %lu\n", rpc_status);
+ *status = rpc_status;
+ break; /* FIXME: more cleanup? */
+ }
+
+ entry->object = entries[i].object;
+
+ if (replace)
+ {
+ /* FIXME: correct find algorithm */
+ struct registered_ept_entry *old_entry = find_ept_entry(&entry->iface, &entry->syntax, entry->protseq, entry->endpoint, entry->address, &entry->object);
+ if (old_entry) delete_registered_ept_entry(old_entry);
+ }
+ list_add_tail(®istered_ept_entry_list, &entry->entry);
+ }
+
+ LeaveCriticalSection(&csEpm);
+}
+
+void ept_delete(handle_t h,
+ unsigned32 num_ents,
+ ept_entry_t entries[],
+ error_status_t *status)
+{
+ unsigned32 i;
+ RPC_STATUS rpc_status;
+
+ *status = RPC_S_OK;
+
+ WINE_TRACE("(%p, %lu, %p, %p)\n", h, num_ents, entries, status);
+
+ EnterCriticalSection(&csEpm);
+
+ for (i = 0; i < num_ents; i++)
+ {
+ struct registered_ept_entry *entry;
+ RPC_SYNTAX_IDENTIFIER iface, syntax;
+ char *protseq;
+ char *endpoint;
+ char *address;
+ rpc_status = TowerExplode(entries[i].tower, &iface, &syntax, &protseq,
+ &endpoint, &address);
+ if (rpc_status != RPC_S_OK)
+ break;
+ entry = find_ept_entry(&iface, &syntax, protseq, endpoint, address, &entries[i].object);
+ if (entry)
+ delete_registered_ept_entry(entry);
+ else
+ {
+ *status = EPT_S_NOT_REGISTERED;
+ break;
+ }
+ I_RpcFree(protseq);
+ I_RpcFree(endpoint);
+ I_RpcFree(address);
+ }
+
+ LeaveCriticalSection(&csEpm);
+}
+
+void ept_lookup(handle_t h,
+ unsigned32 inquiry_type,
+ uuid_p_t object,
+ rpc_if_id_p_t interface_id,
+ unsigned32 vers_option,
+ ept_lookup_handle_t *entry_handle,
+ unsigned32 max_ents,
+ unsigned32 *num_ents,
+ ept_entry_t entries[],
+ error_status_t *status)
+{
+ WINE_FIXME("(%p, %p, %p): stub\n", h, entry_handle, status);
+
+ *status = EPT_S_CANT_PERFORM_OP;
+}
+
+void ept_map(handle_t h,
+ uuid_p_t object,
+ twr_p_t map_tower,
+ ept_lookup_handle_t *entry_handle,
+ unsigned32 max_towers,
+ unsigned32 *num_towers,
+ twr_p_t *towers,
+ error_status_t *status)
+{
+ RPC_STATUS rpc_status;
+ RPC_SYNTAX_IDENTIFIER iface, syntax;
+ char *protseq;
+ struct registered_ept_entry *entry;
+
+ *status = RPC_S_OK;
+ *num_towers = 0;
+
+ WINE_TRACE("(%p, %p, %p, %p, %lu, %p, %p, %p)\n", h, object, map_tower,
+ entry_handle, max_towers, num_towers, towers, status);
+
+ rpc_status = TowerExplode(map_tower, &iface, &syntax, &protseq,
+ NULL, NULL);
+ if (rpc_status != RPC_S_OK)
+ {
+ *status = rpc_status;
+ return;
+ }
+
+ EnterCriticalSection(&csEpm);
+
+ LIST_FOR_EACH_ENTRY(entry, ®istered_ept_entry_list, struct registered_ept_entry, entry)
+ {
+ if (IsEqualGUID(&entry->iface.SyntaxGUID, &iface.SyntaxGUID) &&
+ (entry->iface.SyntaxVersion.MajorVersion == iface.SyntaxVersion.MajorVersion) &&
+ (entry->iface.SyntaxVersion.MinorVersion >= iface.SyntaxVersion.MinorVersion) &&
+ !memcmp(&entry->syntax, &syntax, sizeof(syntax)) &&
+ !strcmp(entry->protseq, protseq) &&
+ ((!object && IsEqualGUID(&entry->object, &nil_object)) || IsEqualGUID(object, &entry->object)))
+ {
+ if (*num_towers < max_towers)
+ {
+ rpc_status = TowerConstruct(&entry->iface, &entry->syntax,
+ entry->protseq, entry->endpoint,
+ entry->address,
+ &towers[*num_towers]);
+ if (rpc_status != RPC_S_OK)
+ {
+ *status = rpc_status;
+ break; /* FIXME: more cleanup? */
+ }
+ }
+ (*num_towers)++;
+ }
+ }
+
+ LeaveCriticalSection(&csEpm);
+}
+
+void ept_lookup_handle_free(handle_t h,
+ ept_lookup_handle_t *entry_handle,
+ error_status_t *status)
+{
+ WINE_FIXME("(%p, %p, %p): stub\n", h, entry_handle, status);
+
+ *status = EPT_S_CANT_PERFORM_OP;
+}
+
+void ept_inq_object(handle_t h,
+ GUID *ept_object,
+ error_status_t *status)
+{
+ WINE_FIXME("(%p, %p, %p): stub\n", h, ept_object, status);
+
+ *status = EPT_S_CANT_PERFORM_OP;
+}
+
+void ept_mgmt_delete(handle_t h,
+ boolean32 object_speced,
+ uuid_p_t object,
+ twr_p_t tower,
+ error_status_t *status)
+{
+ WINE_FIXME("(%p, %ld, %p, %p, %p): stub\n", h, object_speced, object, tower, status);
+
+ *status = EPT_S_CANT_PERFORM_OP;
+}
diff --git a/reactos/base/services/rpcss/irot.idl b/reactos/base/services/rpcss/irot.idl
new file mode 100644
index 00000000000..4324fa4e28b
--- /dev/null
+++ b/reactos/base/services/rpcss/irot.idl
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2007 Robert Shearman for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wine/irot.idl"
diff --git a/reactos/base/services/rpcss/irotp.c b/reactos/base/services/rpcss/irotp.c
new file mode 100644
index 00000000000..00b282e8465
--- /dev/null
+++ b/reactos/base/services/rpcss/irotp.c
@@ -0,0 +1,379 @@
+/*
+ * Running Object Table
+ *
+ * Copyright 2007 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include
+#include
+
+#include "winerror.h"
+#include "windef.h"
+#include "winbase.h"
+
+#include "irot_s.h"
+
+#include "wine/list.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(rpcss);
+
+/* define the structure of the running object table elements */
+struct rot_entry
+{
+ struct list entry;
+ InterfaceData *object; /* marshaled running object*/
+ InterfaceData *moniker; /* marshaled moniker that identifies this object */
+ MonikerComparisonData *moniker_data; /* moniker comparison data that identifies this object */
+ DWORD cookie; /* cookie identifying this object */
+ FILETIME last_modified;
+ LONG refs;
+};
+
+static struct list RunningObjectTable = LIST_INIT(RunningObjectTable);
+
+static CRITICAL_SECTION csRunningObjectTable;
+static CRITICAL_SECTION_DEBUG critsect_debug =
+{
+ 0, 0, &csRunningObjectTable,
+ { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
+ 0, 0, { (DWORD_PTR)(__FILE__ ": csRunningObjectTable") }
+};
+static CRITICAL_SECTION csRunningObjectTable = { &critsect_debug, -1, 0, 0, 0, 0 };
+
+static LONG last_cookie = 1;
+
+static inline void rot_entry_release(struct rot_entry *rot_entry)
+{
+ if (!InterlockedDecrement(&rot_entry->refs))
+ {
+ HeapFree(GetProcessHeap(), 0, rot_entry->object);
+ HeapFree(GetProcessHeap(), 0, rot_entry->moniker);
+ HeapFree(GetProcessHeap(), 0, rot_entry->moniker_data);
+ HeapFree(GetProcessHeap(), 0, rot_entry);
+ }
+}
+
+HRESULT IrotRegister(
+ IrotHandle h,
+ const MonikerComparisonData *data,
+ const InterfaceData *obj,
+ const InterfaceData *mk,
+ const FILETIME *time,
+ DWORD grfFlags,
+ IrotCookie *cookie,
+ IrotContextHandle *ctxt_handle)
+{
+ struct rot_entry *rot_entry;
+ struct rot_entry *existing_rot_entry;
+ HRESULT hr;
+
+ if (grfFlags & ~(ROTFLAGS_REGISTRATIONKEEPSALIVE|ROTFLAGS_ALLOWANYCLIENT))
+ {
+ WINE_ERR("Invalid grfFlags: 0x%08x\n", grfFlags & ~(ROTFLAGS_REGISTRATIONKEEPSALIVE|ROTFLAGS_ALLOWANYCLIENT));
+ return E_INVALIDARG;
+ }
+
+ rot_entry = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*rot_entry));
+ if (!rot_entry)
+ return E_OUTOFMEMORY;
+
+ rot_entry->refs = 1;
+ rot_entry->object = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(InterfaceData, abData[obj->ulCntData]));
+ if (!rot_entry->object)
+ {
+ rot_entry_release(rot_entry);
+ return E_OUTOFMEMORY;
+ }
+ rot_entry->object->ulCntData = obj->ulCntData;
+ memcpy(&rot_entry->object->abData, obj->abData, obj->ulCntData);
+
+ rot_entry->last_modified = *time;
+
+ rot_entry->moniker = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(InterfaceData, abData[mk->ulCntData]));
+ if (!rot_entry->moniker)
+ {
+ rot_entry_release(rot_entry);
+ return E_OUTOFMEMORY;
+ }
+ rot_entry->moniker->ulCntData = mk->ulCntData;
+ memcpy(&rot_entry->moniker->abData, mk->abData, mk->ulCntData);
+
+ rot_entry->moniker_data = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(MonikerComparisonData, abData[data->ulCntData]));
+ if (!rot_entry->moniker_data)
+ {
+ rot_entry_release(rot_entry);
+ return E_OUTOFMEMORY;
+ }
+ rot_entry->moniker_data->ulCntData = data->ulCntData;
+ memcpy(&rot_entry->moniker_data->abData, data->abData, data->ulCntData);
+
+ EnterCriticalSection(&csRunningObjectTable);
+
+ hr = S_OK;
+
+ LIST_FOR_EACH_ENTRY(existing_rot_entry, &RunningObjectTable, struct rot_entry, entry)
+ {
+ if ((existing_rot_entry->moniker_data->ulCntData == data->ulCntData) &&
+ !memcmp(&data->abData, &existing_rot_entry->moniker_data->abData, data->ulCntData))
+ {
+ hr = MK_S_MONIKERALREADYREGISTERED;
+ WINE_TRACE("moniker already registered with cookie %d\n", existing_rot_entry->cookie);
+ break;
+ }
+ }
+
+ list_add_tail(&RunningObjectTable, &rot_entry->entry);
+
+ LeaveCriticalSection(&csRunningObjectTable);
+
+ /* gives a registration identifier to the registered object*/
+ *cookie = rot_entry->cookie = InterlockedIncrement(&last_cookie);
+ *ctxt_handle = rot_entry;
+
+ return hr;
+}
+
+HRESULT IrotRevoke(
+ IrotHandle h,
+ IrotCookie cookie,
+ IrotContextHandle *ctxt_handle,
+ PInterfaceData *obj,
+ PInterfaceData *mk)
+{
+ struct rot_entry *rot_entry;
+
+ WINE_TRACE("%d\n", cookie);
+
+ EnterCriticalSection(&csRunningObjectTable);
+ LIST_FOR_EACH_ENTRY(rot_entry, &RunningObjectTable, struct rot_entry, entry)
+ {
+ if (rot_entry->cookie == cookie)
+ {
+ HRESULT hr = S_OK;
+
+ list_remove(&rot_entry->entry);
+ LeaveCriticalSection(&csRunningObjectTable);
+
+ *obj = MIDL_user_allocate(FIELD_OFFSET(InterfaceData, abData[rot_entry->object->ulCntData]));
+ *mk = MIDL_user_allocate(FIELD_OFFSET(InterfaceData, abData[rot_entry->moniker->ulCntData]));
+ if (*obj && *mk)
+ {
+ (*obj)->ulCntData = rot_entry->object->ulCntData;
+ memcpy((*obj)->abData, rot_entry->object->abData, (*obj)->ulCntData);
+ (*mk)->ulCntData = rot_entry->moniker->ulCntData;
+ memcpy((*mk)->abData, rot_entry->moniker->abData, (*mk)->ulCntData);
+ }
+ else
+ {
+ MIDL_user_free(*obj);
+ MIDL_user_free(*mk);
+ hr = E_OUTOFMEMORY;
+ }
+
+ rot_entry_release(rot_entry);
+ *ctxt_handle = NULL;
+ return hr;
+ }
+ }
+ LeaveCriticalSection(&csRunningObjectTable);
+
+ return E_INVALIDARG;
+}
+
+HRESULT IrotIsRunning(
+ IrotHandle h,
+ const MonikerComparisonData *data)
+{
+ const struct rot_entry *rot_entry;
+ HRESULT hr = S_FALSE;
+
+ WINE_TRACE("\n");
+
+ EnterCriticalSection(&csRunningObjectTable);
+
+ LIST_FOR_EACH_ENTRY(rot_entry, &RunningObjectTable, const struct rot_entry, entry)
+ {
+ if ((rot_entry->moniker_data->ulCntData == data->ulCntData) &&
+ !memcmp(&data->abData, &rot_entry->moniker_data->abData, data->ulCntData))
+ {
+ hr = S_OK;
+ break;
+ }
+ }
+ LeaveCriticalSection(&csRunningObjectTable);
+
+ return hr;
+}
+
+HRESULT IrotGetObject(
+ IrotHandle h,
+ const MonikerComparisonData *moniker_data,
+ PInterfaceData *obj,
+ IrotCookie *cookie)
+{
+ const struct rot_entry *rot_entry;
+
+ WINE_TRACE("%p\n", moniker_data);
+
+ *cookie = 0;
+
+ EnterCriticalSection(&csRunningObjectTable);
+
+ LIST_FOR_EACH_ENTRY(rot_entry, &RunningObjectTable, const struct rot_entry, entry)
+ {
+ HRESULT hr = S_OK;
+ if ((rot_entry->moniker_data->ulCntData == moniker_data->ulCntData) &&
+ !memcmp(&moniker_data->abData, &rot_entry->moniker_data->abData, moniker_data->ulCntData))
+ {
+ *obj = MIDL_user_allocate(FIELD_OFFSET(InterfaceData, abData[rot_entry->object->ulCntData]));
+ if (*obj)
+ {
+ (*obj)->ulCntData = rot_entry->object->ulCntData;
+ memcpy((*obj)->abData, rot_entry->object->abData, (*obj)->ulCntData);
+
+ *cookie = rot_entry->cookie;
+ }
+ else
+ hr = E_OUTOFMEMORY;
+
+ LeaveCriticalSection(&csRunningObjectTable);
+
+ return hr;
+ }
+ }
+
+ LeaveCriticalSection(&csRunningObjectTable);
+
+ return MK_E_UNAVAILABLE;
+}
+
+HRESULT IrotNoteChangeTime(
+ IrotHandle h,
+ IrotCookie cookie,
+ const FILETIME *last_modified_time)
+{
+ struct rot_entry *rot_entry;
+
+ WINE_TRACE("%d %p\n", cookie, last_modified_time);
+
+ EnterCriticalSection(&csRunningObjectTable);
+ LIST_FOR_EACH_ENTRY(rot_entry, &RunningObjectTable, struct rot_entry, entry)
+ {
+ if (rot_entry->cookie == cookie)
+ {
+ rot_entry->last_modified = *last_modified_time;
+ LeaveCriticalSection(&csRunningObjectTable);
+ return S_OK;
+ }
+ }
+ LeaveCriticalSection(&csRunningObjectTable);
+
+ return E_INVALIDARG;
+}
+
+HRESULT IrotGetTimeOfLastChange(
+ IrotHandle h,
+ const MonikerComparisonData *moniker_data,
+ FILETIME *time)
+{
+ const struct rot_entry *rot_entry;
+ HRESULT hr = MK_E_UNAVAILABLE;
+
+ WINE_TRACE("%p\n", moniker_data);
+
+ memset(time, 0, sizeof(*time));
+
+ EnterCriticalSection(&csRunningObjectTable);
+ LIST_FOR_EACH_ENTRY(rot_entry, &RunningObjectTable, const struct rot_entry, entry)
+ {
+ if ((rot_entry->moniker_data->ulCntData == moniker_data->ulCntData) &&
+ !memcmp(&moniker_data->abData, &rot_entry->moniker_data->abData, moniker_data->ulCntData))
+ {
+ *time = rot_entry->last_modified;
+ hr = S_OK;
+ break;
+ }
+ }
+ LeaveCriticalSection(&csRunningObjectTable);
+
+ return hr;
+}
+
+HRESULT IrotEnumRunning(
+ IrotHandle h,
+ PInterfaceList *list)
+{
+ const struct rot_entry *rot_entry;
+ HRESULT hr = S_OK;
+ ULONG moniker_count = 0;
+ ULONG i = 0;
+
+ WINE_TRACE("\n");
+
+ EnterCriticalSection(&csRunningObjectTable);
+
+ LIST_FOR_EACH_ENTRY( rot_entry, &RunningObjectTable, const struct rot_entry, entry )
+ moniker_count++;
+
+ *list = MIDL_user_allocate(FIELD_OFFSET(InterfaceList, interfaces[moniker_count]));
+ if (*list)
+ {
+ (*list)->size = moniker_count;
+ LIST_FOR_EACH_ENTRY( rot_entry, &RunningObjectTable, const struct rot_entry, entry )
+ {
+ (*list)->interfaces[i] = MIDL_user_allocate(FIELD_OFFSET(InterfaceData, abData[rot_entry->moniker->ulCntData]));
+ if (!(*list)->interfaces[i])
+ {
+ ULONG end = i - 1;
+ for (i = 0; i < end; i++)
+ MIDL_user_free((*list)->interfaces[i]);
+ MIDL_user_free(*list);
+ hr = E_OUTOFMEMORY;
+ break;
+ }
+ (*list)->interfaces[i]->ulCntData = rot_entry->moniker->ulCntData;
+ memcpy((*list)->interfaces[i]->abData, rot_entry->moniker->abData, rot_entry->moniker->ulCntData);
+ i++;
+ }
+ }
+ else
+ hr = E_OUTOFMEMORY;
+
+ LeaveCriticalSection(&csRunningObjectTable);
+
+ return hr;
+}
+
+void __RPC_USER IrotContextHandle_rundown(IrotContextHandle ctxt_handle)
+{
+ struct rot_entry *rot_entry = ctxt_handle;
+ EnterCriticalSection(&csRunningObjectTable);
+ list_remove(&rot_entry->entry);
+ LeaveCriticalSection(&csRunningObjectTable);
+ rot_entry_release(rot_entry);
+}
+
+void * __RPC_USER MIDL_user_allocate(size_t size)
+{
+ return HeapAlloc(GetProcessHeap(), 0, size);
+}
+
+void __RPC_USER MIDL_user_free(void * p)
+{
+ HeapFree(GetProcessHeap(), 0, p);
+}
diff --git a/reactos/base/services/rpcss/rpcss.c b/reactos/base/services/rpcss/rpcss.c
deleted file mode 100644
index d1cd3c1960f..00000000000
--- a/reactos/base/services/rpcss/rpcss.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * PROJECT: ReactOS RpcSs service
- * LICENSE: GPL - See COPYING in the top level directory
- * FILE: services/rpcss/rpcss.c
- * PURPOSE: Service initialization
- * COPYRIGHT: Copyright 2002 Eric Kohl
- */
-
-/* INCLUDES *****************************************************************/
-
-#include "rpcss.h"
-
-#define NDEBUG
-#include
-
-
-
-/* GLOBALS ******************************************************************/
-
-
-
-/* FUNCTIONS *****************************************************************/
-
-
-VOID CALLBACK
-ServiceMain(DWORD argc, LPTSTR *argv)
-{
-
- DPRINT("ServiceMain() called\n");
-
- StartEndpointMapper();
-
- DPRINT("ServiceMain() done\n");
-}
-
-
-int main(int argc, char *argv[])
-{
-#if 0
- SERVICE_TABLE_ENTRY ServiceTable[] = {{"RpcSs", ServiceMain},{NULL, NULL}};
-#endif
-
- DPRINT("RpcSs service\n");
-
-#if 0
- StartServiceCtrlDispatcher(ServiceTable);
-#endif
-
- ServiceMain(0, NULL);
-
- DPRINT("RpcSS: done\n");
-
- return 0;
-}
-
-/* EOF */
diff --git a/reactos/base/services/rpcss/rpcss.h b/reactos/base/services/rpcss/rpcss.h
index bfa1afcc813..9c2f04f7b86 100644
--- a/reactos/base/services/rpcss/rpcss.h
+++ b/reactos/base/services/rpcss/rpcss.h
@@ -1,17 +1,26 @@
-#ifndef __RPCSS_H__
-#define __RPCSS_H__
+/*
+ * RPCSS definitions
+ *
+ * Copyright (C) 2002 Greg Turner
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
-#define UNICODE
+#ifndef __WINE_RPCSS_H
+#define __WINE_RPCSS_H
-#include
-#define WIN32_NO_STATUS
-#include
-
-
-VOID
-StartEndpointMapper(VOID);
-
-#endif /* __RPCSS_H__ */
-
-/* EOF */
+#include "windows.h"
+#endif /* __WINE_RPCSS_H */
diff --git a/reactos/base/services/rpcss/rpcss.rbuild b/reactos/base/services/rpcss/rpcss.rbuild
index bf3f5219bb5..62b6668af74 100644
--- a/reactos/base/services/rpcss/rpcss.rbuild
+++ b/reactos/base/services/rpcss/rpcss.rbuild
@@ -1,10 +1,25 @@
-
+
.
+ .
+ wine
+ rpcss_epm_server
+ rpcss_irot_server
+ rpcrt4
kernel32
advapi32
- rpcss.c
- endpoint.c
+ epmp.c
+ irotp.c
+ rpcss_main.c
+ service_main.c
+ epm.idl
+ irot.idl
rpcss.rc
+
+ epm.idl
+
+
+ irot.idl
+
diff --git a/reactos/base/services/rpcss/rpcss_main.c b/reactos/base/services/rpcss/rpcss_main.c
new file mode 100644
index 00000000000..2df13c7cea1
--- /dev/null
+++ b/reactos/base/services/rpcss/rpcss_main.c
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2001, Ove KГҐven, TransGaming Technologies Inc.
+ * Copyright 2002 Greg Turner
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ * ---- rpcss_main.c:
+ * Initialize and start serving requests. Bail if rpcss already is
+ * running.
+ *
+ * ---- RPCSS.EXE:
+ *
+ * Wine needs a server whose role is somewhat like that
+ * of rpcss.exe in windows. This is not a clone of
+ * windows rpcss at all. It has been given the same name, however,
+ * to provide for the possibility that at some point in the future,
+ * it may become interface compatible with the "real" rpcss.exe on
+ * Windows.
+ *
+ * ---- KNOWN BUGS / TODO:
+ *
+ * o Service hooks are unimplemented (if you bother to implement
+ * these, also implement net.exe, at least for "net start" and
+ * "net stop" (should be pretty easy I guess, assuming the rest
+ * of the services API infrastructure works.
+ *
+ * o There is a looming problem regarding listening on privileged
+ * ports. We will need to be able to coexist with SAMBA, and be able
+ * to function without running winelib code as root. This may
+ * take some doing, including significant reconceptualization of the
+ * role of rpcss.exe in wine.
+ */
+
+#include
+#include
+#include
+
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+#include "rpcss.h"
+#include "winnt.h"
+#include "irot.h"
+#include "epm.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(ole);
+
+static HANDLE exit_event;
+
+//extern HANDLE __wine_make_process_system(void);
+
+BOOL RPCSS_Initialize(void)
+{
+ static unsigned short irot_protseq[] = IROT_PROTSEQ;
+ static unsigned short irot_endpoint[] = IROT_ENDPOINT;
+ static unsigned short epm_protseq[] = {'n','c','a','c','n','_','n','p',0};
+ static unsigned short epm_endpoint[] = {'\\','p','i','p','e','\\','e','p','m','a','p','p','e','r',0};
+ static unsigned short epm_protseq_lrpc[] = {'n','c','a','l','r','p','c',0};
+ static unsigned short epm_endpoint_lrpc[] = {'e','p','m','a','p','p','e','r',0};
+ RPC_STATUS status;
+
+ WINE_TRACE("\n");
+
+ status = RpcServerRegisterIf(epm_v3_0_s_ifspec, NULL, NULL);
+ if (status != RPC_S_OK)
+ return status;
+ status = RpcServerRegisterIf(Irot_v0_2_s_ifspec, NULL, NULL);
+ if (status != RPC_S_OK)
+ {
+ RpcServerUnregisterIf(epm_v3_0_s_ifspec, NULL, FALSE);
+ return FALSE;
+ }
+
+ status = RpcServerUseProtseqEpW(epm_protseq, RPC_C_PROTSEQ_MAX_REQS_DEFAULT,
+ epm_endpoint, NULL);
+ if (status != RPC_S_OK)
+ goto fail;
+
+ status = RpcServerUseProtseqEpW(epm_protseq_lrpc, RPC_C_PROTSEQ_MAX_REQS_DEFAULT,
+ epm_endpoint_lrpc, NULL);
+ if (status != RPC_S_OK)
+ goto fail;
+
+ status = RpcServerUseProtseqEpW(irot_protseq, RPC_C_PROTSEQ_MAX_REQS_DEFAULT,
+ irot_endpoint, NULL);
+ if (status != RPC_S_OK)
+ goto fail;
+
+ status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, TRUE);
+ if (status != RPC_S_OK)
+ goto fail;
+
+ //exit_event = __wine_make_process_system();
+ exit_event = CreateEventW(NULL, FALSE, FALSE, NULL); // never fires
+
+ return TRUE;
+
+fail:
+ RpcServerUnregisterIf(epm_v3_0_s_ifspec, NULL, FALSE);
+ RpcServerUnregisterIf(Irot_v0_2_s_ifspec, NULL, FALSE);
+ return FALSE;
+}
+
+/* returns false if we discover at the last moment that we
+ aren't ready to terminate */
+BOOL RPCSS_Shutdown(void)
+{
+ RpcMgmtStopServerListening(NULL);
+ RpcServerUnregisterIf(epm_v3_0_s_ifspec, NULL, TRUE);
+ RpcServerUnregisterIf(Irot_v0_2_s_ifspec, NULL, TRUE);
+
+ CloseHandle(exit_event);
+
+ return TRUE;
+}
+
+#if 0
+int main( int argc, char **argv )
+{
+ /*
+ * We are invoked as a standard executable; we act in a
+ * "lazy" manner. We register our interfaces and endpoints, and hang around
+ * until we all user processes exit, and then silently terminate.
+ */
+
+ if (RPCSS_Initialize()) {
+ WaitForSingleObject(exit_event, INFINITE);
+ RPCSS_Shutdown();
+ }
+
+ return 0;
+}
+#endif
diff --git a/reactos/base/services/rpcss/rpcss_ros.diff b/reactos/base/services/rpcss/rpcss_ros.diff
new file mode 100644
index 00000000000..7d7ad9a42c6
--- /dev/null
+++ b/reactos/base/services/rpcss/rpcss_ros.diff
@@ -0,0 +1,35 @@
+Index: rpcss_main.c
+===================================================================
+--- rpcss_main.c (revision 37240)
++++ rpcss_main.c (working copy)
+@@ -62,7 +62,7 @@
+
+ //extern HANDLE __wine_make_process_system(void);
+
+-static BOOL RPCSS_Initialize(void)
++BOOL RPCSS_Initialize(void)
+ {
+ static unsigned short irot_protseq[] = IROT_PROTSEQ;
+ static unsigned short irot_endpoint[] = IROT_ENDPOINT;
+@@ -116,7 +116,7 @@
+
+ /* returns false if we discover at the last moment that we
+ aren't ready to terminate */
+-static BOOL RPCSS_Shutdown(void)
++BOOL RPCSS_Shutdown(void)
+ {
+ RpcMgmtStopServerListening(NULL);
+ RpcServerUnregisterIf(epm_v3_0_s_ifspec, NULL, TRUE);
+@@ -127,6 +127,7 @@
+ return TRUE;
+ }
+
++#if 0
+ int main( int argc, char **argv )
+ {
+ /*
+@@ -142,3 +143,4 @@
+
+ return 0;
+ }
++#endif
diff --git a/reactos/base/services/rpcss/service_main.c b/reactos/base/services/rpcss/service_main.c
new file mode 100644
index 00000000000..7fe84a57d26
--- /dev/null
+++ b/reactos/base/services/rpcss/service_main.c
@@ -0,0 +1,128 @@
+/*
+ * PROJECT: ReactOS Remote Procedure Call service
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: /base/services/rpcss/service_main.c
+ * PURPOSE: Service control code
+ * COPYRIGHT: Copyright 2008 Ged Murphy
+ *
+ */
+
+#include "rpcss.h"
+
+BOOL RPCSS_Initialize(void);
+BOOL RPCSS_Shutdown(void);
+
+static WCHAR ServiceName[] = L"RpcSs";
+
+typedef struct _ServiceInfo
+{
+ SERVICE_STATUS servStatus;
+ SERVICE_STATUS_HANDLE hStatus;
+} SERVICEINFO, *PSERVICEINFO;
+
+
+static VOID
+UpdateStatus(PSERVICEINFO pServInfo,
+ DWORD NewStatus,
+ DWORD Check)
+{
+ if (Check > 0)
+ {
+ pServInfo->servStatus.dwCheckPoint += Check;
+ }
+ else
+ {
+ pServInfo->servStatus.dwCheckPoint = Check;
+ }
+
+ if (NewStatus > 0)
+ {
+ pServInfo->servStatus.dwCurrentState = NewStatus;
+ }
+
+ SetServiceStatus(pServInfo->hStatus, &pServInfo->servStatus);
+}
+
+
+static BOOL
+RunService(PSERVICEINFO pServInfo)
+{
+ return RPCSS_Initialize();
+}
+
+VOID WINAPI
+ServerCtrlHandler(DWORD dwControl,
+ DWORD dwEventType,
+ LPVOID lpEventData,
+ LPVOID lpContext)
+{
+ PSERVICEINFO pServInfo = (PSERVICEINFO)lpContext;
+
+ switch (dwControl)
+ {
+ case SERVICE_CONTROL_SHUTDOWN:
+ case SERVICE_CONTROL_STOP:
+ RPCSS_Shutdown();
+ pServInfo->servStatus.dwWin32ExitCode = 0;
+ pServInfo->servStatus.dwWaitHint = 0;
+ UpdateStatus(pServInfo, SERVICE_STOP_PENDING, 1);
+ break;
+
+ default:
+ break;
+ }
+}
+
+VOID WINAPI
+ServiceMain(DWORD argc, LPWSTR argv[])
+{
+ SERVICEINFO servInfo;
+ HANDLE hThread;
+ DWORD dwThreadId;
+
+ servInfo.servStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
+ servInfo.servStatus.dwCurrentState = SERVICE_STOPPED;
+ servInfo.servStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN;
+ servInfo.servStatus.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;
+ servInfo.servStatus.dwServiceSpecificExitCode = 0;
+ servInfo.servStatus.dwCheckPoint = 0;
+ servInfo.servStatus.dwWaitHint = 1000;
+
+ servInfo.hStatus = RegisterServiceCtrlHandlerExW(ServiceName,
+ (LPHANDLER_FUNCTION_EX)ServerCtrlHandler,
+ &servInfo);
+ if (!servInfo.hStatus) return;
+
+ UpdateStatus(&servInfo, SERVICE_START_PENDING, 1);
+
+ /* Create worker thread */
+ hThread = CreateThread(NULL,
+ 0,
+ (LPTHREAD_START_ROUTINE)RunService,
+ &servInfo,
+ 0,
+ &dwThreadId);
+ if (!hThread) return;
+
+ /* Set service status to running */
+ UpdateStatus(&servInfo, SERVICE_RUNNING, 0);
+
+ /* Wait until thread has terminated */
+ WaitForSingleObject(hThread, INFINITE);
+
+ CloseHandle(hThread);
+
+ UpdateStatus(&servInfo, SERVICE_STOPPED, 0);
+}
+
+
+int wmain(int argc, LPWSTR argv [])
+{
+ SERVICE_TABLE_ENTRYW ServiceTable[] =
+ {
+ {ServiceName, ServiceMain},
+ {NULL, NULL }
+ };
+
+ return (int)(StartServiceCtrlDispatcherW(ServiceTable) != TRUE);
+}
diff --git a/reactos/base/setup/usetup/lang/th-TH.h b/reactos/base/setup/usetup/lang/th-TH.h
index cc602538311..e9c1496cc17 100644
--- a/reactos/base/setup/usetup/lang/th-TH.h
+++ b/reactos/base/setup/usetup/lang/th-TH.h
@@ -3,8 +3,11 @@
MUI_LAYOUTS thTHLayouts[] =
{
- { L"0409", L"00000409" },
{ L"041E", L"0000041E" },
+ { L"041E", L"0001041E" },
+ { L"041E", L"0002041E" },
+ { L"041E", L"0003041E" },
+ { L"0409", L"00000409" },
{ NULL, NULL }
};
diff --git a/reactos/base/setup/usetup/mui.c b/reactos/base/setup/usetup/mui.c
index aabe82ad34b..550a2e0b453 100644
--- a/reactos/base/setup/usetup/mui.c
+++ b/reactos/base/setup/usetup/mui.c
@@ -403,7 +403,7 @@ AddKbLayoutsToRegistry(IN const MUI_LAYOUTS * MuiLayouts)
0,
REG_SZ,
(PVOID)MuiLayouts[uIndex].LayoutID,
- wcslen(MuiLayouts[uIndex].LayoutID) * sizeof(WCHAR));
+ (wcslen(MuiLayouts[uIndex].LayoutID)+1) * sizeof(WCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetValueKey() failed (Status = %lx, uIndex = %d)\n", Status, uIndex);
@@ -420,7 +420,7 @@ AddKbLayoutsToRegistry(IN const MUI_LAYOUTS * MuiLayouts)
0,
REG_SZ,
(PVOID)szLangID,
- wcslen(szLangID) * sizeof(WCHAR));
+ (wcslen(szLangID)+1) * sizeof(WCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetValueKey() failed (Status = %lx, uIndex = %d)\n", Status, uIndex);
@@ -436,7 +436,7 @@ AddKbLayoutsToRegistry(IN const MUI_LAYOUTS * MuiLayouts)
0,
REG_SZ,
(PVOID)MuiLayouts[uIndex].LayoutID,
- wcslen(MuiLayouts[uIndex].LayoutID) * sizeof(WCHAR));
+ (wcslen(MuiLayouts[uIndex].LayoutID)+1) * sizeof(WCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetValueKey() failed (Status = %lx, uIndex = %d)\n", Status, uIndex);
@@ -513,7 +513,7 @@ AddCodepageToRegistry(IN LPCWSTR ACPage, IN LPCWSTR OEMCPage, IN LPCWSTR MACCPag
0,
REG_SZ,
(PVOID)ACPage,
- wcslen(ACPage) * sizeof(PWCHAR));
+ (wcslen(ACPage)+1) * sizeof(PWCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
@@ -528,7 +528,7 @@ AddCodepageToRegistry(IN LPCWSTR ACPage, IN LPCWSTR OEMCPage, IN LPCWSTR MACCPag
0,
REG_SZ,
(PVOID)OEMCPage,
- wcslen(OEMCPage) * sizeof(PWCHAR));
+ (wcslen(OEMCPage)+1) * sizeof(PWCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
@@ -543,7 +543,7 @@ AddCodepageToRegistry(IN LPCWSTR ACPage, IN LPCWSTR OEMCPage, IN LPCWSTR MACCPag
0,
REG_SZ,
(PVOID)MACCPage,
- wcslen(MACCPage) * sizeof(PWCHAR));
+ (wcslen(MACCPage)+1) * sizeof(PWCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
diff --git a/reactos/base/setup/usetup/registry.c b/reactos/base/setup/usetup/registry.c
index 1159c273cb0..3919f0440e5 100644
--- a/reactos/base/setup/usetup/registry.c
+++ b/reactos/base/setup/usetup/registry.c
@@ -679,7 +679,7 @@ SetInstallPathValue(PUNICODE_STRING InstallPath)
0,
REG_SZ,
(PVOID)InstallPath->Buffer,
- InstallPath->Length);
+ InstallPath->Length + sizeof(WCHAR));
NtClose(KeyHandle);
if (!NT_SUCCESS(Status))
{
diff --git a/reactos/base/setup/usetup/usetup.rbuild b/reactos/base/setup/usetup/usetup.rbuild
index 59fc77d9efe..de6806153e1 100644
--- a/reactos/base/setup/usetup/usetup.rbuild
+++ b/reactos/base/setup/usetup/usetup.rbuild
@@ -1,6 +1,6 @@
-
+
.
.
diff --git a/reactos/base/shell/cmd/batch.c b/reactos/base/shell/cmd/batch.c
index 1c35123f295..ef282689b3e 100644
--- a/reactos/base/shell/cmd/batch.c
+++ b/reactos/base/shell/cmd/batch.c
@@ -427,7 +427,7 @@ LPTSTR ReadBatchLine ()
return textline;
}
- if (!FileGetString (bc->hBatchFile, textline, sizeof (textline) / sizeof (textline[0])))
+ if (!FileGetString (bc->hBatchFile, textline, sizeof (textline) / sizeof (textline[0]) - 1))
{
TRACE ("ReadBatchLine(): Reached EOF!\n");
/* End of file.... */
@@ -440,6 +440,9 @@ LPTSTR ReadBatchLine ()
}
TRACE ("ReadBatchLine(): textline: \'%s\'\n", debugstr_aw(textline));
+ if (textline[_tcslen(textline) - 1] != _T('\n'))
+ _tcscat(textline, _T("\n"));
+
first = textline;
/* cmd block over multiple lines (..) */
diff --git a/reactos/base/shell/cmd/cmd.rbuild b/reactos/base/shell/cmd/cmd.rbuild
index c0e301b1564..7ae5ff6b01b 100644
--- a/reactos/base/shell/cmd/cmd.rbuild
+++ b/reactos/base/shell/cmd/cmd.rbuild
@@ -1,11 +1,18 @@
-
+
include/reactos/wine
- .
+ .
+ wine
+ kernel32
+ advapi32
+ shell32
+ user32
+ cmd.rc
+ main.c
precomp.h
alias.c
@@ -67,17 +74,4 @@
window.c
-
- include/reactos/wine
- .
-
- cmd_base
- wine
- kernel32
- advapi32
- shell32
- user32
- cmd.rc
- main.c
-
diff --git a/reactos/base/shell/explorer/explorer-uk.rc b/reactos/base/shell/explorer/explorer-uk.rc
index dd6f6a61c08..51bf0ddb6a3 100644
--- a/reactos/base/shell/explorer/explorer-uk.rc
+++ b/reactos/base/shell/explorer/explorer-uk.rc
@@ -381,9 +381,9 @@ BEGIN
IDS_DESKTOPBAR_SETTINGS "Настройки робочого стола"
IDS_DESKTOP "Робочий Стіл"
IDS_TASKBAR "Панель завдань"
- IDS_NAMECOLUMN "Name"
- IDS_PATHCOLUMN "Path"
- IDS_MENUCOLUMN "Menu path"
+ IDS_NAMECOLUMN "Ім'я"
+ IDS_PATHCOLUMN "Шлях"
+ IDS_MENUCOLUMN "Шлях в меню"
END
#endif // Ukrainian resources
diff --git a/reactos/base/shell/explorer/explorer.rbuild b/reactos/base/shell/explorer/explorer.rbuild
index 61ecefe26f5..92ee727d65b 100644
--- a/reactos/base/shell/explorer/explorer.rbuild
+++ b/reactos/base/shell/explorer/explorer.rbuild
@@ -18,7 +18,7 @@
shell32
uuid
notifyhook
- precomp.h
+
desktop.cpp
diff --git a/reactos/base/shell/explorer/explorer.rc b/reactos/base/shell/explorer/explorer.rc
index 10aa03a78ff..6fe6f32e8c9 100644
--- a/reactos/base/shell/explorer/explorer.rc
+++ b/reactos/base/shell/explorer/explorer.rc
@@ -14,8 +14,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_VERSION_STR REACTOS_STR_PRODUCT_VERSION
- IDS_EXPLORER_VERSION_STR "ReactOS %s Explorer"
-END
+//STRINGTABLE DISCARDABLE
+//BEGIN
+// IDS_VERSION_STR REACTOS_STR_PRODUCT_VERSION
+// IDS_EXPLORER_VERSION_STR "ReactOS %s Explorer"
+//END
diff --git a/reactos/base/shell/explorer/res/shutdown.ico b/reactos/base/shell/explorer/res/shutdown.ico
index 3203a880c88..ee4fce42b0f 100644
Binary files a/reactos/base/shell/explorer/res/shutdown.ico and b/reactos/base/shell/explorer/res/shutdown.ico differ
diff --git a/reactos/base/system/services/rpcserver.c b/reactos/base/system/services/rpcserver.c
index 86302afa7c4..9b7012201c2 100644
--- a/reactos/base/system/services/rpcserver.c
+++ b/reactos/base/system/services/rpcserver.c
@@ -1018,7 +1018,7 @@ DWORD RSetServiceStatus(
return ERROR_INVALID_HANDLE;
}
- lpService = ScmGetServiceEntryByClientHandle(hServiceStatus);
+ lpService = ScmGetServiceEntryByClientHandle(LongToPtr(hServiceStatus));
if (lpService == NULL)
{
DPRINT1("lpService == NULL!\n");
@@ -1041,8 +1041,7 @@ DWORD RSetServiceStatus(
}
/* Check accepted controls */
- if (lpServiceStatus->dwControlsAccepted == 0 ||
- lpServiceStatus->dwControlsAccepted & ~0xFF)
+ if (lpServiceStatus->dwControlsAccepted & ~0xFF)
{
DPRINT1("Invalid controls accepted!\n");
return ERROR_INVALID_DATA;
diff --git a/reactos/boot/bootdata/hivesft_arm.inf b/reactos/boot/bootdata/hivesft_arm.inf
index 94fc6e4cef1..9dd2a10ed73 100644
--- a/reactos/boot/bootdata/hivesft_arm.inf
+++ b/reactos/boot/bootdata/hivesft_arm.inf
@@ -997,6 +997,8 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","Coun
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","Name",0x00000000,"Philippines"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","CountryCode",0x00010001,0x00000040
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","Name",0x00000000,"New Zealand"
+HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","CountryCode",0x00010001,0x00000042
+HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","Name",0x00000000,"Thailand"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","CountryCode",0x00010001,0x00000007
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","Name",0x00000000,"Russia"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\705","CountryCode",0x00010001,0x000002C1
diff --git a/reactos/boot/bootdata/hivesft_i386.inf b/reactos/boot/bootdata/hivesft_i386.inf
index 34fd6c9e53a..7b6f6ee4d4c 100644
--- a/reactos/boot/bootdata/hivesft_i386.inf
+++ b/reactos/boot/bootdata/hivesft_i386.inf
@@ -1003,6 +1003,8 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","Coun
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","Name",0x00000000,"Philippines"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","CountryCode",0x00010001,0x00000040
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","Name",0x00000000,"New Zealand"
+HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","CountryCode",0x00010001,0x00000042
+HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","Name",0x00000000,"Thailand"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","CountryCode",0x00010001,0x00000007
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","Name",0x00000000,"Russia"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\705","CountryCode",0x00010001,0x000002C1
diff --git a/reactos/boot/bootdata/hivesys_arm.inf b/reactos/boot/bootdata/hivesys_arm.inf
index e183d6f04d6..582b25d4c6b 100644
--- a/reactos/boot/bootdata/hivesys_arm.inf
+++ b/reactos/boot/bootdata/hivesys_arm.inf
@@ -541,8 +541,8 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","InstallLanguage",0x0000000
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale",,0x00000012
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000402",0x00000000,"5"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000403",0x00000000,"1"
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000404",0x00000000,""
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000804",0x00000000,""
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000404",0x00000000,"9"
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000804",0x00000000,"a"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000405",0x00000000,"2"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000406",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000407",0x00000000,"1"
@@ -587,7 +587,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000c0c",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000100c",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000140c",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000180c",0x00000000,"1"
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040d",0x00000000,""
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040d",0x00000000,"c"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040e",0x00000000,"2"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040f",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000410",0x00000000,"1"
@@ -610,7 +610,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041b",0x00000000,"2"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041c",0x00000000,"2"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041d",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000081d",0x00000000,"1"
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041e",0x00000000,""
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041e",0x00000000,"b"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041f",0x00000000,"6"
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000420",0x00000000,""
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000421",0x00000000,"1"
@@ -622,15 +622,15 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000426",0x00000000,"3"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000427",0x00000000,"3"
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000429",0x00000000,""
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042a",0x00000000,""
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042b",0x00000000,""
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042b",0x00000000,"11"
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042c",0x00000000,"6"
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000082c",0x00000000,"5"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042d",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042f",0x00000000,"5"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000436",0x00000000,"1"
-;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000437",0x00000000,""
+;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000437",0x00000000,"10"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000438",0x00000000,"1"
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000439",0x00000000,""
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000439",0x00000000,"f"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000043e",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000083e",0x00000000,"1"
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000043f",0x00000000,"5"
diff --git a/reactos/boot/bootdata/hivesys_i386.inf b/reactos/boot/bootdata/hivesys_i386.inf
index dac699cb343..96956adbbc9 100644
--- a/reactos/boot/bootdata/hivesys_i386.inf
+++ b/reactos/boot/bootdata/hivesys_i386.inf
@@ -541,8 +541,8 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","InstallLanguage",0x0000000
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale",,0x00000012
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000402",0x00000000,"5"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000403",0x00000000,"1"
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000404",0x00000000,""
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000804",0x00000000,""
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000404",0x00000000,"9"
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000804",0x00000000,"a"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000405",0x00000000,"2"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000406",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000407",0x00000000,"1"
@@ -587,7 +587,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000c0c",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000100c",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000140c",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000180c",0x00000000,"1"
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040d",0x00000000,""
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040d",0x00000000,"c"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040e",0x00000000,"2"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040f",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000410",0x00000000,"1"
@@ -610,7 +610,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041b",0x00000000,"2"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041c",0x00000000,"2"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041d",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000081d",0x00000000,"1"
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041e",0x00000000,""
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041e",0x00000000,"b"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041f",0x00000000,"6"
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000420",0x00000000,""
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000421",0x00000000,"1"
@@ -622,15 +622,15 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000426",0x00000000,"3"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000427",0x00000000,"3"
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000429",0x00000000,""
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042a",0x00000000,""
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042b",0x00000000,""
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042b",0x00000000,"11"
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042c",0x00000000,"6"
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000082c",0x00000000,"5"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042d",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042f",0x00000000,"5"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000436",0x00000000,"1"
-;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000437",0x00000000,""
+;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000437",0x00000000,"10"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000438",0x00000000,"1"
-HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000439",0x00000000,""
+HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000439",0x00000000,"f"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000043e",0x00000000,"1"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000083e",0x00000000,"1"
;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000043f",0x00000000,"5"
diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff
index 8ac0f01458c..05695bf8de6 100644
--- a/reactos/boot/bootdata/packages/reactos.dff
+++ b/reactos/boot/bootdata/packages/reactos.dff
@@ -30,636 +30,651 @@ Signature = "$ReactOS$"
; Base files
-;base\applications\cacls\cacls.exe 1
-;base\applications\calc\calc.exe 1
-;base\applications\charmap\charmap.exe 1
-;base\applications\cmdutils\dbgprint\dbgprint.exe 1
-;base\applications\cmdutils\doskey\doskey.exe 1
-;base\applications\cmdutils\find\find.exe 1
-;base\applications\cmdutils\hostname\hostname.exe 1
-;base\applications\cmdutils\more\more.exe 1
-;base\applications\cmdutils\xcopy\xcopy.exe 1
-;base\applications\control\control.exe 1
-;base\applications\mscutils\devmgmt\devmgmt.exe 1
-;base\applications\mscutils\eventvwr\eventvwr.exe 1
-;base\applications\games\solitaire\sol.exe 1
-;base\applications\games\winemine\winemine.exe 1
-;base\applications\hh\hh.exe 1
-;base\applications\kbswitch\kbswitch.exe 1
-;base\applications\kbswitch\kbsdll\kbsdll.dll 1
-;base\applications\logoff\logoff.exe 1
-;base\applications\msconfig\msconfig.exe 1
-;base\applications\mstsc\mstsc.exe 1
-;base\applications\network\arp\arp.exe 1
-;base\applications\network\dwnl\dwnl.exe 1
-;base\applications\network\route\route.exe 1
-;base\applications\network\finger\finger.exe 1
-;base\applications\network\ftp\ftp.exe 1
-;base\applications\network\ipconfig\ipconfig.exe 1
-;base\applications\network\netstat\netstat.exe 1
-;base\applications\network\ping\ping.exe 1
+base\applications\cacls\cacls.exe 1
+base\applications\calc\calc.exe 1
+base\applications\charmap\charmap.exe 1
+base\applications\cmdutils\dbgprint\dbgprint.exe 1
+base\applications\cmdutils\doskey\doskey.exe 1
+base\applications\cmdutils\find\find.exe 1
+base\applications\cmdutils\hostname\hostname.exe 1
+base\applications\cmdutils\more\more.exe 1
+base\applications\cmdutils\xcopy\xcopy.exe 1
+base\applications\control\control.exe 1
+base\applications\mscutils\devmgmt\devmgmt.exe 1
+base\applications\mscutils\eventvwr\eventvwr.exe 1
+base\applications\games\solitaire\sol.exe 1
+base\applications\games\winemine\winemine.exe 1
+base\applications\hh\hh.exe 1
+base\applications\kbswitch\kbswitch.exe 1
+base\applications\kbswitch\kbsdll\kbsdll.dll 1
+base\applications\logoff\logoff.exe 1
+base\applications\msconfig\msconfig.exe 1
+base\applications\mstsc\mstsc.exe 1
+base\applications\network\arp\arp.exe 1
+base\applications\network\dwnl\dwnl.exe 1
+base\applications\network\route\route.exe 1
+base\applications\network\finger\finger.exe 1
+base\applications\network\ftp\ftp.exe 1
+base\applications\network\ipconfig\ipconfig.exe 1
+base\applications\network\netstat\netstat.exe 1
+base\applications\network\ping\ping.exe 1
;base\applications\network\telnet\telnet.exe 1
-;base\applications\network\tracert\tracert.exe 1
-;base\applications\network\whois\whois.exe 1
-;base\applications\notepad\notepad.exe 1
-;base\applications\regedit\regedit.exe 4
-;base\applications\regedit\clb\clb.dll 1
-;base\applications\sc\sc.exe 1
-;base\applications\screensavers\3dtext\3dtext.scr 1
-;base\applications\screensavers\logon\logon.scr 1
-;base\applications\mscutils\servman\servman.exe 1
-;base\applications\shutdown\shutdown.exe 1
-;base\applications\sndvol32\sndvol32.exe 1
-;base\applications\taskmgr\taskmgr.exe 1
-;base\applications\winhlp32\winhlp32.exe 1
-;base\applications\wordpad\wordpad.exe 1
+base\applications\network\tracert\tracert.exe 1
+base\applications\network\whois\whois.exe 1
+base\applications\notepad\notepad.exe 1
+base\applications\regedit\regedit.exe 4
+base\applications\regedit\clb\clb.dll 1
+base\applications\sc\sc.exe 1
+base\applications\screensavers\3dtext\3dtext.scr 1
+base\applications\screensavers\logon\logon.scr 1
+base\applications\mscutils\servman\servman.exe 1
+base\applications\shutdown\shutdown.exe 1
+base\applications\sndvol32\sndvol32.exe 1
+base\applications\taskmgr\taskmgr.exe 1
+base\applications\winhlp32\winhlp32.exe 1
+base\applications\wordpad\wordpad.exe 1
-;base\services\audiosrv\audiosrv.exe 1
-;base\services\dhcp\dhcp.exe 1
-;base\services\eventlog\eventlog.exe 1
-;base\services\rpcss\rpcss.exe 1
-;base\services\spoolsv\spoolsv.exe 1
-;base\services\tcpsvcs\tcpsvcs.exe 1
-;base\services\tcpsvcs\quotes 5
-;base\services\umpnpmgr\umpnpmgr.exe 1
-;base\services\audiosrv\audiosrv.exe 1
+base\services\audiosrv\audiosrv.exe 1
+base\services\dhcp\dhcp.exe 1
+base\services\eventlog\eventlog.exe 1
+base\services\rpcss\rpcss.exe 1
+base\services\spoolsv\spoolsv.exe 1
+base\services\tcpsvcs\tcpsvcs.exe 1
+base\services\tcpsvcs\quotes 5
+base\services\umpnpmgr\umpnpmgr.exe 1
+base\services\audiosrv\audiosrv.exe 1
-;base\setup\setup\setup.exe 1
-;base\setup\vmwinst\vmwinst.exe 1
+base\setup\setup\setup.exe 1
+base\setup\vmwinst\vmwinst.exe 1
-;base\shell\cmd\cmd.exe 1
+base\shell\cmd\cmd.exe 1
;base\shell\explorer\explorer.exe 4
-;base\shell\explorer\explorer-cfg-template.xml 4
+base\shell\explorer\explorer-cfg-template.xml 4
;base\shell\explorer\notifyhook\notifyhook.dll 1
-;base\shell\explorer-new\explorer_new.exe 4 optional
+base\shell\explorer-new\explorer_new.exe 4 optional
-;base\system\autochk\autochk.exe 1
-;base\system\bootok\bootok.exe 1
-;base\system\format\format.exe 1
-;base\system\lsass\lsass.exe 1
-;base\system\msiexec\msiexec.exe 1
-;base\system\regsvr32\regsvr32.exe 1
-;base\system\rundll32\rundll32.exe 1
-;base\system\services\services.exe 1
-;base\system\userinit\userinit.exe 1
-;base\system\winlogon\winlogon.exe 1
-;base\system\expand\expand.exe 1
-;base\system\smss\smss.exe 1
+base\system\autochk\autochk.exe 1
+base\system\bootok\bootok.exe 1
+base\system\format\format.exe 1
+base\system\lsass\lsass.exe 1
+base\system\msiexec\msiexec.exe 1
+base\system\regsvr32\regsvr32.exe 1
+base\system\rundll32\rundll32.exe 1
+base\system\services\services.exe 1
+base\system\userinit\userinit.exe 1
+base\system\winlogon\winlogon.exe 1
+base\system\expand\expand.exe 1
+base\system\smss\smss.exe 1
; Dynamic Link Libraries
-;dll\3rdparty\freetype\freetype.dll 1
-;dll\3rdparty\mesa32\mesa32.dll 1
-;dll\3rdparty\dxtn\dxtn.dll 1 optional
+dll\3rdparty\freetype\freetype.dll 1
+dll\3rdparty\mesa32\mesa32.dll 1
+dll\3rdparty\dxtn\dxtn.dll 1 optional
-;dll\cpl\access\access.cpl 1
-;dll\cpl\appwiz\appwiz.cpl 1
-;dll\cpl\console\console.dll 1
-;dll\cpl\desk\desk.cpl 1
-;dll\cpl\intl\intl.cpl 1
-;dll\cpl\main\main.cpl 1
-;dll\cpl\mmsys\mmsys.cpl 1
-;dll\cpl\ncpa\ncpa.cpl 1
-;dll\cpl\powercfg\powercfg.cpl 1
-;dll\cpl\sysdm\sysdm.cpl 1
-;dll\cpl\timedate\timedate.cpl 1
-;dll\cpl\input\input.dll 1
-;dll\cpl\joy\joy.cpl 1
+dll\cpl\access\access.cpl 1
+dll\cpl\appwiz\appwiz.cpl 1
+dll\cpl\console\console.dll 1
+dll\cpl\desk\desk.cpl 1
+dll\cpl\intl\intl.cpl 1
+dll\cpl\main\main.cpl 1
+dll\cpl\mmsys\mmsys.cpl 1
+dll\cpl\ncpa\ncpa.cpl 1
+dll\cpl\powercfg\powercfg.cpl 1
+dll\cpl\sysdm\sysdm.cpl 1
+dll\cpl\timedate\timedate.cpl 1
+dll\cpl\input\input.dll 1
+dll\cpl\joy\joy.cpl 1
-;dll\directx\dinput\dinput.dll 1
-;dll\directx\dinput8\dinput8.dll 1
-;dll\directx\dplay\dplay.dll 1
-;dll\directx\dplayx\dplayx.dll 1
-;dll\directx\dsound\dsound.dll 1
-;dll\directx\dxdiagn\dxdiagn.dll 1
-;dll\directx\ddraw\ddraw.dll 1
-;dll\directx\d3d8thk\d3d8thk.dll 1
-;dll\directx\devenum\devenum.dll 1
-;dll\directx\ksproxy\ksproxy.ax 1
-;dll\directx\ksuser\ksuser.dll 1
-;dll\directx\msdmo\msdmo.dll 1
-;dll\directx\quartz\quartz.dll 1
-;dll\directx\qedit\qedit.dll 1
+dll\directx\dinput\dinput.dll 1
+dll\directx\dinput8\dinput8.dll 1
+dll\directx\dplay\dplay.dll 1
+dll\directx\dplayx\dplayx.dll 1
+dll\directx\dsound\dsound.dll 1
+dll\directx\dxdiagn\dxdiagn.dll 1
+dll\directx\ddraw\ddraw.dll 1
+dll\directx\d3d8thk\d3d8thk.dll 1
+dll\directx\devenum\devenum.dll 1
+dll\directx\ksproxy\ksproxy.ax 1
+dll\directx\ksuser\ksuser.dll 1
+dll\directx\msdmo\msdmo.dll 1
+dll\directx\quartz\quartz.dll 1
+dll\directx\qedit\qedit.dll 1
;dll\directx\wine\d3d8\d3d8.dll 1
;dll\directx\wine\wined3d\wined3d.dll 1
;dll\directx\wine\d3d9\d3d9.dll 1
-;dll\keyboard\kbda1\kbda1.dll 1
-;dll\keyboard\kbda2\kbda2.dll 1
-;dll\keyboard\kbda3\kbda3.dll 1
-;dll\keyboard\kbdal\kbdal.dll 1
-;dll\keyboard\kbdarme\kbdarme.dll 1
-;dll\keyboard\kbdarmw\kbdarmw.dll 1
-;dll\keyboard\kbdaze\kbdaze.dll 1
-;dll\keyboard\kbdazel\kbdazel.dll 1
-;dll\keyboard\kbdbgm\kbdbgm.dll 1
-;dll\keyboard\kbdbgt\kbdbgt.dll 1
-;dll\keyboard\kbdblr\kbdblr.dll 1
-;dll\keyboard\kbdbr\kbdbr.dll 1
-;dll\keyboard\kbdbga\kbdbga.dll 1
-;dll\keyboard\kbdbe\kbdbe.dll 1
-;dll\keyboard\kbdbur\kbdbur.dll 1
-;dll\keyboard\kbdcan\kbdcan.dll 1
-;dll\keyboard\kbdcr\kbdcr.dll 1
-;dll\keyboard\kbdcz1\kbdcz1.dll 1
-;dll\keyboard\kbdda\kbdda.dll 1
-;dll\keyboard\kbddv\kbddv.dll 1
-;dll\keyboard\kbdes\kbdes.dll 1
-;dll\keyboard\kbdest\kbdest.dll 1
-;dll\keyboard\kbdfc\kbdfc.dll 1
-;dll\keyboard\kbdfi\kbdfi.dll 1
-;dll\keyboard\kbdfr\kbdfr.dll 1
-;dll\keyboard\kbdgeo\kbdgeo.dll 1
-;dll\keyboard\kbdgerg\kbdgerg.dll 1
-;dll\keyboard\kbdgneo\kbdgneo.dll 1
-;dll\keyboard\kbdgrist\kbdgrist.dll 1
-;dll\keyboard\kbdgr\kbdgr.dll 1
-;dll\keyboard\kbdhe\kbdhe.dll 1
-;dll\keyboard\kbdheb\kbdheb.dll 1
-;dll\keyboard\kbdhu\kbdhu.dll 1
-;dll\keyboard\kbdic\kbdic.dll 1
-;dll\keyboard\kbdinasa\kbdinasa.dll 1
-;dll\keyboard\kbdinben\kbdinben.dll 1
-;dll\keyboard\kbdindev\kbdindev.dll 1
-;dll\keyboard\kbdinguj\kbdinguj.dll 1
-;dll\keyboard\kbdinmal\kbdinmal.dll 1
-;dll\keyboard\kbdir\kbdir.dll 1
-;dll\keyboard\kbdit\kbdit.dll 1
-;dll\keyboard\kbdja\kbdja.dll 1
-;dll\keyboard\kbdkaz\kbdkaz.dll 1
-;dll\keyboard\kbdla\kbdla.dll 1
-;dll\keyboard\kbdlt\kbdlt.dll 1
-;dll\keyboard\kbdlv\kbdlv.dll 1
-;dll\keyboard\kbdmac\kbdmac.dll 1
-;dll\keyboard\kbdne\kbdne.dll 1
-;dll\keyboard\kbdno\kbdno.dll 1
-;dll\keyboard\kbdpl1\kbdpl1.dll 1
-;dll\keyboard\kbdpo\kbdpo.dll 1
-;dll\keyboard\kbdro\kbdro.dll 1
-;dll\keyboard\kbdru\kbdru.dll 1
-;dll\keyboard\kbdru1\kbdru1.dll 1
-;dll\keyboard\kbdsg\kbdsg.dll 1
-;dll\keyboard\kbdsk\kbdsk.dll 1
-;dll\keyboard\kbdsk1\kbdsk1.dll 1
-;dll\keyboard\kbdsw\kbdsw.dll 1
-;dll\keyboard\kbdtat\kbdtat.dll 1
-;dll\keyboard\kbdth0\kbdth0.dll 1
-;dll\keyboard\kbdth1\kbdth1.dll 1
-;dll\keyboard\kbdth2\kbdth2.dll 1
-;dll\keyboard\kbdth3\kbdth3.dll 1
-;dll\keyboard\kbdtuf\kbdtuf.dll 1
-;dll\keyboard\kbdtuq\kbdtuq.dll 1
-;dll\keyboard\kbduk\kbduk.dll 1
-;dll\keyboard\kbdur\kbdur.dll 1
-;dll\keyboard\kbdurs\kbdurs.dll 1
-;dll\keyboard\kbdus\kbdus.dll 1
-;dll\keyboard\kbdusa\kbdusa.dll 1
-;dll\keyboard\kbdusl\kbdusl.dll 1
-;dll\keyboard\kbdusr\kbdusr.dll 1
-;dll\keyboard\kbdusx\kbdusx.dll 1
-;dll\keyboard\kbduzb\kbduzb.dll 1
-;dll\keyboard\kbdvntc\kbdvntc.dll 1
-;dll\keyboard\kbdycc\kbdycc.dll 1
-;dll\keyboard\kbdycl\kbdycl.dll 1
-;dll\keyboard\kbdko\kbdko.dll 1
+dll\keyboard\kbda1\kbda1.dll 1
+dll\keyboard\kbda2\kbda2.dll 1
+dll\keyboard\kbda3\kbda3.dll 1
+dll\keyboard\kbdal\kbdal.dll 1
+dll\keyboard\kbdarme\kbdarme.dll 1
+dll\keyboard\kbdarmw\kbdarmw.dll 1
+dll\keyboard\kbdaze\kbdaze.dll 1
+dll\keyboard\kbdazel\kbdazel.dll 1
+dll\keyboard\kbdbgm\kbdbgm.dll 1
+dll\keyboard\kbdbgt\kbdbgt.dll 1
+dll\keyboard\kbdblr\kbdblr.dll 1
+dll\keyboard\kbdbr\kbdbr.dll 1
+dll\keyboard\kbdbga\kbdbga.dll 1
+dll\keyboard\kbdbe\kbdbe.dll 1
+dll\keyboard\kbdbur\kbdbur.dll 1
+dll\keyboard\kbdcan\kbdcan.dll 1
+dll\keyboard\kbdcr\kbdcr.dll 1
+dll\keyboard\kbdcz1\kbdcz1.dll 1
+dll\keyboard\kbdda\kbdda.dll 1
+dll\keyboard\kbddv\kbddv.dll 1
+dll\keyboard\kbdes\kbdes.dll 1
+dll\keyboard\kbdest\kbdest.dll 1
+dll\keyboard\kbdfc\kbdfc.dll 1
+dll\keyboard\kbdfi\kbdfi.dll 1
+dll\keyboard\kbdfr\kbdfr.dll 1
+dll\keyboard\kbdgeo\kbdgeo.dll 1
+dll\keyboard\kbdgerg\kbdgerg.dll 1
+dll\keyboard\kbdgneo\kbdgneo.dll 1
+dll\keyboard\kbdgrist\kbdgrist.dll 1
+dll\keyboard\kbdgr\kbdgr.dll 1
+dll\keyboard\kbdhe\kbdhe.dll 1
+dll\keyboard\kbdheb\kbdheb.dll 1
+dll\keyboard\kbdhu\kbdhu.dll 1
+dll\keyboard\kbdic\kbdic.dll 1
+dll\keyboard\kbdinasa\kbdinasa.dll 1
+dll\keyboard\kbdinben\kbdinben.dll 1
+dll\keyboard\kbdindev\kbdindev.dll 1
+dll\keyboard\kbdinguj\kbdinguj.dll 1
+dll\keyboard\kbdinmal\kbdinmal.dll 1
+dll\keyboard\kbdir\kbdir.dll 1
+dll\keyboard\kbdit\kbdit.dll 1
+dll\keyboard\kbdja\kbdja.dll 1
+dll\keyboard\kbdkaz\kbdkaz.dll 1
+dll\keyboard\kbdla\kbdla.dll 1
+dll\keyboard\kbdlt\kbdlt.dll 1
+dll\keyboard\kbdlv\kbdlv.dll 1
+dll\keyboard\kbdmac\kbdmac.dll 1
+dll\keyboard\kbdne\kbdne.dll 1
+dll\keyboard\kbdno\kbdno.dll 1
+dll\keyboard\kbdpl1\kbdpl1.dll 1
+dll\keyboard\kbdpo\kbdpo.dll 1
+dll\keyboard\kbdro\kbdro.dll 1
+dll\keyboard\kbdru\kbdru.dll 1
+dll\keyboard\kbdru1\kbdru1.dll 1
+dll\keyboard\kbdsg\kbdsg.dll 1
+dll\keyboard\kbdsk\kbdsk.dll 1
+dll\keyboard\kbdsk1\kbdsk1.dll 1
+dll\keyboard\kbdsw\kbdsw.dll 1
+dll\keyboard\kbdtat\kbdtat.dll 1
+dll\keyboard\kbdth0\kbdth0.dll 1
+dll\keyboard\kbdth1\kbdth1.dll 1
+dll\keyboard\kbdth2\kbdth2.dll 1
+dll\keyboard\kbdth3\kbdth3.dll 1
+dll\keyboard\kbdtuf\kbdtuf.dll 1
+dll\keyboard\kbdtuq\kbdtuq.dll 1
+dll\keyboard\kbduk\kbduk.dll 1
+dll\keyboard\kbdur\kbdur.dll 1
+dll\keyboard\kbdurs\kbdurs.dll 1
+dll\keyboard\kbdus\kbdus.dll 1
+dll\keyboard\kbdusa\kbdusa.dll 1
+dll\keyboard\kbdusl\kbdusl.dll 1
+dll\keyboard\kbdusr\kbdusr.dll 1
+dll\keyboard\kbdusx\kbdusx.dll 1
+dll\keyboard\kbduzb\kbduzb.dll 1
+dll\keyboard\kbdvntc\kbdvntc.dll 1
+dll\keyboard\kbdycc\kbdycc.dll 1
+dll\keyboard\kbdycl\kbdycl.dll 1
+dll\keyboard\kbdko\kbdko.dll 1
-;dll\nt;dll\ntdll.dll 1
+dll\ntdll\ntdll.dll 1
-;dll\win32\acledit\acledit.dll 1
-;dll\win32\aclui\aclui.dll 1
-;dll\win32\advapi32\advapi32.dll 1
-;dll\win32\advpack\advpack.dll 1
-;dll\win32\atl\atl.dll 1
-;dll\win32\authz\authz.dll 1
-;dll\win32\avifil32\avifil32.dll 1
-;dll\win32\beepmidi\beepmidi.dll 1
-;dll\win32\browseui\browseui.dll 1
-;dll\win32\cabinet\cabinet.dll 1
-;dll\win32\cards\cards.dll 1
-;dll\win32\cfgmgr32\cfgmgr32.dll 1
-;dll\win32\clusapi\clusapi.dll 1
-;dll\win32\comcat\comcat.dll 1
-;dll\win32\comctl32\comctl32.dll 1
-;dll\win32\comdlg32\comdlg32.dll 1
-;dll\win32\compstui\compstui.dll 1
-;dll\win32\credui\credui.dll 1
-;dll\win32\crtdll\crtdll.dll 1
-;dll\win32\crypt32\crypt32.dll 1
-;dll\win32\cryptdll\cryptdll.dll 1
-;dll\win32\cryptnet\cryptnet.dll 1
-;dll\win32\cryptui\cryptui.dll 1
-;dll\win32\dbghelp\dbghelp.dll 1
-;dll\win32\dciman32\dciman32.dll 1
-;dll\win32\devmgr\devmgr.dll 1
-;dll\win32\dhcpcsvc\dhcpcsvc.dll 1
-;dll\win32\dnsapi\dnsapi.dll 1
-;dll\win32\fmifs\fmifs.dll 1
-;dll\win32\fusion\fusion.dll 1
-;dll\win32\gdi32\gdi32.dll 1
-;dll\win32\gdiplus\gdiplus.dll 1
-;dll\win32\getuname\getuname.dll 1
-;dll\win32\glu32\glu32.dll 1
-;dll\win32\hhctrl.ocx\hhctrl.ocx 1
-;dll\win32\hid\hid.dll 1
-;dll\win32\hlink\hlink.dll 1
-;dll\win32\icmp\icmp.dll 1
-;dll\win32\imagehlp\imagehlp.dll 1
-;dll\win32\imm32\imm32.dll 1
-;dll\win32\inetcomm\inetcomm.dll 1
-;dll\win32\inetmib1\inetmib1.dll 1
-;dll\win32\iphlpapi\iphlpapi.dll 1
-;dll\win32\jscript\jscript.dll 1
-;dll\win32\kernel32\kernel32.dll 1
-;dll\win32\lsasrv\lsasrv.dll 1
-;dll\win32\lz32\lz32.dll 1
-;dll\win32\mapi32\mapi32.dll 1
-;dll\win32\mlang\mlang.dll 1
-;dll\win32\mmdrv\mmdrv.dll 1
-;dll\win32\modemui\modemui.dll 1
-;dll\win32\mpr\mpr.dll 1
-;dll\win32\mprapi\mprapi.dll 1
-;dll\win32\msacm32\msacm32.dll 1
-;dll\win32\msafd\msafd.dll 1
-;dll\win32\mscoree\mscoree.dll 1
-;dll\win32\msgina\msgina.dll 1
-;dll\win32\mshtml\mshtml.dll 1
-;dll\win32\mshtml.tlb\mshtml.tlb 1
-;dll\win32\msi\msi.dll 1
-;dll\win32\msimg32\msimg32.dll 1
-;dll\win32\mstask\mstask.dll 1
-;dll\win32\msvcrt\msvcrt.dll 1
-;dll\win32\msvcrt20\msvcrt20.dll 1
-;dll\win32\msvcrt40\msvcrt40.dll 1
-;dll\win32\msvfw32\msvfw32.dll 1
-;dll\win32\mswsock\mswsock.dll 1
-;dll\win32\msxml3\msxml3.dll 1
-;dll\win32\nddeapi\nddeapi.dll 1
-;dll\win32\netapi32\netapi32.dll 1
-;dll\win32\netcfgx\netcfgx.dll 1
-;dll\win32\netid\netid.dll 1
-;dll\win32\netshell\netshell.dll 1
-;dll\win32\newdev\newdev.dll 1
-;dll\win32\ntdsapi\ntdsapi.dll 1
-;dll\win32\ntmarta\ntmarta.dll 1
-;dll\win32\objsel\objsel.dll 1
-;dll\win32\odbc32\odbc32.dll 1
-;dll\win32\odbccp32\odbccp32.dll 1
-;dll\win32\ole32\ole32.dll 1
-;dll\win32\oleacc\oleacc.dll 1
-;dll\win32\oleaut32\oleaut32.dll 1
-;dll\win32\oledlg\oledlg.dll 1
-;dll\win32\olepro32\olepro32.dll 1
-;dll\win32\opengl32\opengl32.dll 1
-;dll\win32\pdh\pdh.dll 1
-;dll\win32\powrprof\powrprof.dll 1
-;dll\win32\printui\printui.dll 1
-;dll\win32\psapi\psapi.dll 1
-;dll\win32\pstorec\pstorec.dll 1
-;dll\win32\rasapi32\rasapi32.dll 1
-;dll\win32\rasdlg\rasdlg.dll 1
-;dll\win32\rasman\rasman.dll 1
-;dll\win32\riched20\riched20.dll 1
-;dll\win32\riched32\riched32.dll 1
-;dll\win32\rpcrt4\rpcrt4.dll 1
-;dll\win32\rsabase\rsabase.dll 1
-;dll\win32\rsaenh\rsaenh.dll 1
-;dll\win32\samlib\samlib.dll 1
-;dll\win32\samsrv\samsrv.dll 1
-;dll\win32\schannel\schannel.dll 1
-;dll\win32\secur32\secur32.dll 1
-;dll\win32\security\security.dll 1
-;dll\win32\sensapi\sensapi.dll 1
-;dll\win32\serialui\serialui.dll 1
-;dll\win32\setupapi\setupapi.dll 1
-;dll\win32\sfc\sfc.dll 1
-;dll\win32\sfc_os\sfc_os.dll 1
-;dll\win32\shdocvw\shdocvw.dll 1
-;dll\win32\shell32\shell32.dll 1
-;dll\win32\shfolder\shfolder.dll 1
-;dll\win32\shimgvw\shimgvw.dll 1
-;dll\win32\shlwapi\shlwapi.dll 1
-;dll\win32\smdll\smdll.dll 1
-;dll\win32\snmpapi\snmpapi.dll 1
-;dll\win32\stdole2.tlb\stdole2.tlb 1
-;dll\win32\stdole32.tlb\stdole32.tlb 1
-;dll\win32\sxs\sxs.dll 1
-;dll\win32\syssetup\syssetup.dll 1
-;dll\win32\tapi32\tapi32.dll 1
-;dll\win32\tapiui\tapiui.dll 1
-;dll\win32\twain_32\twain_32.dll 1
-;dll\win32\uext2\uext2.dll 1
-;dll\win32\ufat\ufat.dll 1
-;dll\win32\ufatx\ufatx.dll 1 optional
-;dll\win32\untfs\untfs.dll 1
-;dll\win32\urlmon\urlmon.dll 1
-;dll\win32\user32\user32.dll 1
-;dll\win32\userenv\userenv.dll 1
-;dll\win32\usp10\usp10.dll 1
-;dll\win32\uxtheme\uxtheme.dll 1
-;dll\win32\vdmdbg\vdmdbg.dll 1
-;dll\win32\version\version.dll 1
-;dll\win32\winfax\winfax.dll 1
-;dll\win32\winhttp\winhttp.dll 1
-;dll\win32\wininet\wininet.dll 1
-;dll\win32\winmm\winmm.dll 1
-;dll\win32\winspool\winspool.drv 1
-;dll\win32\winsta\winsta.dll 1
-;dll\win32\wintrust\wintrust.dll 1
-;dll\win32\wldap32\wldap32.dll 1
-;dll\win32\ws2_32\ws2_32.dll 1
-;dll\win32\ws2help\ws2help.dll 1
-;dll\win32\wshirda\wshirda.dll 1
-;dll\win32\wshtcpip\wshtcpip.dll 1
-;dll\win32\wsock32\wsock32.dll 1
-;dll\win32\wtsapi32\wtsapi32.dll 1
-;dll\win32\winmm\midimap\midimap.dll 1
-;dll\win32\winmm\wavemap\msacm32.drv 1 optional
+dll\win32\acledit\acledit.dll 1
+dll\win32\aclui\aclui.dll 1
+dll\win32\advapi32\advapi32.dll 1
+dll\win32\advpack\advpack.dll 1
+dll\win32\atl\atl.dll 1
+dll\win32\authz\authz.dll 1
+dll\win32\avifil32\avifil32.dll 1
+dll\win32\beepmidi\beepmidi.dll 1
+dll\win32\browseui\browseui.dll 1
+dll\win32\cabinet\cabinet.dll 1
+dll\win32\cards\cards.dll 1
+dll\win32\cfgmgr32\cfgmgr32.dll 1
+dll\win32\clusapi\clusapi.dll 1
+dll\win32\comcat\comcat.dll 1
+dll\win32\comctl32\comctl32.dll 1
+dll\win32\comdlg32\comdlg32.dll 1
+dll\win32\compstui\compstui.dll 1
+dll\win32\credui\credui.dll 1
+dll\win32\crtdll\crtdll.dll 1
+dll\win32\crypt32\crypt32.dll 1
+dll\win32\cryptdll\cryptdll.dll 1
+dll\win32\cryptnet\cryptnet.dll 1
+dll\win32\cryptui\cryptui.dll 1
+dll\win32\dbghelp\dbghelp.dll 1
+dll\win32\dciman32\dciman32.dll 1
+dll\win32\devmgr\devmgr.dll 1
+dll\win32\dhcpcsvc\dhcpcsvc.dll 1
+dll\win32\dnsapi\dnsapi.dll 1
+dll\win32\fmifs\fmifs.dll 1
+dll\win32\fusion\fusion.dll 1
+dll\win32\gdi32\gdi32.dll 1
+dll\win32\gdiplus\gdiplus.dll 1
+dll\win32\getuname\getuname.dll 1
+dll\win32\glu32\glu32.dll 1
+dll\win32\hhctrl.ocx\hhctrl.ocx 1
+dll\win32\hid\hid.dll 1
+dll\win32\hlink\hlink.dll 1
+dll\win32\icmp\icmp.dll 1
+dll\win32\imagehlp\imagehlp.dll 1
+dll\win32\imm32\imm32.dll 1
+dll\win32\inetcomm\inetcomm.dll 1
+dll\win32\inetmib1\inetmib1.dll 1
+dll\win32\iphlpapi\iphlpapi.dll 1
+dll\win32\jscript\jscript.dll 1
+dll\win32\kernel32\kernel32.dll 1
+dll\win32\lsasrv\lsasrv.dll 1
+dll\win32\lz32\lz32.dll 1
+dll\win32\mapi32\mapi32.dll 1
+dll\win32\mlang\mlang.dll 1
+dll\win32\mmdrv\mmdrv.dll 1
+dll\win32\modemui\modemui.dll 1
+dll\win32\mpr\mpr.dll 1
+dll\win32\mprapi\mprapi.dll 1
+dll\win32\msacm32\msacm32.dll 1
+dll\win32\msafd\msafd.dll 1
+dll\win32\mscoree\mscoree.dll 1
+dll\win32\msgina\msgina.dll 1
+dll\win32\mshtml\mshtml.dll 1
+dll\win32\mshtml.tlb\mshtml.tlb 1
+dll\win32\msi\msi.dll 1
+dll\win32\msimg32\msimg32.dll 1
+dll\win32\mstask\mstask.dll 1
+dll\win32\msvcrt\msvcrt.dll 1
+dll\win32\msvcrt20\msvcrt20.dll 1
+dll\win32\msvcrt40\msvcrt40.dll 1
+dll\win32\msvfw32\msvfw32.dll 1
+dll\win32\mswsock\mswsock.dll 1
+dll\win32\msxml3\msxml3.dll 1
+dll\win32\nddeapi\nddeapi.dll 1
+dll\win32\netapi32\netapi32.dll 1
+dll\win32\netcfgx\netcfgx.dll 1
+dll\win32\netid\netid.dll 1
+dll\win32\netshell\netshell.dll 1
+dll\win32\newdev\newdev.dll 1
+dll\win32\ntdsapi\ntdsapi.dll 1
+dll\win32\ntmarta\ntmarta.dll 1
+dll\win32\objsel\objsel.dll 1
+dll\win32\odbc32\odbc32.dll 1
+dll\win32\odbccp32\odbccp32.dll 1
+dll\win32\ole32\ole32.dll 1
+dll\win32\oleacc\oleacc.dll 1
+dll\win32\oleaut32\oleaut32.dll 1
+dll\win32\oledlg\oledlg.dll 1
+dll\win32\olepro32\olepro32.dll 1
+dll\win32\opengl32\opengl32.dll 1
+dll\win32\pdh\pdh.dll 1
+dll\win32\powrprof\powrprof.dll 1
+dll\win32\printui\printui.dll 1
+dll\win32\psapi\psapi.dll 1
+dll\win32\pstorec\pstorec.dll 1
+dll\win32\rasapi32\rasapi32.dll 1
+dll\win32\rasdlg\rasdlg.dll 1
+dll\win32\rasman\rasman.dll 1
+dll\win32\riched20\riched20.dll 1
+dll\win32\riched32\riched32.dll 1
+dll\win32\rpcrt4\rpcrt4.dll 1
+dll\win32\rsabase\rsabase.dll 1
+dll\win32\rsaenh\rsaenh.dll 1
+dll\win32\samlib\samlib.dll 1
+dll\win32\samsrv\samsrv.dll 1
+dll\win32\schannel\schannel.dll 1
+dll\win32\secur32\secur32.dll 1
+dll\win32\security\security.dll 1
+dll\win32\sensapi\sensapi.dll 1
+dll\win32\serialui\serialui.dll 1
+dll\win32\setupapi\setupapi.dll 1
+dll\win32\sfc\sfc.dll 1
+dll\win32\sfc_os\sfc_os.dll 1
+dll\win32\shdocvw\shdocvw.dll 1
+dll\win32\shell32\shell32.dll 1
+dll\win32\shfolder\shfolder.dll 1
+dll\win32\shimgvw\shimgvw.dll 1
+dll\win32\shlwapi\shlwapi.dll 1
+dll\win32\smdll\smdll.dll 1
+dll\win32\snmpapi\snmpapi.dll 1
+dll\win32\stdole2.tlb\stdole2.tlb 1
+dll\win32\stdole32.tlb\stdole32.tlb 1
+dll\win32\sxs\sxs.dll 1
+dll\win32\syssetup\syssetup.dll 1
+dll\win32\tapi32\tapi32.dll 1
+dll\win32\tapiui\tapiui.dll 1
+dll\win32\twain_32\twain_32.dll 1
+dll\win32\uext2\uext2.dll 1
+dll\win32\ufat\ufat.dll 1
+dll\win32\ufatx\ufatx.dll 1 optional
+dll\win32\untfs\untfs.dll 1
+dll\win32\urlmon\urlmon.dll 1
+dll\win32\user32\user32.dll 1
+dll\win32\userenv\userenv.dll 1
+dll\win32\usp10\usp10.dll 1
+dll\win32\uxtheme\uxtheme.dll 1
+dll\win32\vdmdbg\vdmdbg.dll 1
+dll\win32\version\version.dll 1
+dll\win32\winfax\winfax.dll 1
+dll\win32\winhttp\winhttp.dll 1
+dll\win32\wininet\wininet.dll 1
+dll\win32\winmm\winmm.dll 1
+dll\win32\winspool\winspool.drv 1
+dll\win32\winsta\winsta.dll 1
+dll\win32\wintrust\wintrust.dll 1
+dll\win32\wldap32\wldap32.dll 1
+dll\win32\ws2_32\ws2_32.dll 1
+dll\win32\ws2help\ws2help.dll 1
+dll\win32\wshirda\wshirda.dll 1
+dll\win32\wshtcpip\wshtcpip.dll 1
+dll\win32\wsock32\wsock32.dll 1
+dll\win32\wtsapi32\wtsapi32.dll 1
+dll\win32\winmm\midimap\midimap.dll 1
+dll\win32\winmm\wavemap\msacm32.drv 1 optional
; Shell Extensions
-;dll\shellext\deskadp\deskadp.dll 1
-;dll\shellext\deskmon\deskmon.dll 1
+dll\shellext\deskadp\deskadp.dll 1
+dll\shellext\deskmon\deskmon.dll 1
; Drivers
-;drivers\base\bootvid\bootvid.dll 1
-;drivers\base\beep\beep.sys 2
-;drivers\base\null\null.sys 2
+drivers\base\bootvid\bootvid.dll 1
+drivers\base\beep\beep.sys 2
+drivers\base\null\null.sys 2
-;drivers\bus\isapnp\isapnp.sys 2
+drivers\bus\isapnp\isapnp.sys 2
-;drivers\directx\dxapi\dxapi.sys 2
-;drivers\directx\dxg\dxg.sys 2
-;drivers\directx\dxgthk\dxgthk.sys 2
+drivers\directx\dxapi\dxapi.sys 2
+drivers\directx\dxg\dxg.sys 2
+drivers\directx\dxgthk\dxgthk.sys 2
-;drivers\filesystems\fs_rec\fs_rec.sys 2
-;drivers\filesystems\msfs\msfs.sys 2
-;drivers\filesystems\mup\mup.sys 2
-;drivers\filesystems\npfs\npfs.sys 2
+drivers\filesystems\fs_rec\fs_rec.sys 2
+drivers\filesystems\msfs\msfs.sys 2
+drivers\filesystems\mup\mup.sys 2
+drivers\filesystems\npfs\npfs.sys 2
-;drivers\input\mouclass\mouclass.sys 2
-;drivers\input\sermouse\sermouse.sys 2
+drivers\input\mouclass\mouclass.sys 2
+drivers\input\sermouse\sermouse.sys 2
-;drivers\network\afd\afd.sys 2
-;drivers\network\ndis\ndis.sys 2
-;drivers\network\tcpip\tcpip.sys 2
-;drivers\network\tdi\tdi.sys 2
-;drivers\network\dd\ne2000\ne2000.sys 2
-;drivers\network\dd\pcnet\pcnet.sys 2
+drivers\network\afd\afd.sys 2
+drivers\network\ndis\ndis.sys 2
+drivers\network\tcpip\tcpip.sys 2
+drivers\network\tdi\tdi.sys 2
+drivers\network\dd\ne2000\ne2000.sys 2
+drivers\network\dd\pcnet\pcnet.sys 2
-;drivers\serial\serenum\serenum.sys 2
-;drivers\serial\serial\serial.sys 2
+drivers\serial\serenum\serenum.sys 2
+drivers\serial\serial\serial.sys 2
-;drivers\storage\ide\pciide\pciide.sys 2
-;drivers\storage\ide\pciidex\pciidex.sys 2
+drivers\storage\ide\pciide\pciide.sys 2
+drivers\storage\ide\pciidex\pciidex.sys 2
-;;drivers\usb\miniport\usbohci\usbohci.sys 2
-;;drivers\usb\miniport\usbuhci\usbuhci.sys 2
-;;drivers\usb\usbhub\usbhub.sys 2
-;;drivers\usb\usbport\usbport.sys 2
-;drivers\usb\nt4compat\usbdriver\usbdriver.sys 2
+;drivers\usb\miniport\usbohci\usbohci.sys 2
+;drivers\usb\miniport\usbuhci\usbuhci.sys 2
+;drivers\usb\usbhub\usbhub.sys 2
+;drivers\usb\usbport\usbport.sys 2
+drivers\usb\nt4compat\usbdriver\usbdriver.sys 2
-;drivers\video\displays\vga\vgaddi.dll 1
-;drivers\video\displays\framebuf\framebuf.dll 1
-;drivers\video\miniport\vga\vgamp.sys 2
-;drivers\video\miniport\vbe\vbemp.sys 2
-;drivers\video\videoprt\videoprt.sys 2
+drivers\video\displays\vga\vgaddi.dll 1
+drivers\video\displays\framebuf\framebuf.dll 1
+drivers\video\miniport\vga\vgamp.sys 2
+drivers\video\miniport\vbe\vbemp.sys 2
+drivers\video\videoprt\videoprt.sys 2
-;drivers\wmi\wmilib.sys 2
+drivers\wmi\wmilib.sys 2
; Media
-;media\fonts\DejaVuSans.ttf 3
-;media\fonts\DejaVuSans-Bold.ttf 3
-;media\fonts\DejaVuSans-BoldOblique.ttf 3
-;media\fonts\DejaVuSansMono.ttf 3
-;media\fonts\DejaVuSansMono-Bold.ttf 3
-;media\fonts\DejaVuSansMono-BoldOblique.ttf 3
-;media\fonts\DejaVuSansMono-Oblique.ttf 3
-;media\fonts\DejaVuSans-Oblique.ttf 3
-;media\fonts\DejaVuSerif.ttf 3
-;media\fonts\DejaVuSerif-Bold.ttf 3
-;media\fonts\DejaVuSerif-BoldItalic.ttf 3
-;media\fonts\DejaVuSerif-Italic.ttf 3
+media\fonts\DejaVuSans.ttf 3
+media\fonts\DejaVuSans-Bold.ttf 3
+media\fonts\DejaVuSans-BoldOblique.ttf 3
+media\fonts\DejaVuSansMono.ttf 3
+media\fonts\DejaVuSansMono-Bold.ttf 3
+media\fonts\DejaVuSansMono-BoldOblique.ttf 3
+media\fonts\DejaVuSansMono-Oblique.ttf 3
+media\fonts\DejaVuSans-Oblique.ttf 3
+media\fonts\DejaVuSerif.ttf 3
+media\fonts\DejaVuSerif-Bold.ttf 3
+media\fonts\DejaVuSerif-BoldItalic.ttf 3
+media\fonts\DejaVuSerif-Italic.ttf 3
-;media\fonts\FreeMono.ttf 3
-;media\fonts\FreeMonoBold.ttf 3
-;media\fonts\FreeMonoBoldOblique.ttf 3
-;media\fonts\FreeMonoOblique.ttf 3
+media\fonts\FreeMono.ttf 3
+media\fonts\FreeMonoBold.ttf 3
+media\fonts\FreeMonoBoldOblique.ttf 3
+media\fonts\FreeMonoOblique.ttf 3
-;media\fonts\LiberationMono-Bold.ttf 3
-;media\fonts\LiberationMono-BoldItalic.ttf 3
-;media\fonts\LiberationMono-Italic.ttf 3
-;media\fonts\LiberationMono-Regular.ttf 3
-;media\fonts\LiberationSans-Bold.ttf 3
-;media\fonts\LiberationSans-BoldItalic.ttf 3
-;media\fonts\LiberationSans-Italic.ttf 3
-;media\fonts\LiberationSans-Regular.ttf 3
-;media\fonts\LiberationSerif-Bold.ttf 3
-;media\fonts\LiberationSerif-BoldItalic.ttf 3
-;media\fonts\LiberationSerif-Italic.ttf 3
-;media\fonts\LiberationSerif-Regular.ttf 3
+media\fonts\LiberationMono-Bold.ttf 3
+media\fonts\LiberationMono-BoldItalic.ttf 3
+media\fonts\LiberationMono-Italic.ttf 3
+media\fonts\LiberationMono-Regular.ttf 3
+media\fonts\LiberationSans-Bold.ttf 3
+media\fonts\LiberationSans-BoldItalic.ttf 3
+media\fonts\LiberationSans-Italic.ttf 3
+media\fonts\LiberationSans-Regular.ttf 3
+media\fonts\LiberationSerif-Bold.ttf 3
+media\fonts\LiberationSerif-BoldItalic.ttf 3
+media\fonts\LiberationSerif-Italic.ttf 3
+media\fonts\LiberationSerif-Regular.ttf 3
-;media\fonts\Marlett.ttf 3
-;media\fonts\tahoma.ttf 3
-;media\fonts\tahomabd.ttf 3
+media\fonts\Marlett.ttf 3
+media\fonts\tahoma.ttf 3
+media\fonts\tahomabd.ttf 3
-;media\nls\c_037.nls 1
-;media\nls\c_500.nls 1
-;media\nls\c_737.nls 1
-;media\nls\c_775.nls 1
-;media\nls\c_850.nls 1
-;media\nls\c_852.nls 1
-;media\nls\c_855.nls 1
-;media\nls\c_856.nls 1
-;media\nls\c_857.nls 1
-;media\nls\c_860.nls 1
-;media\nls\c_861.nls 1
-;media\nls\c_862.nls 1
-;media\nls\c_863.nls 1
-;media\nls\c_864.nls 1
-;media\nls\c_865.nls 1
-;media\nls\c_866.nls 1
-;media\nls\c_869.nls 1
-;media\nls\c_874.nls 1
-;media\nls\c_875.nls 1
-;media\nls\c_878.nls 1
-;media\nls\c_932.nls 1
-;media\nls\c_936.nls 1
-;media\nls\c_949.nls 1
-;media\nls\c_950.nls 1
-;media\nls\c_1006.nls 1
-;media\nls\c_1026.nls 1
-;media\nls\c_1250.nls 1
-;media\nls\c_1251.nls 1
-;media\nls\c_1253.nls 1
-;media\nls\c_1254.nls 1
-;media\nls\c_1255.nls 1
-;media\nls\c_1256.nls 1
-;media\nls\c_1257.nls 1
-;media\nls\c_1258.nls 1
-;media\nls\c_10000.nls 1
-;media\nls\c_10006.nls 1
-;media\nls\c_10007.nls 1
-;media\nls\c_10029.nls 1
-;media\nls\c_10079.nls 1
-;media\nls\c_10081.nls 1
-;media\nls\c_20866.nls 1
-;media\nls\c_28591.nls 1
-;media\nls\c_28592.nls 1
-;media\nls\c_28593.nls 1
-;media\nls\c_28594.nls 1
-;media\nls\c_28595.nls 1
-;media\nls\c_28596.nls 1
-;media\nls\c_28597.nls 1
-;media\nls\c_28598.nls 1
-;media\nls\c_28599.nls 1
-;media\drivers\etc\services 5
-;media\inf\acpi.inf 6
-;media\inf\cdrom.inf 6
-;media\inf\display.inf 6
-;media\inf\font.inf 6
-;media\inf\hdc.inf 6
-;media\inf\intl.inf 6
-;media\inf\layout.inf 6
-;media\inf\machine.inf 6
-;media\inf\msmouse.inf 6
-;media\inf\keyboard.inf 6
-;media\inf\NET_NIC.inf 6
-;media\inf\netamd.inf 6
-;media\inf\netisa.inf 6
-;media\inf\netrtpnt.inf 6
-;media\inf\nettcpip.inf 6
-;media\inf\ports.inf 6
-;media\inf\scsi.inf 6
-;media\inf\syssetup.inf 6
-;media\inf\usbport.inf 6
-;media\inf\usb.inf 6
-;media\inf\usbstor.inf 6
-;media\inf\xboxdisp.inf 6
+media\nls\c_037.nls 1
+media\nls\c_500.nls 1
+media\nls\c_737.nls 1
+media\nls\c_775.nls 1
+media\nls\c_850.nls 1
+media\nls\c_852.nls 1
+media\nls\c_855.nls 1
+media\nls\c_856.nls 1
+media\nls\c_857.nls 1
+media\nls\c_860.nls 1
+media\nls\c_861.nls 1
+media\nls\c_862.nls 1
+media\nls\c_863.nls 1
+media\nls\c_864.nls 1
+media\nls\c_865.nls 1
+media\nls\c_866.nls 1
+media\nls\c_869.nls 1
+media\nls\c_874.nls 1
+media\nls\c_875.nls 1
+media\nls\c_878.nls 1
+media\nls\c_932.nls 1
+media\nls\c_936.nls 1
+media\nls\c_949.nls 1
+media\nls\c_950.nls 1
+media\nls\c_1006.nls 1
+media\nls\c_1026.nls 1
+media\nls\c_1250.nls 1
+media\nls\c_1251.nls 1
+media\nls\c_1253.nls 1
+media\nls\c_1254.nls 1
+media\nls\c_1255.nls 1
+media\nls\c_1256.nls 1
+media\nls\c_1257.nls 1
+media\nls\c_1258.nls 1
+media\nls\c_10000.nls 1
+media\nls\c_10006.nls 1
+media\nls\c_10007.nls 1
+media\nls\c_10029.nls 1
+media\nls\c_10079.nls 1
+media\nls\c_10081.nls 1
+media\nls\c_20866.nls 1
+media\nls\c_28591.nls 1
+media\nls\c_28592.nls 1
+media\nls\c_28593.nls 1
+media\nls\c_28594.nls 1
+media\nls\c_28595.nls 1
+media\nls\c_28596.nls 1
+media\nls\c_28597.nls 1
+media\nls\c_28598.nls 1
+media\nls\c_28599.nls 1
+media\drivers\etc\services 5
+media\inf\acpi.inf 6
+media\inf\cdrom.inf 6
+media\inf\display.inf 6
+media\inf\font.inf 6
+media\inf\hdc.inf 6
+media\inf\intl.inf 6
+media\inf\layout.inf 6
+media\inf\machine.inf 6
+media\inf\msmouse.inf 6
+media\inf\keyboard.inf 6
+media\inf\NET_NIC.inf 6
+media\inf\netamd.inf 6
+media\inf\netisa.inf 6
+media\inf\netrtpnt.inf 6
+media\inf\nettcpip.inf 6
+media\inf\ports.inf 6
+media\inf\scsi.inf 6
+media\inf\syssetup.inf 6
+media\inf\usbport.inf 6
+media\inf\usb.inf 6
+media\inf\usbstor.inf 6
+media\inf\xboxdisp.inf 6
; Subsystems
-;subsystems\win32\csrss\csrss.exe 1
-;subsystems\win32\csrss\win32csr\win32csr.dll 1
-;subsystems\ntvdm\ntvdm.exe 1
-;subsystems\win32\win32k\win32k.sys 1
+subsystems\win32\csrss\csrss.exe 1
+subsystems\win32\csrss\win32csr\win32csr.dll 1
+subsystems\csr\csr.exe 1 optional
+subsystems\csr\csrsrv\csrsrv.dll 1 optional
+subsystems\win\basesrv\basesrv.dll 1 optional
+subsystems\win\winsrv\winsrv.dll 1 optional
+subsystems\ntvdm\ntvdm.exe 1
+subsystems\win32\win32k\win32k.sys 1
+
boot\bootdata\bootcdregtest\testboot.bat 7 optional
+tools\dbgprint\dbgprint.exe 7 optional
; Modules
-;modules\rosapps\applications\screensavers\cylfrac\cylfrac.scr 1 optional
-;modules\rosapps\applications\screensavers\matrix\matrix.scr 1 optional
-;modules\rosapps\applications\screensavers\blankscr\scrnsave.scr 1 optional
-;modules\rosapps\applications\screensavers\starfield\starfield.scr 1 optional
-;modules\rosapps\applications\screensavers\mazescr\mazescr.scr 1 optional
-;modules\rosapps\applications\screensavers\butterflies\butterflies.scr 1 optional
-;modules\rosapps\applications\cmdutils\comp\comp.exe 1 optional
-;modules\rosapps\applications\cmdutils\mode\mode.exe 1 optional
-;modules\rosapps\applications\cmdutils\sort\sort.exe 1 optional
-;modules\rosapps\applications\cmdutils\tee\tee.exe 1 optional
-;modules\rosapps\applications\cmdutils\touch\touch.exe 1 optional
-;modules\rosapps\applications\cmdutils\uptime\uptime.exe 1 optional
-;modules\rosapps\applications\cmdutils\y\y.exe 1 optional
-;modules\rosapps\applications\devutils\gdb2\gdb2.exe 1 optional
-;modules\rosapps\applications\devutils\gdihv\gdihv.exe 1 optional
-;modules\rosapps\applications\devutils\genguid\genguid.exe 1 optional
-;modules\rosapps\applications\devutils\gettype\gettype.exe 1 optional
-;modules\rosapps\applications\devutils\roswebparser\roswebparser.exe 1 optional
-;modules\rosapps\applications\devutils\zoomin\zoomin.exe 1 optional
-;modules\rosapps\applications\downloader\downloader.exe 1 optional
-;modules\rosapps\applications\downloader\downloader.xml 1 optional
-;modules\rosapps\applications\fontview\fontview.exe 1 optional
-;modules\rosapps\applications\imagesoft\imagesoft.exe 1 optional
-;modules\rosapps\applications\net\ncftp\ncftp.exe 1 optional
-;modules\rosapps\applications\net\netreg\netreg.exe 1 optional
-;modules\rosapps\applications\net\niclist\niclist.exe 1 optional
-;modules\rosapps\applications\net\roshttpd\roshttpd.exe 1 optional
-;modules\rosapps\applications\notevil\notevil.exe 1 optional
-;modules\rosapps\applications\magnify\magnify.exe 1 optional
-;modules\rosapps\applications\packmgr\cmd-line\rosget.exe 1 optional
-;modules\rosapps\applications\packmgr\gui\packmgr.exe 1 optional
-;modules\rosapps\applications\packmgr\lib\package.dll 1 optional
-;modules\rosapps\applications\sysutils\chkdsk\chkdsk.exe 1 optional
-;modules\rosapps\applications\sysutils\systeminfo\systeminfo.exe 1 optional
-;modules\rosapps\applications\sysutils\chklib\chklib.exe 1 optional
-;modules\rosapps\applications\sysutils\ctm\ctm.exe 1 optional
-;modules\rosapps\applications\sysutils\dosfsck\dosfsck.exe 1 optional
-;modules\rosapps\applications\sysutils\kill\kill.exe 1 optional
-;modules\rosapps\applications\sysutils\lsdd\lsdd.exe 1 optional
-;modules\rosapps\applications\sysutils\man\man.exe 1 optional
-;modules\rosapps\applications\sysutils\pedump\pedump.exe 1 optional
-;modules\rosapps\applications\sysutils\regexpl\regexpl.exe 1 optional
-;modules\rosapps\applications\sysutils\tcat\tcat.exe 1 optional
-;modules\rosapps\applications\sysutils\tlist\tlist.exe 1 optional
-;modules\rosapps\applications\sysutils\screenshot\screenshot.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\binpatch\binpatch.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\cat\cat.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\driver\load\load.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\driver\unload\unload.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\infinst\infinst.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\nts2w32err\nts2w32err.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\objdir\objdir.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\partinfo\partinfo.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\ps\ps.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\rosperf\rosperf.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\stats\stats.exe 1 optional
-;modules\rosapps\applications\sysutils\utils\tickcount\tickcount.exe 1 optional
-;modules\rosapps\applications\winfile\winfile.exe 1 optional
-;modules\rosapps\applications\winver\winver.exe 1 optional
-;modules\rosapps\applications\write\write.exe 1 optional
-;modules\rosapps\demos\ddraw\ddraw_demo.exe 1 optional
-;modules\rosapps\demos\maze\maze.exe 1 optional
-;modules\rosapps\dflat32\edit.exe 1 optional
-;modules\rosapps\drivers\avtest\avtest.sys 1 optional
-;modules\rosapps\drivers\ramdrv\ramdrv.sys 1 optional
-;modules\rosapps\drivers\green\green.sys 1 optional
-;modules\rosapps\templates\dialog\dialog.exe 1 optional
-;modules\rostests\winetests\advapi32\advapi32_winetest.exe 7 optional
-;modules\rostests\winetests\advpack\advpack_winetest.exe 7 optional
-;modules\rostests\winetests\browseui\browseui_winetest.exe 7 optional
-;modules\rostests\winetests\cabinet\cabinet_winetest.exe 7 optional
-;modules\rostests\winetests\comcat\comcat_winetest.exe 7 optional
-;modules\rostests\winetests\comctl32\comctl32_winetest.exe 7 optional
-;modules\rostests\winetests\comdlg32\comdlg32_winetest.exe 7 optional
-;modules\rostests\winetests\gdi32\gdi32_winetest.exe 7 optional
-;modules\rostests\winetests\gdiplus\gdiplus_winetest.exe 7 optional
-;modules\rostests\winetests\hlink\hlink_winetest.exe 7 optional
-;modules\rostests\winetests\icmp\icmp_winetest.exe 7 optional
-;modules\rostests\winetests\kernel32\kernel32_winetest.exe 7 optional
-;modules\rostests\winetests\lz32\lz32_winetest.exe 7 optional
-;modules\rostests\winetests\mapi32\mapi32_winetest.exe 7 optional
-;modules\rostests\winetests\mlang\mlang_winetest.exe 7 optional
-;modules\rostests\winetests\mshtml\mshtml_winetest.exe 7 optional
-;modules\rostests\winetests\msi\msi_winetest.exe 7 optional
-;modules\rostests\winetests\mstask\mstask_winetest.exe 7 optional
-;modules\rostests\winetests\msvcrt\msvcrt_winetest.exe 7 optional
-;modules\rostests\winetests\netapi32\netapi32_winetest.exe 7 optional
-;modules\rostests\winetests\ntdll\ntdll_winetest.exe 7 optional
-;modules\rostests\winetests\odbccp32\odbccp32_winetest.exe 7 optional
-;modules\rostests\winetests\ole32\ole32_winetest.exe 7 optional
-;modules\rostests\winetests\oleaut32\oleaut32_winetest.exe 7 optional
-;modules\rostests\winetests\powrprof\powrprof_winetest.exe 7 optional
-;modules\rostests\winetests\psapi\psapi_winetest.exe 7 optional
-;modules\rostests\winetests\riched20\riched20_winetest.exe 7 optional
-;modules\rostests\winetests\rpcrt4\rpcrt4_winetest.exe 7 optional
-;modules\rostests\winetests\rsabase\rsabase_winetest.exe 7 optional
-;modules\rostests\winetests\rsaenh\rsaenh_winetest.exe 7 optional
-;modules\rostests\winetests\schannel\schannel_winetest.exe 7 optional
-;modules\rostests\winetests\secur32\secur32_winetest.exe 7 optional
-;modules\rostests\winetests\setupapi\setupapi_winetest.exe 7 optional
-;modules\rostests\winetests\shdocvw\shdocvw_winetest.exe 7 optional
-;modules\rostests\winetests\shell32\shell32_winetest.exe 7 optional
-;modules\rostests\winetests\shlwapi\shlwapi_winetest.exe 7 optional
-;modules\rostests\winetests\urlmon\urlmon_winetest.exe 7 optional
-;modules\rostests\winetests\user32\user32_winetest.exe 7 optional
-;modules\rostests\winetests\usp10\usp10_winetest.exe 7 optional
-;modules\rostests\winetests\uxtheme\uxtheme_winetest.exe 7 optional
-;modules\rostests\winetests\version\version_winetest.exe 7 optional
-;modules\rostests\winetests\winhttp\winhttp_winetest.exe 7 optional
-;modules\rostests\winetests\wininet\wininet_winetest.exe 7 optional
-;modules\wallpaper\lake.bmp 4 optional
+modules\os2\server\os2srv.dll 1 optional
+modules\os2\dll\win32\doscalls\doscalls.dll 1 optional
+modules\posix\server\psxsrv.dll 1 optional
+modules\posix\dll\win32\psxdll\psxdll.dll 1 optional
+modules\rosky\dll\win32\libsky\libsky.dll 1 optional
+modules\rosky\dll\win32\libskygi\libskygi.dll 1 optional
+modules\vms\server\vmssrv.dll 1 optional
+modules\vms\dll\win32\vmsdll\vmsdll.dll 1 optional
+modules\rosapps\applications\screensavers\cylfrac\cylfrac.scr 1 optional
+modules\rosapps\applications\screensavers\matrix\matrix.scr 1 optional
+modules\rosapps\applications\screensavers\blankscr\scrnsave.scr 1 optional
+modules\rosapps\applications\screensavers\starfield\starfield.scr 1 optional
+modules\rosapps\applications\screensavers\mazescr\mazescr.scr 1 optional
+modules\rosapps\applications\screensavers\butterflies\butterflies.scr 1 optional
+modules\rosapps\applications\cmdutils\comp\comp.exe 1 optional
+modules\rosapps\applications\cmdutils\mode\mode.exe 1 optional
+modules\rosapps\applications\cmdutils\sort\sort.exe 1 optional
+modules\rosapps\applications\cmdutils\tee\tee.exe 1 optional
+modules\rosapps\applications\cmdutils\touch\touch.exe 1 optional
+modules\rosapps\applications\cmdutils\uptime\uptime.exe 1 optional
+modules\rosapps\applications\cmdutils\y\y.exe 1 optional
+modules\rosapps\applications\devutils\gdb2\gdb2.exe 1 optional
+modules\rosapps\applications\devutils\gdihv\gdihv.exe 1 optional
+modules\rosapps\applications\devutils\genguid\genguid.exe 1 optional
+modules\rosapps\applications\devutils\gettype\gettype.exe 1 optional
+modules\rosapps\applications\devutils\roswebparser\roswebparser.exe 1 optional
+modules\rosapps\applications\devutils\zoomin\zoomin.exe 1 optional
+modules\rosapps\applications\downloader\downloader.exe 1 optional
+modules\rosapps\applications\downloader\downloader.xml 1 optional
+modules\rosapps\applications\fontview\fontview.exe 1 optional
+modules\rosapps\applications\imagesoft\imagesoft.exe 1 optional
+modules\rosapps\applications\net\ncftp\ncftp.exe 1 optional
+modules\rosapps\applications\net\netreg\netreg.exe 1 optional
+modules\rosapps\applications\net\niclist\niclist.exe 1 optional
+modules\rosapps\applications\net\roshttpd\roshttpd.exe 1 optional
+modules\rosapps\applications\notevil\notevil.exe 1 optional
+modules\rosapps\applications\magnify\magnify.exe 1 optional
+modules\rosapps\applications\packmgr\cmd-line\rosget.exe 1 optional
+modules\rosapps\applications\packmgr\gui\packmgr.exe 1 optional
+modules\rosapps\applications\packmgr\lib\package.dll 1 optional
+modules\rosapps\applications\sysutils\chkdsk\chkdsk.exe 1 optional
+modules\rosapps\applications\sysutils\systeminfo\systeminfo.exe 1 optional
+modules\rosapps\applications\sysutils\chklib\chklib.exe 1 optional
+modules\rosapps\applications\sysutils\ctm\ctm.exe 1 optional
+modules\rosapps\applications\sysutils\dosfsck\dosfsck.exe 1 optional
+modules\rosapps\applications\sysutils\kill\kill.exe 1 optional
+modules\rosapps\applications\sysutils\lsdd\lsdd.exe 1 optional
+modules\rosapps\applications\sysutils\man\man.exe 1 optional
+modules\rosapps\applications\sysutils\pedump\pedump.exe 1 optional
+modules\rosapps\applications\sysutils\regexpl\regexpl.exe 1 optional
+modules\rosapps\applications\sysutils\tcat\tcat.exe 1 optional
+modules\rosapps\applications\sysutils\tlist\tlist.exe 1 optional
+modules\rosapps\applications\sysutils\screenshot\screenshot.exe 1 optional
+modules\rosapps\applications\sysutils\utils\binpatch\binpatch.exe 1 optional
+modules\rosapps\applications\sysutils\utils\cat\cat.exe 1 optional
+modules\rosapps\applications\sysutils\utils\driver\load\load.exe 1 optional
+modules\rosapps\applications\sysutils\utils\driver\unload\unload.exe 1 optional
+modules\rosapps\applications\sysutils\utils\infinst\infinst.exe 1 optional
+modules\rosapps\applications\sysutils\utils\nts2w32err\nts2w32err.exe 1 optional
+modules\rosapps\applications\sysutils\utils\objdir\objdir.exe 1 optional
+modules\rosapps\applications\sysutils\utils\partinfo\partinfo.exe 1 optional
+modules\rosapps\applications\sysutils\utils\ps\ps.exe 1 optional
+modules\rosapps\applications\sysutils\utils\rosperf\rosperf.exe 1 optional
+modules\rosapps\applications\sysutils\utils\stats\stats.exe 1 optional
+modules\rosapps\applications\sysutils\utils\tickcount\tickcount.exe 1 optional
+modules\rosapps\applications\winfile\winfile.exe 1 optional
+modules\rosapps\applications\winver\winver.exe 1 optional
+modules\rosapps\applications\write\write.exe 1 optional
+modules\rosapps\demos\ddraw\ddraw_demo.exe 1 optional
+modules\rosapps\demos\maze\maze.exe 1 optional
+modules\rosapps\dflat32\edit.exe 1 optional
+modules\rosapps\drivers\avtest\avtest.sys 1 optional
+modules\rosapps\drivers\ramdrv\ramdrv.sys 1 optional
+modules\rosapps\drivers\green\green.sys 1 optional
+modules\rosapps\lib\dflat32\dflat32.dll 1 optional
+modules\rosapps\templates\dialog.exe 1 optional
+modules\rosapps\templates\mdi.exe 1 optional
+modules\rostests\winetests\advapi32\advapi32_winetest.exe 7 optional
+modules\rostests\winetests\advpack\advpack_winetest.exe 7 optional
+modules\rostests\winetests\browseui\browseui_winetest.exe 7 optional
+modules\rostests\winetests\cabinet\cabinet_winetest.exe 7 optional
+modules\rostests\winetests\comcat\comcat_winetest.exe 7 optional
+modules\rostests\winetests\comctl32\comctl32_winetest.exe 7 optional
+modules\rostests\winetests\comdlg32\comdlg32_winetest.exe 7 optional
+modules\rostests\winetests\gdi32\gdi32_winetest.exe 7 optional
+modules\rostests\winetests\gdiplus\gdiplus_winetest.exe 7 optional
+modules\rostests\winetests\hlink\hlink_winetest.exe 7 optional
+modules\rostests\winetests\icmp\icmp_winetest.exe 7 optional
+modules\rostests\winetests\kernel32\kernel32_winetest.exe 7 optional
+modules\rostests\winetests\lz32\lz32_winetest.exe 7 optional
+modules\rostests\winetests\mapi32\mapi32_winetest.exe 7 optional
+modules\rostests\winetests\mlang\mlang_winetest.exe 7 optional
+modules\rostests\winetests\mshtml\mshtml_winetest.exe 7 optional
+modules\rostests\winetests\msi\msi_winetest.exe 7 optional
+modules\rostests\winetests\msvcrt\msvcrt_winetest.exe 7 optional
+modules\rostests\winetests\netapi32\netapi32_winetest.exe 7 optional
+modules\rostests\winetests\ntdll\ntdll_winetest.exe 7 optional
+modules\rostests\winetests\odbccp32\odbccp32_winetest.exe 7 optional
+modules\rostests\winetests\ole32\ole32_winetest.exe 7 optional
+modules\rostests\winetests\oleaut32\oleaut32_winetest.exe 7 optional
+modules\rostests\winetests\powrprof\powrprof_winetest.exe 7 optional
+modules\rostests\winetests\psapi\psapi_winetest.exe 7 optional
+modules\rostests\winetests\riched20\riched20_winetest.exe 7 optional
+modules\rostests\winetests\rpcrt4\rpcrt4_winetest.exe 7 optional
+modules\rostests\winetests\rsabase\rsabase_winetest.exe 7 optional
+modules\rostests\winetests\rsaenh\rsaenh_winetest.exe 7 optional
+modules\rostests\winetests\schannel\schannel_winetest.exe 7 optional
+modules\rostests\winetests\secur32\secur32_winetest.exe 7 optional
+modules\rostests\winetests\setupapi\setupapi_winetest.exe 7 optional
+modules\rostests\winetests\shdocvw\shdocvw_winetest.exe 7 optional
+modules\rostests\winetests\shell32\shell32_winetest.exe 7 optional
+modules\rostests\winetests\shlwapi\shlwapi_winetest.exe 7 optional
+modules\rostests\winetests\urlmon\urlmon_winetest.exe 7 optional
+modules\rostests\winetests\user32\user32_winetest.exe 7 optional
+modules\rostests\winetests\usp10\usp10_winetest.exe 7 optional
+modules\rostests\winetests\uxtheme\uxtheme_winetest.exe 7 optional
+modules\rostests\winetests\version\version_winetest.exe 7 optional
+modules\rostests\winetests\winhttp\winhttp_winetest.exe 7 optional
+modules\rostests\winetests\wininet\wininet_winetest.exe 7 optional
+modules\wallpaper\lake.bmp 4 optional
; Native libraries
-;modules\windows\mfc42.dll 1 optional
-;modules\windows\vmx_fb.dll 1 optional
-;modules\windows\vmx_mode.dll 1 optional
-;modules\windows\vmx_svga.sys 2 optional
-;modules\windows\vmx_svga.inf 6 optional
-;modules\windows\kvmnet.sys 2 optional
-;modules\windows\kvmnet.inf 6 optional
+modules\windows\mfc42.dll 1 optional
+modules\windows\vmx_fb.dll 1 optional
+modules\windows\vmx_mode.dll 1 optional
+modules\windows\vmx_svga.sys 2 optional
+modules\windows\vmx_svga.inf 6 optional
+modules\windows\kvmnet.sys 2 optional
+modules\windows\kvmnet.inf 6 optional
diff --git a/reactos/dll/3rdparty/dxtn/dxtn.rbuild b/reactos/dll/3rdparty/dxtn/dxtn.rbuild
index 0a30d6919a5..d16c584e9e5 100644
--- a/reactos/dll/3rdparty/dxtn/dxtn.rbuild
+++ b/reactos/dll/3rdparty/dxtn/dxtn.rbuild
@@ -2,11 +2,8 @@
.
-
- msvcrt
-
fxt1.c
dxtn.c
wrapper.c
texstore.c
-
\ No newline at end of file
+
diff --git a/reactos/dll/3rdparty/freetype/freetype.rbuild b/reactos/dll/3rdparty/freetype/freetype.rbuild
index 4a6fa0f6986..1ca3cf07b4c 100644
--- a/reactos/dll/3rdparty/freetype/freetype.rbuild
+++ b/reactos/dll/3rdparty/freetype/freetype.rbuild
@@ -1,6 +1,6 @@
-
+
include
@@ -15,7 +15,6 @@
ntoskrnl
- libcntpr
setjmplongjmp.s
diff --git a/reactos/dll/cpl/appwiz-new/appwiz.rbuild b/reactos/dll/cpl/appwiz-new/appwiz.rbuild
index 69d7ad08b97..6e1519d6d73 100644
--- a/reactos/dll/cpl/appwiz-new/appwiz.rbuild
+++ b/reactos/dll/cpl/appwiz-new/appwiz.rbuild
@@ -15,5 +15,4 @@
appwiz.c
createlink.c
appwiz.rc
- appwiz.spec
diff --git a/reactos/dll/cpl/appwiz/appwiz.rbuild b/reactos/dll/cpl/appwiz/appwiz.rbuild
index 76b8da0f21e..fb67d5a66b8 100644
--- a/reactos/dll/cpl/appwiz/appwiz.rbuild
+++ b/reactos/dll/cpl/appwiz/appwiz.rbuild
@@ -17,5 +17,4 @@
createlink.c
updates.c
appwiz.rc
- appwiz.spec
diff --git a/reactos/dll/cpl/desk/desk.rbuild b/reactos/dll/cpl/desk/desk.rbuild
index 6e074b2a832..c08264f0580 100644
--- a/reactos/dll/cpl/desk/desk.rbuild
+++ b/reactos/dll/cpl/desk/desk.rbuild
@@ -31,5 +31,4 @@
monslctl.c
general.c
desk.rc
- desk.spec
diff --git a/reactos/dll/cpl/desk/lang/sk-SK.rc b/reactos/dll/cpl/desk/lang/sk-SK.rc
index d84c2eab7e7..45370fc8399 100644
--- a/reactos/dll/cpl/desk/lang/sk-SK.rc
+++ b/reactos/dll/cpl/desk/lang/sk-SK.rc
@@ -1,9 +1,9 @@
/*
* FILE: dll/cpl/desk/lang/sk-SK.rc
* PURPOSE: Slovak Language File for desk
- * TRANSLATOR: Kario
+ * TRANSLATOR: Mбrio Kaиmбr aka Kario
* DATE OF TR.: 15-09-2007
- * LAST CHANGE: 11-07-2008
+ * LAST CHANGE: 05-10-2008
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@@ -39,12 +39,12 @@ BEGIN
COMBOBOX IDC_SCREENS_LIST, 14, 103, 100, 100, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "&Nastavenie",IDC_SCREENS_SETTINGS, 120, 103, 50, 13, WS_GROUP
PUSHBUTTON "&Ukбћka",IDC_SCREENS_TESTSC, 175, 103, 50, 13
- LTEXT "&Poиkaќ",IDC_WAITTEXT, 14, 125, 16, 9
- EDITTEXT IDC_SCREENS_TIMEDELAY, 34, 123, 32, 13, ES_RIGHT | WS_GROUP
+ LTEXT "&Poиkaќ",IDC_WAITTEXT, 14, 125, 20, 9
+ EDITTEXT IDC_SCREENS_TIMEDELAY, 38, 123, 32, 13, ES_RIGHT | WS_GROUP
CONTROL "",IDC_SCREENS_TIME ,UPDOWN_CLASS,UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS |
- WS_BORDER | WS_GROUP, 54, 123, 12, 13
- LTEXT "minъt", IDC_MINTEXT, 70, 125, 26, 9
+ WS_BORDER | WS_GROUP, 58, 123, 12, 13
+ LTEXT "minъt", IDC_MINTEXT, 74, 125, 26, 9
CONTROL "Pri obnovenн chrбniќ &heslom.",IDC_SCREENS_USEPASSCHK,"button",
BS_AUTOCHECKBOX | WS_TABSTOP, 108, 120, 104, 19
GROUPBOX "Napбjani&e monitora", IDC_SCREENS_DUMMY2, 6, 155, 232, 41
diff --git a/reactos/dll/cpl/input/input.rbuild b/reactos/dll/cpl/input/input.rbuild
index 6c8902b710c..e41bb38e7b3 100644
--- a/reactos/dll/cpl/input/input.rbuild
+++ b/reactos/dll/cpl/input/input.rbuild
@@ -14,5 +14,4 @@
add.c
changekeyseq.c
input.rc
- input.spec
diff --git a/reactos/dll/cpl/input/lang/uk-UA.rc b/reactos/dll/cpl/input/lang/uk-UA.rc
index 3cdd7a620bd..78a504d4245 100644
--- a/reactos/dll/cpl/input/lang/uk-UA.rc
+++ b/reactos/dll/cpl/input/lang/uk-UA.rc
@@ -10,17 +10,17 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
IDD_PROPPAGESETTINGS DIALOGEX 0, 0, 254, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Settings"
+CAPTION "Параметри"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Select the services that you want for each input language shown in the list.\nUse the Add and Remove buttons to modify this list.", -1, 9, 6, 238, 25
CONTROL "TEXT", IDC_KEYLAYOUT_LIST, "SYSLISTVIEW32", WS_BORDER | WS_VSCROLL | WS_TABSTOP | LVS_SORTASCENDING | LVS_REPORT | 0x0000808D, 8, 36, 237, 101
- PUSHBUTTON "&Set Default", IDC_SET_DEFAULT, 101, 159, 144, 14
- PUSHBUTTON "A&dd...", IDC_ADD_BUTTON, 27, 142, 70, 14
- PUSHBUTTON "&Remove...", IDC_REMOVE_BUTTON, 101, 142, 70, 14
- PUSHBUTTON "&Properties...", IDC_PROP_BUTTON, 175, 142, 70, 14
- GROUPBOX "Preferences", -1, 7, 185, 240, 36
- PUSHBUTTON "&Key Settings...", IDC_KEY_SET_BTN, 14, 198, 110, 14
+ PUSHBUTTON "Замов&чування", IDC_SET_DEFAULT, 101, 159, 144, 14
+ PUSHBUTTON "&Додати...", IDC_ADD_BUTTON, 27, 142, 70, 14
+ PUSHBUTTON "В&идалити...", IDC_REMOVE_BUTTON, 101, 142, 70, 14
+ PUSHBUTTON "В&ластивості...", IDC_PROP_BUTTON, 175, 142, 70, 14
+ GROUPBOX "Настройка", -1, 7, 185, 240, 36
+ PUSHBUTTON "&Параметри клавіатури...", IDC_KEY_SET_BTN, 14, 198, 110, 14
END
IDD_KEYSETTINGS DIALOGEX 0, 0, 272, 163
@@ -55,22 +55,22 @@ END
IDD_CHANGE_KEY_SEQ DIALOGEX 5, 100, 230, 125
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
-CAPTION "Change Key Sequence"
+CAPTION "Зміна сполучення клавіш"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "", -1, 9, 5, 155, 110
- AUTOCHECKBOX "&Switch input languages", IDC_SWITCH_INPUT_LANG_CB, 15, 15, 105, 12
+ AUTOCHECKBOX "&Переключати мови ввод", IDC_SWITCH_INPUT_LANG_CB, 15, 15, 105, 12
LTEXT "Shift", -1, 73, 37, 27, 12
CTEXT "+", -1, 62, 37, 8, 9
AUTORADIOBUTTON "&Ctrl", IDC_CTRL_LANG, 29, 31, 30, 11
- AUTORADIOBUTTON "Left &ALT", IDC_LEFT_ALT_LANG, 29, 45, 46, 12
- AUTOCHECKBOX "S&witch keyboard layouts", IDC_SWITCH_KBLAYOUTS_CB, 16, 65, 141, 12
+ AUTORADIOBUTTON "ALT з&ліва", IDC_LEFT_ALT_LANG, 29, 45, 46, 12
+ AUTOCHECKBOX "Пере&ключати розкладки клавіатури", IDC_SWITCH_KBLAYOUTS_CB, 16, 65, 141, 12
LTEXT "Shift", -1, 74, 87, 27, 12
CTEXT "+", -1, 63, 87, 8, 9
AUTORADIOBUTTON "C&trl", IDC_CTRL_LAYOUT, 30, 81, 30, 11
- AUTORADIOBUTTON "Left A<", IDC_LEFT_ALT_LAYOUT, 30, 95, 44, 12
+ AUTORADIOBUTTON "ALT &зліва", IDC_LEFT_ALT_LAYOUT, 30, 95, 44, 12
DEFPUSHBUTTON "OK", IDOK, 172, 9, 50, 14
- PUSHBUTTON "Cancel", IDCANCEL, 172, 27, 50, 14
+ PUSHBUTTON "Скасувати", IDCANCEL, 172, 27, 50, 14
END
IDD_INPUT_LANG_PROP DIALOGEX 20, 20, 227, 75
@@ -96,15 +96,15 @@ BEGIN
IDS_UNKNOWN "(Немає даних)"
IDS_RESTART "Ви дійсно бажаєте перезавантажити комп'ютер зараз?"
IDS_WHATS_THIS "Що це?"
- IDS_LANGUAGE "Language"
- IDS_LAYOUT "Keyboard Layout"
- IDS_REM_QUESTION "Do you want to remove selected keyboard layout?"
- IDS_CONFIRMATION "Confirmation"
- IDS_LAYOUT_EXISTS "This layout already exists."
- IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
+ IDS_LANGUAGE "Мова"
+ IDS_LAYOUT "Розкладка клавіатури"
+ IDS_REM_QUESTION "Ви дійсно хочете видалити вибрану розкладку клавіатури?"
+ IDS_CONFIRMATION "Підтвердження"
+ IDS_LAYOUT_EXISTS "Ця розкладка вже існує."
+ IDS_LAYOUT_EXISTS2 "Ця розкладка вже існує і не може бути додана."
IDS_CTRL_SHIFT "Ctrl+Shift"
- IDS_LEFT_ALT_SHIFT "Left Alt+Shift"
- IDS_SWITCH_BET_INLANG "Switch between input languages"
+ IDS_LEFT_ALT_SHIFT "Alt зліва+Shift"
+ IDS_SWITCH_BET_INLANG "Переключення мов вводу"
END
STRINGTABLE
@@ -241,10 +241,10 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Мальдівська (друкарська машинка)"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Болгарська фонетична (класична)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Болгарська фонетична (BDS)"
- IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
- IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
- IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
- IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
- IDS_BURMESE_LAYOUT, "Burmese"
- IDS_UKRAINIAN_STUDENT_LAYOUT, "Ukrainian (Student)"
+ IDS_BULGARIAN_BDS_LAYOUT, "Болгарська BDS 5237-1978"
+ IDS_GERMAN_RISTOME_LAYOUT, "Німецька (RISTOME)"
+ IDS_GERMAN_NEO_11_LAYOUT, "Німецька (NEO-1.1)"
+ IDS_GERMAN_DE_ERGO_LAYOUT, "Німецька (de_ergo)"
+ IDS_BURMESE_LAYOUT, "Бірманська"
+ IDS_UKRAINIAN_STUDENT_LAYOUT, "Українська (студентська)"
END
diff --git a/reactos/dll/cpl/intl/intl.rbuild b/reactos/dll/cpl/intl/intl.rbuild
index 14db686a97e..469c1d8bcf9 100644
--- a/reactos/dll/cpl/intl/intl.rbuild
+++ b/reactos/dll/cpl/intl/intl.rbuild
@@ -8,7 +8,6 @@
comctl32
advapi32
setupapi
- msvcrt
shell32
currency.c
date.c
@@ -22,5 +21,4 @@
advanced.c
sort.c
intl.rc
- intl.spec
diff --git a/reactos/dll/cpl/joy/joy.rbuild b/reactos/dll/cpl/joy/joy.rbuild
index 9dfcc2adaa7..89b60137f61 100644
--- a/reactos/dll/cpl/joy/joy.rbuild
+++ b/reactos/dll/cpl/joy/joy.rbuild
@@ -12,5 +12,4 @@
shell32
joy.c
joy.rc
- joy.spec
diff --git a/reactos/dll/cpl/main/lang/uk-UA.rc b/reactos/dll/cpl/main/lang/uk-UA.rc
index 992bed618b5..294ae12836a 100644
--- a/reactos/dll/cpl/main/lang/uk-UA.rc
+++ b/reactos/dll/cpl/main/lang/uk-UA.rc
@@ -176,5 +176,5 @@ BEGIN
IDS_REMOVE_TEXT "Ви дійсно бажаєте видалити схему '%s' із системи?"
IDS_OVERWRITE_TITLE "Підтвердження заміни схеми"
IDS_OVERWRITE_TEXT "Вибрана схема вказівників уже використовується. Замінити вихідну схему?"
- IDS_ANIMATE_CURSOR "Animated Cursor"
+ IDS_ANIMATE_CURSOR "Анімований вказівник"
END
diff --git a/reactos/dll/cpl/main/main.rbuild b/reactos/dll/cpl/main/main.rbuild
index 2084203b35d..5a6d2804df4 100644
--- a/reactos/dll/cpl/main/main.rbuild
+++ b/reactos/dll/cpl/main/main.rbuild
@@ -15,5 +15,4 @@
main.c
mouse.c
main.rc
- main.spec
diff --git a/reactos/dll/cpl/mmsys/sounds.c b/reactos/dll/cpl/mmsys/sounds.c
index d30371bb87b..5f3596c2d96 100644
--- a/reactos/dll/cpl/mmsys/sounds.c
+++ b/reactos/dll/cpl/mmsys/sounds.c
@@ -648,35 +648,35 @@ LoadSoundProfiles(HWND hwndDlg)
BOOL
LoadSoundFiles(HWND hwndDlg)
{
- TCHAR szPath[MAX_PATH];
- TCHAR szNone[MAX_PATH];
- TCHAR * ptr;
- WIN32_FIND_DATA FileData;
+ WCHAR szPath[MAX_PATH];
+ WCHAR * ptr;
+ WIN32_FIND_DATAW FileData;
HANDLE hFile;
LRESULT lResult;
UINT length;
- length = GetWindowsDirectory(szPath, sizeof(szPath) / sizeof(TCHAR));
- if (length == 0 || length > (sizeof(szPath) / sizeof(TCHAR)))
+ length = GetWindowsDirectoryW(szPath, MAX_PATH);
+ if (length == 0 || length >= MAX_PATH - 9)
{
return FALSE;
}
- if (szPath[length-1] != _T('\\'))
+ if (szPath[length-1] != L'\\')
{
- szPath[length] = _T('\\');
+ szPath[length] = L'\\';
length++;
}
- _tcscpy(&szPath[length], _T("media\\*"));
+ wcscpy(&szPath[length], L"media\\*");
length += 7;
- hFile = FindFirstFile(szPath, &FileData);
+ hFile = FindFirstFileW(szPath, &FileData);
if (hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}
- if (LoadString(hApplet, IDS_NO_SOUND, szNone, MAX_PATH))
+ if (LoadString(hApplet, IDS_NO_SOUND, szPath, MAX_PATH))
{
- SendDlgItemMessage(hwndDlg, IDC_SOUND_LIST, CB_ADDSTRING, (WPARAM)0, (LPARAM)szNone);
+ szPath[(sizeof(szPath)/sizeof(WCHAR))-1] = L'\0';
+ SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_ADDSTRING, (WPARAM)0, (LPARAM)szPath);
}
do
@@ -684,7 +684,7 @@ LoadSoundFiles(HWND hwndDlg)
if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
continue;
- ptr = _tcsrchr(FileData.cFileName, _T('\\'));
+ ptr = wcsrchr(FileData.cFileName, L'\\');
if (ptr)
{
ptr++;
@@ -693,13 +693,13 @@ LoadSoundFiles(HWND hwndDlg)
{
ptr = FileData.cFileName;
}
- lResult = SendDlgItemMessage(hwndDlg, IDC_SOUND_LIST, CB_ADDSTRING, (WPARAM)0, (LPARAM)ptr);
+ lResult = SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_ADDSTRING, (WPARAM)0, (LPARAM)ptr);
if (lResult != CB_ERR)
{
- _tcscpy(&szPath[length-1], FileData.cFileName);
- SendDlgItemMessage(hwndDlg, IDC_SOUND_LIST, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)_tcsdup(szPath));
+ wcscpy(&szPath[length-1], FileData.cFileName);
+ SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)wcsdup(szPath));
}
- }while(FindNextFile(hFile, &FileData) != 0);
+ }while(FindNextFileW(hFile, &FileData) != 0);
FindClose(hFile);
return TRUE;
diff --git a/reactos/dll/cpl/ncpa/ncpa.rbuild b/reactos/dll/cpl/ncpa/ncpa.rbuild
index 86559595297..7f3ff1437fc 100644
--- a/reactos/dll/cpl/ncpa/ncpa.rbuild
+++ b/reactos/dll/cpl/ncpa/ncpa.rbuild
@@ -10,5 +10,4 @@
advapi32
shell32
ncpa.c
- ncpa.spec
diff --git a/reactos/dll/cpl/odbccp32/odbccp32.rbuild b/reactos/dll/cpl/odbccp32/odbccp32.rbuild
index dd29bee1a31..2137e029d0a 100644
--- a/reactos/dll/cpl/odbccp32/odbccp32.rbuild
+++ b/reactos/dll/cpl/odbccp32/odbccp32.rbuild
@@ -8,5 +8,4 @@
comctl32
odbccp32.c
odbccp32.rc
- odbccp32.spec
diff --git a/reactos/dll/cpl/powercfg/powercfg.rbuild b/reactos/dll/cpl/powercfg/powercfg.rbuild
index 5dc6964752b..474cd142f40 100644
--- a/reactos/dll/cpl/powercfg/powercfg.rbuild
+++ b/reactos/dll/cpl/powercfg/powercfg.rbuild
@@ -16,5 +16,4 @@
advanced.c
hibernate.c
powercfg.rc
- powercfg.spec
diff --git a/reactos/dll/cpl/sysdm/lang/sk-SK.rc b/reactos/dll/cpl/sysdm/lang/sk-SK.rc
index 24bbb596d13..3cd1219727e 100644
--- a/reactos/dll/cpl/sysdm/lang/sk-SK.rc
+++ b/reactos/dll/cpl/sysdm/lang/sk-SK.rc
@@ -1,8 +1,9 @@
/*
* FILE: dll/cpl/sysdm/lang/sk-SK.rc
* PURPOSE: Slovak Language File for sysdm
- * TRANSLATOR: Kario
+ * TRANSLATOR: Mбrio Kaиmбr aka Kario
* DATE OF TR.: 20-09-2007
+ * LAST CHANGE: 16-10-2009
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@@ -125,7 +126,7 @@ FONT 8, "MS Shell Dlg"
BEGIN
ICON IDI_USERPROF, IDC_STATIC, 6, 11, 16, 16, SS_ICON
LTEXT "Pouћнvateѕskй profily obsahujъ nastavenia pracovnej plochy a inй informбcie tэkajъce sa pouћнvateѕskйho konta. Na kaћdom pouћнvanom poинtaиi je moћnй vytvoriќ inэ profil alebo je moћnй vybraќ zdieѕanэ profil, ktorэ je rovnakэ na vљetkэch pouћнvanэch poинtaиoch.",
- IDC_STATIC, 40, 11, 204, 35
+ IDC_STATIC, 40, 11, 204, 44
LTEXT "&Profily uloћenй na tomto poинtaиi:", IDC_STATIC, 16, 51, 204, 9
CONTROL "", IDC_USERPROFILE_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,
6, 66, 244, 85, WS_EX_CLIENTEDGE
@@ -149,11 +150,11 @@ BEGIN
LTEXT "Predvolenэ operaиnэ &systйm:", IDC_STATIC, 14, 26, 100, 8
COMBOBOX IDC_STRECOSCOMBO, 14, 37, 224, 46, CBS_DROPDOWNLIST
AUTOCHECKBOX "&Zobraziќ zoznam operaиnэch systйmov na:", IDC_STRECLIST, 14, 56, 150, 8
- EDITTEXT IDC_STRRECLISTEDIT, 179, 54, 30, 12, ES_NUMBER
+ EDITTEXT IDC_STRRECLISTEDIT, 183, 54, 30, 12, ES_NUMBER
CONTROL "", IDC_STRRECLISTUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13
LTEXT "sekъnd", IDC_STATIC, 215, 56, 25, 8
- AUTOCHECKBOX "Ak sъ &potrebnй moћnosti obnovenia, zobraziќ ich na:", IDC_STRRECREC, 14, 70, 163, 8
- EDITTEXT IDC_STRRECRECEDIT, 179, 68, 30, 12, ES_NUMBER
+ AUTOCHECKBOX "Ak sъ &potrebnй moћnosti obnovenia, zobraziќ ich na:", IDC_STRRECREC, 14, 70, 167, 8
+ EDITTEXT IDC_STRRECRECEDIT, 183, 68, 30, 12, ES_NUMBER
CONTROL "", IDC_STRRECRECUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13
LTEXT "sekъnd", IDC_STATIC, 215, 70, 25, 8
LTEXT "Ak chcete manuбlne upraviќ sъbor s moћnosќami spustenia systйmu, kliknite na tlaиidlo Upraviќ.", IDC_STATIC, 14, 89, 187, 8
@@ -180,29 +181,29 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS
CAPTION "Virtuбlna pamдќ"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
- LTEXT "Jednotka [menovka zvдzku]", IDC_STATIC, 12, 5, 96, 9
- LTEXT "Veѕkosќ strбnkovacieho sъboru (v MB)", IDC_STATIC, 115, 5, 96, 9
+ LTEXT "Jednotka [menovka zvдzku]", IDC_STATIC, 10, 5, 96, 9
+ LTEXT "Veѕkosќ strбnkovacieho sъboru (v MB)", IDC_STATIC, 112, 5, 96, 9
LISTBOX IDC_PAGEFILELIST, 10, 16, 204, 52, LBS_NOTIFY | LBS_USETABSTOPS
GROUPBOX "Veѕkosќ strбnkovacieho sъboru pre vybranъ jednotku", IDC_DRIVEGROUP, 10, 70, 204, 104
- LTEXT "Jednotka:", IDC_STATIC, 20, 80, 20, 8
+ LTEXT "Jednotka:", IDC_STATIC, 20, 80, 30, 8
LTEXT "", IDC_DRIVE, 88, 81, 100, 9
LTEXT "Dostupnй miesto:", IDC_STATIC, 20, 92, 56, 9
LTEXT "", IDC_SPACEAVAIL, 88, 92, 104, 9
- LTEXT "&Poиiatoиnб veѕkosќ (v MB):", -1, 22, 118, 54, 9
- LTEXT "Ma&ximбlna veѕkosќ (v MB):", -1, 22, 131, 64, 9
- AUTORADIOBUTTON "&Vlastnб veѕkosќ:", IDC_CUSTOM, 20, 105, 54, 9, WS_GROUP
- AUTORADIOBUTTON "Veѕkosќ urиovanб &systйmom", IDC_SYSMANSIZE, 20, 145, 88, 9
- AUTORADIOBUTTON "N&epouћнvaќ strбnkovacн sъbor", IDC_NOPAGEFILE, 20, 158, 78,9
+ LTEXT "&Poиiatoиnб veѕkosќ (v MB):", -1, 22, 118, 74, 9
+ LTEXT "Ma&ximбlna veѕkosќ (v MB):", -1, 22, 131, 74, 9
+ AUTORADIOBUTTON "&Vlastnб veѕkosќ:", IDC_CUSTOM, 20, 105, 74, 9, WS_GROUP
+ AUTORADIOBUTTON "Veѕkosќ urиovanб &systйmom", IDC_SYSMANSIZE, 20, 145, 98, 9
+ AUTORADIOBUTTON "N&epouћнvaќ strбnkovacн sъbor", IDC_NOPAGEFILE, 20, 158, 108,9
EDITTEXT IDC_INITIALSIZE, 100, 114, 44, 13, NOT WS_BORDER, WS_EX_CLIENTEDGE
EDITTEXT IDC_MAXSIZE, 100, 129, 44, 13, NOT WS_BORDER, WS_EX_CLIENTEDGE
PUSHBUTTON "&Nastaviќ", IDC_SET, 158, 155, 50, 14
GROUPBOX "Celkovб veѕkosќ strбnkovacieho sъboru pre vљetky jednotky", IDC_TOTALGROUP, 10, 177, 204, 46
- LTEXT "Najmenљia povolenб:", IDC_STATIC, 18, 188, 58, 9
+ LTEXT "Najmenљia povolenб:", IDC_STATIC, 18, 188, 78, 9
LTEXT "", IDC_MINIMUM, 88, 188, 100, 9
LTEXT "Odporъиanб:", IDC_STATIC, 18, 199, 52, 9
LTEXT "", IDC_RECOMMENDED, 88, 197, 100, 9
- LTEXT "Aktuбlne vyhradenб:", IDC_STATIC, 18, 210, 66, 9
+ LTEXT "Aktuбlne vyhradenб:", IDC_STATIC, 18, 210, 76, 9
LTEXT "", IDC_CURRENT, 88, 208, 100, 9
DEFPUSHBUTTON "OK", IDOK, 114, 232, 48, 14
diff --git a/reactos/dll/cpl/sysdm/precomp.h b/reactos/dll/cpl/sysdm/precomp.h
index 3236bf4039d..3ef2ee0d259 100644
--- a/reactos/dll/cpl/sysdm/precomp.h
+++ b/reactos/dll/cpl/sysdm/precomp.h
@@ -69,9 +69,9 @@ typedef struct _VIRTMEM
typedef struct _BOOTRECORD
{
DWORD BootType;
- TCHAR szSectionName[128];
- TCHAR szBootPath[MAX_PATH];
- TCHAR szOptions[512];
+ WCHAR szSectionName[128];
+ WCHAR szBootPath[MAX_PATH];
+ WCHAR szOptions[512];
}BOOTRECORD, *PBOOTRECORD;
diff --git a/reactos/dll/cpl/sysdm/startrec.c b/reactos/dll/cpl/sysdm/startrec.c
index b24b4f8ca98..6fe10194745 100644
--- a/reactos/dll/cpl/sysdm/startrec.c
+++ b/reactos/dll/cpl/sysdm/startrec.c
@@ -12,9 +12,9 @@
typedef struct _STARTINFO
{
- TCHAR szFreeldrIni[MAX_PATH + 15];
- TCHAR szDumpFile[MAX_PATH];
- TCHAR szMinidumpDir[MAX_PATH];
+ WCHAR szFreeldrIni[MAX_PATH + 15];
+ WCHAR szDumpFile[MAX_PATH];
+ WCHAR szMinidumpDir[MAX_PATH];
DWORD dwCrashDumpEnabled;
INT iFreeLdrIni;
} STARTINFO, *PSTARTINFO;
@@ -33,8 +33,8 @@ SetTimeout(HWND hwndDlg, INT Timeout)
EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECLISTUPDWN), TRUE);
EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECLISTEDIT), TRUE);
}
- SendDlgItemMessage(hwndDlg, IDC_STRRECLISTUPDWN, UDM_SETRANGE, (WPARAM) 0, (LPARAM) MAKELONG((short) 999, 0));
- SendDlgItemMessage(hwndDlg, IDC_STRRECLISTUPDWN, UDM_SETPOS, (WPARAM) 0, (LPARAM) MAKELONG((short) Timeout, 0));
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECLISTUPDWN, UDM_SETRANGE, (WPARAM) 0, (LPARAM) MAKELONG((short) 999, 0));
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECLISTUPDWN, UDM_SETPOS, (WPARAM) 0, (LPARAM) MAKELONG((short) Timeout, 0));
}
static VOID
@@ -50,33 +50,33 @@ SetRecoveryTimeout(HWND hwndDlg, INT Timeout)
EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECRECUPDWN), TRUE);
EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECRECEDIT), TRUE);
}
- SendDlgItemMessage(hwndDlg, IDC_STRRECRECUPDWN, UDM_SETRANGE, (WPARAM) 0, (LPARAM) MAKELONG((short) 999, 0));
- SendDlgItemMessage(hwndDlg, IDC_STRRECRECUPDWN, UDM_SETPOS, (WPARAM) 0, (LPARAM) MAKELONG((short) Timeout, 0));
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECRECUPDWN, UDM_SETRANGE, (WPARAM) 0, (LPARAM) MAKELONG((short) 999, 0));
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECRECUPDWN, UDM_SETPOS, (WPARAM) 0, (LPARAM) MAKELONG((short) Timeout, 0));
}
static DWORD
-GetSystemDrive(TCHAR **szSystemDrive)
+GetSystemDrive(WCHAR **szSystemDrive)
{
DWORD dwBufSize;
/* get Path to freeldr.ini or boot.ini */
- *szSystemDrive = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(TCHAR));
+ *szSystemDrive = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
if (szSystemDrive != NULL)
{
- dwBufSize = GetEnvironmentVariable(_T("SystemDrive"), *szSystemDrive, MAX_PATH);
+ dwBufSize = GetEnvironmentVariableW(L"SystemDrive", *szSystemDrive, MAX_PATH);
if (dwBufSize > MAX_PATH)
{
- TCHAR *szTmp;
+ WCHAR *szTmp;
DWORD dwBufSize2;
- szTmp = HeapReAlloc(GetProcessHeap(), 0, *szSystemDrive, dwBufSize * sizeof(TCHAR));
+ szTmp = HeapReAlloc(GetProcessHeap(), 0, *szSystemDrive, dwBufSize * sizeof(WCHAR));
if (szTmp == NULL)
goto FailGetSysDrive;
*szSystemDrive = szTmp;
- dwBufSize2 = GetEnvironmentVariable(_T("SystemDrive"), *szSystemDrive, dwBufSize);
+ dwBufSize2 = GetEnvironmentVariableW(L"SystemDrive", *szSystemDrive, dwBufSize);
if (dwBufSize2 > dwBufSize || dwBufSize2 == 0)
goto FailGetSysDrive;
}
@@ -95,15 +95,15 @@ FailGetSysDrive:
}
static PBOOTRECORD
-ReadFreeldrSection(HINF hInf, TCHAR *szSectionName)
+ReadFreeldrSection(HINF hInf, WCHAR *szSectionName)
{
PBOOTRECORD pRecord;
INFCONTEXT InfContext;
- TCHAR szName[MAX_PATH];
- TCHAR szValue[MAX_PATH];
+ WCHAR szName[MAX_PATH];
+ WCHAR szValue[MAX_PATH];
DWORD LineLength;
- if (!SetupFindFirstLine(hInf,
+ if (!SetupFindFirstLineW(hInf,
szSectionName,
NULL,
&InfContext))
@@ -118,31 +118,31 @@ ReadFreeldrSection(HINF hInf, TCHAR *szSectionName)
return NULL;
}
- _tcscpy(pRecord->szSectionName, szSectionName);
+ wcscpy(pRecord->szSectionName, szSectionName);
do
{
- if (!SetupGetStringField(&InfContext,
+ if (!SetupGetStringFieldW(&InfContext,
0,
szName,
- sizeof(szName) / sizeof(TCHAR),
+ sizeof(szName) / sizeof(WCHAR),
&LineLength))
{
break;
}
- if (!SetupGetStringField(&InfContext,
+ if (!SetupGetStringFieldW(&InfContext,
1,
szValue,
- sizeof(szValue) / sizeof(TCHAR),
+ sizeof(szValue) / sizeof(WCHAR),
&LineLength))
{
break;
}
- if (!_tcsnicmp(szName, _T("BootType"), 8))
+ if (!wcsnicmp(szName, L"BootType", 8))
{
- if (!_tcsnicmp(szValue, _T("ReactOS"), 7))
+ if (!wcsnicmp(szValue, L"ReactOS", 7))
{
//FIXME store as enum
pRecord->BootType = 1;
@@ -152,14 +152,14 @@ ReadFreeldrSection(HINF hInf, TCHAR *szSectionName)
pRecord->BootType = 0;
}
}
- else if (!_tcsnicmp(szName, _T("SystemPath"), 10))
+ else if (!wcsnicmp(szName, L"SystemPath", 10))
{
- _tcscpy(pRecord->szBootPath, szValue);
+ wcscpy(pRecord->szBootPath, szValue);
}
- else if (!_tcsnicmp(szName, _T("Options"), 7))
+ else if (!wcsnicmp(szName, L"Options", 7))
{
//FIXME store flags as values
- _tcscpy(pRecord->szOptions, szValue);
+ wcscpy(pRecord->szOptions, szValue);
}
}
@@ -174,35 +174,35 @@ LoadFreeldrSettings(HINF hInf, HWND hwndDlg)
{
INFCONTEXT InfContext;
PBOOTRECORD pRecord;
- TCHAR szDefaultOs[MAX_PATH];
- TCHAR szName[MAX_PATH];
- TCHAR szValue[MAX_PATH];
+ WCHAR szDefaultOs[MAX_PATH];
+ WCHAR szName[MAX_PATH];
+ WCHAR szValue[MAX_PATH];
DWORD LineLength;
DWORD TimeOut;
LRESULT lResult;
- if (!SetupFindFirstLine(hInf,
- _T("FREELOADER"),
- _T("DefaultOS"),
+ if (!SetupFindFirstLineW(hInf,
+ L"FREELOADER",
+ L"DefaultOS",
&InfContext))
{
/* failed to find default os */
return FALSE;
}
- if (!SetupGetStringField(&InfContext,
+ if (!SetupGetStringFieldW(&InfContext,
1,
szDefaultOs,
- sizeof(szDefaultOs) / sizeof(TCHAR),
+ sizeof(szDefaultOs) / sizeof(WCHAR),
&LineLength))
{
/* no key */
return FALSE;
}
- if (!SetupFindFirstLine(hInf,
- _T("FREELOADER"),
- _T("TimeOut"),
+ if (!SetupFindFirstLineW(hInf,
+ L"FREELOADER",
+ L"TimeOut",
&InfContext))
{
/* expected to find timeout value */
@@ -218,8 +218,8 @@ LoadFreeldrSettings(HINF hInf, HWND hwndDlg)
return FALSE;
}
- if (!SetupFindFirstLine(hInf,
- _T("Operating Systems"),
+ if (!SetupFindFirstLineW(hInf,
+ L"Operating Systems",
NULL,
&InfContext))
{
@@ -229,20 +229,20 @@ LoadFreeldrSettings(HINF hInf, HWND hwndDlg)
do
{
- if (!SetupGetStringField(&InfContext,
+ if (!SetupGetStringFieldW(&InfContext,
0,
szName,
- sizeof(szName) / sizeof(TCHAR),
+ sizeof(szName) / sizeof(WCHAR),
&LineLength))
{
/* the ini file is messed up */
return FALSE;
}
- if (!SetupGetStringField(&InfContext,
+ if (!SetupGetStringFieldW(&InfContext,
1,
szValue,
- sizeof(szValue) / sizeof(TCHAR),
+ sizeof(szValue) / sizeof(WCHAR),
&LineLength))
{
/* the ini file is messed up */
@@ -252,14 +252,14 @@ LoadFreeldrSettings(HINF hInf, HWND hwndDlg)
pRecord = ReadFreeldrSection(hInf, szName);
if (pRecord)
{
- lResult = SendDlgItemMessage(hwndDlg, IDC_STRECOSCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM)szValue);
+ lResult = SendDlgItemMessageW(hwndDlg, IDC_STRECOSCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM)szValue);
if (lResult != CB_ERR)
{
- SendDlgItemMessage(hwndDlg, IDC_STRECOSCOMBO, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)pRecord);
- if (!_tcscmp(szDefaultOs, szName))
+ SendDlgItemMessageW(hwndDlg, IDC_STRECOSCOMBO, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)pRecord);
+ if (!wcscmp(szDefaultOs, szName))
{
/* we store the friendly name as key */
- _tcscpy(szDefaultOs, szValue);
+ wcscpy(szDefaultOs, szValue);
}
}
else
@@ -271,16 +271,16 @@ LoadFreeldrSettings(HINF hInf, HWND hwndDlg)
while (SetupFindNextLine(&InfContext, &InfContext));
/* find default os in list */
- lResult = SendDlgItemMessage(hwndDlg, IDC_STRECOSCOMBO, CB_FINDSTRING, (WPARAM)-1, (LPARAM)szDefaultOs);
+ lResult = SendDlgItemMessageW(hwndDlg, IDC_STRECOSCOMBO, CB_FINDSTRING, (WPARAM)-1, (LPARAM)szDefaultOs);
if (lResult != CB_ERR)
{
/* set cur sel */
- SendDlgItemMessage(hwndDlg, IDC_STRECOSCOMBO, CB_SETCURSEL, (WPARAM)lResult, (LPARAM)0);
+ SendDlgItemMessageW(hwndDlg, IDC_STRECOSCOMBO, CB_SETCURSEL, (WPARAM)lResult, (LPARAM)0);
}
if(TimeOut)
{
- SendDlgItemMessage(hwndDlg, IDC_STRECLIST, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
+ SendDlgItemMessageW(hwndDlg, IDC_STRECLIST, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
SetTimeout(hwndDlg, TimeOut);
@@ -292,17 +292,17 @@ static INT
LoadBootSettings(HINF hInf, HWND hwndDlg)
{
INFCONTEXT InfContext;
- TCHAR szName[MAX_PATH];
- TCHAR szValue[MAX_PATH];
+ WCHAR szName[MAX_PATH];
+ WCHAR szValue[MAX_PATH];
DWORD LineLength;
DWORD TimeOut = 0;
- TCHAR szDefaultOS[MAX_PATH];
- TCHAR szOptions[MAX_PATH];
+ WCHAR szDefaultOS[MAX_PATH];
+ WCHAR szOptions[MAX_PATH];
PBOOTRECORD pRecord;
LRESULT lResult;
- if(!SetupFindFirstLine(hInf,
- _T("boot loader"),
+ if(!SetupFindFirstLineW(hInf,
+ L"boot loader",
NULL,
&InfContext))
{
@@ -311,39 +311,39 @@ LoadBootSettings(HINF hInf, HWND hwndDlg)
do
{
- if (!SetupGetStringField(&InfContext,
+ if (!SetupGetStringFieldW(&InfContext,
0,
szName,
- sizeof(szName) / sizeof(TCHAR),
+ sizeof(szName) / sizeof(WCHAR),
&LineLength))
{
return FALSE;
}
- if (!SetupGetStringField(&InfContext,
+ if (!SetupGetStringFieldW(&InfContext,
1,
szValue,
- sizeof(szValue) / sizeof(TCHAR),
+ sizeof(szValue) / sizeof(WCHAR),
&LineLength))
{
return FALSE;
}
- if (!_tcsnicmp(szName, _T("timeout"), 7))
+ if (!wcsnicmp(szName, L"timeout", 7))
{
- TimeOut = _ttoi(szValue);
+ TimeOut = _wtoi(szValue);
}
- if (!_tcsnicmp(szName, _T("default"), 7))
+ if (!wcsnicmp(szName, L"default", 7))
{
- _tcscpy(szDefaultOS, szValue);
+ wcscpy(szDefaultOS, szValue);
}
}
while (SetupFindNextLine(&InfContext, &InfContext));
- if (!SetupFindFirstLine(hInf,
- _T("operating systems"),
+ if (!SetupFindFirstLineW(hInf,
+ L"operating systems",
NULL,
&InfContext))
{
@@ -353,48 +353,48 @@ LoadBootSettings(HINF hInf, HWND hwndDlg)
do
{
- if (!SetupGetStringField(&InfContext,
+ if (!SetupGetStringFieldW(&InfContext,
0,
szName,
- sizeof(szName) / sizeof(TCHAR),
+ sizeof(szName) / sizeof(WCHAR),
&LineLength))
{
return FALSE;
}
- if (!SetupGetStringField(&InfContext,
+ if (!SetupGetStringFieldW(&InfContext,
1,
szValue,
- sizeof(szValue) / sizeof(TCHAR),
+ sizeof(szValue) / sizeof(WCHAR),
&LineLength))
{
return FALSE;
}
- SetupGetStringField(&InfContext,
+ SetupGetStringFieldW(&InfContext,
2,
szOptions,
- sizeof(szOptions) / sizeof(TCHAR),
+ sizeof(szOptions) / sizeof(WCHAR),
&LineLength);
pRecord = (PBOOTRECORD) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BOOTRECORD));
if (pRecord)
{
pRecord->BootType = 0;
- _tcscpy(pRecord->szBootPath, szName);
- _tcscpy(pRecord->szSectionName, szValue);
- _tcscpy(pRecord->szOptions, szOptions);
+ wcscpy(pRecord->szBootPath, szName);
+ wcscpy(pRecord->szSectionName, szValue);
+ wcscpy(pRecord->szOptions, szOptions);
- if (!_tcscmp(szName, szDefaultOS))
+ if (!wcscmp(szName, szDefaultOS))
{
/* ms boot ini stores the path not the friendly name */
- _tcscpy(szDefaultOS, szValue);
+ wcscpy(szDefaultOS, szValue);
}
- lResult = SendDlgItemMessage(hwndDlg, IDC_STRECOSCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM)szValue);
+ lResult = SendDlgItemMessageW(hwndDlg, IDC_STRECOSCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM)szValue);
if (lResult != CB_ERR)
{
- SendDlgItemMessage(hwndDlg, IDC_STRECOSCOMBO, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)pRecord);
+ SendDlgItemMessageW(hwndDlg, IDC_STRECOSCOMBO, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)pRecord);
}
else
{
@@ -406,16 +406,16 @@ LoadBootSettings(HINF hInf, HWND hwndDlg)
while (SetupFindNextLine(&InfContext, &InfContext));
/* find default os in list */
- lResult = SendDlgItemMessage(hwndDlg, IDC_STRECOSCOMBO, CB_FINDSTRING, (WPARAM)0, (LPARAM)szDefaultOS);
+ lResult = SendDlgItemMessageW(hwndDlg, IDC_STRECOSCOMBO, CB_FINDSTRING, (WPARAM)0, (LPARAM)szDefaultOS);
if (lResult != CB_ERR)
{
/* set cur sel */
- SendDlgItemMessage(hwndDlg, IDC_STRECOSCOMBO, CB_SETCURSEL, (WPARAM)lResult, (LPARAM)0);
+ SendDlgItemMessageW(hwndDlg, IDC_STRECOSCOMBO, CB_SETCURSEL, (WPARAM)lResult, (LPARAM)0);
}
if(TimeOut)
{
- SendDlgItemMessage(hwndDlg, IDC_STRECLIST, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
+ SendDlgItemMessageW(hwndDlg, IDC_STRECLIST, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
SetTimeout(hwndDlg, TimeOut);
@@ -430,40 +430,40 @@ DeleteBootRecords(HWND hwndDlg)
LONG index;
PBOOTRECORD pRecord;
- lIndex = SendDlgItemMessage(hwndDlg, IDC_STRECOSCOMBO, CB_GETCOUNT, (WPARAM)0, (LPARAM)0);
+ lIndex = SendDlgItemMessageW(hwndDlg, IDC_STRECOSCOMBO, CB_GETCOUNT, (WPARAM)0, (LPARAM)0);
if (lIndex == CB_ERR)
return;
for (index = 0; index szFreeldrIni, szSystemDrive);
- _tcscat(pStartInfo->szFreeldrIni, _T("\\freeldr.ini"));
+ wcscpy(pStartInfo->szFreeldrIni, szSystemDrive);
+ wcscat(pStartInfo->szFreeldrIni, L"\\freeldr.ini");
- if (PathFileExists(pStartInfo->szFreeldrIni))
+ if (PathFileExistsW(pStartInfo->szFreeldrIni))
{
/* freeldr.ini exists */
- hInf = SetupOpenInfFile(pStartInfo->szFreeldrIni,
+ hInf = SetupOpenInfFileW(pStartInfo->szFreeldrIni,
NULL,
INF_STYLE_OLDNT,
NULL);
@@ -479,13 +479,13 @@ LoadOSList(HWND hwndDlg, PSTARTINFO pStartInfo)
}
/* try load boot.ini settings */
- _tcscpy(pStartInfo->szFreeldrIni, szSystemDrive);
- _tcscat(pStartInfo->szFreeldrIni, _T("\\boot.ini"));
+ wcscpy(pStartInfo->szFreeldrIni, szSystemDrive);
+ wcscat(pStartInfo->szFreeldrIni, L"\\boot.ini");
- if (PathFileExists(pStartInfo->szFreeldrIni))
+ if (PathFileExistsW(pStartInfo->szFreeldrIni))
{
/* load boot.ini settings */
- hInf = SetupOpenInfFile(pStartInfo->szFreeldrIni,
+ hInf = SetupOpenInfFileW(pStartInfo->szFreeldrIni,
NULL,
INF_STYLE_OLDNT,
NULL);
@@ -518,16 +518,16 @@ SetCrashDlgItems(HWND hwnd, PSTARTINFO pStartInfo)
/* minidump type */
EnableWindow(GetDlgItem(hwnd, IDC_STRRECDUMPFILE), TRUE);
EnableWindow(GetDlgItem(hwnd, IDC_STRRECOVERWRITE), FALSE);
- SendMessage(GetDlgItem(hwnd, IDC_STRRECDUMPFILE), WM_SETTEXT, (WPARAM)0, (LPARAM)pStartInfo->szMinidumpDir);
+ SendMessageW(GetDlgItem(hwnd, IDC_STRRECDUMPFILE), WM_SETTEXT, (WPARAM)0, (LPARAM)pStartInfo->szMinidumpDir);
}
else if (pStartInfo->dwCrashDumpEnabled == 1 || pStartInfo->dwCrashDumpEnabled == 2)
{
/* kernel or complete dump */
EnableWindow(GetDlgItem(hwnd, IDC_STRRECDUMPFILE), TRUE);
EnableWindow(GetDlgItem(hwnd, IDC_STRRECOVERWRITE), TRUE);
- SendMessage(GetDlgItem(hwnd, IDC_STRRECDUMPFILE), WM_SETTEXT, (WPARAM)0, (LPARAM)pStartInfo->szDumpFile);
+ SendMessageW(GetDlgItem(hwnd, IDC_STRRECDUMPFILE), WM_SETTEXT, (WPARAM)0, (LPARAM)pStartInfo->szDumpFile);
}
- SendDlgItemMessage(hwnd, IDC_STRRECDEBUGCOMBO, CB_SETCURSEL, (WPARAM)pStartInfo->dwCrashDumpEnabled, (LPARAM)0);
+ SendDlgItemMessageW(hwnd, IDC_STRRECDEBUGCOMBO, CB_SETCURSEL, (WPARAM)pStartInfo->dwCrashDumpEnabled, (LPARAM)0);
}
static VOID
@@ -536,8 +536,8 @@ WriteStartupRecoveryOptions(HWND hwndDlg, PSTARTINFO pStartInfo)
HKEY hKey;
DWORD lResult;
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
- _T("System\\CurrentControlSet\\Control\\CrashControl"),
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
+ L"System\\CurrentControlSet\\Control\\CrashControl",
0,
KEY_WRITE,
&hKey) != ERROR_SUCCESS)
@@ -547,30 +547,30 @@ WriteStartupRecoveryOptions(HWND hwndDlg, PSTARTINFO pStartInfo)
}
lResult = (DWORD) SendDlgItemMessage(hwndDlg, IDC_STRRECWRITEEVENT, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
- RegSetValueEx(hKey, _T("LogEvent"), 0, REG_DWORD, (LPBYTE)&lResult, sizeof(lResult));
+ RegSetValueExW(hKey, L"LogEvent", 0, REG_DWORD, (LPBYTE)&lResult, sizeof(lResult));
lResult = (DWORD) SendDlgItemMessage(hwndDlg, IDC_STRRECSENDALERT, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
- RegSetValueEx(hKey, _T("SendAlert"), 0, REG_DWORD, (LPBYTE)&lResult, sizeof(lResult));
+ RegSetValueExW(hKey, L"SendAlert", 0, REG_DWORD, (LPBYTE)&lResult, sizeof(lResult));
lResult = (DWORD) SendDlgItemMessage(hwndDlg, IDC_STRRECRESTART, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
- RegSetValueEx(hKey, _T("AutoReboot"), 0, REG_DWORD, (LPBYTE)&lResult, sizeof(lResult));
+ RegSetValueExW(hKey, L"AutoReboot", 0, REG_DWORD, (LPBYTE)&lResult, sizeof(lResult));
lResult = (DWORD) SendDlgItemMessage(hwndDlg, IDC_STRRECOVERWRITE, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
- RegSetValueEx(hKey, _T("Overwrite"), 0, REG_DWORD, (LPBYTE)&lResult, sizeof(lResult));
+ RegSetValueExW(hKey, L"Overwrite", 0, REG_DWORD, (LPBYTE)&lResult, sizeof(lResult));
if (pStartInfo->dwCrashDumpEnabled == 1 || pStartInfo->dwCrashDumpEnabled == 2)
{
- SendDlgItemMessage(hwndDlg, IDC_STRRECDUMPFILE, WM_GETTEXT, (WPARAM)sizeof(pStartInfo->szDumpFile) / sizeof(TCHAR), (LPARAM)pStartInfo->szDumpFile);
- RegSetValueEx(hKey, _T("DumpFile"), 0, REG_EXPAND_SZ, (LPBYTE)pStartInfo->szDumpFile, (_tcslen(pStartInfo->szDumpFile) + 1) * sizeof(TCHAR));
+ SendDlgItemMessage(hwndDlg, IDC_STRRECDUMPFILE, WM_GETTEXT, (WPARAM)sizeof(pStartInfo->szDumpFile) / sizeof(WCHAR), (LPARAM)pStartInfo->szDumpFile);
+ RegSetValueExW(hKey, L"DumpFile", 0, REG_EXPAND_SZ, (LPBYTE)pStartInfo->szDumpFile, (wcslen(pStartInfo->szDumpFile) + 1) * sizeof(WCHAR));
}
else if (pStartInfo->dwCrashDumpEnabled == 3)
{
- SendDlgItemMessage(hwndDlg, IDC_STRRECDUMPFILE, WM_GETTEXT, (WPARAM)sizeof(pStartInfo->szDumpFile) / sizeof(TCHAR), (LPARAM)pStartInfo->szDumpFile);
- RegSetValueEx(hKey, _T("MinidumpDir"), 0, REG_EXPAND_SZ, (LPBYTE)pStartInfo->szDumpFile, (_tcslen(pStartInfo->szDumpFile) + 1) * sizeof(TCHAR));
+ SendDlgItemMessage(hwndDlg, IDC_STRRECDUMPFILE, WM_GETTEXT, (WPARAM)sizeof(pStartInfo->szDumpFile) / sizeof(WCHAR), (LPARAM)pStartInfo->szDumpFile);
+ RegSetValueExW(hKey, L"MinidumpDir", 0, REG_EXPAND_SZ, (LPBYTE)pStartInfo->szDumpFile, (wcslen(pStartInfo->szDumpFile) + 1) * sizeof(WCHAR));
}
- RegSetValueEx(hKey, _T("CrashDumpEnabled"), 0, REG_DWORD, (LPBYTE)(DWORD_PTR)pStartInfo->dwCrashDumpEnabled, sizeof(pStartInfo->dwCrashDumpEnabled));
+ RegSetValueExW(hKey, L"CrashDumpEnabled", 0, REG_DWORD, (LPBYTE)(DWORD_PTR)pStartInfo->dwCrashDumpEnabled, sizeof(pStartInfo->dwCrashDumpEnabled));
RegCloseKey(hKey);
}
@@ -578,13 +578,11 @@ static VOID
LoadRecoveryOptions(HWND hwndDlg, PSTARTINFO pStartInfo)
{
HKEY hKey;
- DWORD dwValues;
- TCHAR szName[MAX_PATH];
- TCHAR szValue[MAX_PATH];
- DWORD i, dwName, dwValue, dwValueLength, dwType;
+ WCHAR szName[MAX_PATH];
+ DWORD dwValue, dwValueLength, dwType;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
- _T("System\\CurrentControlSet\\Control\\CrashControl"),
+ L"System\\CurrentControlSet\\Control\\CrashControl",
0,
KEY_READ,
&hKey) != ERROR_SUCCESS)
@@ -593,88 +591,57 @@ LoadRecoveryOptions(HWND hwndDlg, PSTARTINFO pStartInfo)
return;
}
- if (RegQueryInfoKey(hKey,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- &dwValues,
- NULL,
- NULL,
- NULL,
- NULL) != ERROR_SUCCESS)
+ dwValueLength = sizeof(DWORD);
+ if (RegQueryValueExW(hKey, L"LogEvent", NULL, &dwType, (LPBYTE)&dwValue, &dwValueLength) == ERROR_SUCCESS && dwType == REG_DWORD && dwValue)
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECWRITEEVENT, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
+
+ dwValueLength = sizeof(DWORD);
+ if (RegQueryValueExW(hKey, L"SendAlert", NULL, &dwType, (LPBYTE)&dwValue, &dwValueLength) == ERROR_SUCCESS && dwType == REG_DWORD && dwValue)
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECSENDALERT, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
+
+ dwValueLength = sizeof(DWORD);
+ if (RegQueryValueExW(hKey, L"AutoReboot", NULL, &dwType, (LPBYTE)&dwValue, &dwValueLength) == ERROR_SUCCESS && dwType == REG_DWORD && dwValue)
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECRESTART, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
+
+ dwValueLength = sizeof(DWORD);
+ if (RegQueryValueExW(hKey, L"Overwrite", NULL, &dwType, (LPBYTE)&dwValue, &dwValueLength) == ERROR_SUCCESS && dwType == REG_DWORD && dwValue)
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECOVERWRITE, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
+
+ dwValueLength = sizeof(DWORD);
+ if (RegQueryValueExW(hKey, L"CrashDumpEnabled", NULL, &dwType, (LPBYTE)&dwValue, &dwValueLength) == ERROR_SUCCESS && dwType == REG_DWORD && dwValue)
+ pStartInfo->dwCrashDumpEnabled = dwValue;
+
+ dwValueLength = sizeof(pStartInfo->szDumpFile);
+ if (RegQueryValueExW(hKey, L"DumpFile", NULL, &dwType, (LPBYTE)pStartInfo->szDumpFile, &dwValueLength) != ERROR_SUCCESS)
+ pStartInfo->szDumpFile[0] = L'\0';
+
+ dwValueLength = sizeof(pStartInfo->szMinidumpDir);
+ if (RegQueryValueExW(hKey, L"MinidumpDir", NULL, &dwType, (LPBYTE)pStartInfo->szMinidumpDir, &dwValueLength) != ERROR_SUCCESS)
+ pStartInfo->szMinidumpDir[0] = L'\0';
+
+ if (LoadStringW(hApplet, IDS_NO_DUMP, szName, sizeof(szName) / sizeof(WCHAR)))
{
- RegCloseKey(hKey);
- return;
+ szName[(sizeof(szName)/sizeof(WCHAR))-1] = L'\0';
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECDEBUGCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM) szName);
}
- for (i = 0; i < dwValues; i++)
+ if (LoadString(hApplet, IDS_FULL_DUMP, szName, sizeof(szName) / sizeof(WCHAR)))
{
- dwName = sizeof(szName) / sizeof(TCHAR);
-
- RegEnumValue(hKey, i, szName, &dwName, NULL, &dwType, NULL, NULL);
- if (dwType == REG_DWORD)
- {
- dwValueLength = sizeof(dwValue);
- dwName = sizeof(szName) / sizeof(TCHAR);
- if (RegEnumValue(hKey, i, szName, &dwName, NULL, &dwType, (LPBYTE)&dwValue, &dwValueLength) != ERROR_SUCCESS)
- continue;
- }
- else
- {
- dwValueLength = sizeof(szValue);
- dwName = sizeof(szName) / sizeof(TCHAR);
- if (RegEnumValue(hKey, i, szName, &dwName, NULL, &dwType, (LPBYTE)&szValue, &dwValueLength) != ERROR_SUCCESS)
- continue;
- }
-
- if (!_tcscmp(szName, _T("LogEvent")))
- {
- if (dwValue)
- SendDlgItemMessage(hwndDlg, IDC_STRRECWRITEEVENT, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
- }
- else if (!_tcscmp(szName, _T("SendAlert")))
- {
- if (dwValue)
- SendDlgItemMessage(hwndDlg, IDC_STRRECSENDALERT, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
- }
- else if (!_tcscmp(szName, _T("AutoReboot")))
- {
- if (dwValue)
- SendDlgItemMessage(hwndDlg, IDC_STRRECRESTART, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
- }
- else if (!_tcscmp(szName, _T("Overwrite")))
- {
- if (dwValue)
- SendDlgItemMessage(hwndDlg, IDC_STRRECOVERWRITE, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
- }
- else if (!_tcscmp(szName, _T("DumpFile")))
- {
- _tcscpy(pStartInfo->szDumpFile, szValue);
- }
- else if (!_tcscmp(szName, _T("MinidumpDir")))
- {
- _tcscpy(pStartInfo->szMinidumpDir, szValue);
- }
- else if (!_tcscmp(szName, _T("CrashDumpEnabled")))
- {
- pStartInfo->dwCrashDumpEnabled = dwValue;
- }
+ szName[(sizeof(szName)/sizeof(WCHAR))-1] = L'\0';
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECDEBUGCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM) szName);
}
- if (LoadString(hApplet, IDS_NO_DUMP, szValue, sizeof(szValue) / sizeof(TCHAR)) < sizeof(szValue) / sizeof(TCHAR))
- SendDlgItemMessage(hwndDlg, IDC_STRRECDEBUGCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM) szValue);
+ if (LoadStringW(hApplet, IDS_KERNEL_DUMP, szName, sizeof(szName) / sizeof(WCHAR)))
+ {
+ szName[(sizeof(szName)/sizeof(WCHAR))-1] = L'\0';
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECDEBUGCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM) szName);
+ }
- if (LoadString(hApplet, IDS_FULL_DUMP, szValue, sizeof(szValue) / sizeof(TCHAR)) < sizeof(szValue) / sizeof(TCHAR))
- SendDlgItemMessage(hwndDlg, IDC_STRRECDEBUGCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM) szValue);
-
- if (LoadString(hApplet, IDS_KERNEL_DUMP, szValue, sizeof(szValue) / sizeof(TCHAR)) < sizeof(szValue) / sizeof(TCHAR))
- SendDlgItemMessage(hwndDlg, IDC_STRRECDEBUGCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM) szValue);
-
- if (LoadString(hApplet, IDS_MINI_DUMP, szValue, sizeof(szValue) / sizeof(TCHAR)) < sizeof(szValue) / sizeof(TCHAR))
- SendDlgItemMessage(hwndDlg, IDC_STRRECDEBUGCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM) szValue);
+ if (LoadStringW(hApplet, IDS_MINI_DUMP, szName, sizeof(szName) / sizeof(WCHAR)))
+ {
+ szName[(sizeof(szName)/sizeof(WCHAR))-1] = L'\0';
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECDEBUGCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM) szName);
+ }
SetCrashDlgItems(hwndDlg, pStartInfo);
RegCloseKey(hKey);
@@ -692,7 +659,7 @@ StartRecDlgProc(HWND hwndDlg,
PBOOTRECORD pRecord;
int iTimeout;
LRESULT lResult;
- TCHAR szTimeout[10];
+ WCHAR szTimeout[10];
UNREFERENCED_PARAMETER(lParam);
@@ -717,7 +684,7 @@ StartRecDlgProc(HWND hwndDlg,
switch(LOWORD(wParam))
{
case IDC_STRRECEDIT:
- ShellExecute(0, _T("open"), _T("notepad"), pStartInfo->szFreeldrIni, NULL, SW_SHOWNORMAL);
+ ShellExecuteW(0, L"open", L"notepad", pStartInfo->szFreeldrIni, NULL, SW_SHOWNORMAL);
// FIXME use CreateProcess and wait untill finished
// DeleteBootRecords(hwndDlg);
// LoadOSList(hwndDlg);
@@ -729,9 +696,9 @@ StartRecDlgProc(HWND hwndDlg,
iTimeout = SendDlgItemMessage(hwndDlg, IDC_STRRECLISTUPDWN, UDM_GETPOS, (WPARAM)0, (LPARAM)0);
else
iTimeout = 0;
- _stprintf(szTimeout, _T("%i"), iTimeout);
+ swprintf(szTimeout, L"%i", iTimeout);
- lResult = SendDlgItemMessage(hwndDlg, IDC_STRECOSCOMBO, CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
+ lResult = SendDlgItemMessageW(hwndDlg, IDC_STRECOSCOMBO, CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
if (lResult == CB_ERR)
{
/* ? */
@@ -746,13 +713,13 @@ StartRecDlgProc(HWND hwndDlg,
if (pStartInfo->iFreeLdrIni == 1) // FreeLdrIni style
{
/* set default timeout */
- WritePrivateProfileString(_T("FREELOADER"),
- _T("TimeOut"),
+ WritePrivateProfileStringW(L"FREELOADER",
+ L"TimeOut",
szTimeout,
pStartInfo->szFreeldrIni);
/* set default os */
- WritePrivateProfileString(_T("FREELOADER"),
- _T("DefaultOS"),
+ WritePrivateProfileStringW(L"FREELOADER",
+ L"DefaultOS",
pRecord->szSectionName,
pStartInfo->szFreeldrIni);
@@ -760,13 +727,13 @@ StartRecDlgProc(HWND hwndDlg,
else if (pStartInfo->iFreeLdrIni == 2) // BootIni style
{
/* set default timeout */
- WritePrivateProfileString(_T("boot loader"),
- _T("timeout"),
+ WritePrivateProfileStringW(L"boot loader",
+ L"timeout",
szTimeout,
pStartInfo->szFreeldrIni);
/* set default os */
- WritePrivateProfileString(_T("boot loader"),
- _T("default"),
+ WritePrivateProfileStringW(L"boot loader",
+ L"default",
pRecord->szBootPath,
pStartInfo->szFreeldrIni);
@@ -807,11 +774,11 @@ StartRecDlgProc(HWND hwndDlg,
{
if (pStartInfo->dwCrashDumpEnabled == 1 || pStartInfo->dwCrashDumpEnabled == 2)
{
- SendDlgItemMessage(hwndDlg, IDC_STRRECDUMPFILE, WM_GETTEXT, (WPARAM)sizeof(pStartInfo->szDumpFile) / sizeof(TCHAR), (LPARAM)pStartInfo->szDumpFile);
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECDUMPFILE, WM_GETTEXT, (WPARAM)sizeof(pStartInfo->szDumpFile) / sizeof(WCHAR), (LPARAM)pStartInfo->szDumpFile);
}
else if (pStartInfo->dwCrashDumpEnabled == 3)
{
- SendDlgItemMessage(hwndDlg, IDC_STRRECDUMPFILE, WM_GETTEXT, (WPARAM)sizeof(pStartInfo->szMinidumpDir) / sizeof(TCHAR), (LPARAM)pStartInfo->szMinidumpDir);
+ SendDlgItemMessageW(hwndDlg, IDC_STRRECDUMPFILE, WM_GETTEXT, (WPARAM)sizeof(pStartInfo->szMinidumpDir) / sizeof(WCHAR), (LPARAM)pStartInfo->szMinidumpDir);
}
pStartInfo->dwCrashDumpEnabled = lResult;
diff --git a/reactos/dll/cpl/sysdm/sysdm.rbuild b/reactos/dll/cpl/sysdm/sysdm.rbuild
index c6c3f94f7a0..2a2954128b4 100644
--- a/reactos/dll/cpl/sysdm/sysdm.rbuild
+++ b/reactos/dll/cpl/sysdm/sysdm.rbuild
@@ -9,7 +9,6 @@
user32
gdi32
comctl32
- ntdll
msimg32
shell32
shlwapi
@@ -26,6 +25,5 @@
userprofile.c
virtmem.c
sysdm.rc
- sysdm.spec
precomp.h
diff --git a/reactos/dll/cpl/telephon/telephon.rbuild b/reactos/dll/cpl/telephon/telephon.rbuild
index 15c97d8fdf3..3592ef5dd4a 100644
--- a/reactos/dll/cpl/telephon/telephon.rbuild
+++ b/reactos/dll/cpl/telephon/telephon.rbuild
@@ -12,5 +12,4 @@
shell32
telephon.c
telephon.rc
- telephon.spec
diff --git a/reactos/dll/cpl/timedate/timedate.rbuild b/reactos/dll/cpl/timedate/timedate.rbuild
index f0f0a9dc89d..fd8f125a798 100644
--- a/reactos/dll/cpl/timedate/timedate.rbuild
+++ b/reactos/dll/cpl/timedate/timedate.rbuild
@@ -18,6 +18,5 @@
timedate.c
timezone.c
timedate.rc
- timedate.spec
diff --git a/reactos/dll/cpl/usrmgr/usrmgr.rbuild b/reactos/dll/cpl/usrmgr/usrmgr.rbuild
index 64ffbbf3e31..1988b4d3e5e 100644
--- a/reactos/dll/cpl/usrmgr/usrmgr.rbuild
+++ b/reactos/dll/cpl/usrmgr/usrmgr.rbuild
@@ -18,5 +18,4 @@
users.c
usrmgr.c
usrmgr.rc
- usrmgr.spec
diff --git a/reactos/dll/directx/d3d8/d3d8.rbuild b/reactos/dll/directx/d3d8/d3d8.rbuild
index 3c14ab2b963..bbcbf25c3b8 100644
--- a/reactos/dll/directx/d3d8/d3d8.rbuild
+++ b/reactos/dll/directx/d3d8/d3d8.rbuild
@@ -4,5 +4,4 @@
d3d8.c
d3d8.rc
- d3d8.spec
diff --git a/reactos/dll/directx/d3d9/adapter.c b/reactos/dll/directx/d3d9/adapter.c
index 513888f9303..868b13bca2f 100644
--- a/reactos/dll/directx/d3d9/adapter.c
+++ b/reactos/dll/directx/d3d9/adapter.c
@@ -6,7 +6,7 @@
* PROGRAMERS: Gregor Brunmar
*/
-#define _WIN32_WINNT 0x0502
+//#define _WIN32_WINNT 0x0502
#include "d3d9_common.h"
#include
#include
diff --git a/reactos/dll/directx/msdmo/msdmo.rbuild b/reactos/dll/directx/msdmo/msdmo.rbuild
index 87c455a3405..1c57c75faed 100644
--- a/reactos/dll/directx/msdmo/msdmo.rbuild
+++ b/reactos/dll/directx/msdmo/msdmo.rbuild
@@ -9,6 +9,5 @@
ntdll
msdmo.c
msdmo.rc
- msdmo.spec
diff --git a/reactos/dll/directx/quartz/quartz.rbuild b/reactos/dll/directx/quartz/quartz.rbuild
index c7027648ba1..381bf1d2d1a 100644
--- a/reactos/dll/directx/quartz/quartz.rbuild
+++ b/reactos/dll/directx/quartz/quartz.rbuild
@@ -47,6 +47,5 @@
control.c
avisplit.c
version.rc
- quartz.spec
\ No newline at end of file
diff --git a/reactos/dll/directx/wine/d3d9/d3d9.rbuild b/reactos/dll/directx/wine/d3d9/d3d9.rbuild
index 867df67cf03..c9b788d7938 100644
--- a/reactos/dll/directx/wine/d3d9/d3d9.rbuild
+++ b/reactos/dll/directx/wine/d3d9/d3d9.rbuild
@@ -35,5 +35,4 @@
volume.c
volumetexture.c
version.rc
- d3d9.spec
diff --git a/reactos/dll/directx/wine/wined3d/wined3d.rbuild b/reactos/dll/directx/wine/wined3d/wined3d.rbuild
index 67e7e44b481..ac972254a58 100644
--- a/reactos/dll/directx/wine/wined3d/wined3d.rbuild
+++ b/reactos/dll/directx/wine/wined3d/wined3d.rbuild
@@ -14,7 +14,6 @@
advapi32
kernel32
uuid
- msvcrt
ati_fragment_shader.c
arb_program_shader.c
diff --git a/reactos/dll/nls/idndl_redist/idndl_redist.rbuild b/reactos/dll/nls/idndl_redist/idndl_redist.rbuild
index 2f4fc4b6f7f..b5826dcf817 100644
--- a/reactos/dll/nls/idndl_redist/idndl_redist.rbuild
+++ b/reactos/dll/nls/idndl_redist/idndl_redist.rbuild
@@ -1,9 +1,8 @@
-
+
kernel32
scripts
- libcntpr
-fno-exceptions
-fno-rtti
--entry=0
diff --git a/reactos/dll/nls/nls.rbuild b/reactos/dll/nls/nls.rbuild
index 83c07573344..060c5e9585f 100644
--- a/reactos/dll/nls/nls.rbuild
+++ b/reactos/dll/nls/nls.rbuild
@@ -4,13 +4,13 @@
-
+
-
+
diff --git a/reactos/dll/nls/normaliz_redist/normaliz_redist.rbuild b/reactos/dll/nls/normaliz_redist/normaliz_redist.rbuild
index f25c82280f2..2876cc0602a 100644
--- a/reactos/dll/nls/normaliz_redist/normaliz_redist.rbuild
+++ b/reactos/dll/nls/normaliz_redist/normaliz_redist.rbuild
@@ -4,11 +4,10 @@
icu/source/common
icudt38.c
-
+
normalize
idna
normaliz_redist_data
- libcntpr
kernel32
-fno-exceptions
-fno-rtti
diff --git a/reactos/dll/ntdll/dispatch/dispatch.c b/reactos/dll/ntdll/dispatch/dispatch.c
index 6fd4f70024f..c6f749c70bd 100644
--- a/reactos/dll/ntdll/dispatch/dispatch.c
+++ b/reactos/dll/ntdll/dispatch/dispatch.c
@@ -15,10 +15,6 @@
typedef NTSTATUS (NTAPI *USER_CALL)(PVOID Argument, ULONG ArgumentLength);
-EXCEPTION_DISPOSITION NTAPI
-RtlpExecuteVectoredExceptionHandlers(IN PEXCEPTION_RECORD ExceptionRecord,
- IN PCONTEXT Context);
-
/* FUNCTIONS ****************************************************************/
/*
@@ -32,26 +28,16 @@ KiUserExceptionDispatcher(PEXCEPTION_RECORD ExceptionRecord,
EXCEPTION_RECORD NestedExceptionRecord;
NTSTATUS Status;
- /* call the vectored exception handlers */
- if(RtlpExecuteVectoredExceptionHandlers(ExceptionRecord,
- Context) != ExceptionContinueExecution)
+ /* Dispatch the exception and check the result */
+ if (RtlDispatchException(ExceptionRecord, Context))
{
- goto ContinueExecution;
+ /* Continue executing */
+ Status = NtContinue(Context, FALSE);
}
else
{
- /* Dispatch the exception and check the result */
- if(RtlDispatchException(ExceptionRecord, Context))
- {
-ContinueExecution:
- /* Continue executing */
- Status = NtContinue(Context, FALSE);
- }
- else
- {
- /* Raise an exception */
- Status = NtRaiseException(ExceptionRecord, Context, FALSE);
- }
+ /* Raise an exception */
+ Status = NtRaiseException(ExceptionRecord, Context, FALSE);
}
/* Setup the Exception record */
diff --git a/reactos/dll/ntdll/dispatch/i386/dispatch.S b/reactos/dll/ntdll/dispatch/i386/dispatch.S
index 526e5b8f189..a586f6f27e7 100644
--- a/reactos/dll/ntdll/dispatch/i386/dispatch.S
+++ b/reactos/dll/ntdll/dispatch/i386/dispatch.S
@@ -183,52 +183,22 @@ _KiRaiseUserExceptionDispatcher@0:
.globl _KiUserExceptionDispatcher@8
_KiUserExceptionDispatcher@8:
- /* clear the direct flag
- * text from bug 2279
- * if it not clear it means that if an exception occurs while
- * the direction flag is set (typically inside memmove), the
- * exception handlers will be called with the direction flag still
- * set. The Windows x86-32 and x86-64 ABI requires that the
- * direction flag be Calling memset() with a compile-time constant
- * size on both GCC and MSVC will result in inlining a "rep stosd"
- * instruction. Because of the ABI, they will assume that the
- * direction flag is clear and not emit a "cld" instruction.
- * Using memset() in an exception handler therefore will
- * corrupt memory if the exception occurred during a reverse copy
- * such as a forward overlapping memmove().
- *
- * For reliability and ease of debugging, please add "cld" to the beginning of
- * KiUserExceptionDispatcher. Note that the same will be true of x86-64 whenever
- * that happens. This does not affect continuing execution; the CONTEXT of the
- * exception has the direction flag set and will be restored upon NtContinue.
- * KiUserApcDispatcher and KiUserCallbackDispatcher need to be evaluated for this
- * issue.
- */
-
+ /* Clear direction flag */
cld
/* Save the Context and Exception Records */
mov ecx, [esp+4]
mov ebx, [esp]
- /* Call the vectored exception handler */
+ /* Dispatch the exception */
push ecx
push ebx
- call _RtlpExecuteVectoredExceptionHandlers@8
-
- /* Check for success */
- or al, al
- jnz ContinueExecution
-
- /* Dispatch the exception */
- sub esp, 8
call _RtlDispatchException@8
/* Check for success */
or al, al
jz RaiseException
-ContinueExecution:
/* Pop off the records */
pop ebx
pop ecx
diff --git a/reactos/dll/ntdll/ntdll.rbuild b/reactos/dll/ntdll/ntdll.rbuild
index cb7a22855b4..832604d60e1 100644
--- a/reactos/dll/ntdll/ntdll.rbuild
+++ b/reactos/dll/ntdll/ntdll.rbuild
@@ -1,7 +1,10 @@
-
+
+
+
+
include
diff --git a/reactos/dll/shellext/deskmon/deskmon.rbuild b/reactos/dll/shellext/deskmon/deskmon.rbuild
index 91442c16c57..36252dc14ab 100644
--- a/reactos/dll/shellext/deskmon/deskmon.rbuild
+++ b/reactos/dll/shellext/deskmon/deskmon.rbuild
@@ -11,6 +11,5 @@
deskmon.c
shxiface.c
deskmon.rc
- deskmon.spec
precomp.h
diff --git a/reactos/dll/shellext/fontext/fontext.rbuild b/reactos/dll/shellext/fontext/fontext.rbuild
index 058d3df9ad0..5418840f553 100644
--- a/reactos/dll/shellext/fontext/fontext.rbuild
+++ b/reactos/dll/shellext/fontext/fontext.rbuild
@@ -14,5 +14,4 @@
fontext.c
regsvr.c
fontext.rc
- fontext.spec
diff --git a/reactos/dll/win32/advapi32/advapi32.rbuild b/reactos/dll/win32/advapi32/advapi32.rbuild
index 17d7eddcc0a..c5e0c4d6022 100644
--- a/reactos/dll/win32/advapi32/advapi32.rbuild
+++ b/reactos/dll/win32/advapi32/advapi32.rbuild
@@ -18,7 +18,6 @@
pseh
ntdll
advapi32.h
- advapi32.spec
crypt.c
crypt_arc4.c
diff --git a/reactos/dll/win32/advapi32/misc/shutdown.c b/reactos/dll/win32/advapi32/misc/shutdown.c
index 494c7aaaf31..0d7411fbe07 100644
--- a/reactos/dll/win32/advapi32/misc/shutdown.c
+++ b/reactos/dll/win32/advapi32/misc/shutdown.c
@@ -109,6 +109,9 @@ InitiateSystemShutdownA(LPSTR lpMachineName,
INT LastError;
BOOL rv;
+ MachineNameW.Buffer = NULL;
+ MessageW.Buffer = NULL;
+
if (lpMachineName)
{
RtlInitAnsiString(&MachineNameA, lpMachineName);
@@ -126,7 +129,7 @@ InitiateSystemShutdownA(LPSTR lpMachineName,
Status = RtlAnsiStringToUnicodeString(&MessageW, &MessageA, TRUE);
if (STATUS_SUCCESS != Status)
{
- if (MachineNameW.Length)
+ if (MachineNameW.Buffer)
{
RtlFreeUnicodeString(&MachineNameW);
}
diff --git a/reactos/dll/win32/advapi32/reg/reg.c b/reactos/dll/win32/advapi32/reg/reg.c
index 0fe44a71837..20f0b59f441 100644
--- a/reactos/dll/win32/advapi32/reg/reg.c
+++ b/reactos/dll/win32/advapi32/reg/reg.c
@@ -917,6 +917,8 @@ CreateNestedKey(PHKEY KeyHandle,
LocalObjectAttributes.ObjectName = &LocalKeyName;
FullNameLength = LocalKeyName.Length / sizeof(WCHAR);
+ LocalKeyHandle = NULL;
+
/* Remove the last part of the key name and try to create the key again. */
while (Status == STATUS_OBJECT_NAME_NOT_FOUND)
{
@@ -949,7 +951,8 @@ CreateNestedKey(PHKEY KeyHandle,
Length = wcslen (LocalKeyName.Buffer);
while (TRUE)
{
- NtClose (LocalKeyHandle);
+ if (LocalKeyHandle)
+ NtClose (LocalKeyHandle);
LocalKeyName.Buffer[Length] = L'\\';
Length = wcslen (LocalKeyName.Buffer);
@@ -2544,7 +2547,7 @@ RegEnumKeyExA (HKEY hKey,
}
}
- TRACE("Key Namea0 Length %d\n", StringU.Length);
+ /*TRACE("Key Namea0 Length %d\n", StringU.Length);*/ /* BUGBUG could be uninitialized */
TRACE("Key Namea1 Length %d\n", NameLength);
TRACE("Key Namea Length %d\n", *lpcbName);
TRACE("Key Namea %s\n", lpName);
@@ -4685,13 +4688,14 @@ RegSetValueExA (HKEY hKey,
{
RtlCreateUnicodeStringFromAsciiz (&ValueName,
(PSTR)lpValueName);
- pValueName = (LPWSTR)ValueName.Buffer;
}
else
{
- pValueName = NULL;
+ ValueName.Buffer = NULL;
}
+ pValueName = (LPWSTR)ValueName.Buffer;
+
if (((dwType == REG_SZ) ||
(dwType == REG_MULTI_SZ) ||
(dwType == REG_EXPAND_SZ)) &&
diff --git a/reactos/dll/win32/advapi32/sec/lsa.c b/reactos/dll/win32/advapi32/sec/lsa.c
index 9cb5d4b1a75..5a2ebebd826 100644
--- a/reactos/dll/win32/advapi32/sec/lsa.c
+++ b/reactos/dll/win32/advapi32/sec/lsa.c
@@ -26,9 +26,9 @@ PLSAPR_SERVER_NAME_bind(PLSAPR_SERVER_NAME pszSystemName)
TRACE("PLSAPR_SERVER_NAME_bind() called\n");
- status = RpcStringBindingComposeW(pszSystemName,
+ status = RpcStringBindingComposeW(NULL,
L"ncacn_np",
- NULL,
+ pszSystemName,
L"\\pipe\\lsarpc",
NULL,
&pszStringBinding);
diff --git a/reactos/dll/win32/advapi32/sec/misc.c b/reactos/dll/win32/advapi32/sec/misc.c
index a75b1fa830f..7110e58076d 100644
--- a/reactos/dll/win32/advapi32/sec/misc.c
+++ b/reactos/dll/win32/advapi32/sec/misc.c
@@ -1252,6 +1252,8 @@ LookupPrivilegeValueA(LPCSTR lpSystemName,
RtlCreateUnicodeStringFromAsciiz(&SystemName,
(LPSTR)lpSystemName);
}
+ else
+ SystemName.Buffer = NULL;
/* Check the privilege name is not NULL */
if (lpName == NULL)
@@ -1263,14 +1265,14 @@ LookupPrivilegeValueA(LPCSTR lpSystemName,
RtlCreateUnicodeStringFromAsciiz(&Name,
(LPSTR)lpName);
- Result = LookupPrivilegeValueW((lpSystemName != NULL) ? SystemName.Buffer : NULL,
+ Result = LookupPrivilegeValueW(SystemName.Buffer,
Name.Buffer,
lpLuid);
RtlFreeUnicodeString(&Name);
/* Remote system? */
- if (lpSystemName != NULL)
+ if (SystemName.Buffer != NULL)
{
RtlFreeUnicodeString(&SystemName);
}
diff --git a/reactos/dll/win32/advapi32/service/eventlog.c b/reactos/dll/win32/advapi32/service/eventlog.c
index a842c421ab4..78c1cc64e81 100644
--- a/reactos/dll/win32/advapi32/service/eventlog.c
+++ b/reactos/dll/win32/advapi32/service/eventlog.c
@@ -27,15 +27,119 @@
WINE_DEFAULT_DEBUG_CHANNEL(advapi);
WINE_DECLARE_DEBUG_CHANNEL(eventlog);
-typedef struct _LOG_INFO
-{
- RPC_BINDING_HANDLE BindingHandle;
- IELF_HANDLE LogHandle;
- BOOL bLocal;
-} LOG_INFO, *PLOG_INFO;
-
static RPC_UNICODE_STRING EmptyString = { 0, 0, L"" };
+
+handle_t __RPC_USER
+EVENTLOG_HANDLE_A_bind(EVENTLOG_HANDLE_A UNCServerName)
+{
+ handle_t hBinding = NULL;
+ UCHAR *pszStringBinding;
+ RPC_STATUS status;
+
+ TRACE("EVENTLOG_HANDLE_A_bind() called\n");
+
+ status = RpcStringBindingComposeA(NULL,
+ (UCHAR *)"ncacn_np",
+ (UCHAR *)UNCServerName,
+ (UCHAR *)"\\pipe\\ntsvcs",
+ NULL,
+ (UCHAR **)&pszStringBinding);
+ if (status)
+ {
+ ERR("RpcStringBindingCompose returned 0x%x\n", status);
+ return NULL;
+ }
+
+ /* Set the binding handle that will be used to bind to the server. */
+ status = RpcBindingFromStringBindingA(pszStringBinding,
+ &hBinding);
+ if (status)
+ {
+ ERR("RpcBindingFromStringBinding returned 0x%x\n", status);
+ }
+
+ status = RpcStringFreeA(&pszStringBinding);
+ if (status)
+ {
+ ERR("RpcStringFree returned 0x%x\n", status);
+ }
+
+ return hBinding;
+}
+
+
+void __RPC_USER
+EVENTLOG_HANDLE_A_unbind(EVENTLOG_HANDLE_A UNCServerName,
+ handle_t hBinding)
+{
+ RPC_STATUS status;
+
+ TRACE("EVENTLOG_HANDLE_A_unbind() called\n");
+
+ status = RpcBindingFree(&hBinding);
+ if (status)
+ {
+ ERR("RpcBindingFree returned 0x%x\n", status);
+ }
+}
+
+
+handle_t __RPC_USER
+EVENTLOG_HANDLE_W_bind(EVENTLOG_HANDLE_W UNCServerName)
+{
+ handle_t hBinding = NULL;
+ LPWSTR pszStringBinding;
+ RPC_STATUS status;
+
+ TRACE("EVENTLOG_HANDLE_W_bind() called\n");
+
+ status = RpcStringBindingComposeW(NULL,
+ L"ncacn_np",
+ (LPWSTR)UNCServerName,
+ L"\\pipe\\EventLog",
+ NULL,
+ &pszStringBinding);
+ if (status)
+ {
+ ERR("RpcStringBindingCompose returned 0x%x\n", status);
+ return NULL;
+ }
+
+ /* Set the binding handle that will be used to bind to the server. */
+ status = RpcBindingFromStringBindingW(pszStringBinding,
+ &hBinding);
+ if (status)
+ {
+ ERR("RpcBindingFromStringBinding returned 0x%x\n", status);
+ }
+
+ status = RpcStringFreeW(&pszStringBinding);
+ if (status)
+ {
+ ERR("RpcStringFree returned 0x%x\n", status);
+ }
+
+ return hBinding;
+}
+
+
+void __RPC_USER
+EVENTLOG_HANDLE_W_unbind(EVENTLOG_HANDLE_W UNCServerName,
+ handle_t hBinding)
+{
+ RPC_STATUS status;
+
+ TRACE("EVENTLOG_HANDLE_W_unbind() called\n");
+
+ status = RpcBindingFree(&hBinding);
+ if (status)
+ {
+ ERR("RpcBindingFree returned 0x%x\n", status);
+ }
+}
+
+
/******************************************************************************
* BackupEventLogA [ADVAPI32.@]
*/
@@ -43,9 +147,8 @@ BOOL WINAPI
BackupEventLogA(IN HANDLE hEventLog,
IN LPCSTR lpBackupFileName)
{
- PLOG_INFO pLog;
- NTSTATUS Status;
RPC_STRING BackupFileName;
+ NTSTATUS Status;
TRACE("%p, %s\n", hEventLog, lpBackupFileName);
@@ -53,16 +156,17 @@ BackupEventLogA(IN HANDLE hEventLog,
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? strlen(lpBackupFileName) : 0;
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
+ Status = ElfrBackupELFA(hEventLog,
+ &BackupFileName);
}
+ _SEH_HANDLE
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ _SEH_END;
- Status = ElfrBackupELFA(pLog->BindingHandle,
- pLog->LogHandle,
- &BackupFileName);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
@@ -83,9 +187,8 @@ BOOL WINAPI
BackupEventLogW(IN HANDLE hEventLog,
IN LPCWSTR lpBackupFileName)
{
- PLOG_INFO pLog;
- NTSTATUS Status;
RPC_UNICODE_STRING BackupFileName;
+ NTSTATUS Status;
TRACE("%p, %s\n", hEventLog, debugstr_w(lpBackupFileName));
@@ -93,16 +196,17 @@ BackupEventLogW(IN HANDLE hEventLog,
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? wcslen(lpBackupFileName) * sizeof(WCHAR) : 0;
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
+ Status = ElfrBackupELFW(hEventLog,
+ &BackupFileName);
}
+ _SEH_HANDLE
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ _SEH_END;
- Status = ElfrBackupELFW(pLog->BindingHandle,
- pLog->LogHandle,
- &BackupFileName);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
@@ -120,9 +224,8 @@ BOOL WINAPI
ClearEventLogA(IN HANDLE hEventLog,
IN LPCSTR lpBackupFileName)
{
- PLOG_INFO pLog;
- NTSTATUS Status;
RPC_STRING BackupFileName;
+ NTSTATUS Status;
TRACE("%p, %s\n", hEventLog, lpBackupFileName);
@@ -130,16 +233,17 @@ ClearEventLogA(IN HANDLE hEventLog,
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? strlen(lpBackupFileName) : 0;
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
+ Status = ElfrClearELFA(hEventLog,
+ &BackupFileName);
}
+ _SEH_HANDLE
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ _SEH_END;
- Status = ElfrClearELFA(pLog->BindingHandle,
- pLog->LogHandle,
- &BackupFileName);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
@@ -157,9 +261,8 @@ BOOL WINAPI
ClearEventLogW(IN HANDLE hEventLog,
IN LPCWSTR lpBackupFileName)
{
- PLOG_INFO pLog;
- NTSTATUS Status;
RPC_UNICODE_STRING BackupFileName;
+ NTSTATUS Status;
TRACE("%p, %s\n", hEventLog, debugstr_w(lpBackupFileName));
@@ -167,16 +270,17 @@ ClearEventLogW(IN HANDLE hEventLog,
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? wcslen(lpBackupFileName) * sizeof(WCHAR) : 0;
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
+ Status = ElfrClearELFW(hEventLog,
+ &BackupFileName);
}
+ _SEH_HANDLE
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ _SEH_END;
- Status = ElfrClearELFW(pLog->BindingHandle,
- pLog->LogHandle,
- &BackupFileName);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
@@ -193,35 +297,25 @@ ClearEventLogW(IN HANDLE hEventLog,
BOOL WINAPI
CloseEventLog(IN HANDLE hEventLog)
{
- PLOG_INFO pLog;
NTSTATUS Status;
TRACE("%p\n", hEventLog);
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
- return TRUE;
-
- if (pLog->bLocal == FALSE)
+ _SEH_TRY
{
- if (!EvtUnbindRpc(pLog->BindingHandle))
- {
- SetLastError(ERROR_ACCESS_DENIED);
- return FALSE;
- }
+ Status = ElfrCloseEL(&hEventLog);
}
- else
+ _SEH_HANDLE
{
- Status = ElfrCloseEL(pLog->BindingHandle,
- &pLog->LogHandle);
- if (!NT_SUCCESS(Status))
- {
- SetLastError(RtlNtStatusToDosError(Status));
- return FALSE;
- }
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
}
+ _SEH_END;
- HeapFree(GetProcessHeap(), 0, pLog);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError(RtlNtStatusToDosError(Status));
+ return FALSE;
+ }
return TRUE;
}
@@ -239,17 +333,20 @@ CloseEventLog(IN HANDLE hEventLog)
BOOL WINAPI
DeregisterEventSource(IN HANDLE hEventLog)
{
- PLOG_INFO pLog;
NTSTATUS Status;
TRACE("%p\n", hEventLog);
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
- return TRUE;
+ _SEH_TRY
+ {
+ Status = ElfrDeregisterEventSource(&hEventLog);
+ }
+ _SEH_HANDLE
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ _SEH_END;
- Status = ElfrDeregisterEventSource(pLog->BindingHandle,
- &pLog->LogHandle);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
@@ -271,22 +368,22 @@ BOOL WINAPI
GetNumberOfEventLogRecords(IN HANDLE hEventLog,
OUT PDWORD NumberOfRecords)
{
- PLOG_INFO pLog;
NTSTATUS Status;
DWORD Records;
TRACE("%p, %p\n", hEventLog, NumberOfRecords);
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
+ Status = ElfrNumberOfRecords(hEventLog,
+ &Records);
}
+ _SEH_HANDLE
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ _SEH_END;
- Status = ElfrNumberOfRecords(pLog->BindingHandle,
- pLog->LogHandle,
- &Records);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
@@ -310,22 +407,22 @@ BOOL WINAPI
GetOldestEventLogRecord(IN HANDLE hEventLog,
OUT PDWORD OldestRecord)
{
- PLOG_INFO pLog;
NTSTATUS Status;
DWORD Oldest;
TRACE("%p, %p\n", hEventLog, OldestRecord);
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
+ Status = ElfrOldestRecord(hEventLog,
+ &Oldest);
}
+ _SEH_HANDLE
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ _SEH_END;
- Status = ElfrOldestRecord(pLog->BindingHandle,
- pLog->LogHandle,
- &Oldest);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
@@ -403,9 +500,9 @@ HANDLE WINAPI
OpenBackupEventLogW(IN LPCWSTR lpUNCServerName,
IN LPCWSTR lpFileName)
{
- PLOG_INFO pLog;
- NTSTATUS Status;
RPC_UNICODE_STRING FileName;
+ IELF_HANDLE LogHandle;
+ NTSTATUS Status;
TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpFileName));
@@ -413,52 +510,27 @@ OpenBackupEventLogW(IN LPCWSTR lpUNCServerName,
FileName.Length = FileName.MaximumLength =
lpFileName ? wcslen(lpFileName) * sizeof(WCHAR) : 0;
- pLog = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_INFO));
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- return NULL;
+ Status = ElfrOpenBELW((LPWSTR)lpUNCServerName,
+ &FileName,
+ 0,
+ 0,
+ &LogHandle);
}
-
- ZeroMemory(pLog, sizeof(LOG_INFO));
-
- if (lpUNCServerName == NULL || *lpUNCServerName == 0)
+ _SEH_HANDLE
{
- pLog->bLocal = TRUE;
-
- if (!EvtGetLocalHandle(&pLog->BindingHandle))
- {
- HeapFree(GetProcessHeap(), 0, pLog);
- SetLastError(ERROR_GEN_FAILURE);
- return NULL;
- }
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- else
- {
- pLog->bLocal = FALSE;
+ _SEH_END;
- if (!EvtBindRpc(lpUNCServerName, &pLog->BindingHandle))
- {
- HeapFree(GetProcessHeap(), 0, pLog);
- SetLastError(ERROR_INVALID_COMPUTERNAME);
- return NULL;
- }
- }
-
- Status = ElfrOpenBELW(pLog->BindingHandle,
- (LPWSTR)lpUNCServerName,
- &FileName,
- 0,
- 0,
- &pLog->LogHandle);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
- HeapFree(GetProcessHeap(), 0, pLog);
return NULL;
}
- return pLog;
+ return (HANDLE)LogHandle;
}
@@ -507,9 +579,9 @@ HANDLE WINAPI
OpenEventLogW(IN LPCWSTR lpUNCServerName,
IN LPCWSTR lpSourceName)
{
- PLOG_INFO pLog;
- NTSTATUS Status;
RPC_UNICODE_STRING SourceName;
+ IELF_HANDLE LogHandle;
+ NTSTATUS Status;
TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpSourceName));
@@ -517,53 +589,28 @@ OpenEventLogW(IN LPCWSTR lpUNCServerName,
SourceName.Length = SourceName.MaximumLength =
lpSourceName ? wcslen(lpSourceName) * sizeof(WCHAR) : 0;
- pLog = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_INFO));
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- return NULL;
+ Status = ElfrOpenELW((LPWSTR)lpUNCServerName,
+ &SourceName,
+ &EmptyString,
+ 0,
+ 0,
+ &LogHandle);
}
-
- ZeroMemory(pLog, sizeof(LOG_INFO));
-
- if (lpUNCServerName == NULL || *lpUNCServerName == 0)
+ _SEH_HANDLE
{
- pLog->bLocal = TRUE;
-
- if (!EvtGetLocalHandle(&pLog->BindingHandle))
- {
- HeapFree(GetProcessHeap(), 0, pLog);
- SetLastError(ERROR_GEN_FAILURE);
- return NULL;
- }
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- else
- {
- pLog->bLocal = FALSE;
+ _SEH_END;
- if (!EvtBindRpc(lpUNCServerName, &pLog->BindingHandle))
- {
- HeapFree(GetProcessHeap(), 0, pLog);
- SetLastError(ERROR_INVALID_COMPUTERNAME);
- return NULL;
- }
- }
-
- Status = ElfrOpenELW(pLog->BindingHandle,
- (LPWSTR)lpUNCServerName,
- &SourceName,
- &EmptyString,
- 0,
- 0,
- &pLog->LogHandle);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
- HeapFree(GetProcessHeap(), 0, pLog);
return NULL;
}
- return pLog;
+ return (HANDLE)LogHandle;
}
@@ -579,7 +626,6 @@ ReadEventLogA(IN HANDLE hEventLog,
OUT DWORD *pnBytesRead,
OUT DWORD *pnMinNumberOfBytesNeeded)
{
- PLOG_INFO pLog;
NTSTATUS Status;
DWORD bytesRead, minNumberOfBytesNeeded;
@@ -587,21 +633,22 @@ ReadEventLogA(IN HANDLE hEventLog,
hEventLog, dwReadFlags, dwRecordOffset, lpBuffer,
nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded);
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
+ Status = ElfrReadELA(hEventLog,
+ dwReadFlags,
+ dwRecordOffset,
+ nNumberOfBytesToRead,
+ lpBuffer,
+ &bytesRead,
+ &minNumberOfBytesNeeded);
}
+ _SEH_HANDLE
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ _SEH_END;
- Status = ElfrReadELA(pLog->BindingHandle,
- pLog->LogHandle,
- dwReadFlags,
- dwRecordOffset,
- nNumberOfBytesToRead,
- lpBuffer,
- &bytesRead,
- &minNumberOfBytesNeeded);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
@@ -636,7 +683,6 @@ ReadEventLogW(IN HANDLE hEventLog,
OUT DWORD *pnBytesRead,
OUT DWORD *pnMinNumberOfBytesNeeded)
{
- PLOG_INFO pLog;
NTSTATUS Status;
DWORD bytesRead, minNumberOfBytesNeeded;
@@ -644,21 +690,22 @@ ReadEventLogW(IN HANDLE hEventLog,
hEventLog, dwReadFlags, dwRecordOffset, lpBuffer,
nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded);
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
+ Status = ElfrReadELW(hEventLog,
+ dwReadFlags,
+ dwRecordOffset,
+ nNumberOfBytesToRead,
+ lpBuffer,
+ &bytesRead,
+ &minNumberOfBytesNeeded);
}
+ _SEH_HANDLE
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ _SEH_END;
- Status = ElfrReadELW(pLog->BindingHandle,
- pLog->LogHandle,
- dwReadFlags,
- dwRecordOffset,
- nNumberOfBytesToRead,
- lpBuffer,
- &bytesRead,
- &minNumberOfBytesNeeded);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
@@ -724,9 +771,9 @@ HANDLE WINAPI
RegisterEventSourceW(IN LPCWSTR lpUNCServerName,
IN LPCWSTR lpSourceName)
{
- PLOG_INFO pLog;
- NTSTATUS Status;
RPC_UNICODE_STRING SourceName;
+ IELF_HANDLE LogHandle;
+ NTSTATUS Status;
TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpSourceName));
@@ -734,53 +781,28 @@ RegisterEventSourceW(IN LPCWSTR lpUNCServerName,
SourceName.Length = SourceName.MaximumLength =
lpSourceName ? wcslen(lpSourceName) * sizeof(WCHAR) : 0;
- pLog = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_INFO));
- if (!pLog)
+ _SEH_TRY
{
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- return NULL;
+ Status = ElfrRegisterEventSourceW((LPWSTR)lpUNCServerName,
+ &SourceName,
+ &EmptyString,
+ 0,
+ 0,
+ &LogHandle);
}
-
- ZeroMemory(pLog, sizeof(LOG_INFO));
-
- if (lpUNCServerName == NULL || *lpUNCServerName == 0)
+ _SEH_HANDLE
{
- pLog->bLocal = TRUE;
-
- if (!EvtGetLocalHandle(&pLog->BindingHandle))
- {
- HeapFree(GetProcessHeap(), 0, pLog);
- SetLastError(ERROR_GEN_FAILURE);
- return NULL;
- }
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- else
- {
- pLog->bLocal = FALSE;
+ _SEH_END;
- if (!EvtBindRpc(lpUNCServerName, &pLog->BindingHandle))
- {
- HeapFree(GetProcessHeap(), 0, pLog);
- SetLastError(ERROR_INVALID_COMPUTERNAME);
- return NULL;
- }
- }
-
- Status = ElfrRegisterEventSourceW(pLog->BindingHandle,
- (LPWSTR)lpUNCServerName,
- &SourceName,
- &EmptyString,
- 0,
- 0,
- &pLog->LogHandle);
if (!NT_SUCCESS(Status))
{
SetLastError(RtlNtStatusToDosError(Status));
- HeapFree(GetProcessHeap(), 0, pLog);
return NULL;
}
- return pLog;
+ return (HANDLE)LogHandle;
}
@@ -850,7 +872,7 @@ ReportEventA(IN HANDLE hEventLog,
HeapFree(GetProcessHeap(),
0,
- wideStrArray);
+ (PVOID)wideStrArray);
return ret;
}
@@ -882,21 +904,13 @@ ReportEventW(IN HANDLE hEventLog,
IN LPVOID lpRawData)
{
#if 0
- PLOG_INFO pLog;
NTSTATUS Status;
UNICODE_STRING *Strings;
WORD i;
TRACE("%p, %u, %u, %lu, %p, %u, %lu, %p, %p\n",
- hEventLog, wType, wCategory, dwEventID, lpUserSid,
- wNumStrings, dwDataSize, lpStrings, lpRawData);
-
- pLog = (PLOG_INFO)hEventLog;
- if (!pLog)
- {
- SetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
- }
+ hEventLog, wType, wCategory, dwEventID, lpUserSid,
+ wNumStrings, dwDataSize, lpStrings, lpRawData);
Strings = HeapAlloc(GetProcessHeap(),
0,
@@ -910,21 +924,29 @@ ReportEventW(IN HANDLE hEventLog,
for (i = 0; i < wNumStrings; i++)
RtlInitUnicodeString(&Strings[i], lpStrings[i]);
- Status = ElfrReportEventW(pLog->BindingHandle,
- pLog->LogHandle,
- 0, /* FIXME: Time */
- wType,
- wCategory,
- dwEventID,
- wNumStrings,
- dwDataSize,
- L"", /* FIXME: ComputerName */
- lpUserSid,
- (LPWSTR *)lpStrings, /* FIXME: should be Strings */
- lpRawData,
- 0,
- NULL,
- NULL);
+ _SEH_TRY
+ {
+ Status = ElfrReportEventW(hEventLog,
+ 0, /* FIXME: Time */
+ wType,
+ wCategory,
+ dwEventID,
+ wNumStrings,
+ dwDataSize,
+ L"", /* FIXME: ComputerName */
+ lpUserSid,
+ (LPWSTR *)lpStrings, /* FIXME: should be Strings */
+ lpRawData,
+ 0,
+ NULL,
+ NULL);
+ }
+ _SEH_HANDLE
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ _SEH_END;
+
HeapFree(GetProcessHeap(), 0, Strings);
if (!NT_SUCCESS(Status))
diff --git a/reactos/dll/win32/advapi32/service/rpc.c b/reactos/dll/win32/advapi32/service/rpc.c
index ad60e401fff..8f73560028e 100644
--- a/reactos/dll/win32/advapi32/service/rpc.c
+++ b/reactos/dll/win32/advapi32/service/rpc.c
@@ -10,69 +10,6 @@
#include
-static RPC_BINDING_HANDLE LocalBindingHandle = NULL;
-
-RPC_STATUS
-EvtBindRpc(LPCWSTR pszMachine,
- RPC_BINDING_HANDLE* BindingHandle)
-{
- PWSTR pszStringBinding = NULL;
- RPC_STATUS Status;
-
- Status = RpcStringBindingComposeW(NULL,
- L"ncacn_np",
- (LPWSTR)pszMachine,
- L"\\pipe\\EventLog",
- NULL,
- &pszStringBinding);
- if (Status != RPC_S_OK)
- return Status;
-
- Status = RpcBindingFromStringBindingW(pszStringBinding,
- BindingHandle);
-
- RpcStringFreeW(&pszStringBinding);
-
- return Status;
-}
-
-RPC_STATUS
-EvtUnbindRpc(RPC_BINDING_HANDLE *BindingHandle)
-{
- if (BindingHandle != NULL)
- {
- RpcBindingFree(*BindingHandle);
- *BindingHandle = NULL;
- }
-
- return RPC_S_OK;
-}
-
-BOOL
-EvtGetLocalHandle(RPC_BINDING_HANDLE *BindingHandle)
-{
- if (LocalBindingHandle != NULL)
- {
- if (BindingHandle != NULL)
- *BindingHandle = LocalBindingHandle;
-
- return TRUE;
- }
-
- if (EvtBindRpc(NULL, &LocalBindingHandle) != RPC_S_OK)
- return FALSE;
-
- if (BindingHandle != NULL)
- *BindingHandle = LocalBindingHandle;
-
- return TRUE;
-}
-
-RPC_STATUS
-EvtUnbindLocalHandle(VOID)
-{
- return EvtUnbindRpc(&LocalBindingHandle);
-}
void __RPC_FAR * __RPC_USER
midl_user_allocate(size_t len)
diff --git a/reactos/dll/win32/advapi32/service/scm.c b/reactos/dll/win32/advapi32/service/scm.c
index beb5be0a2c3..6a4f23619c9 100644
--- a/reactos/dll/win32/advapi32/service/scm.c
+++ b/reactos/dll/win32/advapi32/service/scm.c
@@ -30,9 +30,9 @@ SVCCTL_HANDLEA_bind(SVCCTL_HANDLEA szMachineName)
TRACE("SVCCTL_HANDLEA_bind() called\n");
- status = RpcStringBindingComposeA((UCHAR *)szMachineName,
+ status = RpcStringBindingComposeA(NULL,
(UCHAR *)"ncacn_np",
- NULL,
+ (UCHAR *)szMachineName,
(UCHAR *)"\\pipe\\ntsvcs",
NULL,
(UCHAR **)&pszStringBinding);
@@ -85,9 +85,9 @@ SVCCTL_HANDLEW_bind(SVCCTL_HANDLEW szMachineName)
TRACE("SVCCTL_HANDLEW_bind() called\n");
- status = RpcStringBindingComposeW(szMachineName,
+ status = RpcStringBindingComposeW(NULL,
L"ncacn_np",
- NULL,
+ szMachineName,
L"\\pipe\\ntsvcs",
NULL,
&pszStringBinding);
diff --git a/reactos/dll/win32/advpack/advpack.rbuild b/reactos/dll/win32/advpack/advpack.rbuild
index 0d261c670f9..43aba2d623d 100644
--- a/reactos/dll/win32/advpack/advpack.rbuild
+++ b/reactos/dll/win32/advpack/advpack.rbuild
@@ -10,7 +10,6 @@
files.c
install.c
reg.c
- advpack.spec
wine
ole32
setupapi
diff --git a/reactos/dll/win32/atl/atl.rbuild b/reactos/dll/win32/atl/atl.rbuild
index cb88a00905c..e98915e4d72 100644
--- a/reactos/dll/win32/atl/atl.rbuild
+++ b/reactos/dll/win32/atl/atl.rbuild
@@ -13,7 +13,6 @@
registrar.c
rsrc.rc
.
- atl.spec
wine
uuid
ole32
diff --git a/reactos/dll/win32/avifil32/avifil32.rbuild b/reactos/dll/win32/avifil32/avifil32.rbuild
index bcd336e781a..49e524cf776 100644
--- a/reactos/dll/win32/avifil32/avifil32.rbuild
+++ b/reactos/dll/win32/avifil32/avifil32.rbuild
@@ -20,7 +20,6 @@
tmpfile.c
wavfile.c
rsrc.rc
- avifil32.spec
wine
uuid
msacm32
diff --git a/reactos/dll/win32/browseui/browseui.rbuild b/reactos/dll/win32/browseui/browseui.rbuild
index 4a417972175..881c743135c 100644
--- a/reactos/dll/win32/browseui/browseui.rbuild
+++ b/reactos/dll/win32/browseui/browseui.rbuild
@@ -21,5 +21,4 @@
browseui_main.c
regsvr.c
version.rc
- browseui.spec
diff --git a/reactos/dll/win32/cabinet/cabinet.rbuild b/reactos/dll/win32/cabinet/cabinet.rbuild
index f37cbd32fa7..76322332efa 100644
--- a/reactos/dll/win32/cabinet/cabinet.rbuild
+++ b/reactos/dll/win32/cabinet/cabinet.rbuild
@@ -10,7 +10,6 @@
fci.c
fdi.c
cabinet.rc
- cabinet.spec
wine
kernel32
ntdll
diff --git a/reactos/dll/win32/cards/cards.rbuild b/reactos/dll/win32/cards/cards.rbuild
index 065b1e17fa1..475fc1ca12d 100644
--- a/reactos/dll/win32/cards/cards.rbuild
+++ b/reactos/dll/win32/cards/cards.rbuild
@@ -10,5 +10,4 @@
user32
cards.c
cards.rc
- cards.spec
diff --git a/reactos/dll/win32/clusapi/clusapi.rbuild b/reactos/dll/win32/clusapi/clusapi.rbuild
index 83bb01777a0..5607268cf8d 100644
--- a/reactos/dll/win32/clusapi/clusapi.rbuild
+++ b/reactos/dll/win32/clusapi/clusapi.rbuild
@@ -9,5 +9,4 @@
kernel32
ntdll
clusapi.c
- clusapi.spec
diff --git a/reactos/dll/win32/comcat/comcat.rbuild b/reactos/dll/win32/comcat/comcat.rbuild
index 06c75d77554..f686d1bb8d7 100644
--- a/reactos/dll/win32/comcat/comcat.rbuild
+++ b/reactos/dll/win32/comcat/comcat.rbuild
@@ -21,5 +21,4 @@
register.c
regsvr.c
version.rc
- comcat.spec
diff --git a/reactos/dll/win32/comctl32/comctl32.rbuild b/reactos/dll/win32/comctl32/comctl32.rbuild
index 88993314ace..df91996af40 100644
--- a/reactos/dll/win32/comctl32/comctl32.rbuild
+++ b/reactos/dll/win32/comctl32/comctl32.rbuild
@@ -43,7 +43,6 @@
treeview.c
updown.c
rsrc.rc
- comctl32.spec
wine
user32
gdi32
diff --git a/reactos/dll/win32/comdlg32/comdlg32.rbuild b/reactos/dll/win32/comdlg32/comdlg32.rbuild
index 566faddc059..1d2285fe728 100644
--- a/reactos/dll/win32/comdlg32/comdlg32.rbuild
+++ b/reactos/dll/win32/comdlg32/comdlg32.rbuild
@@ -15,7 +15,6 @@
fontdlg.c
printdlg.c
rsrc.rc
- comdlg32.spec
wine
uuid
shell32
diff --git a/reactos/dll/win32/compstui/compstui.rbuild b/reactos/dll/win32/compstui/compstui.rbuild
index 5652687c4a9..8ed31853435 100644
--- a/reactos/dll/win32/compstui/compstui.rbuild
+++ b/reactos/dll/win32/compstui/compstui.rbuild
@@ -7,7 +7,6 @@
include/reactos/wine
compstui_main.c
- compstui.spec
wine
kernel32
ntdll
diff --git a/reactos/dll/win32/credui/credui.rbuild b/reactos/dll/win32/credui/credui.rbuild
index 0ef5423d39c..79a559cbaa8 100644
--- a/reactos/dll/win32/credui/credui.rbuild
+++ b/reactos/dll/win32/credui/credui.rbuild
@@ -10,7 +10,6 @@
0x600
credui_main.c
credui.rc
- credui.spec
wine
advapi32
user32
diff --git a/reactos/dll/win32/crtdll/crtdll.rbuild b/reactos/dll/win32/crtdll/crtdll.rbuild
index 2bf6601f660..ec156f961ab 100644
--- a/reactos/dll/win32/crtdll/crtdll.rbuild
+++ b/reactos/dll/win32/crtdll/crtdll.rbuild
@@ -1,4 +1,4 @@
-
+
.
include
@@ -21,5 +21,4 @@
precomp.h
dllmain.c
crtdll.rc
- crtdll.spec
diff --git a/reactos/dll/win32/crypt32/crypt32.rbuild b/reactos/dll/win32/crypt32/crypt32.rbuild
index c02a8ba981e..1c4eaab0001 100644
--- a/reactos/dll/win32/crypt32/crypt32.rbuild
+++ b/reactos/dll/win32/crypt32/crypt32.rbuild
@@ -35,5 +35,4 @@
ctl.c
message.c
crypt32.rc
- crypt32.spec
diff --git a/reactos/dll/win32/cryptdll/cryptdll.rbuild b/reactos/dll/win32/cryptdll/cryptdll.rbuild
index b43fc9b0c4f..c5fe617d7cd 100644
--- a/reactos/dll/win32/cryptdll/cryptdll.rbuild
+++ b/reactos/dll/win32/cryptdll/cryptdll.rbuild
@@ -10,5 +10,4 @@
kernel32
ntdll
cryptdll.c
- cryptdll.spec
diff --git a/reactos/dll/win32/cryptnet/cryptnet.rbuild b/reactos/dll/win32/cryptnet/cryptnet.rbuild
index 08e26fe308b..f305e535b87 100644
--- a/reactos/dll/win32/cryptnet/cryptnet.rbuild
+++ b/reactos/dll/win32/cryptnet/cryptnet.rbuild
@@ -13,6 +13,5 @@
wininet
ntdll
cryptnet_main.c
- cryptnet.spec
diff --git a/reactos/dll/win32/cryptui/cryptui.rbuild b/reactos/dll/win32/cryptui/cryptui.rbuild
index d6cc54788e2..4c557e21ce2 100644
--- a/reactos/dll/win32/cryptui/cryptui.rbuild
+++ b/reactos/dll/win32/cryptui/cryptui.rbuild
@@ -8,7 +8,6 @@
include/reactos/wine
main.c
- cryptui.spec
wine
kernel32
ntdll
diff --git a/reactos/dll/win32/dbghelp/dbghelp.rbuild b/reactos/dll/win32/dbghelp/dbghelp.rbuild
index 4b63919f918..ede50cb61e9 100644
--- a/reactos/dll/win32/dbghelp/dbghelp.rbuild
+++ b/reactos/dll/win32/dbghelp/dbghelp.rbuild
@@ -25,7 +25,6 @@
storage.c
symbol.c
type.c
- dbghelp.spec
wine
psapi
kernel32
diff --git a/reactos/dll/win32/dciman32/dciman32.rbuild b/reactos/dll/win32/dciman32/dciman32.rbuild
index 38154e3114f..0b66c35a7b6 100644
--- a/reactos/dll/win32/dciman32/dciman32.rbuild
+++ b/reactos/dll/win32/dciman32/dciman32.rbuild
@@ -7,7 +7,6 @@
include/reactos/wine
dciman_main.c
- dciman32.spec
wine
kernel32
ntdll
diff --git a/reactos/dll/win32/devmgr/devmgr.rbuild b/reactos/dll/win32/devmgr/devmgr.rbuild
index 25f74e8df42..293ff1451c1 100644
--- a/reactos/dll/win32/devmgr/devmgr.rbuild
+++ b/reactos/dll/win32/devmgr/devmgr.rbuild
@@ -12,6 +12,5 @@
hwpage.c
misc.c
stubs.c
- devmgr.spec
precomp.h
diff --git a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild b/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild
index 716259251f6..d664f66aea5 100644
--- a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild
+++ b/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild
@@ -8,5 +8,4 @@
iphlpapi
dhcpcsvc.c
dhcpcsvc.rc
- dhcpcsvc.spec
diff --git a/reactos/dll/win32/fmifs/fmifs.rbuild b/reactos/dll/win32/fmifs/fmifs.rbuild
index e9101008b9a..39170c32b82 100644
--- a/reactos/dll/win32/fmifs/fmifs.rbuild
+++ b/reactos/dll/win32/fmifs/fmifs.rbuild
@@ -13,6 +13,5 @@
media.c
query.c
fmifs.rc
- fmifs.spec
precomp.h
diff --git a/reactos/dll/win32/fusion/fusion.rbuild b/reactos/dll/win32/fusion/fusion.rbuild
index c0e9128c52d..bef97c68936 100644
--- a/reactos/dll/win32/fusion/fusion.rbuild
+++ b/reactos/dll/win32/fusion/fusion.rbuild
@@ -14,5 +14,4 @@
assembly.c
fusion.c
fusion_main.c
- fusion.spec
diff --git a/reactos/dll/win32/gdi32/gdi32.rbuild b/reactos/dll/win32/gdi32/gdi32.rbuild
index a02b13d973f..9c3608cb33a 100644
--- a/reactos/dll/win32/gdi32/gdi32.rbuild
+++ b/reactos/dll/win32/gdi32/gdi32.rbuild
@@ -10,7 +10,6 @@
pseh
dxguid
ntdll
-
precomp.h
@@ -49,5 +48,4 @@
path.c
gdi32.rc
- gdi32.spec
diff --git a/reactos/dll/win32/gdi32/include/gdi32p.h b/reactos/dll/win32/gdi32/include/gdi32p.h
index 9656ba5fe6a..43020095184 100644
--- a/reactos/dll/win32/gdi32/include/gdi32p.h
+++ b/reactos/dll/win32/gdi32/include/gdi32p.h
@@ -31,7 +31,8 @@ typedef INT
#define METAFILE_DISK 2
/* MACRO ********************************************************************/
-#define ROP_USES_SOURCE(Rop) ((Rop << 2) ^ Rop) & 0xCC0000
+
+#define ROP_USES_SOURCE(Rop) (((Rop) << 2 ^ Rop) & 0xCC0000)
/* TYPES *********************************************************************/
@@ -101,6 +102,11 @@ typedef struct _UMPDEV
WCHAR String[188];
} UMPDEV, *PUMPDEV;
+#define LOCALFONT_COUNT 10
+typedef struct _LOCALFONT
+{
+ FONT_ATTR lfa[LOCALFONT_COUNT];
+} LOCALFONT, *PLOCALFONT;
/* FUNCTIONS *****************************************************************/
@@ -224,5 +230,7 @@ VOID
STDCALL
GdiSetLastError( DWORD dwErrCode );
+DWORD STDCALL GdiGetCodePage(HDC);
+
/* EOF */
diff --git a/reactos/dll/win32/gdi32/misc/stubs.c b/reactos/dll/win32/gdi32/misc/stubs.c
index 6e440053f8f..4d876576946 100644
--- a/reactos/dll/win32/gdi32/misc/stubs.c
+++ b/reactos/dll/win32/gdi32/misc/stubs.c
@@ -173,21 +173,6 @@ GetMetaFileBitsEx(
return 0;
}
-
-/*
- * @unimplemented
- */
-DWORD
-STDCALL
-GetFontLanguageInfo(
- HDC hDc
- )
-{
- UNIMPLEMENTED;
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-
/*
* @unimplemented
*/
@@ -561,7 +546,19 @@ STDCALL
UnrealizeObject(HGDIOBJ hgdiobj)
{
BOOL retValue = TRUE;
+/*
+ Win 2k Graphics API, Black Book. by coriolis.com
+ Page 62, Note that Steps 3, 5, and 6 are not required for Windows NT(tm)
+ and Windows 2000(tm).
+ Step 5. UnrealizeObject(hTrackBrush);
+ */
+/*
+ msdn.microsoft.com,
+ "Windows 2000/XP: If hgdiobj is a brush, UnrealizeObject does nothing,
+ and the function returns TRUE. Use SetBrushOrgEx to set the origin of
+ a brush."
+ */
if (GDI_HANDLE_GET_TYPE(hgdiobj) != GDI_OBJECT_TYPE_BRUSH)
{
retValue = NtGdiUnrealizeObject(hgdiobj);
diff --git a/reactos/dll/win32/gdi32/objects/dc.c b/reactos/dll/win32/gdi32/objects/dc.c
index bdb6d6b56c1..fbe4d05bf3e 100644
--- a/reactos/dll/win32/gdi32/objects/dc.c
+++ b/reactos/dll/win32/gdi32/objects/dc.c
@@ -1535,7 +1535,7 @@ SelectObject(HDC hDC,
HGDIOBJ hGdiObj)
{
PDC_ATTR pDc_Attr;
-// HGDIOBJ hOldObj = NULL;
+ HGDIOBJ hOldObj = NULL;
// PTEB pTeb;
if(!GdiGetHandleUserData(hDC, GDI_OBJECT_TYPE_DC, (PVOID)&pDc_Attr))
@@ -1580,10 +1580,15 @@ SelectObject(HDC hDC,
return NtGdiSelectPen(hDC, hGdiObj);
case GDI_OBJECT_TYPE_FONT:
+ hOldObj = pDc_Attr->hlfntNew;
+ if (hOldObj == hGdiObj) return hOldObj;
#if 0
+ pDc_Attr->ulDirty_ &= ~SLOW_WIDTHS;
+ pDc_Attr->ulDirty_ |= DIRTY_CHARSET;
+ pDc_Attr->hlfntNew = hGdiObj;
pTeb = NtCurrentTeb();
if (((pTeb->GdiTebBatch.HDC == 0) ||
- (pTeb->GdiTebBatch.HDC == (ULONG)hDC)) &&
+ (pTeb->GdiTebBatch.HDC == hDC)) &&
((pTeb->GdiTebBatch.Offset + sizeof(GDIBSOBJECT)) <= GDIBATCHBUFSIZE) &&
(!(pDc_Attr->ulDirty_ & DC_DIBSECTION)))
{
@@ -1594,14 +1599,15 @@ SelectObject(HDC hDC,
pgO->hgdiobj = hGdiObj;
pTeb->GdiTebBatch.Offset += sizeof(GDIBSOBJECT);
- pTeb->GdiTebBatch.HDC = (ULONG)hDC;
+ pTeb->GdiTebBatch.HDC = hDC;
pTeb->GdiBatchCount++;
if (pTeb->GdiBatchCount >= GDI_BatchLimit) NtGdiFlush();
- return pDc_Attr->hlfntNew;
+ return hOldObj;
}
#endif
// default for select object font
return NtGdiSelectFont(hDC, hGdiObj);
+
#if 0
case GDI_OBJECT_TYPE_METADC:
return MFDRV_SelectObject( hDC, hGdiObj);
diff --git a/reactos/dll/win32/gdi32/objects/font.c b/reactos/dll/win32/gdi32/objects/font.c
index faf74891296..c826254019e 100644
--- a/reactos/dll/win32/gdi32/objects/font.c
+++ b/reactos/dll/win32/gdi32/objects/font.c
@@ -16,46 +16,45 @@
/*
* For TranslateCharsetInfo
*/
-#define FS(x) {{0,0,0,0},{0x1<<(x),0}}
#define MAXTCIINDEX 32
static const CHARSETINFO FONT_tci[MAXTCIINDEX] = {
/* ANSI */
- { ANSI_CHARSET, 1252, FS(0)},
- { EASTEUROPE_CHARSET, 1250, FS(1)},
- { RUSSIAN_CHARSET, 1251, FS(2)},
- { GREEK_CHARSET, 1253, FS(3)},
- { TURKISH_CHARSET, 1254, FS(4)},
- { HEBREW_CHARSET, 1255, FS(5)},
- { ARABIC_CHARSET, 1256, FS(6)},
- { BALTIC_CHARSET, 1257, FS(7)},
- { VIETNAMESE_CHARSET, 1258, FS(8)},
+ { ANSI_CHARSET, 1252, {{0,0,0,0},{FS_LATIN1,0}} },
+ { EASTEUROPE_CHARSET, 1250, {{0,0,0,0},{FS_LATIN2,0}} },
+ { RUSSIAN_CHARSET, 1251, {{0,0,0,0},{FS_CYRILLIC,0}} },
+ { GREEK_CHARSET, 1253, {{0,0,0,0},{FS_GREEK,0}} },
+ { TURKISH_CHARSET, 1254, {{0,0,0,0},{FS_TURKISH,0}} },
+ { HEBREW_CHARSET, 1255, {{0,0,0,0},{FS_HEBREW,0}} },
+ { ARABIC_CHARSET, 1256, {{0,0,0,0},{FS_ARABIC,0}} },
+ { BALTIC_CHARSET, 1257, {{0,0,0,0},{FS_BALTIC,0}} },
+ { VIETNAMESE_CHARSET, 1258, {{0,0,0,0},{FS_VIETNAMESE,0}} },
/* reserved by ANSI */
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
/* ANSI and OEM */
- { THAI_CHARSET, 874, FS(16)},
- { SHIFTJIS_CHARSET, 932, FS(17)},
- { GB2312_CHARSET, 936, FS(18)},
- { HANGEUL_CHARSET, 949, FS(19)},
- { CHINESEBIG5_CHARSET, 950, FS(20)},
- { JOHAB_CHARSET, 1361, FS(21)},
+ { THAI_CHARSET, 874, {{0,0,0,0},{FS_THAI,0}} },
+ { SHIFTJIS_CHARSET, 932, {{0,0,0,0},{FS_JISJAPAN,0}} },
+ { GB2312_CHARSET, 936, {{0,0,0,0},{FS_CHINESESIMP,0}} },
+ { HANGEUL_CHARSET, 949, {{0,0,0,0},{FS_WANSUNG,0}} },
+ { CHINESEBIG5_CHARSET, 950, {{0,0,0,0},{FS_CHINESETRAD,0}} },
+ { JOHAB_CHARSET, 1361, {{0,0,0,0},{FS_JOHAB,0}} },
/* reserved for alternate ANSI and OEM */
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
/* reserved for system */
- { DEFAULT_CHARSET, 0, FS(0)},
- { SYMBOL_CHARSET, CP_SYMBOL, FS(31)},
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { SYMBOL_CHARSET, CP_SYMBOL, {{0,0,0,0},{FS_SYMBOL,0}} }
};
#define INITIAL_FAMILY_COUNT 64
@@ -101,7 +100,7 @@ static void FONT_TextMetricWToA(const TEXTMETRICW *ptmW, LPTEXTMETRICA ptmA )
*/
static LPWSTR FONT_mbtowc(HDC hdc, LPCSTR str, INT count, INT *plenW, UINT *pCP)
{
- UINT cp = CP_ACP; // GdiGetCodePage( hdc );
+ UINT cp = GdiGetCodePage( hdc );
INT lenW;
LPWSTR strW;
@@ -660,7 +659,7 @@ GetCharWidthA(
str[i] = (BYTE)(iFirstChar + i);
str[i] = '\0';
- wstr = FONT_mbtowc(NULL, str, count+1, &wlen, NULL);
+ wstr = FONT_mbtowc(hdc, str, count+1, &wlen, NULL);
if (!wstr)
{
HeapFree(GetProcessHeap(), 0, str);
@@ -707,7 +706,7 @@ GetCharWidth32A(
str[i] = (BYTE)(iFirstChar + i);
str[i] = '\0';
- wstr = FONT_mbtowc(NULL, str, count+1, &wlen, NULL);
+ wstr = FONT_mbtowc(hdc, str, count+1, &wlen, NULL);
if (!wstr)
{
HeapFree(GetProcessHeap(), 0, str);
@@ -754,7 +753,7 @@ GetCharWidthFloatA(
str[i] = (BYTE)(iFirstChar + i);
str[i] = '\0';
- wstr = FONT_mbtowc(NULL, str, count+1, &wlen, NULL);
+ wstr = FONT_mbtowc(hdc, str, count+1, &wlen, NULL);
if (!wstr)
{
HeapFree(GetProcessHeap(), 0, str);
@@ -904,6 +903,18 @@ GetCharWidthI(HDC hdc,
(PVOID) lpBuffer );
}
+/*
+ * @implemented
+ */
+DWORD
+STDCALL
+GetFontLanguageInfo(
+ HDC hDc
+ )
+{
+ return GetDCDWord(hDc, GdiGetFontLanguageInfo, GCP_ERROR);
+}
+
/*
* @implemented
*/
@@ -958,7 +969,7 @@ GetGlyphOutlineA(
len = 1;
mbchs[0] = (uChar & 0xff);
}
- p = FONT_mbtowc(NULL, mbchs, len, NULL, NULL);
+ p = FONT_mbtowc(hdc, mbchs, len, NULL, NULL);
c = p[0];
} else
c = uChar;
@@ -1343,6 +1354,8 @@ CreateFontIndirectW(
RtlZeroMemory( &Logfont.elfEnumLogfontEx.elfScript,
sizeof(Logfont.elfEnumLogfontEx.elfScript));
+ Logfont.elfDesignVector.dvNumAxes = 0; // No more than MM_MAX_NUMAXES
+
RtlZeroMemory( &Logfont.elfDesignVector, sizeof(DESIGNVECTOR));
return CreateFontIndirectExW(&Logfont);
diff --git a/reactos/dll/win32/gdiplus/gdiplus.rbuild b/reactos/dll/win32/gdiplus/gdiplus.rbuild
index 5d488f86d42..f8890964882 100644
--- a/reactos/dll/win32/gdiplus/gdiplus.rbuild
+++ b/reactos/dll/win32/gdiplus/gdiplus.rbuild
@@ -19,7 +19,6 @@
pen.c
region.c
stringformat.c
- gdiplus.spec
wine
uuid
shlwapi
diff --git a/reactos/dll/win32/getuname/getuname.rbuild b/reactos/dll/win32/getuname/getuname.rbuild
index 55656dd3293..164140cf35d 100644
--- a/reactos/dll/win32/getuname/getuname.rbuild
+++ b/reactos/dll/win32/getuname/getuname.rbuild
@@ -6,5 +6,4 @@
ntdll
getuname.c
getuname.rc
- getuname.spec
diff --git a/reactos/dll/win32/glu32/glu32.rbuild b/reactos/dll/win32/glu32/glu32.rbuild
index bb5185877d4..23c14d76746 100644
--- a/reactos/dll/win32/glu32/glu32.rbuild
+++ b/reactos/dll/win32/glu32/glu32.rbuild
@@ -14,7 +14,6 @@
opengl32
kernel32
gdi32
- glu32.spec
bezierEval.cc
diff --git a/reactos/dll/win32/hhctrl.ocx/hhctrl.ocx.rbuild b/reactos/dll/win32/hhctrl.ocx/hhctrl.ocx.rbuild
index e066e359a48..13c9f76ebe1 100644
--- a/reactos/dll/win32/hhctrl.ocx/hhctrl.ocx.rbuild
+++ b/reactos/dll/win32/hhctrl.ocx/hhctrl.ocx.rbuild
@@ -17,7 +17,6 @@
regsvr.c
webbrowser.c
hhctrl.rc
- hhctrl.ocx.spec
wine
advapi32
comctl32
diff --git a/reactos/dll/win32/hlink/hlink.rbuild b/reactos/dll/win32/hlink/hlink.rbuild
index 0b020802982..4d03b9de274 100644
--- a/reactos/dll/win32/hlink/hlink.rbuild
+++ b/reactos/dll/win32/hlink/hlink.rbuild
@@ -11,7 +11,6 @@
extserv.c
hlink_main.c
link.c
- hlink.spec
wine
shell32
ole32
diff --git a/reactos/dll/win32/icmp/icmp.rbuild b/reactos/dll/win32/icmp/icmp.rbuild
index 8da93de7a01..28c0bbfa90a 100644
--- a/reactos/dll/win32/icmp/icmp.rbuild
+++ b/reactos/dll/win32/icmp/icmp.rbuild
@@ -8,5 +8,4 @@
wine
icmp_main.c
icmp.rc
- icmp.spec
diff --git a/reactos/dll/win32/imagehlp/imagehlp.rbuild b/reactos/dll/win32/imagehlp/imagehlp.rbuild
index 1abe0f839b8..79074245e4a 100644
--- a/reactos/dll/win32/imagehlp/imagehlp.rbuild
+++ b/reactos/dll/win32/imagehlp/imagehlp.rbuild
@@ -10,6 +10,5 @@
integrity.c
modify.c
imagehlp.rc
- imagehlp.spec
precomp.h
diff --git a/reactos/dll/win32/imm32/imm32.rbuild b/reactos/dll/win32/imm32/imm32.rbuild
index f6140f76ee0..c0cd3c67471 100644
--- a/reactos/dll/win32/imm32/imm32.rbuild
+++ b/reactos/dll/win32/imm32/imm32.rbuild
@@ -9,7 +9,6 @@
0x600
imm.c
version.rc
- imm32.spec
wine
user32
gdi32
diff --git a/reactos/dll/win32/inetcomm/imaptransport.c b/reactos/dll/win32/inetcomm/imaptransport.c
new file mode 100644
index 00000000000..4cef0838d23
--- /dev/null
+++ b/reactos/dll/win32/inetcomm/imaptransport.c
@@ -0,0 +1,511 @@
+/*
+ * IMAP Transport
+ *
+ * Copyright 2008 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define COBJMACROS
+
+#include
+#include
+
+#include "windef.h"
+#include "winbase.h"
+#include "winnt.h"
+#include "winuser.h"
+#include "objbase.h"
+#include "mimeole.h"
+#include "wine/debug.h"
+
+#include "inetcomm_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(inetcomm);
+
+typedef struct
+{
+ InternetTransport InetTransport;
+ ULONG refs;
+} IMAPTransport;
+
+static HRESULT WINAPI IMAPTransport_QueryInterface(IIMAPTransport *iface, REFIID riid, void **ppv)
+{
+ TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
+
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IInternetTransport) ||
+ IsEqualIID(riid, &IID_IIMAPTransport))
+ {
+ *ppv = iface;
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+ *ppv = NULL;
+ FIXME("no interface for %s\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI IMAPTransport_AddRef(IIMAPTransport *iface)
+{
+ IMAPTransport *This = (IMAPTransport *)iface;
+ return InterlockedIncrement((LONG *)&This->refs);
+}
+
+static ULONG WINAPI IMAPTransport_Release(IIMAPTransport *iface)
+{
+ IMAPTransport *This = (IMAPTransport *)iface;
+ ULONG refs = InterlockedDecrement((LONG *)&This->refs);
+ if (!refs)
+ {
+ TRACE("destroying %p\n", This);
+ if (This->InetTransport.Status != IXP_DISCONNECTED)
+ InternetTransport_DropConnection(&This->InetTransport);
+ if (This->InetTransport.pCallback) ITransportCallback_Release(This->InetTransport.pCallback);
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+ return refs;
+}
+
+static HRESULT WINAPI IMAPTransport_GetServerInfo(IIMAPTransport *iface,
+ LPINETSERVER pInetServer)
+{
+ IMAPTransport *This = (IMAPTransport *)iface;
+
+ TRACE("(%p)\n", pInetServer);
+ return InternetTransport_GetServerInfo(&This->InetTransport, pInetServer);
+}
+
+static IXPTYPE WINAPI IMAPTransport_GetIXPType(IIMAPTransport *iface)
+{
+ TRACE("()\n");
+ return IXP_IMAP;
+}
+
+static HRESULT WINAPI IMAPTransport_IsState(IIMAPTransport *iface,
+ IXPISSTATE isstate)
+{
+ FIXME("(%d): stub\n", isstate);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_InetServerFromAccount(
+ IIMAPTransport *iface, IImnAccount *pAccount, LPINETSERVER pInetServer)
+{
+ IMAPTransport *This = (IMAPTransport *)iface;
+
+ TRACE("(%p, %p)\n", pAccount, pInetServer);
+ return InternetTransport_InetServerFromAccount(&This->InetTransport, pAccount, pInetServer);
+}
+
+static HRESULT WINAPI IMAPTransport_Connect(IIMAPTransport *iface,
+ LPINETSERVER pInetServer, boolean fAuthenticate, boolean fCommandLogging)
+{
+ IMAPTransport *This = (IMAPTransport *)iface;
+ HRESULT hr;
+
+ TRACE("(%p, %s, %s)\n", pInetServer, fAuthenticate ? "TRUE" : "FALSE", fCommandLogging ? "TRUE" : "FALSE");
+
+ hr = InternetTransport_Connect(&This->InetTransport, pInetServer, fAuthenticate, fCommandLogging);
+ return hr;
+}
+
+static HRESULT WINAPI IMAPTransport_HandsOffCallback(IIMAPTransport *iface)
+{
+ IMAPTransport *This = (IMAPTransport *)iface;
+
+ TRACE("()\n");
+ return InternetTransport_HandsOffCallback(&This->InetTransport);
+}
+
+static HRESULT WINAPI IMAPTransport_Disconnect(IIMAPTransport *iface)
+{
+ FIXME("(): stub\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_DropConnection(IIMAPTransport *iface)
+{
+ IMAPTransport *This = (IMAPTransport *)iface;
+
+ TRACE("()\n");
+ return InternetTransport_DropConnection(&This->InetTransport);
+}
+
+static HRESULT WINAPI IMAPTransport_GetStatus(IIMAPTransport *iface,
+ IXPSTATUS *pCurrentStatus)
+{
+ IMAPTransport *This = (IMAPTransport *)iface;
+
+ TRACE("()\n");
+ return InternetTransport_GetStatus(&This->InetTransport, pCurrentStatus);
+}
+
+static HRESULT WINAPI IMAPTransport_InitNew(IIMAPTransport *iface,
+ LPSTR pszLogFilePath, IIMAPCallback *pCallback)
+{
+ IMAPTransport *This = (IMAPTransport *)iface;
+
+ TRACE("(%s, %p)\n", debugstr_a(pszLogFilePath), pCallback);
+
+ if (!pCallback)
+ return E_INVALIDARG;
+
+ if (pszLogFilePath)
+ FIXME("not using log file of %s, use Wine debug logging instead\n",
+ debugstr_a(pszLogFilePath));
+
+ IIMAPCallback_AddRef(pCallback);
+ This->InetTransport.pCallback = (ITransportCallback *)pCallback;
+ This->InetTransport.fInitialised = TRUE;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI IMAPTransport_NewIRangeList(IIMAPTransport *iface,
+ IRangeList **pprlNewRangeList)
+{
+ FIXME("(%p): stub\n", pprlNewRangeList);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Capability(IIMAPTransport *iface,
+ DWORD *pdwCapabilityFlags)
+{
+ FIXME("(%p): stub\n", pdwCapabilityFlags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Select(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName)
+{
+ FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Examine(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName)
+{
+ FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Create(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName)
+{
+ FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Delete(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName)
+{
+ FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Rename(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam,
+ IIMAPCallback *pCBHandler, LPSTR lpszMailboxName, LPSTR lpszNewMailboxName)
+{
+ FIXME("(%ld, %ld, %p, %s, %s): stub\n", wParam, lParam, pCBHandler,
+ debugstr_a(lpszMailboxName), debugstr_a(lpszNewMailboxName));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Subscribe(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName)
+{
+ FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Unsubscribe(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName)
+{
+ FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_List(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam,
+ IIMAPCallback *pCBHandler, LPSTR lpszMailboxNameReference, LPSTR lpszMailboxNamePattern)
+{
+ FIXME("(%ld, %ld, %p, %s, %s): stub\n", wParam, lParam, pCBHandler,
+ debugstr_a(lpszMailboxNameReference), debugstr_a(lpszMailboxNamePattern));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Lsub(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam,
+ IIMAPCallback *pCBHandler, LPSTR lpszMailboxNameReference, LPSTR lpszMailboxNamePattern)
+{
+ FIXME("(%ld, %ld, %p, %s, %s): stub\n", wParam, lParam, pCBHandler,
+ debugstr_a(lpszMailboxNameReference), debugstr_a(lpszMailboxNamePattern));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Append(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName,
+ LPSTR lpszMessageFlags, FILETIME ftMessageDateTime, LPSTREAM lpstmMessageToSave)
+{
+ FIXME("(%ld, %ld, %p, %s, %s, %p): stub\n", wParam, lParam, pCBHandler,
+ debugstr_a(lpszMailboxName), debugstr_a(lpszMessageFlags), lpstmMessageToSave);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Close(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler)
+{
+ FIXME("(%ld, %ld, %p): stub\n", wParam, lParam, pCBHandler);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Expunge(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler)
+{
+ FIXME("(%ld, %ld, %p): stub\n", wParam, lParam, pCBHandler);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Search(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszSearchCriteria,
+ boolean bReturnUIDs, IRangeList *pMsgRange, boolean bUIDRangeList)
+{
+ FIXME("(%ld, %ld, %p, %s, %d, %p, %d): stub\n", wParam, lParam, pCBHandler,
+ debugstr_a(lpszSearchCriteria), bReturnUIDs, pMsgRange, bUIDRangeList);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Fetch(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam,
+ IIMAPCallback *pCBHandler, IRangeList *pMsgRange, boolean bUIDMsgRange, LPSTR lpszFetchArgs)
+{
+ FIXME("(%ld, %ld, %p, %p, %d, %s): stub\n", wParam, lParam, pCBHandler, pMsgRange,
+ bUIDMsgRange, debugstr_a(lpszFetchArgs));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Store(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam,
+ IIMAPCallback *pCBHandler, IRangeList *pMsgRange, boolean bUIDRangeList, LPSTR lpszStoreArgs)
+{
+ FIXME("(%ld, %ld, %p, %p, %d, %s): stub\n", wParam, lParam, pCBHandler, pMsgRange,
+ bUIDRangeList, debugstr_a(lpszStoreArgs));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Copy(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam,
+ IIMAPCallback *pCBHandler, IRangeList *pMsgRange, boolean bUIDRangeList, LPSTR lpszMailboxName)
+{
+ FIXME("(%ld, %ld, %p, %p, %d, %s): stub\n", wParam, lParam, pCBHandler, pMsgRange,
+ bUIDRangeList, debugstr_a(lpszMailboxName));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Noop(IIMAPTransport *iface,
+ WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler)
+{
+ FIXME("(%ld, %ld, %p): stub\n", wParam, lParam, pCBHandler);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_ResizeMsgSeqNumTable(IIMAPTransport *iface, DWORD dwSizeOfMbox)
+{
+ FIXME("(%u): stub\n", dwSizeOfMbox);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_UpdateSeqNumToUID(IIMAPTransport *iface,
+ DWORD dwMsgSeqNum, DWORD dwUID)
+{
+ FIXME("(%u, %u): stub\n", dwMsgSeqNum, dwUID);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_RemoveSequenceNum(IIMAPTransport *iface, DWORD dwDeletedMsgSeqNum)
+{
+ FIXME("(%u): stub\n", dwDeletedMsgSeqNum);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_MsgSeqNumToUID(IIMAPTransport *iface, DWORD dwMsgSeqNum,
+ DWORD *pdwUID)
+{
+ FIXME("(%u, %p): stub\n", dwMsgSeqNum, pdwUID);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_GetMsgSeqNumToUIDArray(IIMAPTransport *iface,
+ DWORD **ppdwMsgSeqNumToUIDArray, DWORD *pdwNumberOfElements)
+{
+ FIXME("(%p, %p): stub\n", ppdwMsgSeqNumToUIDArray, pdwNumberOfElements);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_GetHighestMsgSeqNum(IIMAPTransport *iface, DWORD *pdwHighestMSN)
+{
+ FIXME("(%p): stub\n", pdwHighestMSN);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_ResetMsgSeqNumToUID(IIMAPTransport *iface)
+{
+ FIXME("(): stub\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_SetDefaultCBHandler(IIMAPTransport *iface, IIMAPCallback *pCBHandler)
+{
+ FIXME("(%p): stub\n", pCBHandler);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IMAPTransport_Status(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam,
+ IIMAPCallback *pCBHandler, LPSTR pszMailboxName, LPSTR pszStatusCmdArgs)
+{
+ FIXME("(%ld, %ld, %p, %s, %s): stub\n", wParam, lParam, pCBHandler,
+ debugstr_a(pszMailboxName), debugstr_a(pszStatusCmdArgs));
+ return E_NOTIMPL;
+}
+
+static const IIMAPTransportVtbl IMAPTransportVtbl =
+{
+ IMAPTransport_QueryInterface,
+ IMAPTransport_AddRef,
+ IMAPTransport_Release,
+ IMAPTransport_GetServerInfo,
+ IMAPTransport_GetIXPType,
+ IMAPTransport_IsState,
+ IMAPTransport_InetServerFromAccount,
+ IMAPTransport_Connect,
+ IMAPTransport_HandsOffCallback,
+ IMAPTransport_Disconnect,
+ IMAPTransport_DropConnection,
+ IMAPTransport_GetStatus,
+ IMAPTransport_InitNew,
+ IMAPTransport_NewIRangeList,
+ IMAPTransport_Capability,
+ IMAPTransport_Select,
+ IMAPTransport_Examine,
+ IMAPTransport_Create,
+ IMAPTransport_Delete,
+ IMAPTransport_Rename,
+ IMAPTransport_Subscribe,
+ IMAPTransport_Unsubscribe,
+ IMAPTransport_List,
+ IMAPTransport_Lsub,
+ IMAPTransport_Append,
+ IMAPTransport_Close,
+ IMAPTransport_Expunge,
+ IMAPTransport_Search,
+ IMAPTransport_Fetch,
+ IMAPTransport_Store,
+ IMAPTransport_Copy,
+ IMAPTransport_Noop,
+ IMAPTransport_ResizeMsgSeqNumTable,
+ IMAPTransport_UpdateSeqNumToUID,
+ IMAPTransport_RemoveSequenceNum,
+ IMAPTransport_MsgSeqNumToUID,
+ IMAPTransport_GetMsgSeqNumToUIDArray,
+ IMAPTransport_GetHighestMsgSeqNum,
+ IMAPTransport_ResetMsgSeqNumToUID,
+ IMAPTransport_SetDefaultCBHandler,
+ IMAPTransport_Status
+};
+
+HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport)
+{
+ HRESULT hr;
+ IMAPTransport *This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
+ if (!This)
+ return E_OUTOFMEMORY;
+
+ This->InetTransport.u.vtblIMAP = &IMAPTransportVtbl;
+ This->refs = 0;
+ hr = InternetTransport_Init(&This->InetTransport);
+ if (FAILED(hr))
+ {
+ HeapFree(GetProcessHeap(), 0, This);
+ return hr;
+ }
+
+ *ppTransport = (IIMAPTransport *)&This->InetTransport.u.vtblIMAP;
+ IIMAPTransport_AddRef(*ppTransport);
+
+ return S_OK;
+}
+
+static HRESULT WINAPI IMAPTransportCF_QueryInterface(LPCLASSFACTORY iface,
+ REFIID riid, LPVOID *ppv)
+{
+ *ppv = NULL;
+ if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IClassFactory))
+ {
+ *ppv = iface;
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI IMAPTransportCF_AddRef(LPCLASSFACTORY iface)
+{
+ return 2; /* non-heap based object */
+}
+
+static ULONG WINAPI IMAPTransportCF_Release(LPCLASSFACTORY iface)
+{
+ return 1; /* non-heap based object */
+}
+
+static HRESULT WINAPI IMAPTransportCF_CreateInstance(LPCLASSFACTORY iface,
+ LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv)
+{
+ HRESULT hr;
+ IIMAPTransport *pImapTransport;
+
+ TRACE("(%p, %s, %p)\n", pUnk, debugstr_guid(riid), ppv);
+
+ *ppv = NULL;
+
+ if (pUnk)
+ return CLASS_E_NOAGGREGATION;
+
+ hr = CreateIMAPTransport(&pImapTransport);
+ if (FAILED(hr))
+ return hr;
+
+ hr = IIMAPTransport_QueryInterface(pImapTransport, riid, ppv);
+ IIMAPTransport_Release(pImapTransport);
+
+ return hr;
+}
+
+static HRESULT WINAPI IMAPTransportCF_LockServer(LPCLASSFACTORY iface, BOOL fLock)
+{
+ FIXME("(%d), stub!\n",fLock);
+ return S_OK;
+}
+
+static const IClassFactoryVtbl IMAPTransportCFVtbl =
+{
+ IMAPTransportCF_QueryInterface,
+ IMAPTransportCF_AddRef,
+ IMAPTransportCF_Release,
+ IMAPTransportCF_CreateInstance,
+ IMAPTransportCF_LockServer
+};
+static const IClassFactoryVtbl *IMAPTransportCF = &IMAPTransportCFVtbl;
+
+HRESULT IMAPTransportCF_Create(REFIID riid, LPVOID *ppv)
+{
+ return IClassFactory_QueryInterface((IClassFactory *)&IMAPTransportCF, riid, ppv);
+}
diff --git a/reactos/dll/win32/inetcomm/inetcomm.rbuild b/reactos/dll/win32/inetcomm/inetcomm.rbuild
index 88ab3d28e90..e47321ffaa9 100644
--- a/reactos/dll/win32/inetcomm/inetcomm.rbuild
+++ b/reactos/dll/win32/inetcomm/inetcomm.rbuild
@@ -8,14 +8,18 @@
include/reactos/wine
0x600
+ imaptransport.c
inetcomm_main.c
internettransport.c
+ mimeintl.c
mimeole.c
+ pop3transport.c
regsvr.c
- inetcomm.spec
+ smtptransport.c
wine
uuid
ole32
+ oleaut32
ws2_32
user32
advapi32
diff --git a/reactos/dll/win32/inetcomm/inetcomm.spec b/reactos/dll/win32/inetcomm/inetcomm.spec
index 36a5d8bd52f..0c90b4db28e 100644
--- a/reactos/dll/win32/inetcomm/inetcomm.spec
+++ b/reactos/dll/win32/inetcomm/inetcomm.spec
@@ -1,10 +1,10 @@
@ stub CreateIMAPTransport2
-@ stub CreateIMAPTransport
+@ stdcall CreateIMAPTransport(ptr)
@ stub CreateNNTPTransport
-@ stub CreatePOP3Transport
+@ stdcall CreatePOP3Transport(ptr)
@ stub CreateRASTransport
@ stub CreateRangeList
-@ stub CreateSMTPTransport
+@ stdcall CreateSMTPTransport(ptr)
@ stdcall -private DllCanUnloadNow()
@ stdcall -private DllGetClassObject(ptr ptr ptr)
@ stdcall -private DllRegisterServer()
@@ -59,7 +59,7 @@
@ stub MimeOleDecodeHeader
@ stub MimeOleEncodeHeader
@ stub MimeOleFileTimeToInetDate
-@ stub MimeOleFindCharset
+@ stdcall MimeOleFindCharset(str ptr)
@ stub MimeOleGenerateCID
@ stub MimeOleGenerateFileName
@ stub MimeOleGenerateMID
@@ -71,12 +71,12 @@
@ stub MimeOleGetCodePageCharset
@ stub MimeOleGetCodePageInfo
@ stub MimeOleGetContentTypeExt
-@ stub MimeOleGetDefaultCharset
+@ stdcall MimeOleGetDefaultCharset(ptr)
@ stub MimeOleGetExtContentType
@ stub MimeOleGetFileExtension
@ stub MimeOleGetFileInfo
@ stub MimeOleGetFileInfoW
-@ stub MimeOleGetInternat
+@ stdcall MimeOleGetInternat(ptr)
@ stub MimeOleGetPropA
@ stub MimeOleGetPropW
@ stub MimeOleGetPropertySchema
diff --git a/reactos/dll/win32/inetcomm/inetcomm_main.c b/reactos/dll/win32/inetcomm/inetcomm_main.c
index 15350df89e2..1d71877782d 100644
--- a/reactos/dll/win32/inetcomm/inetcomm_main.c
+++ b/reactos/dll/win32/inetcomm/inetcomm_main.c
@@ -37,6 +37,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(inetcomm);
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
+ static IMimeInternational *international;
+
TRACE("(%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved);
switch (fdwReason)
@@ -47,8 +49,10 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
DisableThreadLibraryCalls(hinstDLL);
if (!InternetTransport_RegisterClass(hinstDLL))
return FALSE;
+ MimeInternational_Construct(&international);
break;
case DLL_PROCESS_DETACH:
+ IMimeInternational_Release(international);
InternetTransport_UnregisterClass(hinstDLL);
break;
default:
@@ -133,6 +137,8 @@ static const struct IClassFactoryVtbl cf_vtbl =
static cf mime_body_cf = { &cf_vtbl, MimeBody_create };
static cf mime_allocator_cf = { &cf_vtbl, MimeAllocator_create };
+static cf mime_message_cf = { &cf_vtbl, MimeMessage_create };
+static cf mime_security_cf = { &cf_vtbl, MimeSecurity_create };
/***********************************************************************
* DllGetClassObject (INETCOMM.@)
@@ -143,7 +149,27 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
TRACE("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv );
- if( IsEqualCLSID( rclsid, &CLSID_IMimeBody ))
+ if (IsEqualCLSID(rclsid, &CLSID_ISMTPTransport))
+ return SMTPTransportCF_Create(iid, ppv);
+
+ if (IsEqualCLSID(rclsid, &CLSID_ISMTPTransport2))
+ return SMTPTransportCF_Create(iid, ppv);
+
+ if (IsEqualCLSID(rclsid, &CLSID_IIMAPTransport))
+ return IMAPTransportCF_Create(iid, ppv);
+
+ if (IsEqualCLSID(rclsid, &CLSID_IPOP3Transport))
+ return POP3TransportCF_Create(iid, ppv);
+
+ if ( IsEqualCLSID( rclsid, &CLSID_IMimeSecurity ))
+ {
+ cf = (IClassFactory*) &mime_security_cf.lpVtbl;
+ }
+ else if( IsEqualCLSID( rclsid, &CLSID_IMimeMessage ))
+ {
+ cf = (IClassFactory*) &mime_message_cf.lpVtbl;
+ }
+ else if( IsEqualCLSID( rclsid, &CLSID_IMimeBody ))
{
cf = (IClassFactory*) &mime_body_cf.lpVtbl;
}
diff --git a/reactos/dll/win32/inetcomm/inetcomm_private.h b/reactos/dll/win32/inetcomm/inetcomm_private.h
index bf6e5ce31dd..589f92c3950 100644
--- a/reactos/dll/win32/inetcomm/inetcomm_private.h
+++ b/reactos/dll/win32/inetcomm/inetcomm_private.h
@@ -32,7 +32,9 @@ struct InternetTransport
union
{
const IInternetTransportVtbl *vtbl;
- const ISMTPTransportVtbl *vtblSMTP;
+ const ISMTPTransport2Vtbl *vtblSMTP2;
+ const IIMAPTransportVtbl *vtblIMAP;
+ const IPOP3TransportVtbl *vtblPOP3;
} u;
ITransportCallback *pCallback;
@@ -65,9 +67,19 @@ HRESULT InternetTransport_ReadLine(InternetTransport *This,
INETXPORT_COMPLETION_FUNCTION fnCompletion);
HRESULT InternetTransport_Write(InternetTransport *This, const char *pvData,
int cbSize, INETXPORT_COMPLETION_FUNCTION fnCompletion);
+HRESULT InternetTransport_DoCommand(InternetTransport *This,
+ LPCSTR pszCommand, INETXPORT_COMPLETION_FUNCTION fnCompletion);
BOOL InternetTransport_RegisterClass(HINSTANCE hInstance);
void InternetTransport_UnregisterClass(HINSTANCE hInstance);
HRESULT MimeBody_create(IUnknown *outer, void **obj);
HRESULT MimeAllocator_create(IUnknown *outer, void **obj);
+HRESULT MimeMessage_create(IUnknown *outer, void **obj);
+HRESULT MimeSecurity_create(IUnknown *outer, void **obj);
+
+HRESULT MimeInternational_Construct(IMimeInternational **internat);
+
+HRESULT SMTPTransportCF_Create(REFIID riid, LPVOID *ppv);
+HRESULT IMAPTransportCF_Create(REFIID riid, LPVOID *ppv);
+HRESULT POP3TransportCF_Create(REFIID riid, LPVOID *ppv);
diff --git a/reactos/dll/win32/inetcomm/internettransport.c b/reactos/dll/win32/inetcomm/internettransport.c
index bba6aaba110..7cef414434a 100644
--- a/reactos/dll/win32/inetcomm/internettransport.c
+++ b/reactos/dll/win32/inetcomm/internettransport.c
@@ -26,8 +26,12 @@
#include "windef.h"
#include "winbase.h"
#include "winnt.h"
+#include "winuser.h"
#include "winsock2.h"
#include "ws2tcpip.h"
+#include "objbase.h"
+#include "ole2.h"
+#include "mimeole.h"
#include "wine/debug.h"
@@ -270,6 +274,23 @@ HRESULT InternetTransport_Write(InternetTransport *This, const char *pvData,
return S_OK;
}
+HRESULT InternetTransport_DoCommand(InternetTransport *This,
+ LPCSTR pszCommand, INETXPORT_COMPLETION_FUNCTION fnCompletion)
+{
+ if (This->Status == IXP_DISCONNECTED)
+ return IXP_E_NOT_CONNECTED;
+
+ if (This->fnCompletion)
+ return IXP_E_BUSY;
+
+ if (This->pCallback && This->fCommandLogging)
+ {
+ ITransportCallback_OnCommand(This->pCallback, CMD_SEND, (LPSTR)pszCommand, 0,
+ (IInternetTransport *)&This->u.vtbl);
+ }
+ return InternetTransport_Write(This, pszCommand, strlen(pszCommand), fnCompletion);
+}
+
static LRESULT CALLBACK InternetTransport_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == IX_READ)
diff --git a/reactos/dll/win32/inetcomm/mimeintl.c b/reactos/dll/win32/inetcomm/mimeintl.c
new file mode 100644
index 00000000000..6d37147e2bf
--- /dev/null
+++ b/reactos/dll/win32/inetcomm/mimeintl.c
@@ -0,0 +1,596 @@
+/*
+ * MIME OLE International interface
+ *
+ * Copyright 2008 Huw Davies for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define COBJMACROS
+#define NONAMELESSUNION
+
+#include
+#include
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "winnls.h"
+#include "objbase.h"
+#include "ole2.h"
+#include "mimeole.h"
+#include "mlang.h"
+
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "wine/debug.h"
+
+#include "inetcomm_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(inetcomm);
+
+typedef struct
+{
+ struct list entry;
+ INETCSETINFO cs_info;
+} charset_entry;
+
+typedef struct
+{
+ const IMimeInternationalVtbl *lpVtbl;
+ LONG refs;
+ CRITICAL_SECTION cs;
+
+ struct list charsets;
+ LONG next_charset_handle;
+ HCHARSET default_charset;
+} internat;
+
+static inline internat *impl_from_IMimeInternational( IMimeInternational *iface )
+{
+ return (internat *)((char*)iface - FIELD_OFFSET(internat, lpVtbl));
+}
+
+static inline HRESULT get_mlang(IMultiLanguage **ml)
+{
+ return CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
+ &IID_IMultiLanguage, (void **)ml);
+}
+
+static HRESULT WINAPI MimeInternat_QueryInterface( IMimeInternational *iface, REFIID riid, LPVOID *ppobj )
+{
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IMimeInternational))
+ {
+ IMimeInternational_AddRef( iface );
+ *ppobj = iface;
+ return S_OK;
+ }
+
+ FIXME("interface %s not implemented\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI MimeInternat_AddRef( IMimeInternational *iface )
+{
+ internat *This = impl_from_IMimeInternational( iface );
+ return InterlockedIncrement(&This->refs);
+}
+
+static ULONG WINAPI MimeInternat_Release( IMimeInternational *iface )
+{
+ internat *This = impl_from_IMimeInternational( iface );
+ ULONG refs;
+
+ refs = InterlockedDecrement(&This->refs);
+ if (!refs)
+ {
+ charset_entry *charset, *cursor2;
+
+ LIST_FOR_EACH_ENTRY_SAFE(charset, cursor2, &This->charsets, charset_entry, entry)
+ {
+ list_remove(&charset->entry);
+ HeapFree(GetProcessHeap(), 0, charset);
+ }
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+
+ return refs;
+}
+
+static HRESULT WINAPI MimeInternat_SetDefaultCharset(IMimeInternational *iface, HCHARSET hCharset)
+{
+ internat *This = impl_from_IMimeInternational( iface );
+
+ TRACE("(%p)->(%p)\n", iface, hCharset);
+
+ if(hCharset == NULL) return E_INVALIDARG;
+ /* FIXME check hCharset is valid */
+
+ InterlockedExchangePointer(&This->default_charset, hCharset);
+
+ return S_OK;
+}
+
+static HRESULT WINAPI MimeInternat_GetDefaultCharset(IMimeInternational *iface, LPHCHARSET phCharset)
+{
+ internat *This = impl_from_IMimeInternational( iface );
+ HRESULT hr = S_OK;
+
+ TRACE("(%p)->(%p)\n", iface, phCharset);
+
+ if(This->default_charset == NULL)
+ {
+ HCHARSET hcs;
+ hr = IMimeInternational_GetCodePageCharset(iface, GetACP(), CHARSET_BODY, &hcs);
+ if(SUCCEEDED(hr))
+ InterlockedCompareExchangePointer(&This->default_charset, hcs, NULL);
+ }
+ *phCharset = This->default_charset;
+
+ return hr;
+}
+
+static HRESULT mlang_getcodepageinfo(UINT cp, MIMECPINFO *mlang_cp_info)
+{
+ HRESULT hr;
+ IMultiLanguage *ml;
+
+ hr = get_mlang(&ml);
+
+ if(SUCCEEDED(hr))
+ {
+ hr = IMultiLanguage_GetCodePageInfo(ml, cp, mlang_cp_info);
+ IMultiLanguage_Release(ml);
+ }
+ return hr;
+}
+
+static HRESULT WINAPI MimeInternat_GetCodePageCharset(IMimeInternational *iface, CODEPAGEID cpiCodePage,
+ CHARSETTYPE ctCsetType,
+ LPHCHARSET phCharset)
+{
+ HRESULT hr;
+ MIMECPINFO mlang_cp_info;
+
+ TRACE("(%p)->(%d, %d, %p)\n", iface, cpiCodePage, ctCsetType, phCharset);
+
+ *phCharset = NULL;
+
+ hr = mlang_getcodepageinfo(cpiCodePage, &mlang_cp_info);
+ if(SUCCEEDED(hr))
+ {
+ const WCHAR *charset_nameW = NULL;
+ char *charset_name;
+ DWORD len;
+
+ switch(ctCsetType)
+ {
+ case CHARSET_BODY:
+ charset_nameW = mlang_cp_info.wszBodyCharset;
+ break;
+ case CHARSET_HEADER:
+ charset_nameW = mlang_cp_info.wszHeaderCharset;
+ break;
+ case CHARSET_WEB:
+ charset_nameW = mlang_cp_info.wszWebCharset;
+ break;
+ default:
+ return MIME_E_INVALID_CHARSET_TYPE;
+ }
+ len = WideCharToMultiByte(CP_ACP, 0, charset_nameW, -1, NULL, 0, NULL, NULL);
+ charset_name = HeapAlloc(GetProcessHeap(), 0, len);
+ WideCharToMultiByte(CP_ACP, 0, charset_nameW, -1, charset_name, len, NULL, NULL);
+ hr = IMimeInternational_FindCharset(iface, charset_name, phCharset);
+ HeapFree(GetProcessHeap(), 0, charset_name);
+ }
+ return hr;
+}
+
+static HRESULT mlang_getcsetinfo(const char *charset, MIMECSETINFO *mlang_info)
+{
+ DWORD len = MultiByteToWideChar(CP_ACP, 0, charset, -1, NULL, 0);
+ BSTR bstr = SysAllocStringLen(NULL, len - 1);
+ HRESULT hr;
+ IMultiLanguage *ml;
+
+ MultiByteToWideChar(CP_ACP, 0, charset, -1, bstr, len);
+
+ hr = get_mlang(&ml);
+
+ if(SUCCEEDED(hr))
+ {
+ hr = IMultiLanguage_GetCharsetInfo(ml, bstr, mlang_info);
+ IMultiLanguage_Release(ml);
+ }
+ SysFreeString(bstr);
+ if(FAILED(hr)) hr = MIME_E_NOT_FOUND;
+ return hr;
+}
+
+static HCHARSET add_charset(struct list *list, MIMECSETINFO *mlang_info, HCHARSET handle)
+{
+ charset_entry *charset = HeapAlloc(GetProcessHeap(), 0, sizeof(*charset));
+
+ WideCharToMultiByte(CP_ACP, 0, mlang_info->wszCharset, -1,
+ charset->cs_info.szName, sizeof(charset->cs_info.szName), NULL, NULL);
+ charset->cs_info.cpiWindows = mlang_info->uiCodePage;
+ charset->cs_info.cpiInternet = mlang_info->uiInternetEncoding;
+ charset->cs_info.hCharset = handle;
+ charset->cs_info.dwReserved1 = 0;
+ list_add_head(list, &charset->entry);
+
+ return charset->cs_info.hCharset;
+}
+
+static HRESULT WINAPI MimeInternat_FindCharset(IMimeInternational *iface, LPCSTR pszCharset,
+ LPHCHARSET phCharset)
+{
+ internat *This = impl_from_IMimeInternational( iface );
+ HRESULT hr = MIME_E_NOT_FOUND;
+ charset_entry *charset;
+
+ TRACE("(%p)->(%s, %p)\n", iface, debugstr_a(pszCharset), phCharset);
+
+ *phCharset = NULL;
+
+ EnterCriticalSection(&This->cs);
+
+ LIST_FOR_EACH_ENTRY(charset, &This->charsets, charset_entry, entry)
+ {
+ if(!lstrcmpiA(charset->cs_info.szName, pszCharset))
+ {
+ *phCharset = charset->cs_info.hCharset;
+ hr = S_OK;
+ break;
+ }
+ }
+
+ if(hr == MIME_E_NOT_FOUND)
+ {
+ MIMECSETINFO mlang_info;
+
+ LeaveCriticalSection(&This->cs);
+ hr = mlang_getcsetinfo(pszCharset, &mlang_info);
+ EnterCriticalSection(&This->cs);
+
+ if(SUCCEEDED(hr))
+ *phCharset = add_charset(&This->charsets, &mlang_info,
+ (HCHARSET)InterlockedIncrement(&This->next_charset_handle));
+ }
+
+ LeaveCriticalSection(&This->cs);
+ return hr;
+}
+
+static HRESULT WINAPI MimeInternat_GetCharsetInfo(IMimeInternational *iface, HCHARSET hCharset,
+ LPINETCSETINFO pCsetInfo)
+{
+ internat *This = impl_from_IMimeInternational( iface );
+ HRESULT hr = MIME_E_INVALID_HANDLE;
+ charset_entry *charset;
+
+ TRACE("(%p)->(%p, %p)\n", iface, hCharset, pCsetInfo);
+
+ EnterCriticalSection(&This->cs);
+
+ LIST_FOR_EACH_ENTRY(charset, &This->charsets, charset_entry, entry)
+ {
+ if(charset->cs_info.hCharset == hCharset)
+ {
+ *pCsetInfo = charset->cs_info;
+ hr = S_OK;
+ break;
+ }
+ }
+
+ LeaveCriticalSection(&This->cs);
+
+ return hr;
+}
+
+static HRESULT WINAPI MimeInternat_GetCodePageInfo(IMimeInternational *iface, CODEPAGEID cpiCodePage,
+ LPCODEPAGEINFO pCodePageInfo)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MimeInternat_CanConvertCodePages(IMimeInternational *iface, CODEPAGEID cpiSource,
+ CODEPAGEID cpiDest)
+{
+ HRESULT hr;
+ IMultiLanguage *ml;
+
+ TRACE("(%p)->(%d, %d)\n", iface, cpiSource, cpiDest);
+
+ /* Could call mlang.IsConvertINetStringAvailable() to avoid the COM overhead if need be. */
+
+ hr = get_mlang(&ml);
+ if(SUCCEEDED(hr))
+ {
+ hr = IMultiLanguage_IsConvertible(ml, cpiSource, cpiDest);
+ IMultiLanguage_Release(ml);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI MimeInternat_DecodeHeader(IMimeInternational *iface, HCHARSET hCharset,
+ LPCSTR pszData,
+ LPPROPVARIANT pDecoded,
+ LPRFC1522INFO pRfc1522Info)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MimeInternat_EncodeHeader(IMimeInternational *iface, HCHARSET hCharset,
+ LPPROPVARIANT pData,
+ LPSTR *ppszEncoded,
+ LPRFC1522INFO pRfc1522Info)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MimeInternat_ConvertBuffer(IMimeInternational *iface, CODEPAGEID cpiSource,
+ CODEPAGEID cpiDest, LPBLOB pIn, LPBLOB pOut,
+ ULONG *pcbRead)
+{
+ HRESULT hr;
+ IMultiLanguage *ml;
+
+ TRACE("(%p)->(%d, %d, %p, %p, %p)\n", iface, cpiSource, cpiDest, pIn, pOut, pcbRead);
+
+ *pcbRead = 0;
+ pOut->cbSize = 0;
+
+ /* Could call mlang.ConvertINetString() to avoid the COM overhead if need be. */
+
+ hr = get_mlang(&ml);
+ if(SUCCEEDED(hr))
+ {
+ DWORD mode = 0;
+ UINT in_size = pIn->cbSize, out_size;
+
+ hr = IMultiLanguage_ConvertString(ml, &mode, cpiSource, cpiDest, pIn->pBlobData, &in_size,
+ NULL, &out_size);
+ if(hr == S_OK) /* S_FALSE means the conversion could not be performed */
+ {
+ pOut->pBlobData = CoTaskMemAlloc(out_size);
+ if(!pOut->pBlobData)
+ hr = E_OUTOFMEMORY;
+ else
+ {
+ mode = 0;
+ in_size = pIn->cbSize;
+ hr = IMultiLanguage_ConvertString(ml, &mode, cpiSource, cpiDest, pIn->pBlobData, &in_size,
+ pOut->pBlobData, &out_size);
+
+ if(hr == S_OK)
+ {
+ *pcbRead = in_size;
+ pOut->cbSize = out_size;
+ }
+ else
+ CoTaskMemFree(pOut->pBlobData);
+ }
+ }
+ IMultiLanguage_Release(ml);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI MimeInternat_ConvertString(IMimeInternational *iface, CODEPAGEID cpiSource,
+ CODEPAGEID cpiDest, LPPROPVARIANT pIn,
+ LPPROPVARIANT pOut)
+{
+ HRESULT hr;
+ int src_len;
+ IMultiLanguage *ml;
+
+ TRACE("(%p)->(%d, %d, %p %p)\n", iface, cpiSource, cpiDest, pIn, pOut);
+
+ switch(pIn->vt)
+ {
+ case VT_LPSTR:
+ if(cpiSource == CP_UNICODE) cpiSource = GetACP();
+ src_len = strlen(pIn->u.pszVal);
+ break;
+ case VT_LPWSTR:
+ cpiSource = CP_UNICODE;
+ src_len = strlenW(pIn->u.pwszVal) * sizeof(WCHAR);
+ break;
+ default:
+ return E_INVALIDARG;
+ }
+
+ hr = get_mlang(&ml);
+ if(SUCCEEDED(hr))
+ {
+ DWORD mode = 0;
+ UINT in_size = src_len, out_size;
+
+ hr = IMultiLanguage_ConvertString(ml, &mode, cpiSource, cpiDest, (BYTE*)pIn->u.pszVal, &in_size,
+ NULL, &out_size);
+ if(hr == S_OK) /* S_FALSE means the conversion could not be performed */
+ {
+ out_size += (cpiDest == CP_UNICODE) ? sizeof(WCHAR) : sizeof(char);
+
+ pOut->u.pszVal = CoTaskMemAlloc(out_size);
+ if(!pOut->u.pszVal)
+ hr = E_OUTOFMEMORY;
+ else
+ {
+ mode = 0;
+ in_size = src_len;
+ hr = IMultiLanguage_ConvertString(ml, &mode, cpiSource, cpiDest, (BYTE*)pIn->u.pszVal, &in_size,
+ (BYTE*)pOut->u.pszVal, &out_size);
+
+ if(hr == S_OK)
+ {
+ if(cpiDest == CP_UNICODE)
+ {
+ pOut->u.pwszVal[out_size / sizeof(WCHAR)] = 0;
+ pOut->vt = VT_LPWSTR;
+ }
+ else
+ {
+ pOut->u.pszVal[out_size] = '\0';
+ pOut->vt = VT_LPSTR;
+ }
+ }
+ else
+ CoTaskMemFree(pOut->u.pszVal);
+ }
+ }
+ IMultiLanguage_Release(ml);
+ }
+ return hr;
+}
+
+static HRESULT WINAPI MimeInternat_MLANG_ConvertInetReset(IMimeInternational *iface)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MimeInternat_MLANG_ConvertInetString(IMimeInternational *iface, CODEPAGEID cpiSource,
+ CODEPAGEID cpiDest,
+ LPCSTR pSource,
+ int *pnSizeOfSource,
+ LPSTR pDestination,
+ int *pnDstSize)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MimeInternat_Rfc1522Decode(IMimeInternational *iface, LPCSTR pszValue,
+ LPSTR pszCharset,
+ ULONG cchmax,
+ LPSTR *ppszDecoded)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MimeInternat_Rfc1522Encode(IMimeInternational *iface, LPCSTR pszValue,
+ HCHARSET hCharset,
+ LPSTR *ppszEncoded)
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+static IMimeInternationalVtbl mime_internat_vtbl =
+{
+ MimeInternat_QueryInterface,
+ MimeInternat_AddRef,
+ MimeInternat_Release,
+ MimeInternat_SetDefaultCharset,
+ MimeInternat_GetDefaultCharset,
+ MimeInternat_GetCodePageCharset,
+ MimeInternat_FindCharset,
+ MimeInternat_GetCharsetInfo,
+ MimeInternat_GetCodePageInfo,
+ MimeInternat_CanConvertCodePages,
+ MimeInternat_DecodeHeader,
+ MimeInternat_EncodeHeader,
+ MimeInternat_ConvertBuffer,
+ MimeInternat_ConvertString,
+ MimeInternat_MLANG_ConvertInetReset,
+ MimeInternat_MLANG_ConvertInetString,
+ MimeInternat_Rfc1522Decode,
+ MimeInternat_Rfc1522Encode
+};
+
+static internat *global_internat;
+
+HRESULT MimeInternational_Construct(IMimeInternational **internat)
+{
+ global_internat = HeapAlloc(GetProcessHeap(), 0, sizeof(*global_internat));
+ global_internat->lpVtbl = &mime_internat_vtbl;
+ global_internat->refs = 0;
+ InitializeCriticalSection(&global_internat->cs);
+
+ list_init(&global_internat->charsets);
+ global_internat->next_charset_handle = 0;
+ global_internat->default_charset = NULL;
+
+ *internat = (IMimeInternational*)&global_internat->lpVtbl;
+
+ IMimeInternational_AddRef(*internat);
+ return S_OK;
+}
+
+HRESULT WINAPI MimeOleGetInternat(IMimeInternational **internat)
+{
+ TRACE("(%p)\n", internat);
+
+ *internat = (IMimeInternational *)&global_internat->lpVtbl;
+ IMimeInternational_AddRef(*internat);
+ return S_OK;
+}
+
+HRESULT WINAPI MimeOleFindCharset(LPCSTR name, LPHCHARSET charset)
+{
+ IMimeInternational *internat;
+ HRESULT hr;
+
+ TRACE("(%s, %p)\n", debugstr_a(name), charset);
+
+ hr = MimeOleGetInternat(&internat);
+ if(SUCCEEDED(hr))
+ {
+ hr = IMimeInternational_FindCharset(internat, name, charset);
+ IMimeInternational_Release(internat);
+ }
+ return hr;
+}
+
+HRESULT WINAPI MimeOleGetCharsetInfo(HCHARSET hCharset, LPINETCSETINFO pCsetInfo)
+{
+ IMimeInternational *internat;
+ HRESULT hr;
+
+ TRACE("(%p, %p)\n", hCharset, pCsetInfo);
+
+ hr = MimeOleGetInternat(&internat);
+ if(SUCCEEDED(hr))
+ {
+ hr = IMimeInternational_GetCharsetInfo(internat, hCharset, pCsetInfo);
+ IMimeInternational_Release(internat);
+ }
+ return hr;
+}
+
+HRESULT WINAPI MimeOleGetDefaultCharset(LPHCHARSET charset)
+{
+ IMimeInternational *internat;
+ HRESULT hr;
+
+ TRACE("(%p)\n", charset);
+
+ hr = MimeOleGetInternat(&internat);
+ if(SUCCEEDED(hr))
+ {
+ hr = IMimeInternational_GetDefaultCharset(internat, charset);
+ IMimeInternational_Release(internat);
+ }
+ return hr;
+}
diff --git a/reactos/dll/win32/inetcomm/mimeole.c b/reactos/dll/win32/inetcomm/mimeole.c
index 7e9d709f5ce..07aa6bd0de7 100644
--- a/reactos/dll/win32/inetcomm/mimeole.c
+++ b/reactos/dll/win32/inetcomm/mimeole.c
@@ -69,7 +69,7 @@ static const property_t default_props[] =
{"Content-Type", PID_HDR_CNTTYPE, MPF_MIME | MPF_HASPARAMS, VT_LPSTR},
{"Content-Transfer-Encoding", PID_HDR_CNTXFER, MPF_MIME, VT_LPSTR},
{"Content-ID", PID_HDR_CNTID, MPF_MIME, VT_LPSTR},
- {"Content-Disposition", PID_HDR_CNTDISP, MPF_MIME, VT_LPSTR},
+ {"Content-Disposition", PID_HDR_CNTDISP, MPF_MIME | MPF_HASPARAMS, VT_LPSTR},
{"To", PID_HDR_TO, MPF_ADDRESS, VT_LPSTR},
{"Cc", PID_HDR_CC, MPF_ADDRESS, VT_LPSTR},
{"Sender", PID_HDR_SENDER, MPF_ADDRESS, VT_LPSTR},
@@ -820,8 +820,26 @@ static HRESULT WINAPI MimeBody_SetOption(
const TYPEDID oid,
LPCPROPVARIANT pValue)
{
- FIXME("(%p)->(%08x, %p): stub\n", iface, oid, pValue);
- return E_NOTIMPL;
+ HRESULT hr = E_NOTIMPL;
+ TRACE("(%p)->(%08x, %p)\n", iface, oid, pValue);
+
+ if(pValue->vt != TYPEDID_TYPE(oid))
+ {
+ WARN("Called with vartype %04x and oid %08x\n", pValue->vt, oid);
+ return E_INVALIDARG;
+ }
+
+ switch(oid)
+ {
+ case OID_SECURITY_HWND_OWNER:
+ FIXME("OID_SECURITY_HWND_OWNER (value %08x): ignoring\n", pValue->u.ulVal);
+ hr = S_OK;
+ break;
+ default:
+ FIXME("Unhandled oid %08x\n", oid);
+ }
+
+ return hr;
}
static HRESULT WINAPI MimeBody_GetOption(
@@ -846,8 +864,17 @@ static HRESULT WINAPI MimeBody_IsType(
IMimeBody* iface,
IMSGBODYTYPE bodytype)
{
- FIXME("(%p)->(%d): stub\n", iface, bodytype);
- return E_NOTIMPL;
+ MimeBody *This = impl_from_IMimeBody(iface);
+
+ TRACE("(%p)->(%d)\n", iface, bodytype);
+ switch(bodytype)
+ {
+ case IBT_EMPTY:
+ return This->data ? S_FALSE : S_OK;
+ default:
+ FIXME("Unimplemented bodytype %d - returning S_OK\n", bodytype);
+ }
+ return S_OK;
}
static HRESULT WINAPI MimeBody_SetDisplayName(
@@ -2172,8 +2199,30 @@ static HRESULT WINAPI MimeMessage_SetOption(
const TYPEDID oid,
LPCPROPVARIANT pValue)
{
- FIXME("(%p)->(%08x, %p)\n", iface, oid, pValue);
- return E_NOTIMPL;
+ HRESULT hr = E_NOTIMPL;
+ TRACE("(%p)->(%08x, %p)\n", iface, oid, pValue);
+
+ if(pValue->vt != TYPEDID_TYPE(oid))
+ {
+ WARN("Called with vartype %04x and oid %08x\n", pValue->vt, oid);
+ return E_INVALIDARG;
+ }
+
+ switch(oid)
+ {
+ case OID_HIDE_TNEF_ATTACHMENTS:
+ FIXME("OID_HIDE_TNEF_ATTACHMENTS (value %d): ignoring\n", pValue->u.boolVal);
+ hr = S_OK;
+ break;
+ case OID_SHOW_MACBINARY:
+ FIXME("OID_SHOW_MACBINARY (value %d): ignoring\n", pValue->u.boolVal);
+ hr = S_OK;
+ break;
+ default:
+ FIXME("Unhandled oid %08x\n", oid);
+ }
+
+ return hr;
}
static HRESULT WINAPI MimeMessage_GetOption(
@@ -2491,22 +2540,19 @@ static const IMimeMessageVtbl MimeMessageVtbl =
MimeMessage_GetRootMoniker,
};
-/***********************************************************************
- * MimeOleCreateMessage (INETCOMM.@)
- */
-HRESULT WINAPI MimeOleCreateMessage(IUnknown *pUnkOuter, IMimeMessage **ppMessage)
+HRESULT MimeMessage_create(IUnknown *outer, void **obj)
{
MimeMessage *This;
- TRACE("(%p, %p)\n", pUnkOuter, ppMessage);
+ TRACE("(%p, %p)\n", outer, obj);
- if (pUnkOuter)
+ if (outer)
{
FIXME("outer unknown not supported yet\n");
return E_NOTIMPL;
}
- *ppMessage = NULL;
+ *obj = NULL;
This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
if (!This) return E_OUTOFMEMORY;
@@ -2517,10 +2563,19 @@ HRESULT WINAPI MimeOleCreateMessage(IUnknown *pUnkOuter, IMimeMessage **ppMessag
list_init(&This->body_tree);
This->next_hbody = (HBODY)1;
- *ppMessage = (IMimeMessage *)&This->lpVtbl;
+ *obj = (IMimeMessage *)&This->lpVtbl;
return S_OK;
}
+/***********************************************************************
+ * MimeOleCreateMessage (INETCOMM.@)
+ */
+HRESULT WINAPI MimeOleCreateMessage(IUnknown *pUnkOuter, IMimeMessage **ppMessage)
+{
+ TRACE("(%p, %p)\n", pUnkOuter, ppMessage);
+ return MimeMessage_create(NULL, (void **)ppMessage);
+}
+
/***********************************************************************
* MimeOleSetCompatMode (INETCOMM.@)
*/
@@ -2705,16 +2760,13 @@ static const IMimeSecurityVtbl MimeSecurityVtbl =
MimeSecurity_GetCertData
};
-/***********************************************************************
- * MimeOleCreateSecurity (INETCOMM.@)
- */
-HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity **ppSecurity)
+HRESULT MimeSecurity_create(IUnknown *outer, void **obj)
{
MimeSecurity *This;
- TRACE("(%p)\n", ppSecurity);
+ *obj = NULL;
- *ppSecurity = NULL;
+ if (outer) return CLASS_E_NOAGGREGATION;
This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
if (!This) return E_OUTOFMEMORY;
@@ -2722,10 +2774,17 @@ HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity **ppSecurity)
This->lpVtbl = &MimeSecurityVtbl;
This->refs = 1;
- *ppSecurity = (IMimeSecurity *)&This->lpVtbl;
+ *obj = (IMimeSecurity *)&This->lpVtbl;
return S_OK;
}
+/***********************************************************************
+ * MimeOleCreateSecurity (INETCOMM.@)
+ */
+HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity **ppSecurity)
+{
+ return MimeSecurity_create(NULL, (void **)ppSecurity);
+}
typedef struct
{
@@ -2930,10 +2989,3 @@ HRESULT WINAPI MimeOleGetAllocator(IMimeAllocator **alloc)
{
return MimeAllocator_create(NULL, (void**)alloc);
}
-
-HRESULT WINAPI MimeOleGetCharsetInfo(HCHARSET hCharset, LPINETCSETINFO pCsetInfo)
-{
- FIXME("(%p, %p)\n", hCharset, pCsetInfo);
- if(!hCharset) return E_INVALIDARG;
- return E_FAIL;
-}
diff --git a/reactos/dll/win32/inetcomm/pop3transport.c b/reactos/dll/win32/inetcomm/pop3transport.c
new file mode 100644
index 00000000000..afb4094b209
--- /dev/null
+++ b/reactos/dll/win32/inetcomm/pop3transport.c
@@ -0,0 +1,662 @@
+/*
+ * POP3 Transport
+ *
+ * Copyright 2008 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define COBJMACROS
+
+#include
+#include
+
+#include "windef.h"
+#include "winbase.h"
+#include "winnt.h"
+#include "winuser.h"
+#include "objbase.h"
+#include "mimeole.h"
+#include "wine/debug.h"
+
+#include "inetcomm_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(inetcomm);
+
+typedef struct
+{
+ InternetTransport InetTransport;
+ ULONG refs;
+ INETSERVER server;
+ POP3COMMAND command;
+} POP3Transport;
+
+static HRESULT POP3Transport_ParseResponse(POP3Transport *This, char *pszResponse, POP3RESPONSE *pResponse)
+{
+ TRACE("response: %s\n", debugstr_a(pszResponse));
+
+ pResponse->command = This->command;
+ pResponse->fDone = TRUE; /* FIXME */
+
+ if (!memcmp(pszResponse, "+OK", 3))
+ pResponse->rIxpResult.hrResult = S_OK;
+ else
+ pResponse->rIxpResult.hrResult = S_FALSE;
+
+ pResponse->rIxpResult.pszResponse = pszResponse;
+ pResponse->rIxpResult.uiServerError = 0;
+ pResponse->rIxpResult.hrServerError = pResponse->rIxpResult.hrResult;
+ pResponse->rIxpResult.dwSocketError = 0;
+ pResponse->pTransport = (IPOP3Transport *)&This->InetTransport.u.vtblPOP3;
+ pResponse->fValidInfo = FALSE; /* FIXME */
+
+ if (This->InetTransport.pCallback && This->InetTransport.fCommandLogging)
+ {
+ ITransportCallback_OnCommand(This->InetTransport.pCallback, CMD_RESP,
+ pResponse->rIxpResult.pszResponse, pResponse->rIxpResult.hrServerError,
+ (IInternetTransport *)&This->InetTransport.u.vtbl);
+ }
+ return S_OK;
+}
+
+static void POP3Transport_CallbackProcessLISTResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+ POP3RESPONSE response;
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = POP3Transport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ IPOP3Callback_OnResponse((IPOP3Callback *)This->InetTransport.pCallback, &response);
+}
+
+static void POP3Transport_CallbackRecvLISTResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, POP3Transport_CallbackProcessLISTResp);
+}
+
+static void POP3Transport_CallbackProcessUIDLResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+ POP3RESPONSE response;
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = POP3Transport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ IPOP3Callback_OnResponse((IPOP3Callback *)This->InetTransport.pCallback, &response);
+}
+
+static void POP3Transport_CallbackRecvUIDLResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, POP3Transport_CallbackProcessUIDLResp);
+}
+
+static void POP3Transport_CallbackProcessSTATResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+ POP3RESPONSE response;
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = POP3Transport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ IPOP3Callback_OnResponse((IPOP3Callback *)This->InetTransport.pCallback, &response);
+}
+
+static void POP3Transport_CallbackRecvSTATResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, POP3Transport_CallbackProcessSTATResp);
+}
+
+static void POP3Transport_CallbackProcessPASSResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+ POP3RESPONSE response;
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = POP3Transport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ InternetTransport_ChangeStatus(&This->InetTransport, IXP_AUTHORIZED);
+ InternetTransport_ChangeStatus(&This->InetTransport, IXP_CONNECTED);
+
+ IPOP3Callback_OnResponse((IPOP3Callback *)This->InetTransport.pCallback, &response);
+}
+
+static void POP3Transport_CallbackRecvPASSResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, POP3Transport_CallbackProcessPASSResp);
+}
+
+static void POP3Transport_CallbackProcessUSERResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ static char pass[] = "PASS ";
+ POP3Transport *This = (POP3Transport *)iface;
+ POP3RESPONSE response;
+ char *command;
+ int len;
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = POP3Transport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ IPOP3Callback_OnResponse((IPOP3Callback *)This->InetTransport.pCallback, &response);
+
+ len = sizeof(pass) + strlen(This->server.szPassword) + 2; /* "\r\n" */
+ command = HeapAlloc(GetProcessHeap(), 0, len);
+
+ strcpy(command, pass);
+ strcat(command, This->server.szPassword);
+ strcat(command, "\r\n");
+
+ InternetTransport_DoCommand(&This->InetTransport, command, POP3Transport_CallbackRecvPASSResp);
+ HeapFree(GetProcessHeap(), 0, command);
+}
+
+static void POP3Transport_CallbackRecvUSERResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, POP3Transport_CallbackProcessUSERResp);
+}
+
+static void POP3Transport_CallbackSendUSERCmd(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ static char user[] = "USER ";
+ POP3Transport *This = (POP3Transport *)iface;
+ char *command;
+ int len;
+
+ TRACE("\n");
+
+ len = sizeof(user) + strlen(This->server.szUserName) + 2; /* "\r\n" */
+ command = HeapAlloc(GetProcessHeap(), 0, len);
+
+ strcpy(command, user);
+ strcat(command, This->server.szUserName);
+ strcat(command, "\r\n");
+ InternetTransport_DoCommand(&This->InetTransport, command, POP3Transport_CallbackRecvUSERResp);
+
+ HeapFree(GetProcessHeap(), 0, command);
+}
+
+static void POP3Transport_CallbackProcessQUITResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+ POP3RESPONSE response;
+ HRESULT hr;
+
+ TRACE("%s\n", debugstr_an(pBuffer, cbBuffer));
+
+ hr = POP3Transport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ IPOP3Callback_OnResponse((IPOP3Callback *)This->InetTransport.pCallback, &response);
+ InternetTransport_DropConnection(&This->InetTransport);
+}
+
+static void POP3Transport_CallbackRecvQUITResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, POP3Transport_CallbackProcessQUITResponse);
+}
+
+static HRESULT WINAPI POP3Transport_QueryInterface(IPOP3Transport *iface, REFIID riid, void **ppv)
+{
+ TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
+
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IInternetTransport) ||
+ IsEqualIID(riid, &IID_IPOP3Transport))
+ {
+ *ppv = iface;
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+ *ppv = NULL;
+ FIXME("no interface for %s\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI POP3Transport_AddRef(IPOP3Transport *iface)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+ return InterlockedIncrement((LONG *)&This->refs);
+}
+
+static ULONG WINAPI POP3Transport_Release(IPOP3Transport *iface)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+ ULONG refs = InterlockedDecrement((LONG *)&This->refs);
+ if (!refs)
+ {
+ TRACE("destroying %p\n", This);
+ if (This->InetTransport.Status != IXP_DISCONNECTED)
+ InternetTransport_DropConnection(&This->InetTransport);
+ if (This->InetTransport.pCallback) ITransportCallback_Release(This->InetTransport.pCallback);
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+ return refs;
+}
+
+static HRESULT WINAPI POP3Transport_GetServerInfo(IPOP3Transport *iface,
+ LPINETSERVER pInetServer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("(%p)\n", pInetServer);
+ return InternetTransport_GetServerInfo(&This->InetTransport, pInetServer);
+}
+
+static IXPTYPE WINAPI POP3Transport_GetIXPType(IPOP3Transport *iface)
+{
+ TRACE("()\n");
+ return IXP_POP3;
+}
+
+static HRESULT WINAPI POP3Transport_IsState(IPOP3Transport *iface, IXPISSTATE isstate)
+{
+ FIXME("(%u)\n", isstate);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI POP3Transport_InetServerFromAccount(
+ IPOP3Transport *iface, IImnAccount *pAccount, LPINETSERVER pInetServer)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("(%p, %p)\n", pAccount, pInetServer);
+ return InternetTransport_InetServerFromAccount(&This->InetTransport, pAccount, pInetServer);
+}
+
+static HRESULT WINAPI POP3Transport_Connect(IPOP3Transport *iface,
+ LPINETSERVER pInetServer, boolean fAuthenticate, boolean fCommandLogging)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+ HRESULT hr;
+
+ TRACE("(%p, %s, %s)\n", pInetServer, fAuthenticate ? "TRUE" : "FALSE", fCommandLogging ? "TRUE" : "FALSE");
+
+ hr = InternetTransport_Connect(&This->InetTransport, pInetServer, fAuthenticate, fCommandLogging);
+ if (FAILED(hr))
+ return hr;
+
+ This->command = POP3_USER;
+ This->server = *pInetServer;
+ return InternetTransport_ReadLine(&This->InetTransport, POP3Transport_CallbackSendUSERCmd);
+}
+
+static HRESULT WINAPI POP3Transport_HandsOffCallback(IPOP3Transport *iface)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("()\n");
+ return InternetTransport_HandsOffCallback(&This->InetTransport);
+}
+
+static HRESULT WINAPI POP3Transport_Disconnect(IPOP3Transport *iface)
+{
+ TRACE("()\n");
+ return IPOP3Transport_CommandQUIT(iface);
+}
+
+static HRESULT WINAPI POP3Transport_DropConnection(IPOP3Transport *iface)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("()\n");
+ return InternetTransport_DropConnection(&This->InetTransport);
+}
+
+static HRESULT WINAPI POP3Transport_GetStatus(IPOP3Transport *iface,
+ IXPSTATUS *pCurrentStatus)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("()\n");
+ return InternetTransport_GetStatus(&This->InetTransport, pCurrentStatus);
+}
+
+static HRESULT WINAPI POP3Transport_InitNew(IPOP3Transport *iface,
+ LPSTR pszLogFilePath, IPOP3Callback *pCallback)
+{
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("(%s, %p)\n", debugstr_a(pszLogFilePath), pCallback);
+
+ if (!pCallback)
+ return E_INVALIDARG;
+
+ if (pszLogFilePath)
+ FIXME("not using log file of %s, use Wine debug logging instead\n",
+ debugstr_a(pszLogFilePath));
+
+ IPOP3Callback_AddRef(pCallback);
+ This->InetTransport.pCallback = (ITransportCallback *)pCallback;
+ This->InetTransport.fInitialised = TRUE;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI POP3Transport_MarkItem(IPOP3Transport *iface, POP3MARKTYPE marktype,
+ DWORD dwPopId, boolean fMarked)
+{
+ FIXME("(%u, %u, %d)\n", marktype, dwPopId, fMarked);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI POP3Transport_CommandAUTH(IPOP3Transport *iface, LPSTR pszAuthType)
+{
+ FIXME("(%s)\n", pszAuthType);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI POP3Transport_CommandUSER(IPOP3Transport *iface, LPSTR username)
+{
+ static char user[] = "USER ";
+ POP3Transport *This = (POP3Transport *)iface;
+ char *command;
+ int len;
+
+ TRACE("(%s)\n", username);
+
+ len = sizeof(user) + strlen(username) + 2; /* "\r\n" */
+ command = HeapAlloc(GetProcessHeap(), 0, len);
+
+ strcpy(command, user);
+ strcat(command, username);
+ strcat(command, "\r\n");
+
+ This->command = POP3_USER;
+ InternetTransport_DoCommand(&This->InetTransport, command, POP3Transport_CallbackRecvUSERResp);
+
+ HeapFree(GetProcessHeap(), 0, command);
+ return S_OK;
+}
+
+static HRESULT WINAPI POP3Transport_CommandPASS(IPOP3Transport *iface, LPSTR password)
+{
+ static char pass[] = "PASS ";
+ POP3Transport *This = (POP3Transport *)iface;
+ char *command;
+ int len;
+
+ TRACE("(%p)\n", password);
+
+ len = sizeof(pass) + strlen(password) + 2; /* "\r\n" */
+ command = HeapAlloc(GetProcessHeap(), 0, len);
+
+ strcpy(command, pass);
+ strcat(command, password);
+ strcat(command, "\r\n");
+
+ This->command = POP3_PASS;
+ InternetTransport_DoCommand(&This->InetTransport, command, POP3Transport_CallbackRecvPASSResp);
+
+ HeapFree(GetProcessHeap(), 0, command);
+ return S_OK;
+}
+
+static HRESULT WINAPI POP3Transport_CommandLIST(
+ IPOP3Transport *iface, POP3CMDTYPE cmdtype, DWORD dwPopId)
+{
+ static char list[] = "LIST\r\n";
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("(%u, %u)\n", cmdtype, dwPopId);
+
+ This->command = POP3_LIST;
+ InternetTransport_DoCommand(&This->InetTransport, list, POP3Transport_CallbackRecvLISTResp);
+ return S_OK;
+}
+
+static HRESULT WINAPI POP3Transport_CommandTOP(
+ IPOP3Transport *iface, POP3CMDTYPE cmdtype, DWORD dwPopId, DWORD cPreviewLines)
+{
+ FIXME("(%u, %u, %u)\n", cmdtype, dwPopId, cPreviewLines);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI POP3Transport_CommandQUIT(IPOP3Transport *iface)
+{
+ static char command[] = "QUIT\r\n";
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("()\n");
+
+ This->command = POP3_QUIT;
+ return InternetTransport_DoCommand(&This->InetTransport, command, POP3Transport_CallbackRecvQUITResp);
+}
+
+static HRESULT WINAPI POP3Transport_CommandSTAT(IPOP3Transport *iface)
+{
+ static char stat[] = "STAT\r\n";
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("\n");
+
+ This->command = POP3_STAT;
+ InternetTransport_DoCommand(&This->InetTransport, stat, POP3Transport_CallbackRecvSTATResp);
+ return S_OK;
+}
+
+static HRESULT WINAPI POP3Transport_CommandNOOP(IPOP3Transport *iface)
+{
+ FIXME("()\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI POP3Transport_CommandRSET(IPOP3Transport *iface)
+{
+ FIXME("()\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI POP3Transport_CommandUIDL(
+ IPOP3Transport *iface, POP3CMDTYPE cmdtype, DWORD dwPopId)
+{
+ static char uidl[] = "UIDL\r\n";
+ POP3Transport *This = (POP3Transport *)iface;
+
+ TRACE("(%u, %u)\n", cmdtype, dwPopId);
+
+ This->command = POP3_UIDL;
+ InternetTransport_DoCommand(&This->InetTransport, uidl, POP3Transport_CallbackRecvUIDLResp);
+ return S_OK;
+}
+
+static HRESULT WINAPI POP3Transport_CommandDELE(
+ IPOP3Transport *iface, POP3CMDTYPE cmdtype, DWORD dwPopId)
+{
+ FIXME("(%u, %u)\n", cmdtype, dwPopId);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI POP3Transport_CommandRETR(
+ IPOP3Transport *iface, POP3CMDTYPE cmdtype, DWORD dwPopId)
+{
+ FIXME("(%u, %u)\n", cmdtype, dwPopId);
+ return E_NOTIMPL;
+}
+
+static const IPOP3TransportVtbl POP3TransportVtbl =
+{
+ POP3Transport_QueryInterface,
+ POP3Transport_AddRef,
+ POP3Transport_Release,
+ POP3Transport_GetServerInfo,
+ POP3Transport_GetIXPType,
+ POP3Transport_IsState,
+ POP3Transport_InetServerFromAccount,
+ POP3Transport_Connect,
+ POP3Transport_HandsOffCallback,
+ POP3Transport_Disconnect,
+ POP3Transport_DropConnection,
+ POP3Transport_GetStatus,
+ POP3Transport_InitNew,
+ POP3Transport_MarkItem,
+ POP3Transport_CommandAUTH,
+ POP3Transport_CommandUSER,
+ POP3Transport_CommandPASS,
+ POP3Transport_CommandLIST,
+ POP3Transport_CommandTOP,
+ POP3Transport_CommandQUIT,
+ POP3Transport_CommandSTAT,
+ POP3Transport_CommandNOOP,
+ POP3Transport_CommandRSET,
+ POP3Transport_CommandUIDL,
+ POP3Transport_CommandDELE,
+ POP3Transport_CommandRETR
+};
+
+HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport)
+{
+ HRESULT hr;
+ POP3Transport *This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
+ if (!This)
+ return E_OUTOFMEMORY;
+
+ This->InetTransport.u.vtblPOP3 = &POP3TransportVtbl;
+ This->refs = 0;
+ hr = InternetTransport_Init(&This->InetTransport);
+ if (FAILED(hr))
+ {
+ HeapFree(GetProcessHeap(), 0, This);
+ return hr;
+ }
+
+ *ppTransport = (IPOP3Transport *)&This->InetTransport.u.vtblPOP3;
+ IPOP3Transport_AddRef(*ppTransport);
+
+ return S_OK;
+}
+
+static HRESULT WINAPI POP3TransportCF_QueryInterface(LPCLASSFACTORY iface,
+ REFIID riid, LPVOID *ppv)
+{
+ *ppv = NULL;
+ if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IClassFactory))
+ {
+ *ppv = iface;
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI POP3TransportCF_AddRef(LPCLASSFACTORY iface)
+{
+ return 2; /* non-heap based object */
+}
+
+static ULONG WINAPI POP3TransportCF_Release(LPCLASSFACTORY iface)
+{
+ return 1; /* non-heap based object */
+}
+
+static HRESULT WINAPI POP3TransportCF_CreateInstance(LPCLASSFACTORY iface,
+ LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv)
+{
+ HRESULT hr;
+ IPOP3Transport *pPop3Transport;
+
+ TRACE("(%p, %s, %p)\n", pUnk, debugstr_guid(riid), ppv);
+
+ *ppv = NULL;
+
+ if (pUnk)
+ return CLASS_E_NOAGGREGATION;
+
+ hr = CreatePOP3Transport(&pPop3Transport);
+ if (FAILED(hr))
+ return hr;
+
+ hr = IPOP3Transport_QueryInterface(pPop3Transport, riid, ppv);
+ IPOP3Transport_Release(pPop3Transport);
+
+ return hr;
+}
+
+static HRESULT WINAPI POP3TransportCF_LockServer(LPCLASSFACTORY iface, BOOL fLock)
+{
+ FIXME("(%d)\n",fLock);
+ return S_OK;
+}
+
+static const IClassFactoryVtbl POP3TransportCFVtbl =
+{
+ POP3TransportCF_QueryInterface,
+ POP3TransportCF_AddRef,
+ POP3TransportCF_Release,
+ POP3TransportCF_CreateInstance,
+ POP3TransportCF_LockServer
+};
+static const IClassFactoryVtbl *POP3TransportCF = &POP3TransportCFVtbl;
+
+HRESULT POP3TransportCF_Create(REFIID riid, LPVOID *ppv)
+{
+ return IClassFactory_QueryInterface((IClassFactory *)&POP3TransportCF, riid, ppv);
+}
diff --git a/reactos/dll/win32/inetcomm/regsvr.c b/reactos/dll/win32/inetcomm/regsvr.c
index 620cfa78ef4..4c7310cc172 100644
--- a/reactos/dll/win32/inetcomm/regsvr.c
+++ b/reactos/dll/win32/inetcomm/regsvr.c
@@ -31,8 +31,8 @@
#include "ocidl.h"
#include "initguid.h"
-#include "inetcomm_private.h"
#include "mimeole.h"
+#include "inetcomm_private.h"
#include "wine/debug.h"
@@ -404,6 +404,12 @@ static struct regsvr_coclass const coclass_list[] = {
"inetcomm.dll",
"Both"
},
+ { &CLSID_ISMTPTransport2,
+ "CLSID_ISMTPTransport2",
+ NULL,
+ "inetcomm.dll",
+ "Both"
+ },
{ &CLSID_IPOP3Transport,
"CLSID_IPOP3Transport",
NULL,
@@ -452,6 +458,12 @@ static struct regsvr_coclass const coclass_list[] = {
"inetcomm.dll",
"Both"
},
+ { &CLSID_IMimeSecurity,
+ "CLSID_IMimeSecurity",
+ NULL,
+ "inetcomm.dll",
+ "Both"
+ },
{ NULL } /* list terminator */
};
diff --git a/reactos/dll/win32/inetcomm/smtptransport.c b/reactos/dll/win32/inetcomm/smtptransport.c
new file mode 100644
index 00000000000..d704525e1ed
--- /dev/null
+++ b/reactos/dll/win32/inetcomm/smtptransport.c
@@ -0,0 +1,1047 @@
+/*
+ * SMTP Transport
+ *
+ * Copyright 2006 Robert Shearman for CodeWeavers
+ * Copyright 2008 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+#define COBJMACROS
+
+#include
+#include
+
+#include "windef.h"
+#include "winbase.h"
+#include "winnt.h"
+#include "winuser.h"
+#include "objbase.h"
+#include "mimeole.h"
+#include "wine/debug.h"
+
+#include "inetcomm_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(inetcomm);
+
+typedef struct
+{
+ InternetTransport InetTransport;
+ ULONG refs;
+ BOOL fESMTP;
+ SMTPMESSAGE pending_message;
+ INETADDR *addrlist;
+ ULONG ulCurrentAddressIndex;
+} SMTPTransport;
+
+static HRESULT SMTPTransport_ParseResponse(SMTPTransport *This, char *pszResponse, SMTPRESPONSE *pResponse)
+{
+ HRESULT hrServerError;
+
+ TRACE("response: %s\n", debugstr_a(pszResponse));
+
+ if (!isdigit(*pszResponse))
+ return IXP_E_SMTP_RESPONSE_ERROR;
+ pResponse->pTransport = (ISMTPTransport *)&This->InetTransport.u.vtblSMTP2;
+ pResponse->rIxpResult.pszResponse = pszResponse;
+ pResponse->rIxpResult.dwSocketError = 0;
+ pResponse->rIxpResult.uiServerError = strtol(pszResponse, &pszResponse, 10);
+ if (*pszResponse == '-')
+ {
+ pResponse->fDone = FALSE;
+ pszResponse++;
+ }
+ else
+ pResponse->fDone = TRUE;
+
+ switch (pResponse->rIxpResult.uiServerError)
+ {
+ case 211: hrServerError = IXP_E_SMTP_211_SYSTEM_STATUS; break;
+ case 214: hrServerError = IXP_E_SMTP_214_HELP_MESSAGE; break;
+ case 220: hrServerError = IXP_E_SMTP_220_READY; break;
+ case 221: hrServerError = IXP_E_SMTP_221_CLOSING; break;
+ case 245: hrServerError = IXP_E_SMTP_245_AUTH_SUCCESS; break;
+ case 250: hrServerError = IXP_E_SMTP_250_MAIL_ACTION_OKAY; break;
+ case 251: hrServerError = IXP_E_SMTP_251_FORWARDING_MAIL; break;
+ case 334: hrServerError = IXP_E_SMTP_334_AUTH_READY_RESPONSE; break;
+ case 354: hrServerError = IXP_E_SMTP_354_START_MAIL_INPUT; break;
+ case 421: hrServerError = IXP_E_SMTP_421_NOT_AVAILABLE; break;
+ case 450: hrServerError = IXP_E_SMTP_450_MAILBOX_BUSY; break;
+ case 451: hrServerError = IXP_E_SMTP_451_ERROR_PROCESSING; break;
+ case 452: hrServerError = IXP_E_SMTP_452_NO_SYSTEM_STORAGE; break;
+ case 454: hrServerError = IXP_E_SMTP_454_STARTTLS_FAILED; break;
+ case 500: hrServerError = IXP_E_SMTP_500_SYNTAX_ERROR; break;
+ case 501: hrServerError = IXP_E_SMTP_501_PARAM_SYNTAX; break;
+ case 502: hrServerError = IXP_E_SMTP_502_COMMAND_NOTIMPL; break;
+ case 503: hrServerError = IXP_E_SMTP_503_COMMAND_SEQ; break;
+ case 504: hrServerError = IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL; break;
+ case 530: hrServerError = IXP_E_SMTP_530_STARTTLS_REQUIRED; break;
+ case 550: hrServerError = IXP_E_SMTP_550_MAILBOX_NOT_FOUND; break;
+ case 551: hrServerError = IXP_E_SMTP_551_USER_NOT_LOCAL; break;
+ case 552: hrServerError = IXP_E_SMTP_552_STORAGE_OVERFLOW; break;
+ case 553: hrServerError = IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX; break;
+ case 554: hrServerError = IXP_E_SMTP_554_TRANSACT_FAILED; break;
+ default:
+ hrServerError = IXP_E_SMTP_RESPONSE_ERROR;
+ break;
+ }
+ pResponse->rIxpResult.hrResult = hrServerError;
+ pResponse->rIxpResult.hrServerError = hrServerError;
+
+ if (This->InetTransport.pCallback && This->InetTransport.fCommandLogging)
+ {
+ ITransportCallback_OnCommand(This->InetTransport.pCallback, CMD_RESP,
+ pResponse->rIxpResult.pszResponse, hrServerError,
+ (IInternetTransport *)&This->InetTransport.u.vtbl);
+ }
+ return S_OK;
+}
+
+static void SMTPTransport_CallbackDoNothing(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ TRACE("\n");
+}
+
+static void SMTPTransport_CallbackReadResponseDoNothing(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, SMTPTransport_CallbackDoNothing);
+}
+
+static void SMTPTransport_CallbackProcessDATAResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ SMTPRESPONSE response = { 0 };
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = SMTPTransport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ response.command = SMTP_DATA;
+ ISMTPCallback_OnResponse((ISMTPCallback *)This->InetTransport.pCallback, &response);
+
+ if (FAILED(response.rIxpResult.hrServerError))
+ {
+ ERR("server error: %s\n", debugstr_a(pBuffer));
+ /* FIXME: handle error */
+ return;
+ }
+}
+
+static void SMTPTransport_CallbackReadDATAResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, SMTPTransport_CallbackProcessDATAResponse);
+}
+
+static void SMTPTransport_CallbackProcessMAILResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ SMTPRESPONSE response = { 0 };
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = SMTPTransport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ response.command = SMTP_MAIL;
+ ISMTPCallback_OnResponse((ISMTPCallback *)This->InetTransport.pCallback, &response);
+
+ if (FAILED(response.rIxpResult.hrServerError))
+ {
+ ERR("server error: %s\n", debugstr_a(pBuffer));
+ /* FIXME: handle error */
+ return;
+ }
+}
+
+static void SMTPTransport_CallbackReadMAILResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, SMTPTransport_CallbackProcessMAILResponse);
+}
+
+static void SMTPTransport_CallbackProcessRCPTResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ SMTPRESPONSE response = { 0 };
+ HRESULT hr;
+
+ TRACE("\n");
+
+ HeapFree(GetProcessHeap(), 0, This->addrlist);
+ This->addrlist = NULL;
+
+ hr = SMTPTransport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ response.command = SMTP_RCPT;
+ ISMTPCallback_OnResponse((ISMTPCallback *)This->InetTransport.pCallback, &response);
+
+ if (FAILED(response.rIxpResult.hrServerError))
+ {
+ ERR("server error: %s\n", debugstr_a(pBuffer));
+ /* FIXME: handle error */
+ return;
+ }
+}
+
+static void SMTPTransport_CallbackReadRCPTResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, SMTPTransport_CallbackProcessRCPTResponse);
+}
+
+static void SMTPTransport_CallbackProcessHelloResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ SMTPRESPONSE response = { 0 };
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = SMTPTransport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ response.command = This->fESMTP ? SMTP_EHLO : SMTP_HELO;
+ ISMTPCallback_OnResponse((ISMTPCallback *)This->InetTransport.pCallback, &response);
+
+ if (FAILED(response.rIxpResult.hrServerError))
+ {
+ ERR("server error: %s\n", debugstr_a(pBuffer));
+ /* FIXME: handle error */
+ return;
+ }
+
+ if (!response.fDone)
+ {
+ InternetTransport_ReadLine(&This->InetTransport,
+ SMTPTransport_CallbackProcessHelloResp);
+ return;
+ }
+
+ /* FIXME: try to authorize */
+
+ /* always changed to this status, even if authorization not support on server */
+ InternetTransport_ChangeStatus(&This->InetTransport, IXP_AUTHORIZED);
+ InternetTransport_ChangeStatus(&This->InetTransport, IXP_CONNECTED);
+
+ memset(&response, 0, sizeof(response));
+ response.command = SMTP_CONNECTED;
+ response.fDone = TRUE;
+ ISMTPCallback_OnResponse((ISMTPCallback *)This->InetTransport.pCallback, &response);
+}
+
+static void SMTPTransport_CallbackRecvHelloResp(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, SMTPTransport_CallbackProcessHelloResp);
+}
+
+static void SMTPTransport_CallbackSendHello(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ SMTPRESPONSE response = { 0 };
+ HRESULT hr;
+ const char *pszHello;
+ char *pszCommand;
+ const char szHostName[] = "localhost"; /* FIXME */
+
+ TRACE("\n");
+
+ hr = SMTPTransport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ response.command = SMTP_BANNER;
+ ISMTPCallback_OnResponse((ISMTPCallback *)This->InetTransport.pCallback, &response);
+
+ if (FAILED(response.rIxpResult.hrServerError))
+ {
+ ERR("server error: %s\n", debugstr_a(pBuffer));
+ /* FIXME: handle error */
+ return;
+ }
+
+ TRACE("(%s)\n", pBuffer);
+
+ This->fESMTP = strstr(response.rIxpResult.pszResponse, "ESMTP") &&
+ This->InetTransport.ServerInfo.dwFlags & (ISF_SSLONSAMEPORT|ISF_QUERYDSNSUPPORT|ISF_QUERYAUTHSUPPORT);
+
+ if (This->fESMTP)
+ pszHello = "EHLO ";
+ else
+ pszHello = "HELO ";
+
+ pszCommand = HeapAlloc(GetProcessHeap(), 0, strlen(pszHello) + strlen(szHostName) + 2);
+ strcpy(pszCommand, pszHello);
+ strcat(pszCommand, szHostName);
+ pszCommand[strlen(pszCommand)+1] = '\0';
+ pszCommand[strlen(pszCommand)] = '\n';
+
+ InternetTransport_DoCommand(&This->InetTransport, pszCommand,
+ SMTPTransport_CallbackRecvHelloResp);
+
+ HeapFree(GetProcessHeap(), 0, pszCommand);
+}
+
+static void SMTPTransport_CallbackDisconnect(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ SMTPRESPONSE response;
+ HRESULT hr;
+
+ TRACE("\n");
+
+ if (pBuffer)
+ {
+ hr = SMTPTransport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ if (FAILED(response.rIxpResult.hrServerError))
+ {
+ ERR("server error: %s\n", debugstr_a(pBuffer));
+ /* FIXME: handle error */
+ return;
+ }
+ }
+ InternetTransport_DropConnection(&This->InetTransport);
+}
+
+static void SMTPTransport_CallbackMessageProcessResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ SMTPRESPONSE response = { 0 };
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = SMTPTransport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ if (FAILED(response.rIxpResult.hrServerError))
+ {
+ ERR("server error: %s\n", debugstr_a(pBuffer));
+ /* FIXME: handle error */
+ return;
+ }
+
+ response.command = SMTP_SEND_MESSAGE;
+ response.rIxpResult.hrResult = S_OK;
+ ISMTPCallback_OnResponse((ISMTPCallback *)This->InetTransport.pCallback, &response);
+}
+
+static void SMTPTransport_CallbackMessageReadResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ InternetTransport_ReadLine(&This->InetTransport, SMTPTransport_CallbackMessageProcessResponse);
+}
+
+static void SMTPTransport_CallbackMessageSendDOT(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ IStream_Release(This->pending_message.pstmMsg);
+ InternetTransport_DoCommand(&This->InetTransport, "\n.\n",
+ SMTPTransport_CallbackMessageReadResponse);
+}
+
+static void SMTPTransport_CallbackMessageSendDataStream(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ SMTPRESPONSE response;
+ HRESULT hr;
+ char *pszBuffer;
+ ULONG cbSize;
+
+ TRACE("\n");
+
+ hr = SMTPTransport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ if (FAILED(response.rIxpResult.hrServerError))
+ {
+ ERR("server error: %s\n", debugstr_a(pBuffer));
+ /* FIXME: handle error */
+ return;
+ }
+
+ pszBuffer = HeapAlloc(GetProcessHeap(), 0, This->pending_message.cbSize);
+ hr = IStream_Read(This->pending_message.pstmMsg, pszBuffer, This->pending_message.cbSize, NULL);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+ cbSize = This->pending_message.cbSize;
+
+ /* FIXME: map "\n.\n" to "\n..\n", reallocate memory, update cbSize */
+
+ /* FIXME: properly stream the message rather than writing it all at once */
+
+ hr = InternetTransport_Write(&This->InetTransport, pszBuffer, cbSize,
+ SMTPTransport_CallbackMessageSendDOT);
+
+ HeapFree(GetProcessHeap(), 0, pszBuffer);
+}
+
+static void SMTPTransport_CallbackMessageReadDataResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, SMTPTransport_CallbackMessageSendDataStream);
+}
+
+static void SMTPTransport_CallbackMessageSendTo(IInternetTransport *iface, char *pBuffer, int cbBuffer);
+
+static void SMTPTransport_CallbackMessageReadToResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, SMTPTransport_CallbackMessageSendTo);
+}
+
+static void SMTPTransport_CallbackMessageSendTo(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ SMTPRESPONSE response;
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = SMTPTransport_ParseResponse(This, pBuffer, &response);
+ if (FAILED(hr))
+ {
+ /* FIXME: handle error */
+ return;
+ }
+
+ if (FAILED(response.rIxpResult.hrServerError))
+ {
+ ERR("server error: %s\n", debugstr_a(pBuffer));
+ /* FIXME: handle error */
+ return;
+ }
+
+ for (; This->ulCurrentAddressIndex < This->pending_message.rAddressList.cAddress; This->ulCurrentAddressIndex++)
+ {
+ TRACE("address[%d]: %s\n", This->ulCurrentAddressIndex,
+ This->pending_message.rAddressList.prgAddress[This->ulCurrentAddressIndex].szEmail);
+
+ if ((This->pending_message.rAddressList.prgAddress[This->ulCurrentAddressIndex].addrtype & ADDR_TOFROM_MASK) == ADDR_TO)
+ {
+ const char szCommandFormat[] = "RCPT TO: <%s>\n";
+ char *szCommand;
+ int len = sizeof(szCommandFormat) - 2 /* "%s" */ +
+ strlen(This->pending_message.rAddressList.prgAddress[This->ulCurrentAddressIndex].szEmail);
+
+ szCommand = HeapAlloc(GetProcessHeap(), 0, len);
+ if (!szCommand)
+ return;
+
+ sprintf(szCommand, szCommandFormat,
+ This->pending_message.rAddressList.prgAddress[This->ulCurrentAddressIndex].szEmail);
+
+ This->ulCurrentAddressIndex++;
+ hr = InternetTransport_DoCommand(&This->InetTransport, szCommand,
+ SMTPTransport_CallbackMessageReadToResponse);
+
+ HeapFree(GetProcessHeap(), 0, szCommand);
+ return;
+ }
+ }
+
+ hr = InternetTransport_DoCommand(&This->InetTransport, "DATA\n",
+ SMTPTransport_CallbackMessageReadDataResponse);
+}
+
+static void SMTPTransport_CallbackMessageReadFromResponse(IInternetTransport *iface, char *pBuffer, int cbBuffer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("\n");
+ InternetTransport_ReadLine(&This->InetTransport, SMTPTransport_CallbackMessageSendTo);
+}
+
+static HRESULT WINAPI SMTPTransport_QueryInterface(ISMTPTransport2 *iface, REFIID riid, void **ppv)
+{
+ TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
+
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IInternetTransport) ||
+ IsEqualIID(riid, &IID_ISMTPTransport) ||
+ IsEqualIID(riid, &IID_ISMTPTransport2))
+ {
+ *ppv = iface;
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+ *ppv = NULL;
+ FIXME("no interface for %s\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI SMTPTransport_AddRef(ISMTPTransport2 *iface)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ return InterlockedIncrement((LONG *)&This->refs);
+}
+
+static ULONG WINAPI SMTPTransport_Release(ISMTPTransport2 *iface)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ ULONG refs = InterlockedDecrement((LONG *)&This->refs);
+ if (!refs)
+ {
+ TRACE("destroying %p\n", This);
+ if (This->InetTransport.Status != IXP_DISCONNECTED)
+ InternetTransport_DropConnection(&This->InetTransport);
+
+ if (This->InetTransport.pCallback) ITransportCallback_Release(This->InetTransport.pCallback);
+ HeapFree(GetProcessHeap(), 0, This->addrlist);
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+ return refs;
+}
+
+static HRESULT WINAPI SMTPTransport_GetServerInfo(ISMTPTransport2 *iface,
+ LPINETSERVER pInetServer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("(%p)\n", pInetServer);
+ return InternetTransport_GetServerInfo(&This->InetTransport, pInetServer);
+}
+
+static IXPTYPE WINAPI SMTPTransport_GetIXPType(ISMTPTransport2 *iface)
+{
+ TRACE("()\n");
+ return IXP_SMTP;
+}
+
+static HRESULT WINAPI SMTPTransport_IsState(ISMTPTransport2 *iface,
+ IXPISSTATE isstate)
+{
+ FIXME("(%d): stub\n", isstate);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI SMTPTransport_InetServerFromAccount(
+ ISMTPTransport2 *iface, IImnAccount *pAccount, LPINETSERVER pInetServer)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("(%p, %p)\n", pAccount, pInetServer);
+ return InternetTransport_InetServerFromAccount(&This->InetTransport, pAccount, pInetServer);
+}
+
+static HRESULT WINAPI SMTPTransport_Connect(ISMTPTransport2 *iface,
+ LPINETSERVER pInetServer, boolean fAuthenticate, boolean fCommandLogging)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ HRESULT hr;
+
+ TRACE("(%p, %s, %s)\n", pInetServer, fAuthenticate ? "TRUE" : "FALSE", fCommandLogging ? "TRUE" : "FALSE");
+
+ hr = InternetTransport_Connect(&This->InetTransport, pInetServer, fAuthenticate, fCommandLogging);
+ if (FAILED(hr))
+ return hr;
+
+ /* this starts the state machine, which continues in SMTPTransport_CallbackSendHELO */
+ return InternetTransport_ReadLine(&This->InetTransport, SMTPTransport_CallbackSendHello);
+}
+
+static HRESULT WINAPI SMTPTransport_HandsOffCallback(ISMTPTransport2 *iface)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("()\n");
+ return InternetTransport_HandsOffCallback(&This->InetTransport);
+}
+
+static HRESULT WINAPI SMTPTransport_Disconnect(ISMTPTransport2 *iface)
+{
+ TRACE("()\n");
+ return ISMTPTransport2_CommandQUIT(iface);
+}
+
+static HRESULT WINAPI SMTPTransport_DropConnection(ISMTPTransport2 *iface)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("()\n");
+ return InternetTransport_DropConnection(&This->InetTransport);
+}
+
+static HRESULT WINAPI SMTPTransport_GetStatus(ISMTPTransport2 *iface,
+ IXPSTATUS *pCurrentStatus)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("()\n");
+ return InternetTransport_GetStatus(&This->InetTransport, pCurrentStatus);
+}
+
+static HRESULT WINAPI SMTPTransport_InitNew(ISMTPTransport2 *iface,
+ LPSTR pszLogFilePath, ISMTPCallback *pCallback)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("(%s, %p)\n", debugstr_a(pszLogFilePath), pCallback);
+
+ if (!pCallback)
+ return E_INVALIDARG;
+
+ if (pszLogFilePath)
+ FIXME("not using log file of %s, use Wine debug logging instead\n",
+ debugstr_a(pszLogFilePath));
+
+ ISMTPCallback_AddRef(pCallback);
+ This->InetTransport.pCallback = (ITransportCallback *)pCallback;
+ This->InetTransport.fInitialised = TRUE;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI SMTPTransport_SendMessage(ISMTPTransport2 *iface,
+ LPSMTPMESSAGE pMessage)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ ULONG i, size;
+ LPSTR pszFromAddress = NULL;
+ const char szCommandFormat[] = "MAIL FROM: <%s>\n";
+ char *szCommand;
+ int len;
+ HRESULT hr;
+
+ TRACE("(%p)\n", pMessage);
+
+ This->pending_message = *pMessage;
+ IStream_AddRef(pMessage->pstmMsg);
+
+ size = pMessage->rAddressList.cAddress * sizeof(INETADDR);
+ This->addrlist = HeapAlloc(GetProcessHeap(), 0, size);
+ if (!This->addrlist)
+ return E_OUTOFMEMORY;
+
+ memcpy(This->addrlist, pMessage->rAddressList.prgAddress, size);
+ This->pending_message.rAddressList.prgAddress = This->addrlist;
+ This->ulCurrentAddressIndex = 0;
+
+ for (i = 0; i < pMessage->rAddressList.cAddress; i++)
+ {
+ if ((pMessage->rAddressList.prgAddress[i].addrtype & ADDR_TOFROM_MASK) == ADDR_FROM)
+ {
+ TRACE("address[%d]: ADDR_FROM, %s\n", i,
+ pMessage->rAddressList.prgAddress[i].szEmail);
+ pszFromAddress = pMessage->rAddressList.prgAddress[i].szEmail;
+ }
+ else if ((pMessage->rAddressList.prgAddress[i].addrtype & ADDR_TOFROM_MASK) == ADDR_TO)
+ {
+ TRACE("address[%d]: ADDR_TO, %s\n", i,
+ pMessage->rAddressList.prgAddress[i].szEmail);
+ }
+ }
+
+ if (!pszFromAddress)
+ {
+ SMTPRESPONSE response;
+ memset(&response, 0, sizeof(response));
+ response.command = SMTP_SEND_MESSAGE;
+ response.fDone = TRUE;
+ response.pTransport = (ISMTPTransport *)&This->InetTransport.u.vtblSMTP2;
+ response.rIxpResult.hrResult = IXP_E_SMTP_NO_SENDER;
+ ISMTPCallback_OnResponse((ISMTPCallback *)This->InetTransport.pCallback, &response);
+ return S_OK;
+ }
+ len = sizeof(szCommandFormat) - 2 /* "%s" */ + strlen(pszFromAddress);
+
+ szCommand = HeapAlloc(GetProcessHeap(), 0, len);
+ if (!szCommand)
+ return E_OUTOFMEMORY;
+
+ sprintf(szCommand, szCommandFormat, pszFromAddress);
+
+ hr = InternetTransport_DoCommand(&This->InetTransport, szCommand,
+ SMTPTransport_CallbackMessageReadFromResponse);
+
+ return hr;
+}
+
+static HRESULT WINAPI SMTPTransport_CommandMAIL(ISMTPTransport2 *iface, LPSTR pszEmailFrom)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ const char szCommandFormat[] = "MAIL FROM: <%s>\n";
+ char *szCommand;
+ int len = sizeof(szCommandFormat) - 2 /* "%s" */ + strlen(pszEmailFrom);
+ HRESULT hr;
+
+ TRACE("(%s)\n", pszEmailFrom);
+
+ if (!pszEmailFrom)
+ return E_INVALIDARG;
+
+ szCommand = HeapAlloc(GetProcessHeap(), 0, len);
+ if (!szCommand)
+ return E_OUTOFMEMORY;
+
+ sprintf(szCommand, szCommandFormat, pszEmailFrom);
+
+ hr = InternetTransport_DoCommand(&This->InetTransport, szCommand,
+ SMTPTransport_CallbackReadMAILResponse);
+
+ HeapFree(GetProcessHeap(), 0, szCommand);
+ return hr;
+}
+
+static HRESULT WINAPI SMTPTransport_CommandRCPT(ISMTPTransport2 *iface, LPSTR pszEmailTo)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ const char szCommandFormat[] = "RCPT TO: <%s>\n";
+ char *szCommand;
+ int len = sizeof(szCommandFormat) - 2 /* "%s" */ + strlen(pszEmailTo);
+ HRESULT hr;
+
+ TRACE("(%s)\n", pszEmailTo);
+
+ if (!pszEmailTo)
+ return E_INVALIDARG;
+
+ szCommand = HeapAlloc(GetProcessHeap(), 0, len);
+ if (!szCommand)
+ return E_OUTOFMEMORY;
+
+ sprintf(szCommand, szCommandFormat, pszEmailTo);
+
+ hr = InternetTransport_DoCommand(&This->InetTransport, szCommand,
+ SMTPTransport_CallbackReadRCPTResponse);
+
+ HeapFree(GetProcessHeap(), 0, szCommand);
+ return hr;
+}
+
+static HRESULT WINAPI SMTPTransport_CommandEHLO(ISMTPTransport2 *iface)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ const char szCommandFormat[] = "EHLO %s\n";
+ const char szHostname[] = "localhost"; /* FIXME */
+ char *szCommand;
+ int len = sizeof(szCommandFormat) - 2 /* "%s" */ + sizeof(szHostname);
+ HRESULT hr;
+
+ TRACE("\n");
+
+ szCommand = HeapAlloc(GetProcessHeap(), 0, len);
+ if (!szCommand)
+ return E_OUTOFMEMORY;
+
+ sprintf(szCommand, szCommandFormat, szHostname);
+
+ hr = InternetTransport_DoCommand(&This->InetTransport, szCommand,
+ SMTPTransport_CallbackReadResponseDoNothing);
+
+ HeapFree(GetProcessHeap(), 0, szCommand);
+ return hr;
+}
+
+static HRESULT WINAPI SMTPTransport_CommandHELO(ISMTPTransport2 *iface)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ const char szCommandFormat[] = "HELO %s\n";
+ const char szHostname[] = "localhost"; /* FIXME */
+ char *szCommand;
+ int len = sizeof(szCommandFormat) - 2 /* "%s" */ + sizeof(szHostname);
+ HRESULT hr;
+
+ TRACE("()\n");
+
+ szCommand = HeapAlloc(GetProcessHeap(), 0, len);
+ if (!szCommand)
+ return E_OUTOFMEMORY;
+
+ sprintf(szCommand, szCommandFormat, szHostname);
+
+ hr = InternetTransport_DoCommand(&This->InetTransport, szCommand,
+ SMTPTransport_CallbackReadResponseDoNothing);
+
+ HeapFree(GetProcessHeap(), 0, szCommand);
+ return hr;
+}
+
+static HRESULT WINAPI SMTPTransport_CommandAUTH(ISMTPTransport2 *iface,
+ LPSTR pszAuthType)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+ const char szCommandFormat[] = "AUTH %s\n";
+ char *szCommand;
+ int len = sizeof(szCommandFormat) - 2 /* "%s" */ + strlen(pszAuthType);
+ HRESULT hr;
+
+ TRACE("(%s)\n", pszAuthType);
+
+ if (!pszAuthType)
+ return E_INVALIDARG;
+
+ szCommand = HeapAlloc(GetProcessHeap(), 0, len);
+ if (!szCommand)
+ return E_OUTOFMEMORY;
+
+ sprintf(szCommand, szCommandFormat, pszAuthType);
+
+ hr = InternetTransport_DoCommand(&This->InetTransport, szCommand,
+ SMTPTransport_CallbackReadResponseDoNothing);
+
+ HeapFree(GetProcessHeap(), 0, szCommand);
+ return hr;
+}
+
+static HRESULT WINAPI SMTPTransport_CommandQUIT(ISMTPTransport2 *iface)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("()\n");
+
+ InternetTransport_ChangeStatus(&This->InetTransport, IXP_DISCONNECTING);
+ return InternetTransport_DoCommand(&This->InetTransport, "QUIT\n",
+ SMTPTransport_CallbackDisconnect);
+}
+
+static HRESULT WINAPI SMTPTransport_CommandRSET(ISMTPTransport2 *iface)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("()\n");
+
+ return InternetTransport_DoCommand(&This->InetTransport, "RSET\n",
+ SMTPTransport_CallbackReadResponseDoNothing);
+}
+
+static HRESULT WINAPI SMTPTransport_CommandDATA(ISMTPTransport2 *iface)
+{
+ SMTPTransport *This = (SMTPTransport *)iface;
+
+ TRACE("()\n");
+
+ return InternetTransport_DoCommand(&This->InetTransport, "DATA\n",
+ SMTPTransport_CallbackReadDATAResponse);
+}
+
+static HRESULT WINAPI SMTPTransport_CommandDOT(ISMTPTransport2 *iface)
+{
+ FIXME("()\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI SMTPTransport_SendDataStream(ISMTPTransport2 *iface,
+ IStream *pStream, ULONG cbSize)
+{
+ FIXME("(%p, %d)\n", pStream, cbSize);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI SMTPTransport_SetWindow(ISMTPTransport2 *iface)
+{
+ FIXME("()\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI SMTPTransport_ResetWindow(ISMTPTransport2 *iface)
+{
+ FIXME("()\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI SMTPTransport_SendMessage2(ISMTPTransport2 *iface, LPSMTPMESSAGE2 pMessage)
+{
+ FIXME("(%p)\n", pMessage);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI SMTPTransport_CommandRCPT2(ISMTPTransport2 *iface, LPSTR pszEmailTo,
+ INETADDRTYPE atDSN)
+{
+ FIXME("(%s, %u)\n", pszEmailTo, atDSN);
+ return E_NOTIMPL;
+}
+
+static const ISMTPTransport2Vtbl SMTPTransport2Vtbl =
+{
+ SMTPTransport_QueryInterface,
+ SMTPTransport_AddRef,
+ SMTPTransport_Release,
+ SMTPTransport_GetServerInfo,
+ SMTPTransport_GetIXPType,
+ SMTPTransport_IsState,
+ SMTPTransport_InetServerFromAccount,
+ SMTPTransport_Connect,
+ SMTPTransport_HandsOffCallback,
+ SMTPTransport_Disconnect,
+ SMTPTransport_DropConnection,
+ SMTPTransport_GetStatus,
+ SMTPTransport_InitNew,
+ SMTPTransport_SendMessage,
+ SMTPTransport_CommandMAIL,
+ SMTPTransport_CommandRCPT,
+ SMTPTransport_CommandEHLO,
+ SMTPTransport_CommandHELO,
+ SMTPTransport_CommandAUTH,
+ SMTPTransport_CommandQUIT,
+ SMTPTransport_CommandRSET,
+ SMTPTransport_CommandDATA,
+ SMTPTransport_CommandDOT,
+ SMTPTransport_SendDataStream,
+ SMTPTransport_SetWindow,
+ SMTPTransport_ResetWindow,
+ SMTPTransport_SendMessage2,
+ SMTPTransport_CommandRCPT2
+};
+
+HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport)
+{
+ HRESULT hr;
+ SMTPTransport *This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
+ if (!This)
+ return E_OUTOFMEMORY;
+
+ This->InetTransport.u.vtblSMTP2 = &SMTPTransport2Vtbl;
+ This->refs = 0;
+ This->fESMTP = FALSE;
+ hr = InternetTransport_Init(&This->InetTransport);
+ if (FAILED(hr))
+ {
+ HeapFree(GetProcessHeap(), 0, This);
+ return hr;
+ }
+
+ *ppTransport = (ISMTPTransport *)&This->InetTransport.u.vtblSMTP2;
+ ISMTPTransport_AddRef(*ppTransport);
+
+ return S_OK;
+}
+
+
+static HRESULT WINAPI SMTPTransportCF_QueryInterface(LPCLASSFACTORY iface,
+ REFIID riid, LPVOID *ppv)
+{
+ *ppv = NULL;
+ if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IClassFactory))
+ {
+ *ppv = iface;
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI SMTPTransportCF_AddRef(LPCLASSFACTORY iface)
+{
+ return 2; /* non-heap based object */
+}
+
+static ULONG WINAPI SMTPTransportCF_Release(LPCLASSFACTORY iface)
+{
+ return 1; /* non-heap based object */
+}
+
+static HRESULT WINAPI SMTPTransportCF_CreateInstance(LPCLASSFACTORY iface,
+ LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv)
+{
+ HRESULT hr;
+ ISMTPTransport *pSmtpTransport;
+
+ TRACE("(%p, %s, %p)\n", pUnk, debugstr_guid(riid), ppv);
+
+ *ppv = NULL;
+
+ if (pUnk)
+ return CLASS_E_NOAGGREGATION;
+
+ hr = CreateSMTPTransport(&pSmtpTransport);
+ if (FAILED(hr))
+ return hr;
+
+ hr = ISMTPTransport_QueryInterface(pSmtpTransport, riid, ppv);
+ ISMTPTransport_Release(pSmtpTransport);
+
+ return hr;
+}
+
+static HRESULT WINAPI SMTPTransportCF_LockServer(LPCLASSFACTORY iface, BOOL fLock)
+{
+ FIXME("(%d)\n",fLock);
+ return S_OK;
+}
+
+static const IClassFactoryVtbl SMTPTransportCFVtbl =
+{
+ SMTPTransportCF_QueryInterface,
+ SMTPTransportCF_AddRef,
+ SMTPTransportCF_Release,
+ SMTPTransportCF_CreateInstance,
+ SMTPTransportCF_LockServer
+};
+static const IClassFactoryVtbl *SMTPTransportCF = &SMTPTransportCFVtbl;
+
+HRESULT SMTPTransportCF_Create(REFIID riid, LPVOID *ppv)
+{
+ return IClassFactory_QueryInterface((IClassFactory *)&SMTPTransportCF, riid, ppv);
+}
diff --git a/reactos/dll/win32/inetmib1/inetmib1.rbuild b/reactos/dll/win32/inetmib1/inetmib1.rbuild
index becb511a21a..3176d30bc73 100644
--- a/reactos/dll/win32/inetmib1/inetmib1.rbuild
+++ b/reactos/dll/win32/inetmib1/inetmib1.rbuild
@@ -7,7 +7,6 @@
include/reactos/wine
main.c
- inetmib1.spec
wine
snmpapi
kernel32
diff --git a/reactos/dll/win32/iphlpapi/iphlpapi.rbuild b/reactos/dll/win32/iphlpapi/iphlpapi.rbuild
index 5acca9019ed..94b3d3126f8 100644
--- a/reactos/dll/win32/iphlpapi/iphlpapi.rbuild
+++ b/reactos/dll/win32/iphlpapi/iphlpapi.rbuild
@@ -17,5 +17,4 @@
resinfo_reactos.c
route_reactos.c
iphlpapi.rc
- iphlpapi.spec
diff --git a/reactos/dll/win32/iphlpapi/iphlpapi_main.c b/reactos/dll/win32/iphlpapi/iphlpapi_main.c
index 49ca1740bc7..2fecb303c34 100644
--- a/reactos/dll/win32/iphlpapi/iphlpapi_main.c
+++ b/reactos/dll/win32/iphlpapi/iphlpapi_main.c
@@ -1388,8 +1388,32 @@ DWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen)
CopyMemory(&pFixedInfo->DnsServerList, resInfo->DnsList, sizeof(IP_ADDR_STRING));
if (resInfo->riCount > 1)
{
- pFixedInfo->DnsServerList.Next = (struct _IP_ADDR_STRING*)((char*)pFixedInfo + sizeof(FIXED_INFO));
- CopyMemory(pFixedInfo->DnsServerList.Next, resInfo->DnsList->Next, sizeof(IP_ADDR_STRING) * (resInfo->riCount-1));
+ IP_ADDR_STRING *pSrc = resInfo->DnsList->Next;
+ IP_ADDR_STRING *pTarget = (struct _IP_ADDR_STRING*)((char*)pFixedInfo + sizeof(FIXED_INFO));
+
+ pFixedInfo->DnsServerList.Next = pTarget;
+
+ do
+ {
+ CopyMemory(pTarget, pSrc, sizeof(IP_ADDR_STRING));
+ resInfo->riCount--;
+ if (resInfo->riCount > 1)
+ {
+ pTarget->Next = (IP_ADDR_STRING*)((char*)pTarget + sizeof(IP_ADDR_STRING));
+ pTarget = pTarget->Next;
+ pSrc = pSrc->Next;
+ }
+ else
+ {
+ pTarget->Next = NULL;
+ break;
+ }
+ }
+ while(TRUE);
+ }
+ else
+ {
+ pFixedInfo->DnsServerList.Next = NULL;
}
}
diff --git a/reactos/dll/win32/iphlpapi/resinfo.h b/reactos/dll/win32/iphlpapi/resinfo.h
index 789026803c1..863f6acc89a 100644
--- a/reactos/dll/win32/iphlpapi/resinfo.h
+++ b/reactos/dll/win32/iphlpapi/resinfo.h
@@ -24,7 +24,6 @@
typedef struct _IPHLP_RES_INFO {
DWORD riCount;
IP_ADDR_STRING * DnsList;
- struct sockaddr_in *riAddressList;
} IPHLP_RES_INFO, *PIPHLP_RES_INFO;
/* Get resolver info. This currently is limited to a list of IP addresses
diff --git a/reactos/dll/win32/iphlpapi/resinfo_reactos.c b/reactos/dll/win32/iphlpapi/resinfo_reactos.c
index 5a8a2313a22..3a540dcc664 100644
--- a/reactos/dll/win32/iphlpapi/resinfo_reactos.c
+++ b/reactos/dll/win32/iphlpapi/resinfo_reactos.c
@@ -244,6 +244,6 @@ PIPHLP_RES_INFO getResInfo() {
VOID disposeResInfo( PIPHLP_RES_INFO InfoPtr )
{
- RtlFreeHeap( GetProcessHeap(), 0, InfoPtr );
HeapFree(GetProcessHeap(), 0, InfoPtr->DnsList);
+ RtlFreeHeap( GetProcessHeap(), 0, InfoPtr );
}
diff --git a/reactos/dll/win32/jscript/jscript.rbuild b/reactos/dll/win32/jscript/jscript.rbuild
index 220b2fd516a..880339d31fa 100644
--- a/reactos/dll/win32/jscript/jscript.rbuild
+++ b/reactos/dll/win32/jscript/jscript.rbuild
@@ -27,7 +27,6 @@
function.c
global.c
rsrc.rc
- jscript.spec
stdole2
diff --git a/reactos/dll/win32/kernel32/include/kernel32.h b/reactos/dll/win32/kernel32/include/kernel32.h
index d2ca65a40bb..87fdcbc8b53 100755
--- a/reactos/dll/win32/kernel32/include/kernel32.h
+++ b/reactos/dll/win32/kernel32/include/kernel32.h
@@ -38,6 +38,15 @@
#define SetLastErrorByStatus(__S__) \
((void)SetLastError(RtlNtStatusToDosError(__S__)))
+typedef struct _CODEPAGE_ENTRY
+{
+ LIST_ENTRY Entry;
+ UINT CodePage;
+ HANDLE SectionHandle;
+ PBYTE SectionMapping;
+ CPTABLEINFO CodePageTable;
+} CODEPAGE_ENTRY, *PCODEPAGE_ENTRY;
+
typedef
DWORD
(*WaitForInputIdleType)(
@@ -171,5 +180,8 @@ BasepMapFile(IN LPCWSTR lpApplicationName,
OUT PHANDLE hSection,
IN PUNICODE_STRING ApplicationName);
+PCODEPAGE_ENTRY FASTCALL
+IntGetCodePageEntry(UINT CodePage);
+
#endif /* ndef _KERNEL32_INCLUDE_KERNEL32_H */
diff --git a/reactos/dll/win32/kernel32/kernel32.rbuild b/reactos/dll/win32/kernel32/kernel32.rbuild
index 870eca5d9b8..5ac5d5e95c1 100644
--- a/reactos/dll/win32/kernel32/kernel32.rbuild
+++ b/reactos/dll/win32/kernel32/kernel32.rbuild
@@ -57,6 +57,7 @@
actctx.c
atom.c
chartype.c
+ casemap.c
comm.c
computername.c
console.c
@@ -64,6 +65,7 @@
env.c
error.c
errormsg.c
+ fold.c
handle.c
lang.c
ldr.c
@@ -146,6 +148,5 @@
kernel32.rc
ntdll
- kernel32.spec
diff --git a/reactos/dll/win32/kernel32/mem/heap.c b/reactos/dll/win32/kernel32/mem/heap.c
index 0ab63f255bf..9dc2948fb81 100644
--- a/reactos/dll/win32/kernel32/mem/heap.c
+++ b/reactos/dll/win32/kernel32/mem/heap.c
@@ -251,16 +251,24 @@ HeapUsage(HANDLE hHeap,
}
/*
- * @unimplemented
+ * @implemented
*/
BOOL
STDCALL
-HeapWalk(HANDLE hHeap,
+HeapWalk(HANDLE hHeap,
LPPROCESS_HEAP_ENTRY lpEntry)
{
- /* Not implemented */
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ NTSTATUS Status;
+
+ Status = RtlWalkHeap(hHeap, lpEntry);
+
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError(RtlNtStatusToDosError(Status));
+ return FALSE;
+ }
+
+ return TRUE;
}
/* EOF */
diff --git a/reactos/dll/win32/kernel32/misc/casemap.c b/reactos/dll/win32/kernel32/misc/casemap.c
new file mode 100644
index 00000000000..d038b895ab5
--- /dev/null
+++ b/reactos/dll/win32/kernel32/misc/casemap.c
@@ -0,0 +1,1715 @@
+/* Unicode case mappings */
+/* Automatically generated; DO NOT EDIT!! */
+
+#include "wine/unicode.h"
+
+const WCHAR wine_casemap_lower[3318] =
+{
+ /* index */
+ 0x01bf, 0x02bf, 0x03bf, 0x0439, 0x0539, 0x0639, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0699, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0799, 0x0892,
+ 0x0100, 0x098f, 0x0100, 0x0100, 0x0a13, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0b13, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0bf6,
+ /* defaults */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0041 .. 0x00ff */
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0100 .. 0x01ff */
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0xff39, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,
+ 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,
+ 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0xff87, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000,
+ 0x0000, 0x00d2, 0x0001, 0x0000, 0x0001, 0x0000, 0x00ce, 0x0001,
+ 0x0000, 0x00cd, 0x00cd, 0x0001, 0x0000, 0x0000, 0x004f, 0x00ca,
+ 0x00cb, 0x0001, 0x0000, 0x00cd, 0x00cf, 0x0000, 0x00d3, 0x00d1,
+ 0x0001, 0x0000, 0x0000, 0x0000, 0x00d3, 0x00d5, 0x0000, 0x00d6,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x00da, 0x0001,
+ 0x0000, 0x00da, 0x0000, 0x0000, 0x0001, 0x0000, 0x00da, 0x0001,
+ 0x0000, 0x00d9, 0x00d9, 0x0001, 0x0000, 0x0001, 0x0000, 0x00db,
+ 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0001, 0x0000, 0x0002,
+ 0x0001, 0x0000, 0x0002, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,
+ 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,
+ 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0000, 0x0002, 0x0001, 0x0000, 0x0001, 0x0000, 0xff9f, 0xffc8,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ /* 0x0200 .. 0x02ff */
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0xff7e, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x2a2b, 0x0001, 0x0000, 0xff5d, 0x2a28, 0x0000,
+ 0x0000, 0x0001, 0x0000, 0xff3d, 0x0045, 0x0047, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0386 .. 0x03ff */
+ 0x0026, 0x0000, 0x0025, 0x0025, 0x0025, 0x0000, 0x0040, 0x0000,
+ 0x003f, 0x003f, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffc4, 0x0000,
+ 0x0000, 0x0001, 0x0000, 0xfff9, 0x0001, 0x0000, 0x0000, 0xff7e,
+ 0xff7e, 0xff7e,
+ /* 0x0400 .. 0x04ff */
+ 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
+ 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x000f, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,
+ 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ /* 0x0500 .. 0x05ff */
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x10a0 .. 0x10ff */
+ 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60,
+ 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60,
+ 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60,
+ 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60,
+ 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1e00 .. 0x1eff */
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1f07 .. 0x1fff */
+ 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8,
+ 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8,
+ 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8,
+ 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xfff8, 0x0000, 0xfff8, 0x0000, 0xfff8, 0x0000,
+ 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8,
+ 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8,
+ 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8,
+ 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8,
+ 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xffb6, 0xffb6, 0xfff7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xffaa, 0xffaa, 0xffaa, 0xffaa, 0xfff7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xff9c, 0xff9c, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff8, 0xfff8, 0xff90, 0xff90, 0xfff9, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xff80, 0xff80, 0xff82, 0xff82, 0xfff7, 0x0000, 0x0000,
+ 0x0000,
+ /* 0x2103 .. 0x21ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0xe2a3, 0x0000, 0x0000, 0x0000, 0xdf41,
+ 0xdfba, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001c,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0010,
+ 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
+ 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x247c .. 0x24ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a,
+ 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a,
+ 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a,
+ 0x001a, 0x001a, 0x001a, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2c00 .. 0x2cff */
+ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0000, 0xd609, 0xf11a, 0xd619, 0x0000, 0x0000, 0x0001,
+ 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xff1d .. 0xffff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000
+};
+const WCHAR wine_casemap_upper[3582] =
+{
+ /* index */
+ 0x019f, 0x029f, 0x039f, 0x045a, 0x0556, 0x0656, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x06dd, 0x07dc, 0x08dc,
+ 0x0100, 0x09d0, 0x0100, 0x0100, 0x0a55, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0b3f, 0x0c3f, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0cfe,
+ /* defaults */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0061 .. 0x00ff */
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x02e7, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0000, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0079,
+ /* 0x0100 .. 0x01ff */
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xff18, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0xfed4,
+ 0x00c3, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,
+ 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0061, 0x0000, 0x0000,
+ 0x0000, 0xffff, 0x00a3, 0x0000, 0x0000, 0x0000, 0x0082, 0x0000,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,
+ 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000,
+ 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0038,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xfffe, 0x0000,
+ 0xffff, 0xfffe, 0x0000, 0xffff, 0xfffe, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0xffb1, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0x0000, 0xffff, 0xfffe, 0x0000, 0xffff, 0x0000, 0x0000,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ /* 0x0200 .. 0x02ff */
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0x0000, 0x0000, 0xff2e, 0xff32, 0x0000, 0xff33, 0xff33,
+ 0x0000, 0xff36, 0x0000, 0xff35, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xff33, 0x0000, 0x0000, 0xff31, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xff2f, 0xff2d, 0x0000, 0x29f7, 0x0000, 0x0000, 0x0000, 0xff2d,
+ 0x0000, 0x0000, 0xff2b, 0x0000, 0x0000, 0xff2a, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x29e7, 0x0000, 0x0000,
+ 0xff26, 0x0000, 0x0000, 0xff26, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xff26, 0xffbb, 0xff27, 0xff27, 0xffb9, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xff25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0345 .. 0x03ff */
+ 0x0054, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0082, 0x0082,
+ 0x0082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffda,
+ 0xffdb, 0xffdb, 0xffdb, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe1, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffc0,
+ 0xffc1, 0xffc1, 0x0000, 0xffc2, 0xffc7, 0x0000, 0x0000, 0x0000,
+ 0xffd1, 0xffca, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0xffaa, 0xffb0, 0x0007, 0x0000, 0x0000,
+ 0xffa0, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000,
+ 0x0000, 0x0000, 0x0000,
+ /* 0x0404 .. 0x04ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffb0, 0xffb0, 0xffb0, 0xffb0,
+ 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0,
+ 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0xfff1, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff,
+ /* 0x0500 .. 0x05ff */
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
+ 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
+ 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
+ 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
+ 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1d79 .. 0x1dff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0ee6, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1e01 .. 0x1eff */
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xffc5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1f00 .. 0x1fff */
+ 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0008, 0x0000, 0x0008, 0x0000, 0x0008, 0x0000, 0x0008,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x004a, 0x004a, 0x0056, 0x0056, 0x0056, 0x0056, 0x0064, 0x0064,
+ 0x0080, 0x0080, 0x0070, 0x0070, 0x007e, 0x007e, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0000, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe3db, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0007, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x210c .. 0x21ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xffe4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0xfff0, 0xfff0, 0xfff0, 0xfff0,
+ 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0,
+ 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x247b .. 0x24ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffe6, 0xffe6, 0xffe6,
+ 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6,
+ 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6,
+ 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2c16 .. 0x2cff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
+ 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
+ 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
+ 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
+ 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
+ 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
+ 0xffd0, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xd5d5,
+ 0xd5d8, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000,
+ /* 0x2d00 .. 0x2dff */
+ 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0,
+ 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0,
+ 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0,
+ 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0,
+ 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xff41 .. 0xffff */
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,
+ 0xffe0, 0xffe0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+};
+const WCHAR wine_digitmap[4619] =
+{
+ /* index */
+ 0x01d0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x028a, 0x0384,
+ 0x0100, 0x044e, 0x053e, 0x062e, 0x071e, 0x080e, 0x08be, 0x099e,
+ 0x0a5e, 0x0100, 0x0100, 0x0af5, 0x0100, 0x0100, 0x0100, 0x0b67,
+ 0x0c57, 0x0d11, 0x0100, 0x0deb, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0e7b, 0x0100, 0x0100, 0x0100, 0x0f1b, 0x0100, 0x0100, 0x101b,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x110b,
+ /* defaults */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0030 .. 0x00ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xff80, 0xff80, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xff78, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0646 .. 0x06ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xf9d0, 0xf9d0, 0xf9d0, 0xf9d0, 0xf9d0, 0xf9d0,
+ 0xf9d0, 0xf9d0, 0xf9d0, 0xf9d0, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xf940, 0xf940, 0xf940, 0xf940, 0xf940, 0xf940,
+ 0xf940, 0xf940, 0xf940, 0xf940, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000,
+ /* 0x0706 .. 0x07ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xf870, 0xf870, 0xf870, 0xf870, 0xf870, 0xf870,
+ 0xf870, 0xf870, 0xf870, 0xf870, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000,
+ /* 0x0936 .. 0x09ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca,
+ 0xf6ca, 0xf6ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf64a, 0xf64a, 0xf64a, 0xf64a, 0xf64a, 0xf64a, 0xf64a, 0xf64a,
+ 0xf64a, 0xf64a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000,
+ /* 0x0a10 .. 0x0aff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf5ca, 0xf5ca,
+ 0xf5ca, 0xf5ca, 0xf5ca, 0xf5ca, 0xf5ca, 0xf5ca, 0xf5ca, 0xf5ca,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf54a, 0xf54a,
+ 0xf54a, 0xf54a, 0xf54a, 0xf54a, 0xf54a, 0xf54a, 0xf54a, 0xf54a,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0b10 .. 0x0bff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf4ca, 0xf4ca,
+ 0xf4ca, 0xf4ca, 0xf4ca, 0xf4ca, 0xf4ca, 0xf4ca, 0xf4ca, 0xf4ca,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf44a, 0xf44a,
+ 0xf44a, 0xf44a, 0xf44a, 0xf44a, 0xf44a, 0xf44a, 0xf44a, 0xf44a,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0c10 .. 0x0cff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf3ca, 0xf3ca,
+ 0xf3ca, 0xf3ca, 0xf3ca, 0xf3ca, 0xf3ca, 0xf3ca, 0xf3ca, 0xf3ca,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf34a, 0xf34a,
+ 0xf34a, 0xf34a, 0xf34a, 0xf34a, 0xf34a, 0xf34a, 0xf34a, 0xf34a,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0d10 .. 0x0dff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf2ca, 0xf2ca,
+ 0xf2ca, 0xf2ca, 0xf2ca, 0xf2ca, 0xf2ca, 0xf2ca, 0xf2ca, 0xf2ca,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0e50 .. 0x0eff */
+ 0xf1e0, 0xf1e0, 0xf1e0, 0xf1e0, 0xf1e0, 0xf1e0, 0xf1e0, 0xf1e0,
+ 0xf1e0, 0xf1e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf160, 0xf160, 0xf160, 0xf160, 0xf160, 0xf160, 0xf160, 0xf160,
+ 0xf160, 0xf160, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0f20 .. 0x0fff */
+ 0xf110, 0xf110, 0xf110, 0xf110, 0xf110, 0xf110, 0xf110, 0xf110,
+ 0xf110, 0xf110, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1040 .. 0x10ff */
+ 0xeff0, 0xeff0, 0xeff0, 0xeff0, 0xeff0, 0xeff0, 0xeff0, 0xeff0,
+ 0xeff0, 0xeff0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1369 .. 0x13ff */
+ 0xecc8, 0xecc8, 0xecc8, 0xecc8, 0xecc8, 0xecc8, 0xecc8, 0xecc8,
+ 0xecc8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x178e .. 0x17ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xe850, 0xe850, 0xe850, 0xe850, 0xe850, 0xe850,
+ 0xe850, 0xe850, 0xe850, 0xe850, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000,
+ /* 0x1810 .. 0x18ff */
+ 0xe820, 0xe820, 0xe820, 0xe820, 0xe820, 0xe820, 0xe820, 0xe820,
+ 0xe820, 0xe820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1946 .. 0x19ff */
+ 0xe6ea, 0xe6ea, 0xe6ea, 0xe6ea, 0xe6ea, 0xe6ea, 0xe6ea, 0xe6ea,
+ 0xe6ea, 0xe6ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xe660, 0xe660, 0xe660, 0xe660, 0xe660, 0xe660,
+ 0xe660, 0xe660, 0xe660, 0xe660, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000,
+ /* 0x1b26 .. 0x1bff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xe4e0, 0xe4e0, 0xe4e0, 0xe4e0, 0xe4e0, 0xe4e0,
+ 0xe4e0, 0xe4e0, 0xe4e0, 0xe4e0, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000,
+ /* 0x2070 .. 0x20ff */
+ 0xdfc0, 0x0000, 0x0000, 0x0000, 0xdfc0, 0xdfc0, 0xdfc0, 0xdfc0,
+ 0xdfc0, 0xdfc0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0,
+ 0xdfb0, 0xdfb0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2460 .. 0x24ff */
+ 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1,
+ 0xdbd1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0xdbbd, 0xdbbd, 0xdbbd, 0xdbbd,
+ 0xdbbd, 0xdbbd, 0xdbbd, 0xdbbd, 0xdbbd, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xdba9, 0xdba9, 0xdba9, 0xdba9, 0xdba9, 0xdba9, 0xdba9, 0xdba9,
+ 0xdba9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xdb46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xdb3c, 0xdb3c, 0xdb3c,
+ 0xdb3c, 0xdb3c, 0xdb3c, 0xdb3c, 0xdb3c, 0xdb3c, 0x0000, 0xdb31,
+ /* 0x2700 .. 0x27ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd8bb, 0xd8bb,
+ 0xd8bb, 0xd8bb, 0xd8bb, 0xd8bb, 0xd8bb, 0xd8bb, 0xd8bb, 0x0000,
+ 0xd8b1, 0xd8b1, 0xd8b1, 0xd8b1, 0xd8b1, 0xd8b1, 0xd8b1, 0xd8b1,
+ 0xd8b1, 0x0000, 0xd8a7, 0xd8a7, 0xd8a7, 0xd8a7, 0xd8a7, 0xd8a7,
+ 0xd8a7, 0xd8a7, 0xd8a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xff10 .. 0xffff */
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+};
+const WCHAR wine_compatmap[1497] =
+{
+ /* index */
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0200, 0x0300, 0x0100, 0x0100, 0x0100, 0x03da, 0x04d9,
+ /* defaults */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xf900 .. 0xf9ff */
+ 0x9348, 0x6df3, 0x95c8, 0x93c5, 0x75cd, 0x552d, 0x5adf, 0xa695,
+ 0xa694, 0x6048, 0x98c7, 0x5c7c, 0x603c, 0x68e9, 0x7d5b, 0x8676,
+ 0x8d2f, 0x8ea9, 0x8fe6, 0x977c, 0x70ee, 0x7406, 0x77c3, 0x7ac7,
+ 0x8b25, 0x9851, 0xa0d7, 0x5567, 0x5a59, 0x71e7, 0x78fd, 0x8d0e,
+ 0xa4fe, 0x642f, 0x76c9, 0x8caa, 0x9040, 0x69a4, 0x88b2, 0x8ef8,
+ 0x65a2, 0x6dee, 0x7440, 0x79d1, 0x97a2, 0x5659, 0x5889, 0x59af,
+ 0x6b94, 0x71a2, 0x78de, 0x7db4, 0x86cd, 0x8cd1, 0x8d26, 0x94b8,
+ 0x9dfa, 0xa236, 0xa4c0, 0x7f51, 0x8043, 0x8463, 0x8a8b, 0x99c5,
+ 0xa53f, 0x9195, 0x5f9d, 0x65c1, 0x831c, 0x8739, 0x791c, 0x7f83,
+ 0x937a, 0x9dae, 0x5f8e, 0x6317, 0x70c7, 0x748d, 0x75c1, 0x83e0,
+ 0x84e7, 0x9cfa, 0x5980, 0x8738, 0x5888, 0x5877, 0x80c6, 0x8467,
+ 0x8a99, 0x9d1c, 0x9226, 0x6974, 0x70a6, 0x91a1, 0x54db, 0x6288,
+ 0x66b2, 0x7a26, 0x7c0e, 0x59b4, 0x7f97, 0x565a, 0x6643, 0x54a6,
+ 0x7364, 0x6c0f, 0x83b8, 0x5a58, 0x5ef2, 0x7d94, 0x8adb, 0x913b,
+ 0x724a, 0x963f, 0x7316, 0x698b, 0x8971, 0x6a2b, 0x7bef, 0x5537,
+ 0x57f1, 0x5850, 0x6f07, 0x836c, 0x88f3, 0x9155, 0x9851, 0x5976,
+ 0x5ac2, 0x5ff2, 0x656a, 0x6c42, 0x767a, 0x7fa5, 0x9c27, 0xa0e3,
+ 0xa50f, 0xa545, 0x5911, 0x6d3b, 0x71eb, 0x95d5, 0x64e6, 0x6801,
+ 0x6870, 0x6b09, 0x7591, 0x77b6, 0x7af5, 0x8035, 0x845e, 0x86d8,
+ 0x958e, 0x8b55, 0x9689, 0x99af, 0x587b, 0x5906, 0x5b1f, 0x7729,
+ 0x8f22, 0x9109, 0x6527, 0x6652, 0x69d7, 0x7209, 0x8298, 0x79ce,
+ 0x553c, 0x5d50, 0x623d, 0x640f, 0x6670, 0x7a05, 0x7abb, 0x85eb,
+ 0x8696, 0x9883, 0x9d44, 0x9d95, 0x9e64, 0x55d6, 0x7ff8, 0x97fd,
+ 0x9d00, 0x6728, 0x54cc, 0x571f, 0x6232, 0x6282, 0x6bdb, 0x7043,
+ 0x780e, 0x7c81, 0x8b3a, 0x96b9, 0xa5c9, 0x6cc3, 0x9c68, 0x58c2,
+ 0x6db3, 0x6e2a, 0x7377, 0x74d1, 0x7a3d, 0x7b8c, 0x7e9d, 0x8341,
+ 0x9e8e, 0x579c, 0x685c, 0x9ca5, 0x5657, 0x6344, 0x7414, 0x9553,
+ 0x65b3, 0x676b, 0x6e3d, 0x79ac, 0x9caa, 0x584c, 0x5a31, 0x6286,
+ 0x6c33, 0x6d6d, 0x6ec6, 0x7302, 0x7a22, 0x7bfd, 0x8593, 0x8ee8,
+ 0x8ef9, 0x97e3, 0x9cf8, 0x5954, 0x74ce, 0x5a30, 0x77e2, 0x7aa9,
+ 0x8c0a, 0x9cb2, 0xa265, 0xa4ac, 0x6da3, 0x73d6, 0x87f2, 0x80d4,
+ 0x8128, 0x8299, 0x78c6, 0x769e, 0x915c, 0x54c3, 0x8938, 0x583b,
+ /* 0xfa00 .. 0xfaff */
+ 0x5807, 0x64a5, 0x68d1, 0x82d3, 0x6181, 0x7319, 0x6cae, 0x9534,
+ 0x8e44, 0x9c44, 0x8f81, 0x64c8, 0x5734, 0x5bb3, 0x0000, 0x0000,
+ 0x5e4a, 0x0000, 0x6c62, 0x0000, 0x0000, 0x57c9, 0x7914, 0x7cb3,
+ 0x7f24, 0x7f45, 0x7f4b, 0x7f74, 0x9d3a, 0x82a1, 0x859f, 0x0000,
+ 0x8bf2, 0x0000, 0x90d6, 0x0000, 0x0000, 0x9613, 0x96d7, 0x0000,
+ 0x0000, 0x0000, 0x9ec5, 0x9ed1, 0x9efc, 0xa387, 0x0000, 0x0000,
+ 0x557e, 0x56b6, 0x571b, 0x5896, 0x58b0, 0x591c, 0x5b67, 0x5bcf,
+ 0x5c30, 0x5e07, 0x5e6e, 0x6229, 0x6232, 0x6657, 0x672a, 0x674f,
+ 0x67b2, 0x6b0e, 0x6ba0, 0x6c4e, 0x6e41, 0x7332, 0x73d4, 0x74db,
+ 0x7726, 0x77e2, 0x79d8, 0x7e46, 0x7ef2, 0x7efc, 0x7efa, 0x7f01,
+ 0x7f06, 0x7f0c, 0x7f3b, 0x7f3b, 0x7fec, 0x802c, 0x816a, 0x839d,
+ 0x83b1, 0x83e8, 0x8518, 0x85aa, 0x8791, 0x881c, 0x881b, 0x89f8,
+ 0x8eb0, 0x8f35, 0x909f, 0x90d6, 0x926f, 0x92a3, 0x9550, 0x95d1,
+ 0x9c7b, 0x9d96, 0x9dd1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x53b6, 0x5744, 0x56f6, 0x550d, 0x56d1, 0x570b, 0x5851, 0x5883,
+ 0x5b25, 0x5adc, 0x5b1f, 0x5b67, 0x5dde, 0x5e36, 0x5ec6, 0x5ed5,
+ 0x5fe2, 0x60a7, 0x6450, 0x6456, 0x64e5, 0x6528, 0x6652, 0x66c7,
+ 0x6680, 0x6705, 0x66d6, 0x6767, 0x67a8, 0x6937, 0x698e, 0x69c3,
+ 0x6ac6, 0x6be3, 0x6c85, 0x6c88, 0x6cc2, 0x70e4, 0x7124, 0x72aa,
+ 0x7443, 0x7432, 0x7488, 0x7583, 0x76d2, 0x7d0a, 0x7797, 0x7810,
+ 0x788a, 0x79d0, 0x7a64, 0x7a98, 0x7b79, 0x7b7a, 0x7c24, 0x7c34,
+ 0x7c4c, 0x7ca1, 0x7c96, 0x7e21, 0x8005, 0x8113, 0x81cd, 0x82ac,
+ 0x8344, 0x848d, 0x8553, 0x889f, 0x893b, 0x8cc4, 0x8e8b, 0x8ecf,
+ 0x8ede, 0x9006, 0x903e, 0x9010, 0x9045, 0x9041, 0x902f, 0x907a,
+ 0x90ca, 0x9247, 0x9476, 0x95af, 0x96d5, 0x97b1, 0x9bb6, 0x9c1c,
+ 0x9c8e, 0x9d12, 0x9d35, 0x9d40, 0x9d6f, 0xa045, 0xa4ce, 0x2d7b,
+ 0x2d74, 0x3904, 0x40cb, 0x4545, 0x4565, 0x5774, 0x61fa, 0x83fc,
+ 0xa46b, 0xa4b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfe26 .. 0xfeff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x21f5, 0x21e3, 0x21e1, 0x022c, 0x022b, 0x01f3,
+ 0x01f3, 0x0244, 0x0245, 0x31db, 0x31db, 0x31d5, 0x31d5, 0x31cd,
+ 0x31cd, 0x31c9, 0x31c9, 0x31cb, 0x31cb, 0x31cb, 0x31cb, 0x0000,
+ 0x0000, 0x0214, 0x0215, 0x21f5, 0x21f4, 0x21f3, 0x21f2, 0x0212,
+ 0x0211, 0x0210, 0x01dc, 0x31b0, 0x01dc, 0x0000, 0x01e7, 0x01e5,
+ 0x01e9, 0x01ca, 0x21bc, 0x01cf, 0x01cf, 0x0220, 0x0221, 0x31b7,
+ 0x31b7, 0x01c4, 0x01c6, 0x01c9, 0x01c9, 0x01ca, 0x01d8, 0x01d9,
+ 0x01d7, 0x0000, 0x01f4, 0x01bb, 0x01bb, 0x01d5, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x07a1, 0x07a1, 0x07a0, 0x07a0, 0x079f, 0x079f,
+ 0x079e, 0x079e, 0x079d, 0x079d, 0x079c, 0x079b, 0x079a, 0x079a,
+ 0x0799, 0x0799, 0x0798, 0x0797, 0x0796, 0x0796, 0x0795, 0x0795,
+ 0x0794, 0x0793, 0x0792, 0x0792, 0x0791, 0x0790, 0x078f, 0x078f,
+ 0x078e, 0x078d, 0x078c, 0x078c, 0x078b, 0x078a, 0x0789, 0x0789,
+ 0x0788, 0x0787, 0x0786, 0x0786, 0x0785, 0x0785, 0x0784, 0x0784,
+ 0x0783, 0x0783, 0x0782, 0x0782, 0x0781, 0x0780, 0x077f, 0x077f,
+ 0x077e, 0x077d, 0x077c, 0x077c, 0x077b, 0x077a, 0x0779, 0x0779,
+ 0x0778, 0x0777, 0x0776, 0x0776, 0x0775, 0x0774, 0x0773, 0x0773,
+ 0x0772, 0x0771, 0x0770, 0x0770, 0x076f, 0x076e, 0x076d, 0x076d,
+ 0x076c, 0x076b, 0x076a, 0x0770, 0x076f, 0x076e, 0x076d, 0x076d,
+ 0x076c, 0x076b, 0x076a, 0x076a, 0x0769, 0x0768, 0x0767, 0x0767,
+ 0x0766, 0x0765, 0x0764, 0x0764, 0x0763, 0x0762, 0x0761, 0x0761,
+ 0x0760, 0x075f, 0x075e, 0x075e, 0x075d, 0x075c, 0x075b, 0x075b,
+ 0x075a, 0x075a, 0x0759, 0x0759, 0x0758, 0x0757, 0x0756, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000,
+ /* 0xff01 .. 0xffff */
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120,
+ 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x2a26, 0x2a26,
+ 0x30a1, 0x30aa, 0x30aa, 0x309d, 0x3196, 0x318c, 0x313a, 0x313b,
+ 0x313c, 0x313d, 0x313e, 0x3177, 0x3178, 0x3179, 0x3154, 0x318c,
+ 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3135, 0x3136, 0x3137,
+ 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f,
+ 0x3140, 0x3142, 0x3143, 0x3144, 0x3145, 0x3145, 0x3145, 0x3145,
+ 0x3145, 0x3145, 0x3147, 0x3149, 0x314b, 0x314d, 0x314f, 0x314f,
+ 0x314f, 0x314f, 0x314f, 0x3150, 0x3151, 0x3152, 0x3152, 0x3152,
+ 0x3152, 0x3152, 0x3152, 0x3153, 0x3156, 0x30fb, 0x30fb, 0x31c4,
+ 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190,
+ 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190,
+ 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190,
+ 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x0000, 0x0000,
+ 0x0000, 0x318d, 0x318d, 0x318d, 0x318d, 0x318d, 0x318d, 0x0000,
+ 0x0000, 0x318b, 0x318b, 0x318b, 0x318b, 0x318b, 0x318b, 0x0000,
+ 0x0000, 0x3189, 0x3189, 0x3189, 0x3189, 0x3189, 0x3189, 0x0000,
+ 0x0000, 0x3187, 0x3187, 0x3187, 0x0000, 0x0000, 0x0000, 0x00c2,
+ 0x00c2, 0x00ca, 0x00cc, 0x00c2, 0x00c0, 0x20c3, 0x0000, 0x251a,
+ 0x21a7, 0x21a7, 0x21a7, 0x21a7, 0x25b3, 0x25dd, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+};
diff --git a/reactos/dll/win32/kernel32/misc/fold.c b/reactos/dll/win32/kernel32/misc/fold.c
new file mode 100644
index 00000000000..87a4a418faa
--- /dev/null
+++ b/reactos/dll/win32/kernel32/misc/fold.c
@@ -0,0 +1,198 @@
+/*
+ * String folding
+ *
+ * Copyright 2003 Jon Griffiths
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wine/unicode.h"
+
+static inline WCHAR to_unicode_digit( WCHAR ch )
+{
+ extern const WCHAR wine_digitmap[];
+ return ch + wine_digitmap[wine_digitmap[ch >> 8] + (ch & 0xff)];
+}
+
+static inline WCHAR to_unicode_native( WCHAR ch )
+{
+ extern const WCHAR wine_compatmap[];
+ return ch + wine_compatmap[wine_compatmap[ch >> 8] + (ch & 0xff)];
+}
+
+static const WCHAR wine_ligatures[] =
+{
+ 0x00c6, 0x00de, 0x00df, 0x00e6, 0x00fe, 0x0132, 0x0133, 0x0152,
+ 0x0153, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01c8, 0x01c9, 0x01ca,
+ 0x01cb, 0x01cc, 0x01e2, 0x01e3, 0x01f1, 0x01f2, 0x01f3, 0x01fc,
+ 0x01fd, 0x05f0, 0x05f1, 0x05f2, 0xfb00, 0xfb01, 0xfb02, 0xfb03,
+ 0xfb04, 0xfb05, 0xfb06
+};
+
+/* Unicode expanded ligatures */
+static const WCHAR wine_expanded_ligatures[][4] =
+{
+ { 'A','E','\0',1 },
+ { 'T','H','\0',1 },
+ { 's','s','\0',1 },
+ { 'a','e','\0',1 },
+ { 't','h','\0',1 },
+ { 'I','J','\0',1 },
+ { 'i','j','\0',1 },
+ { 'O','E','\0',1 },
+ { 'o','e','\0',1 },
+ { 'D',0x017d,'\0',1 },
+ { 'D',0x017e,'\0',1 },
+ { 'd',0x017e,'\0',1 },
+ { 'L','J','\0',1 },
+ { 'L','j','\0',1 },
+ { 'l','j','\0',1 },
+ { 'N','J','\0',1 },
+ { 'N','j','\0',1 },
+ { 'n','j','\0',1 },
+ { 0x0100,0x0112,'\0',1 },
+ { 0x0101,0x0113,'\0',1 },
+ { 'D','Z','\0',1 },
+ { 'D','z','\0',1 },
+ { 'd','z','\0',1 },
+ { 0x00c1,0x00c9,'\0',1 },
+ { 0x00e1,0x00e9,'\0',1 },
+ { 0x05d5,0x05d5,'\0',1 },
+ { 0x05d5,0x05d9,'\0',1 },
+ { 0x05d9,0x05d9,'\0',1 },
+ { 'f','f','\0',1 },
+ { 'f','i','\0',1 },
+ { 'f','l','\0',1 },
+ { 'f','f','i',2 },
+ { 'f','f','l',2 },
+ { 0x017f,'t','\0',1 },
+ { 's','t','\0',1 }
+};
+
+static inline int get_ligature_len( WCHAR wc )
+{
+ int low = 0, high = sizeof(wine_ligatures)/sizeof(WCHAR) -1;
+ while (low <= high)
+ {
+ int pos = (low + high) / 2;
+ if (wine_ligatures[pos] < wc)
+ low = pos + 1;
+ else if (wine_ligatures[pos] > wc)
+ high = pos - 1;
+ else
+ return wine_expanded_ligatures[pos][3];
+ }
+ return 0;
+}
+
+static inline const WCHAR* get_ligature( WCHAR wc )
+{
+ static const WCHAR empty_ligature[] = { '\0','\0','\0', 0 };
+ int low = 0, high = sizeof(wine_ligatures)/sizeof(WCHAR) -1;
+ while (low <= high)
+ {
+ int pos = (low + high) / 2;
+ if (wine_ligatures[pos] < wc)
+ low = pos + 1;
+ else if (wine_ligatures[pos] > wc)
+ high = pos - 1;
+ else
+ return wine_expanded_ligatures[pos];
+ }
+ return empty_ligature;
+}
+
+/* fold a unicode string */
+int wine_fold_string( int flags, const WCHAR *src, int srclen, WCHAR *dst, int dstlen )
+{
+ WCHAR *dstbase = dst;
+ const WCHAR *expand;
+ int i;
+
+ if (srclen == -1)
+ srclen = strlenW(src) + 1; /* Include terminating NUL in count */
+
+ if (!dstlen)
+ {
+ /* Calculate the required size for dst */
+ dstlen = srclen;
+
+ if (flags & MAP_EXPAND_LIGATURES)
+ {
+ while (srclen--)
+ {
+ dstlen += get_ligature_len(*src);
+ src++;
+ }
+ }
+ else if (flags & MAP_COMPOSITE)
+ {
+ /* FIXME */
+ }
+ else if (flags & MAP_PRECOMPOSED)
+ {
+ /* FIXME */
+ }
+ return dstlen;
+ }
+
+ if (srclen > dstlen)
+ return 0;
+
+ dstlen -= srclen;
+
+ /* Actually perform the mapping(s) specified */
+ for (i = 0; i < srclen; i++)
+ {
+ WCHAR ch = *src;
+
+ if (flags & MAP_EXPAND_LIGATURES)
+ {
+ expand = get_ligature(ch);
+ if (expand[0])
+ {
+ if (!dstlen--)
+ return 0;
+ dst[0] = expand[0];
+ if (expand[2])
+ {
+ if (!dstlen--)
+ return 0;
+ *++dst = expand[1];
+ ch = expand[2];
+ }
+ else
+ ch = expand[1];
+ dst++;
+ }
+ }
+ else if (flags & MAP_COMPOSITE)
+ {
+ /* FIXME */
+ }
+ else if (flags & MAP_PRECOMPOSED)
+ {
+ /* FIXME */
+ }
+ if (flags & MAP_FOLDDIGITS)
+ ch = to_unicode_digit(ch);
+ if (flags & MAP_FOLDCZONE)
+ ch = to_unicode_native(ch);
+
+ *dst++ = ch;
+ src++;
+ }
+ return dst - dstbase;
+}
diff --git a/reactos/dll/win32/kernel32/misc/lang.c b/reactos/dll/win32/kernel32/misc/lang.c
index 3020e8530ab..6c8e3611e3b 100644
--- a/reactos/dll/win32/kernel32/misc/lang.c
+++ b/reactos/dll/win32/kernel32/misc/lang.c
@@ -1267,32 +1267,89 @@ GetCPInfo (
/*
- * @unimplemented
+ * @implemented
*/
BOOL
STDCALL
-GetCPInfoExW(
- UINT CodePage,
- DWORD dwFlags,
- LPCPINFOEXW lpCPInfoEx)
+GetCPInfoExW(UINT CodePage,
+ DWORD dwFlags,
+ LPCPINFOEXW lpCPInfoEx)
{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
+ if (!GetCPInfo(CodePage, (LPCPINFO) lpCPInfoEx))
+ return FALSE;
+
+ switch(CodePage)
+ {
+ case CP_UTF7:
+ {
+ static const WCHAR utf7[] = L"Unicode (UTF-7)\0";
+
+ lpCPInfoEx->CodePage = CP_UTF7;
+ lpCPInfoEx->UnicodeDefaultChar = 0x3f;
+ wcscpy(lpCPInfoEx->CodePageName, utf7);
+ }
+ break;
+
+ case CP_UTF8:
+ {
+ static const WCHAR utf8[] = L"Unicode (UTF-8)\0";
+
+ lpCPInfoEx->CodePage = CP_UTF8;
+ lpCPInfoEx->UnicodeDefaultChar = 0x3f;
+ wcscpy(lpCPInfoEx->CodePageName, utf8);
+ }
+
+ default:
+ {
+ PCODEPAGE_ENTRY CodePageEntry;
+
+ CodePageEntry = IntGetCodePageEntry(CodePage);
+ if (CodePageEntry == NULL)
+ {
+ DPRINT1("Could not get CodePage Entry! CodePageEntry = 0\n");
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ lpCPInfoEx->CodePage = CodePageEntry->CodePageTable.CodePage;
+ lpCPInfoEx->UnicodeDefaultChar = CodePageEntry->CodePageTable.UniDefaultChar;
+ /* FIXME: We need to get a codepage name */
+ DPRINT1("FIXME: We need to get a codepage name!\n");
+ wcscpy(lpCPInfoEx->CodePageName, L"Unknown\0");
+ }
+ break;
+ }
+
+ return TRUE;
}
/*
- * @unimplemented
+ * @implemented
*/
BOOL
STDCALL
-GetCPInfoExA(
- UINT CodePage,
- DWORD dwFlags,
- LPCPINFOEXA lpCPInfoEx)
+GetCPInfoExA(UINT CodePage,
+ DWORD dwFlags,
+ LPCPINFOEXA lpCPInfoEx)
{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
+ CPINFOEXW CPInfo;
+
+ if (!GetCPInfoExW(CodePage, dwFlags, &CPInfo))
+ return FALSE;
+
+ /* the layout is the same except for CodePageName */
+ memcpy(lpCPInfoEx, &CPInfo, sizeof(CPINFOEXA));
+
+ WideCharToMultiByte(CP_ACP,
+ 0,
+ CPInfo.CodePageName,
+ -1,
+ lpCPInfoEx->CodePageName,
+ sizeof(lpCPInfoEx->CodePageName),
+ NULL,
+ NULL);
+ return TRUE;
}
static int
@@ -1716,6 +1773,115 @@ __inline static UINT get_lcid_codepage( LCID lcid )
}
+/*************************************************************************
+ * FoldStringA (KERNEL32.@)
+ *
+ * Map characters in a string.
+ *
+ * PARAMS
+ * dwFlags [I] Flags controlling chars to map (MAP_ constants from "winnls.h")
+ * src [I] String to map
+ * srclen [I] Length of src, or -1 if src is NUL terminated
+ * dst [O] Destination for mapped string
+ * dstlen [I] Length of dst, or 0 to find the required length for the mapped string
+ *
+ * RETURNS
+ * Success: The length of the string written to dst, including the terminating NUL. If
+ * dstlen is 0, the value returned is the same, but nothing is written to dst,
+ * and dst may be NULL.
+ * Failure: 0. Use GetLastError() to determine the cause.
+ */
+INT WINAPI FoldStringA(DWORD dwFlags, LPCSTR src, INT srclen,
+ LPSTR dst, INT dstlen)
+{
+ INT ret = 0, srclenW = 0;
+ WCHAR *srcW = NULL, *dstW = NULL;
+
+ if (!src || !srclen || dstlen < 0 || (dstlen && !dst) || src == dst)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return 0;
+ }
+
+ srclenW = MultiByteToWideChar(CP_ACP, dwFlags & MAP_COMPOSITE ? MB_COMPOSITE : 0,
+ src, srclen, NULL, 0);
+ srcW = HeapAlloc(GetProcessHeap(), 0, srclenW * sizeof(WCHAR));
+
+ if (!srcW)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ goto FoldStringA_exit;
+ }
+
+ MultiByteToWideChar(CP_ACP, dwFlags & MAP_COMPOSITE ? MB_COMPOSITE : 0,
+ src, srclen, srcW, srclenW);
+
+ dwFlags = (dwFlags & ~MAP_PRECOMPOSED) | MAP_FOLDCZONE;
+
+ ret = FoldStringW(dwFlags, srcW, srclenW, NULL, 0);
+ if (ret && dstlen)
+ {
+ dstW = HeapAlloc(GetProcessHeap(), 0, ret * sizeof(WCHAR));
+
+ if (!dstW)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ goto FoldStringA_exit;
+ }
+
+ ret = FoldStringW(dwFlags, srcW, srclenW, dstW, ret);
+ if (!WideCharToMultiByte(CP_ACP, 0, dstW, ret, dst, dstlen, NULL, NULL))
+ {
+ ret = 0;
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ }
+ }
+
+ HeapFree(GetProcessHeap(), 0, dstW);
+
+FoldStringA_exit:
+ HeapFree(GetProcessHeap(), 0, srcW);
+ return ret;
+}
+
+extern int wine_fold_string( int flags, const WCHAR *src, int srclen, WCHAR *dst, int dstlen );
+
+/*************************************************************************
+ * FoldStringW (KERNEL32.@)
+ *
+ * See FoldStringA.
+ */
+INT WINAPI FoldStringW(DWORD dwFlags, LPCWSTR src, INT srclen,
+ LPWSTR dst, INT dstlen)
+{
+ int ret;
+
+ switch (dwFlags & (MAP_COMPOSITE|MAP_PRECOMPOSED|MAP_EXPAND_LIGATURES))
+ {
+ case 0:
+ if (dwFlags)
+ break;
+ /* Fall through for dwFlags == 0 */
+ case MAP_PRECOMPOSED|MAP_COMPOSITE:
+ case MAP_PRECOMPOSED|MAP_EXPAND_LIGATURES:
+ case MAP_COMPOSITE|MAP_EXPAND_LIGATURES:
+ SetLastError(ERROR_INVALID_FLAGS);
+ return 0;
+ }
+
+ if (!src || !srclen || dstlen < 0 || (dstlen && !dst) || src == dst)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return 0;
+ }
+
+ ret = wine_fold_string(dwFlags, src, srclen, dst, dstlen);
+ if (!ret)
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ return ret;
+}
+
+
/*
* @implemented
*/
diff --git a/reactos/dll/win32/kernel32/misc/nls.c b/reactos/dll/win32/kernel32/misc/nls.c
index 2c0d48bd64a..f5b3aa4a681 100644
--- a/reactos/dll/win32/kernel32/misc/nls.c
+++ b/reactos/dll/win32/kernel32/misc/nls.c
@@ -20,15 +20,6 @@
/* GLOBAL VARIABLES ***********************************************************/
-typedef struct _CODEPAGE_ENTRY
-{
- LIST_ENTRY Entry;
- UINT CodePage;
- HANDLE SectionHandle;
- PBYTE SectionMapping;
- CPTABLEINFO CodePageTable;
-} CODEPAGE_ENTRY, *PCODEPAGE_ENTRY;
-
/* Sequence length based on the first character. */
static const char UTF8Length[128] =
{
@@ -185,7 +176,7 @@ IntGetLoadedCodePageEntry(UINT CodePage)
* @return Code page entry.
*/
-static PCODEPAGE_ENTRY FASTCALL
+PCODEPAGE_ENTRY FASTCALL
IntGetCodePageEntry(UINT CodePage)
{
CHAR SectionName[40];
diff --git a/reactos/dll/win32/kernel32/misc/stubs.c b/reactos/dll/win32/kernel32/misc/stubs.c
index a5ac6b9504f..fae6cff70d8 100644
--- a/reactos/dll/win32/kernel32/misc/stubs.c
+++ b/reactos/dll/win32/kernel32/misc/stubs.c
@@ -125,42 +125,6 @@ ExtendVirtualBuffer (
}
-/*
- * @unimplemented
- */
-int
-STDCALL
-FoldStringW (
- DWORD dwMapFlags,
- LPCWSTR lpSrcStr,
- int cchSrc,
- LPWSTR lpDestStr,
- int cchDest
- )
-{
- STUB;
- return 0;
-}
-
-
-/*
- * @unimplemented
- */
-int
-STDCALL
-FoldStringA (
- DWORD dwMapFlags,
- LPCSTR lpSrcStr,
- int cchSrc,
- LPSTR lpDestStr,
- int cchDest
- )
-{
- STUB;
- return 0;
-}
-
-
/*
* @unimplemented
*/
@@ -567,21 +531,6 @@ IsSystemResumeAutomatic(
return 0;
}
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-IsWow64Process(
- HANDLE hProcess,
- PBOOL Wow64Process
- )
-{
- STUB;
- *Wow64Process = FALSE;
- return TRUE;
-}
-
/*
* @unimplemented
*/
diff --git a/reactos/dll/win32/kernel32/nls/div.nls b/reactos/dll/win32/kernel32/nls/div.nls
index 2383d4004a3..0d3886a1fff 100644
--- a/reactos/dll/win32/kernel32/nls/div.nls
+++ b/reactos/dll/win32/kernel32/nls/div.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_DIVEHI, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x002f\x8000\x3808\x0000\x0100\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"6"
- LOCALE_ICENTURY L"0"
- LOCALE_ICOUNTRY L"960"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"3"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"960"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"0465"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"6"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"0465"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"10"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"4"
- LOCALE_INEGSYMPRECEDES L"0"
- LOCALE_IOPTIONALCALENDAR L"6"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"4"
- LOCALE_IPOSSYMPRECEDES L"0"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"0"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x0789\x0786"
- LOCALE_S2359 L"\x0789\x078a"
- LOCALE_SABBREVCTRYNAME L"MDV"
- LOCALE_SABBREVDAYNAME1 L"\x0780\x07af\x0789\x07a6"
- LOCALE_SABBREVDAYNAME2 L"\x0787\x07a6\x0782\x07b0\x078e\x07a7\x0783\x07a6"
- LOCALE_SABBREVDAYNAME3 L"\x0784\x07aa\x078b\x07a6"
- LOCALE_SABBREVDAYNAME4 L"\x0784\x07aa\x0783\x07a7\x0790\x07b0\x078a\x07a6\x078c\x07a8"
- LOCALE_SABBREVDAYNAME5 L"\x0780\x07aa\x0786\x07aa\x0783\x07aa"
- LOCALE_SABBREVDAYNAME6 L"\x0780\x07ae\x0782\x07a8\x0780\x07a8\x0783\x07aa"
- LOCALE_SABBREVDAYNAME7 L"\x0787\x07a7\x078b\x07a9\x0787\x07b0\x078c\x07a6"
- LOCALE_SABBREVLANGNAME L"DIV"
- LOCALE_SABBREVMONTHNAME1 L"\x0796\x07ac\x0782\x07aa\x0787\x07a6\x0783\x07a9"
- LOCALE_SABBREVMONTHNAME2 L"\x078a\x07ac\x0784\x07aa\x0783\x07aa\x0787\x07a6\x0783\x07a9"
- LOCALE_SABBREVMONTHNAME3 L"\x0789\x07a7\x0797\x07b0"
- LOCALE_SABBREVMONTHNAME4 L"\x0787\x07ac\x0795\x07b0\x0783\x07a8\x078d\x07b0"
- LOCALE_SABBREVMONTHNAME5 L"\x0789\x07ad\x0787\x07a8"
- LOCALE_SABBREVMONTHNAME6 L"\x0796\x07ab\x0782\x07b0"
- LOCALE_SABBREVMONTHNAME7 L"\x0796\x07ab\x078d\x07a7\x0787\x07a8"
- LOCALE_SABBREVMONTHNAME8 L"\x0787\x07af\x078e\x07a6\x0790\x07b0\x0793\x07b0"
- LOCALE_SABBREVMONTHNAME9 L"\x0790\x07ac\x0795\x07b0\x0793\x07ac\x0789\x07b0\x0784\x07a6\x0783\x07aa"
- LOCALE_SABBREVMONTHNAME10 L"\x0787\x07ae\x0786\x07b0\x0793\x07af\x0784\x07a6\x0783\x07aa"
- LOCALE_SABBREVMONTHNAME11 L"\x0782\x07ae\x0788\x07ac\x0789\x07b0\x0784\x07a6\x0783\x07aa"
- LOCALE_SABBREVMONTHNAME12 L"\x0791\x07a8\x0790\x07ac\x0789\x07b0\x0784\x07a6\x0783\x07aa"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"Maldives"
- LOCALE_SCURRENCY L"\x0783."
- LOCALE_SDATE L"/"
- LOCALE_SDAYNAME1 L"\x0780\x07af\x0789\x07a6\x078b\x07aa\x0788\x07a6\x0790\x07b0"
- LOCALE_SDAYNAME2 L"\x0787\x07a6\x0782\x07b0\x078e\x07a7\x0783\x07a6\x078b\x07aa\x0788\x07a6\x0790\x07b0"
- LOCALE_SDAYNAME3 L"\x0784\x07aa\x078b\x07a6\x078b\x07aa\x0788\x07a6\x0790\x07b0"
- LOCALE_SDAYNAME4 L"\x0784\x07aa\x0783\x07a7\x0790\x07b0\x078a\x07a6\x078c\x07a8\x078b\x07aa\x0788\x07a6\x0790\x07b0"
- LOCALE_SDAYNAME5 L"\x0780\x07aa\x0786\x07aa\x0783\x07aa\x078b\x07aa\x0788\x07a6\x0790\x07b0"
- LOCALE_SDAYNAME6 L"\x0780\x07ae\x0782\x07a8\x0780\x07a8\x0783\x07aa\x078b\x07aa\x0788\x07a6\x0790\x07b0"
- LOCALE_SDAYNAME7 L"\x0787\x07a7\x078b\x07a9\x0787\x07b0\x078c\x07a6\x078b\x07aa\x0788\x07a6\x0790\x07b0"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"Maldives"
- LOCALE_SENGCURRNAME L"Rufiyaa"
- LOCALE_SENGLANGUAGE L"Divehi"
- LOCALE_SGROUPING L"3;0"
- LOCALE_SINTLSYMBOL L"MVR"
- LOCALE_SISO3166CTRYNAME L"MV"
- LOCALE_SISO639LANGNAME L"dv"
- LOCALE_SLANGUAGE L"Divehi"
- LOCALE_SLIST L"\x060c"
- LOCALE_SLONGDATE L"dd MMMM yyyy"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;0"
- LOCALE_SMONTHNAME1 L"\x0796\x07ac\x0782\x07aa\x0787\x07a6\x0783\x07a9"
- LOCALE_SMONTHNAME2 L"\x078a\x07ac\x0784\x07aa\x0783\x07aa\x0787\x07a6\x0783\x07a9"
- LOCALE_SMONTHNAME3 L"\x0789\x07a7\x0797\x07b0"
- LOCALE_SMONTHNAME4 L"\x0787\x07ac\x0795\x07b0\x0783\x07a8\x078d\x07b0"
- LOCALE_SMONTHNAME5 L"\x0789\x07ad\x0787\x07a8"
- LOCALE_SMONTHNAME6 L"\x0796\x07ab\x0782\x07b0"
- LOCALE_SMONTHNAME7 L"\x0796\x07ab\x078d\x07a7\x0787\x07a8"
- LOCALE_SMONTHNAME8 L"\x0787\x07af\x078e\x07a6\x0790\x07b0\x0793\x07b0"
- LOCALE_SMONTHNAME9 L"\x0790\x07ac\x0795\x07b0\x0793\x07ac\x0789\x07b0\x0784\x07a6\x0783\x07aa"
- LOCALE_SMONTHNAME10 L"\x0787\x07ae\x0786\x07b0\x0793\x07af\x0784\x07a6\x0783\x07aa"
- LOCALE_SMONTHNAME11 L"\x0782\x07ae\x0788\x07ac\x0789\x07b0\x0784\x07a6\x0783\x07aa"
- LOCALE_SMONTHNAME12 L"\x0791\x07a8\x0790\x07ac\x0789\x07b0\x0784\x07a6\x0783\x07aa"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"dv-MV"
- LOCALE_SNATIVECTRYNAME L"\x078b\x07a8\x0788\x07ac\x0780\x07a8 \x0783\x07a7\x0787\x07b0\x0796\x07ac"
- LOCALE_SNATIVECURRNAME L"\x0783\x07aa\x078a\x07a8\x0794\x07a7"
- LOCALE_SNATIVEDIGITS L"0123456789"
- LOCALE_SNATIVELANGNAME L"\x078b\x07a8\x0788\x07ac\x0780\x07a8\x0784\x07a6\x0790\x07b0"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Thaa;"
- LOCALE_SSHORTDATE L"dd/MM/yy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"HH:mm"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "6"
+ LOCALE_ICENTURY "0"
+ LOCALE_ICOUNTRY "960"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "3"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "960"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "0465"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "6"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "0465"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "10"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "4"
+ LOCALE_INEGSYMPRECEDES "0"
+ LOCALE_IOPTIONALCALENDAR "6"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "4"
+ LOCALE_IPOSSYMPRECEDES "0"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "0"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "Ю‰Ю†"
+ LOCALE_S2359 "Ю‰ЮЉ"
+ LOCALE_SABBREVCTRYNAME "MDV"
+ LOCALE_SABBREVDAYNAME1 "ЮЂЮЇЮ‰Ю¦"
+ LOCALE_SABBREVDAYNAME2 "Ю‡Ю¦Ю‚Ю°ЮЋЮ§ЮѓЮ¦"
+ LOCALE_SABBREVDAYNAME3 "Ю„ЮЄЮ‹Ю¦"
+ LOCALE_SABBREVDAYNAME4 "Ю„ЮЄЮѓЮ§ЮђЮ°ЮЉЮ¦ЮЊЮЁ"
+ LOCALE_SABBREVDAYNAME5 "ЮЂЮЄЮ†ЮЄЮѓЮЄ"
+ LOCALE_SABBREVDAYNAME6 "ЮЂЮ®Ю‚ЮЁЮЂЮЁЮѓЮЄ"
+ LOCALE_SABBREVDAYNAME7 "Ю‡Ю§Ю‹Ю©Ю‡Ю°ЮЊЮ¦"
+ LOCALE_SABBREVLANGNAME "DIV"
+ LOCALE_SABBREVMONTHNAME1 "Ю–Ю¬Ю‚ЮЄЮ‡Ю¦ЮѓЮ©"
+ LOCALE_SABBREVMONTHNAME2 "ЮЉЮ¬Ю„ЮЄЮѓЮЄЮ‡Ю¦ЮѓЮ©"
+ LOCALE_SABBREVMONTHNAME3 "Ю‰Ю§Ю—Ю°"
+ LOCALE_SABBREVMONTHNAME4 "Ю‡Ю¬Ю•Ю°ЮѓЮЁЮЌЮ°"
+ LOCALE_SABBREVMONTHNAME5 "Ю‰ЮЮ‡ЮЁ"
+ LOCALE_SABBREVMONTHNAME6 "Ю–Ю«Ю‚Ю°"
+ LOCALE_SABBREVMONTHNAME7 "Ю–Ю«ЮЌЮ§Ю‡ЮЁ"
+ LOCALE_SABBREVMONTHNAME8 "Ю‡ЮЇЮЋЮ¦ЮђЮ°Ю“Ю°"
+ LOCALE_SABBREVMONTHNAME9 "ЮђЮ¬Ю•Ю°Ю“Ю¬Ю‰Ю°Ю„Ю¦ЮѓЮЄ"
+ LOCALE_SABBREVMONTHNAME10 "Ю‡Ю®Ю†Ю°Ю“ЮЇЮ„Ю¦ЮѓЮЄ"
+ LOCALE_SABBREVMONTHNAME11 "Ю‚Ю®Ю€Ю¬Ю‰Ю°Ю„Ю¦ЮѓЮЄ"
+ LOCALE_SABBREVMONTHNAME12 "Ю‘ЮЁЮђЮ¬Ю‰Ю°Ю„Ю¦ЮѓЮЄ"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "Maldives"
+ LOCALE_SCURRENCY "Юѓ."
+ LOCALE_SDATE "/"
+ LOCALE_SDAYNAME1 "ЮЂЮЇЮ‰Ю¦Ю‹ЮЄЮ€Ю¦ЮђЮ°"
+ LOCALE_SDAYNAME2 "Ю‡Ю¦Ю‚Ю°ЮЋЮ§ЮѓЮ¦Ю‹ЮЄЮ€Ю¦ЮђЮ°"
+ LOCALE_SDAYNAME3 "Ю„ЮЄЮ‹Ю¦Ю‹ЮЄЮ€Ю¦ЮђЮ°"
+ LOCALE_SDAYNAME4 "Ю„ЮЄЮѓЮ§ЮђЮ°ЮЉЮ¦ЮЊЮЁЮ‹ЮЄЮ€Ю¦ЮђЮ°"
+ LOCALE_SDAYNAME5 "ЮЂЮЄЮ†ЮЄЮѓЮЄЮ‹ЮЄЮ€Ю¦ЮђЮ°"
+ LOCALE_SDAYNAME6 "ЮЂЮ®Ю‚ЮЁЮЂЮЁЮѓЮЄЮ‹ЮЄЮ€Ю¦ЮђЮ°"
+ LOCALE_SDAYNAME7 "Ю‡Ю§Ю‹Ю©Ю‡Ю°ЮЊЮ¦Ю‹ЮЄЮ€Ю¦ЮђЮ°"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "Maldives"
+ LOCALE_SENGCURRNAME "Rufiyaa"
+ LOCALE_SENGLANGUAGE "Divehi"
+ LOCALE_SGROUPING "3;0"
+ LOCALE_SINTLSYMBOL "MVR"
+ LOCALE_SISO3166CTRYNAME "MV"
+ LOCALE_SISO639LANGNAME "dv"
+ LOCALE_SLANGUAGE "Divehi"
+ LOCALE_SLIST "ШЊ"
+ LOCALE_SLONGDATE "dd MMMM yyyy"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;0"
+ LOCALE_SMONTHNAME1 "Ю–Ю¬Ю‚ЮЄЮ‡Ю¦ЮѓЮ©"
+ LOCALE_SMONTHNAME2 "ЮЉЮ¬Ю„ЮЄЮѓЮЄЮ‡Ю¦ЮѓЮ©"
+ LOCALE_SMONTHNAME3 "Ю‰Ю§Ю—Ю°"
+ LOCALE_SMONTHNAME4 "Ю‡Ю¬Ю•Ю°ЮѓЮЁЮЌЮ°"
+ LOCALE_SMONTHNAME5 "Ю‰ЮЮ‡ЮЁ"
+ LOCALE_SMONTHNAME6 "Ю–Ю«Ю‚Ю°"
+ LOCALE_SMONTHNAME7 "Ю–Ю«ЮЌЮ§Ю‡ЮЁ"
+ LOCALE_SMONTHNAME8 "Ю‡ЮЇЮЋЮ¦ЮђЮ°Ю“Ю°"
+ LOCALE_SMONTHNAME9 "ЮђЮ¬Ю•Ю°Ю“Ю¬Ю‰Ю°Ю„Ю¦ЮѓЮЄ"
+ LOCALE_SMONTHNAME10 "Ю‡Ю®Ю†Ю°Ю“ЮЇЮ„Ю¦ЮѓЮЄ"
+ LOCALE_SMONTHNAME11 "Ю‚Ю®Ю€Ю¬Ю‰Ю°Ю„Ю¦ЮѓЮЄ"
+ LOCALE_SMONTHNAME12 "Ю‘ЮЁЮђЮ¬Ю‰Ю°Ю„Ю¦ЮѓЮЄ"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "dv-MV"
+ LOCALE_SNATIVECTRYNAME "Ю‹ЮЁЮ€Ю¬ЮЂЮЁ ЮѓЮ§Ю‡Ю°Ю–Ю¬"
+ LOCALE_SNATIVECURRNAME "ЮѓЮЄЮЉЮЁЮ”Ю§"
+ LOCALE_SNATIVEDIGITS "0123456789"
+ LOCALE_SNATIVELANGNAME "Ю‹ЮЁЮ€Ю¬ЮЂЮЁЮ„Ю¦ЮђЮ°"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Thaa;"
+ LOCALE_SSHORTDATE "dd/MM/yy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "HH:mm"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/guj.nls b/reactos/dll/win32/kernel32/nls/guj.nls
index 92c7ac6ed83..0c757c3b86b 100644
--- a/reactos/dll/win32/kernel32/nls/guj.nls
+++ b/reactos/dll/win32/kernel32/nls/guj.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* Unicode only */
STRINGTABLE LANGUAGE LANG_GUJARATI, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x002f\x8004\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"0"
- LOCALE_ICOUNTRY L"91"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"2"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"91"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"0447"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"0"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"0447"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"12"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"4"
- LOCALE_INEGSYMPRECEDES L"1"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"4"
- LOCALE_IPOSSYMPRECEDES L"1"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"1"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x0aaa\x0ac2\x0ab0\x0acd\x0ab5\x00a0\x0aae\x0aa7\x0acd\x0aaf\x0abe\x0ab9\x0acd\x0aa8"
- LOCALE_S2359 L"\x0a89\x0aa4\x0acd\x0aa4\x0ab0\x00a0\x0aae\x0aa7\x0acd\x0aaf\x0abe\x0ab9\x0acd\x0aa8"
- LOCALE_SABBREVCTRYNAME L"IND"
- LOCALE_SABBREVDAYNAME1 L"\x0ab8\x0acb\x0aae"
- LOCALE_SABBREVDAYNAME2 L"\x0aae\x0a82\x0a97\x0ab3"
- LOCALE_SABBREVDAYNAME3 L"\x0aac\x0ac1\x0aa7"
- LOCALE_SABBREVDAYNAME4 L"\x0a97\x0ac1\x0ab0\x0ac1"
- LOCALE_SABBREVDAYNAME5 L"\x0ab6\x0ac1\x0a95\x0acd\x0ab0"
- LOCALE_SABBREVDAYNAME6 L"\x0ab6\x0aa8\x0abf"
- LOCALE_SABBREVDAYNAME7 L"\x0ab0\x0ab5\x0abf"
- LOCALE_SABBREVLANGNAME L"GUJ"
- LOCALE_SABBREVMONTHNAME1 L"\x0a9c\x0abe\x0aa8\x0acd\x0aaf\x0ac1"
- LOCALE_SABBREVMONTHNAME2 L"\x0aab\x0ac7\x0aac\x0acd\x0ab0\x0ac1"
- LOCALE_SABBREVMONTHNAME3 L"\x0aae\x0abe\x0ab0\x0acd\x0a9a"
- LOCALE_SABBREVMONTHNAME4 L"\x0a8f\x0aaa\x0acd\x0ab0\x0abf\x0ab2"
- LOCALE_SABBREVMONTHNAME5 L"\x0aae\x0ac7"
- LOCALE_SABBREVMONTHNAME6 L"\x0a9c\x0ac2\x0aa8"
- LOCALE_SABBREVMONTHNAME7 L"\x0a9c\x0ac1\x0ab2\x0abe\x0a88"
- LOCALE_SABBREVMONTHNAME8 L"\x0a91\x0a97\x0ab8\x0acd\x0a9f"
- LOCALE_SABBREVMONTHNAME9 L"\x0ab8\x0aaa\x0acd\x0a9f\x0ac7"
- LOCALE_SABBREVMONTHNAME10 L"\x0a91\x0a95\x0acd\x0a9f\x0acb"
- LOCALE_SABBREVMONTHNAME11 L"\x0aa8\x0ab5\x0ac7"
- LOCALE_SABBREVMONTHNAME12 L"\x0aa1\x0abf\x0ab8\x0ac7"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"India"
- LOCALE_SCURRENCY L"\x0ab0\x0ac2"
- LOCALE_SDATE L"-"
- LOCALE_SDAYNAME1 L"\x0ab8\x0acb\x0aae\x0ab5\x0abe\x0ab0"
- LOCALE_SDAYNAME2 L"\x0aae\x0a82\x0a97\x0ab3\x0ab5\x0abe\x0ab0"
- LOCALE_SDAYNAME3 L"\x0aac\x0ac1\x0aa7\x0ab5\x0abe\x0ab0"
- LOCALE_SDAYNAME4 L"\x0a97\x0ac1\x0ab0\x0ac1\x0ab5\x0abe\x0ab0"
- LOCALE_SDAYNAME5 L"\x0ab6\x0ac1\x0a95\x0acd\x0ab0\x0ab5\x0abe\x0ab0"
- LOCALE_SDAYNAME6 L"\x0ab6\x0aa8\x0abf\x0ab5\x0abe\x0ab0"
- LOCALE_SDAYNAME7 L"\x0ab0\x0ab5\x0abf\x0ab5\x0abe\x0ab0"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"India"
- LOCALE_SENGCURRNAME L"Indian Rupee"
- LOCALE_SENGLANGUAGE L"Gujarati"
- LOCALE_SGROUPING L"3;2;0"
- LOCALE_SINTLSYMBOL L"INR"
- LOCALE_SISO3166CTRYNAME L"IN"
- LOCALE_SISO639LANGNAME L"gu"
- LOCALE_SLANGUAGE L"Gujarati"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"dd MMMM yyyy"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;2;0"
- LOCALE_SMONTHNAME1 L"\x0a9c\x0abe\x0aa8\x0acd\x0aaf\x0ac1\x0a86\x0ab0\x0ac0"
- LOCALE_SMONTHNAME2 L"\x0aab\x0ac7\x0aac\x0acd\x0ab0\x0ac1\x0a86\x0ab0\x0ac0"
- LOCALE_SMONTHNAME3 L"\x0aae\x0abe\x0ab0\x0acd\x0a9a"
- LOCALE_SMONTHNAME4 L"\x0a8f\x0aaa\x0acd\x0ab0\x0abf\x0ab2"
- LOCALE_SMONTHNAME5 L"\x0aae\x0ac7"
- LOCALE_SMONTHNAME6 L"\x0a9c\x0ac2\x0aa8"
- LOCALE_SMONTHNAME7 L"\x0a9c\x0ac1\x0ab2\x0abe\x0a88"
- LOCALE_SMONTHNAME8 L"\x0a91\x0a97\x0ab8\x0acd\x0a9f"
- LOCALE_SMONTHNAME9 L"\x0ab8\x0aaa\x0acd\x0a9f\x0ac7\x0aae\x0acd\x0aac\x0ab0"
- LOCALE_SMONTHNAME10 L"\x0a91\x0a95\x0acd\x0a9f\x0acd\x0aac\x0ab0"
- LOCALE_SMONTHNAME11 L"\x0aa8\x0ab5\x0ac7\x0aae\x0acd\x0aac\x0ab0"
- LOCALE_SMONTHNAME12 L"\x0aa1\x0abf\x0ab8\x0ac7\x0aae\x0acd\x0aac\x0ab0"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"gu-IN"
- LOCALE_SNATIVECTRYNAME L"\x0aad\x0abe\x0ab0\x0aa4"
- LOCALE_SNATIVECURRNAME L"\x0ab0\x0ac2\x0aaa\x0abf\x0aaf\x0acb"
- LOCALE_SNATIVEDIGITS L"\x0ae6\x0ae7\x0ae8\x0ae9\x0aea\x0aeb\x0aec\x0aed\x0aee\x0aef"
- LOCALE_SNATIVELANGNAME L"\x0a97\x0ac1\x0a9c\x0ab0\x0abe\x0aa4\x0ac0"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Gujr;"
- LOCALE_SSHORTDATE L"dd-MM-yy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"HH:mm:ss"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "0"
+ LOCALE_ICOUNTRY "91"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "2"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "91"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "0447"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "0"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "0447"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "12"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "4"
+ LOCALE_INEGSYMPRECEDES "1"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "4"
+ LOCALE_IPOSSYMPRECEDES "1"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "1"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "аЄЄа«‚аЄ°а«ЌаЄµВ аЄ®аЄ§а«ЌаЄЇаЄѕаЄ№а«ЌаЄЁ"
+ LOCALE_S2359 "аЄ‰аЄ¤а«ЌаЄ¤аЄ°В аЄ®аЄ§а«ЌаЄЇаЄѕаЄ№а«ЌаЄЁ"
+ LOCALE_SABBREVCTRYNAME "IND"
+ LOCALE_SABBREVDAYNAME1 "аЄёа«‹аЄ®"
+ LOCALE_SABBREVDAYNAME2 "аЄ®аЄ‚аЄ—аЄі"
+ LOCALE_SABBREVDAYNAME3 "аЄ¬а«ЃаЄ§"
+ LOCALE_SABBREVDAYNAME4 "аЄ—а«ЃаЄ°а«Ѓ"
+ LOCALE_SABBREVDAYNAME5 "аЄ¶а«ЃаЄ•а«ЌаЄ°"
+ LOCALE_SABBREVDAYNAME6 "аЄ¶аЄЁаЄї"
+ LOCALE_SABBREVDAYNAME7 "аЄ°аЄµаЄї"
+ LOCALE_SABBREVLANGNAME "GUJ"
+ LOCALE_SABBREVMONTHNAME1 "аЄњаЄѕаЄЁа«ЌаЄЇа«Ѓ"
+ LOCALE_SABBREVMONTHNAME2 "ફેબ્રુ"
+ LOCALE_SABBREVMONTHNAME3 "аЄ®аЄѕаЄ°а«ЌаЄљ"
+ LOCALE_SABBREVMONTHNAME4 "аЄЏаЄЄа«ЌаЄ°аЄїаЄІ"
+ LOCALE_SABBREVMONTHNAME5 "મે"
+ LOCALE_SABBREVMONTHNAME6 "аЄња«‚аЄЁ"
+ LOCALE_SABBREVMONTHNAME7 "аЄња«ЃаЄІаЄѕаЄ€"
+ LOCALE_SABBREVMONTHNAME8 "аЄ‘аЄ—аЄёа«ЌаЄџ"
+ LOCALE_SABBREVMONTHNAME9 "સપ્ટે"
+ LOCALE_SABBREVMONTHNAME10 "аЄ‘аЄ•а«ЌаЄџа«‹"
+ LOCALE_SABBREVMONTHNAME11 "નવે"
+ LOCALE_SABBREVMONTHNAME12 "ડિસે"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "India"
+ LOCALE_SCURRENCY "аЄ°а«‚"
+ LOCALE_SDATE "-"
+ LOCALE_SDAYNAME1 "аЄёа«‹аЄ®аЄµаЄѕаЄ°"
+ LOCALE_SDAYNAME2 "аЄ®аЄ‚аЄ—аЄіаЄµаЄѕаЄ°"
+ LOCALE_SDAYNAME3 "аЄ¬а«ЃаЄ§аЄµаЄѕаЄ°"
+ LOCALE_SDAYNAME4 "аЄ—а«ЃаЄ°а«ЃаЄµаЄѕаЄ°"
+ LOCALE_SDAYNAME5 "аЄ¶а«ЃаЄ•а«ЌаЄ°аЄµаЄѕаЄ°"
+ LOCALE_SDAYNAME6 "аЄ¶аЄЁаЄїаЄµаЄѕаЄ°"
+ LOCALE_SDAYNAME7 "аЄ°аЄµаЄїаЄµаЄѕаЄ°"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "India"
+ LOCALE_SENGCURRNAME "Indian Rupee"
+ LOCALE_SENGLANGUAGE "Gujarati"
+ LOCALE_SGROUPING "3;2;0"
+ LOCALE_SINTLSYMBOL "INR"
+ LOCALE_SISO3166CTRYNAME "IN"
+ LOCALE_SISO639LANGNAME "gu"
+ LOCALE_SLANGUAGE "Gujarati"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "dd MMMM yyyy"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;2;0"
+ LOCALE_SMONTHNAME1 "аЄњаЄѕаЄЁа«ЌаЄЇа«ЃаЄ†аЄ°а«Ђ"
+ LOCALE_SMONTHNAME2 "ફેબ્રુઆરી"
+ LOCALE_SMONTHNAME3 "аЄ®аЄѕаЄ°а«ЌаЄљ"
+ LOCALE_SMONTHNAME4 "аЄЏаЄЄа«ЌаЄ°аЄїаЄІ"
+ LOCALE_SMONTHNAME5 "મે"
+ LOCALE_SMONTHNAME6 "аЄња«‚аЄЁ"
+ LOCALE_SMONTHNAME7 "аЄња«ЃаЄІаЄѕаЄ€"
+ LOCALE_SMONTHNAME8 "аЄ‘аЄ—аЄёа«ЌаЄџ"
+ LOCALE_SMONTHNAME9 "સપ્ટેમ્બર"
+ LOCALE_SMONTHNAME10 "аЄ‘аЄ•а«ЌаЄџа«ЌаЄ¬аЄ°"
+ LOCALE_SMONTHNAME11 "નવેમ્બર"
+ LOCALE_SMONTHNAME12 "ડિસેમ્બર"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "gu-IN"
+ LOCALE_SNATIVECTRYNAME "аЄаЄѕаЄ°аЄ¤"
+ LOCALE_SNATIVECURRNAME "аЄ°а«‚аЄЄаЄїаЄЇа«‹"
+ LOCALE_SNATIVEDIGITS "૦૧૨૩૪૫૬а«а«®а«Ї"
+ LOCALE_SNATIVELANGNAME "аЄ—а«ЃаЄњаЄ°аЄѕаЄ¤а«Ђ"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Gujr;"
+ LOCALE_SSHORTDATE "dd-MM-yy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "HH:mm:ss"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/hin.nls b/reactos/dll/win32/kernel32/nls/hin.nls
index b336b3c080f..b8893d2722c 100644
--- a/reactos/dll/win32/kernel32/nls/hin.nls
+++ b/reactos/dll/win32/kernel32/nls/hin.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_HINDI, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x802f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"1"
- LOCALE_ICOUNTRY L"91"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"2"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"91"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"0439"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"0"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"0439"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"12"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"4"
- LOCALE_INEGSYMPRECEDES L"1"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"4"
- LOCALE_IPOSSYMPRECEDES L"1"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"1"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x092a\x0942\x0930\x094d\x0935\x093e\x0939\x094d\x0928"
- LOCALE_S2359 L"\x0905\x092a\x0930\x093e\x0939\x094d\x0928"
- LOCALE_SABBREVCTRYNAME L"IND"
- LOCALE_SABBREVDAYNAME1 L"\x0938\x094b\x092e."
- LOCALE_SABBREVDAYNAME2 L"\x092e\x0902\x0917\x0932."
- LOCALE_SABBREVDAYNAME3 L"\x092c\x0941\x0927."
- LOCALE_SABBREVDAYNAME4 L"\x0917\x0941\x0930\x0941."
- LOCALE_SABBREVDAYNAME5 L"\x0936\x0941\x0915\x094d\x0930."
- LOCALE_SABBREVDAYNAME6 L"\x0936\x0928\x093f."
- LOCALE_SABBREVDAYNAME7 L"\x0930\x0935\x093f."
- LOCALE_SABBREVLANGNAME L"HIN"
- LOCALE_SABBREVMONTHNAME1 L"\x091c\x0928\x0935\x0930\x0940"
- LOCALE_SABBREVMONTHNAME2 L"\x092b\x0930\x0935\x0930\x0940"
- LOCALE_SABBREVMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
- LOCALE_SABBREVMONTHNAME4 L"\x0905\x092a\x094d\x0930\x0948\x0932"
- LOCALE_SABBREVMONTHNAME5 L"\x092e\x0908"
- LOCALE_SABBREVMONTHNAME6 L"\x091c\x0942\x0928"
- LOCALE_SABBREVMONTHNAME7 L"\x091c\x0941\x0932\x093e\x0908"
- LOCALE_SABBREVMONTHNAME8 L"\x0905\x0917\x0938\x094d\x0924"
- LOCALE_SABBREVMONTHNAME9 L"\x0938\x093f\x0924\x092e\x094d\x092c\x0930"
- LOCALE_SABBREVMONTHNAME10 L"\x0905\x0915\x094d\x0924\x0942\x092c\x0930"
- LOCALE_SABBREVMONTHNAME11 L"\x0928\x0935\x092e\x094d\x092c\x0930"
- LOCALE_SABBREVMONTHNAME12 L"\x0926\x093f\x0938\x092e\x094d\x092c\x0930"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"India"
- LOCALE_SCURRENCY L"\x0930\x0941"
- LOCALE_SDATE L"-"
- LOCALE_SDAYNAME1 L"\x0938\x094b\x092e\x0935\x093e\x0930"
- LOCALE_SDAYNAME2 L"\x092e\x0902\x0917\x0932\x0935\x093e\x0930"
- LOCALE_SDAYNAME3 L"\x092c\x0941\x0927\x0935\x093e\x0930"
- LOCALE_SDAYNAME4 L"\x0917\x0941\x0930\x0941\x0935\x093e\x0930"
- LOCALE_SDAYNAME5 L"\x0936\x0941\x0915\x094d\x0930\x0935\x093e\x0930"
- LOCALE_SDAYNAME6 L"\x0936\x0928\x093f\x0935\x093e\x0930"
- LOCALE_SDAYNAME7 L"\x0930\x0935\x093f\x0935\x093e\x0930"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"India"
- LOCALE_SENGCURRNAME L"Indian Rupee"
- LOCALE_SENGLANGUAGE L"Hindi"
- LOCALE_SGROUPING L"3;2;0"
- LOCALE_SINTLSYMBOL L"INR"
- LOCALE_SISO3166CTRYNAME L"IN"
- LOCALE_SISO639LANGNAME L"hi"
- LOCALE_SLANGUAGE L"Hindi"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"dd MMMM yyyy"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;2;0"
- LOCALE_SMONTHNAME1 L"\x091c\x0928\x0935\x0930\x0940"
- LOCALE_SMONTHNAME2 L"\x092b\x0930\x0935\x0930\x0940"
- LOCALE_SMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
- LOCALE_SMONTHNAME4 L"\x0905\x092a\x094d\x0930\x0948\x0932"
- LOCALE_SMONTHNAME5 L"\x092e\x0908"
- LOCALE_SMONTHNAME6 L"\x091c\x0942\x0928"
- LOCALE_SMONTHNAME7 L"\x091c\x0941\x0932\x093e\x0908"
- LOCALE_SMONTHNAME8 L"\x0905\x0917\x0938\x094d\x0924"
- LOCALE_SMONTHNAME9 L"\x0938\x093f\x0924\x092e\x094d\x092c\x0930"
- LOCALE_SMONTHNAME10 L"\x0905\x0915\x094d\x0924\x0942\x092c\x0930"
- LOCALE_SMONTHNAME11 L"\x0928\x0935\x092e\x094d\x092c\x0930"
- LOCALE_SMONTHNAME12 L"\x0926\x093f\x0938\x092e\x094d\x092c\x0930"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"hi-IN"
- LOCALE_SNATIVECTRYNAME L"\x092d\x093e\x0930\x0924"
- LOCALE_SNATIVECURRNAME L"\x0930\x0941\x092a\x092f\x093e"
- LOCALE_SNATIVEDIGITS L"0123456789"
- LOCALE_SNATIVELANGNAME L"\x0939\x093f\x0902\x0926\x0940"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Deva;"
- LOCALE_SSHORTDATE L"dd-MM-yyyy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"HH:mm:ss"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "1"
+ LOCALE_ICOUNTRY "91"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "2"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "91"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "0439"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "0"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "0439"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "12"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "4"
+ LOCALE_INEGSYMPRECEDES "1"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "4"
+ LOCALE_IPOSSYMPRECEDES "1"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "1"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "पूर्वाह्न"
+ LOCALE_S2359 "अपराह्न"
+ LOCALE_SABBREVCTRYNAME "IND"
+ LOCALE_SABBREVDAYNAME1 "सोम."
+ LOCALE_SABBREVDAYNAME2 "मंगल."
+ LOCALE_SABBREVDAYNAME3 "बुध."
+ LOCALE_SABBREVDAYNAME4 "गुरु."
+ LOCALE_SABBREVDAYNAME5 "शुक्र."
+ LOCALE_SABBREVDAYNAME6 "शनि."
+ LOCALE_SABBREVDAYNAME7 "रवि."
+ LOCALE_SABBREVLANGNAME "HIN"
+ LOCALE_SABBREVMONTHNAME1 "जनवरी"
+ LOCALE_SABBREVMONTHNAME2 "फरवरी"
+ LOCALE_SABBREVMONTHNAME3 "मार्च"
+ LOCALE_SABBREVMONTHNAME4 "अप्रैल"
+ LOCALE_SABBREVMONTHNAME5 "मई"
+ LOCALE_SABBREVMONTHNAME6 "जून"
+ LOCALE_SABBREVMONTHNAME7 "जुलाई"
+ LOCALE_SABBREVMONTHNAME8 "अगस्त"
+ LOCALE_SABBREVMONTHNAME9 "सितम्बर"
+ LOCALE_SABBREVMONTHNAME10 "अक्तूबर"
+ LOCALE_SABBREVMONTHNAME11 "नवम्बर"
+ LOCALE_SABBREVMONTHNAME12 "दिसम्बर"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "India"
+ LOCALE_SCURRENCY "रु"
+ LOCALE_SDATE "-"
+ LOCALE_SDAYNAME1 "सोमवार"
+ LOCALE_SDAYNAME2 "मंगलवार"
+ LOCALE_SDAYNAME3 "बुधवार"
+ LOCALE_SDAYNAME4 "गुरुवार"
+ LOCALE_SDAYNAME5 "शुक्रवार"
+ LOCALE_SDAYNAME6 "शनिवार"
+ LOCALE_SDAYNAME7 "रविवार"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "India"
+ LOCALE_SENGCURRNAME "Indian Rupee"
+ LOCALE_SENGLANGUAGE "Hindi"
+ LOCALE_SGROUPING "3;2;0"
+ LOCALE_SINTLSYMBOL "INR"
+ LOCALE_SISO3166CTRYNAME "IN"
+ LOCALE_SISO639LANGNAME "hi"
+ LOCALE_SLANGUAGE "Hindi"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "dd MMMM yyyy"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;2;0"
+ LOCALE_SMONTHNAME1 "जनवरी"
+ LOCALE_SMONTHNAME2 "फरवरी"
+ LOCALE_SMONTHNAME3 "मार्च"
+ LOCALE_SMONTHNAME4 "अप्रैल"
+ LOCALE_SMONTHNAME5 "मई"
+ LOCALE_SMONTHNAME6 "जून"
+ LOCALE_SMONTHNAME7 "जुलाई"
+ LOCALE_SMONTHNAME8 "अगस्त"
+ LOCALE_SMONTHNAME9 "सितम्बर"
+ LOCALE_SMONTHNAME10 "अक्तूबर"
+ LOCALE_SMONTHNAME11 "नवम्बर"
+ LOCALE_SMONTHNAME12 "दिसम्बर"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "hi-IN"
+ LOCALE_SNATIVECTRYNAME "а¤а¤ѕа¤°а¤¤"
+ LOCALE_SNATIVECURRNAME "रुपया"
+ LOCALE_SNATIVEDIGITS "0123456789"
+ LOCALE_SNATIVELANGNAME "हिंदी"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Deva;"
+ LOCALE_SSHORTDATE "dd-MM-yyyy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "HH:mm:ss"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/hye.nls b/reactos/dll/win32/kernel32/nls/hye.nls
index 507cbfd84ee..dc64d53f0f3 100644
--- a/reactos/dll/win32/kernel32/nls/hye.nls
+++ b/reactos/dll/win32/kernel32/nls/hye.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_ARMENIAN, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x042f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0013\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"1"
- LOCALE_ICOUNTRY L"374"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"3"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"374"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"042b"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"0"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"042b"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"8"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"1"
- LOCALE_INEGSYMPRECEDES L"0"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"1"
- LOCALE_IPOSSYMPRECEDES L"0"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"0"
- LOCALE_ITLZERO L"0"
- LOCALE_S1159 L""
- LOCALE_S2359 L""
- LOCALE_SABBREVCTRYNAME L"ARM"
- LOCALE_SABBREVDAYNAME1 L"\x0535\x0580\x056f"
- LOCALE_SABBREVDAYNAME2 L"\x0535\x0580\x0584"
- LOCALE_SABBREVDAYNAME3 L"\x0549\x0580\x0584"
- LOCALE_SABBREVDAYNAME4 L"\x0540\x0576\x0563"
- LOCALE_SABBREVDAYNAME5 L"\x0548\x0552\x0580"
- LOCALE_SABBREVDAYNAME6 L"\x0547\x0562\x0569"
- LOCALE_SABBREVDAYNAME7 L"\x053f\x056b\x0580"
- LOCALE_SABBREVLANGNAME L"HYE"
- LOCALE_SABBREVMONTHNAME1 L"\x0540\x0546\x054e"
- LOCALE_SABBREVMONTHNAME2 L"\x0553\x054f\x054e"
- LOCALE_SABBREVMONTHNAME3 L"\x0544\x0550\x054f"
- LOCALE_SABBREVMONTHNAME4 L"\x0531\x054a\x0550"
- LOCALE_SABBREVMONTHNAME5 L"\x0544\x0545\x054d"
- LOCALE_SABBREVMONTHNAME6 L"\x0540\x0546\x054d"
- LOCALE_SABBREVMONTHNAME7 L"\x0540\x053c\x054d"
- LOCALE_SABBREVMONTHNAME8 L"\x0555\x0533\x054d"
- LOCALE_SABBREVMONTHNAME9 L"\x054d\x0535\x054a"
- LOCALE_SABBREVMONTHNAME10 L"\x0540\x0548\x053f"
- LOCALE_SABBREVMONTHNAME11 L"\x0546\x0548\x0545"
- LOCALE_SABBREVMONTHNAME12 L"\x0534\x0535\x053f"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"Armenia"
- LOCALE_SCURRENCY L"\x0564\x0580."
- LOCALE_SDATE L"."
- LOCALE_SDAYNAME1 L"\x0535\x0580\x056f\x0578\x0582\x0577\x0561\x0562\x0569\x056b"
- LOCALE_SDAYNAME2 L"\x0535\x0580\x0565\x0584\x0577\x0561\x0562\x0569\x056b"
- LOCALE_SDAYNAME3 L"\x0549\x0578\x0580\x0565\x0584\x0577\x0561\x0562\x0569\x056b"
- LOCALE_SDAYNAME4 L"\x0540\x056b\x0576\x0563\x0577\x0561\x0562\x0569\x056b"
- LOCALE_SDAYNAME5 L"\x0548\x0552\x0580\x0562\x0561\x0569"
- LOCALE_SDAYNAME6 L"\x0547\x0561\x0562\x0561\x0569"
- LOCALE_SDAYNAME7 L"\x053f\x056b\x0580\x0561\x056f\x056b"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"Armenia"
- LOCALE_SENGCURRNAME L"Armenian Dram"
- LOCALE_SENGLANGUAGE L"Armenian"
- LOCALE_SGROUPING L"3;0"
- LOCALE_SINTLSYMBOL L"AMD"
- LOCALE_SISO3166CTRYNAME L"AM"
- LOCALE_SISO639LANGNAME L"hy"
- LOCALE_SLANGUAGE L"Armenian"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"d MMMM, yyyy"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;0"
- LOCALE_SMONTHNAME1 L"\x0540\x0578\x0582\x0576\x057e\x0561\x0580"
- LOCALE_SMONTHNAME2 L"\x0553\x0565\x057f\x0580\x057e\x0561\x0580"
- LOCALE_SMONTHNAME3 L"\x0544\x0561\x0580\x057f"
- LOCALE_SMONTHNAME4 L"\x0531\x057a\x0580\x056b\x056c"
- LOCALE_SMONTHNAME5 L"\x0544\x0561\x0575\x056b\x057d"
- LOCALE_SMONTHNAME6 L"\x0540\x0578\x0582\x0576\x056b\x057d"
- LOCALE_SMONTHNAME7 L"\x0540\x0578\x0582\x056c\x056b\x057d"
- LOCALE_SMONTHNAME8 L"\x0555\x0563\x0578\x057d\x057f\x0578\x057d"
- LOCALE_SMONTHNAME9 L"\x054d\x0565\x057a\x057f\x0565\x0574\x0562\x0565\x0580"
- LOCALE_SMONTHNAME10 L"\x0540\x0578\x056f\x057f\x0565\x0574\x0562\x0565\x0580"
- LOCALE_SMONTHNAME11 L"\x0546\x0578\x0575\x0565\x0574\x0562\x0565\x0580"
- LOCALE_SMONTHNAME12 L"\x0534\x0565\x056f\x057f\x0565\x0574\x0562\x0565\x0580"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"hy-AM"
- LOCALE_SNATIVECTRYNAME L"\x0540\x0561\x0575\x0561\x057d\x057f\x0561\x0576"
- LOCALE_SNATIVECURRNAME L"\x0564\x0580\x0561\x0574"
- LOCALE_SNATIVEDIGITS L"0123456789"
- LOCALE_SNATIVELANGNAME L"\x0540\x0561\x0575\x0565\x0580\x0565\x0576"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Armn;"
- LOCALE_SSHORTDATE L"dd.MM.yyyy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"H:mm:ss"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "1"
+ LOCALE_ICOUNTRY "374"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "3"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "374"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "042b"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "0"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "042b"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "8"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "1"
+ LOCALE_INEGSYMPRECEDES "0"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "1"
+ LOCALE_IPOSSYMPRECEDES "0"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "0"
+ LOCALE_ITLZERO "0"
+ LOCALE_S1159 ""
+ LOCALE_S2359 ""
+ LOCALE_SABBREVCTRYNAME "ARM"
+ LOCALE_SABBREVDAYNAME1 "ФµЦЂХЇ"
+ LOCALE_SABBREVDAYNAME2 "ФµЦЂЦ„"
+ LOCALE_SABBREVDAYNAME3 "Х‰ЦЂЦ„"
+ LOCALE_SABBREVDAYNAME4 "ХЂХ¶ХЈ"
+ LOCALE_SABBREVDAYNAME5 "Х€Х’ЦЂ"
+ LOCALE_SABBREVDAYNAME6 "Х‡ХўХ©"
+ LOCALE_SABBREVDAYNAME7 "ФїХ«ЦЂ"
+ LOCALE_SABBREVLANGNAME "HYE"
+ LOCALE_SABBREVMONTHNAME1 "ХЂХ†ХЋ"
+ LOCALE_SABBREVMONTHNAME2 "Х“ХЏХЋ"
+ LOCALE_SABBREVMONTHNAME3 "Х„ХђХЏ"
+ LOCALE_SABBREVMONTHNAME4 "Ф±ХЉХђ"
+ LOCALE_SABBREVMONTHNAME5 "Х„Х…ХЌ"
+ LOCALE_SABBREVMONTHNAME6 "ХЂХ†ХЌ"
+ LOCALE_SABBREVMONTHNAME7 "ХЂФјХЌ"
+ LOCALE_SABBREVMONTHNAME8 "Х•ФіХЌ"
+ LOCALE_SABBREVMONTHNAME9 "ХЌФµХЉ"
+ LOCALE_SABBREVMONTHNAME10 "ХЂХ€Фї"
+ LOCALE_SABBREVMONTHNAME11 "Х†Х€Х…"
+ LOCALE_SABBREVMONTHNAME12 "ФґФµФї"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "Armenia"
+ LOCALE_SCURRENCY "Х¤ЦЂ."
+ LOCALE_SDATE "."
+ LOCALE_SDAYNAME1 "ФµЦЂХЇХёЦ‚Х·ХЎХўХ©Х«"
+ LOCALE_SDAYNAME2 "ФµЦЂХҐЦ„Х·ХЎХўХ©Х«"
+ LOCALE_SDAYNAME3 "Х‰ХёЦЂХҐЦ„Х·ХЎХўХ©Х«"
+ LOCALE_SDAYNAME4 "ХЂХ«Х¶ХЈХ·ХЎХўХ©Х«"
+ LOCALE_SDAYNAME5 "Х€Х’ЦЂХўХЎХ©"
+ LOCALE_SDAYNAME6 "Х‡ХЎХўХЎХ©"
+ LOCALE_SDAYNAME7 "ФїХ«ЦЂХЎХЇХ«"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "Armenia"
+ LOCALE_SENGCURRNAME "Armenian Dram"
+ LOCALE_SENGLANGUAGE "Armenian"
+ LOCALE_SGROUPING "3;0"
+ LOCALE_SINTLSYMBOL "AMD"
+ LOCALE_SISO3166CTRYNAME "AM"
+ LOCALE_SISO639LANGNAME "hy"
+ LOCALE_SLANGUAGE "Armenian"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "d MMMM, yyyy"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;0"
+ LOCALE_SMONTHNAME1 "ХЂХёЦ‚Х¶ХѕХЎЦЂ"
+ LOCALE_SMONTHNAME2 "Х“ХҐХїЦЂХѕХЎЦЂ"
+ LOCALE_SMONTHNAME3 "Х„ХЎЦЂХї"
+ LOCALE_SMONTHNAME4 "Ф±ХєЦЂХ«Х¬"
+ LOCALE_SMONTHNAME5 "Х„ХЎХµХ«ХЅ"
+ LOCALE_SMONTHNAME6 "ХЂХёЦ‚Х¶Х«ХЅ"
+ LOCALE_SMONTHNAME7 "ХЂХёЦ‚Х¬Х«ХЅ"
+ LOCALE_SMONTHNAME8 "Х•ХЈХёХЅХїХёХЅ"
+ LOCALE_SMONTHNAME9 "ХЌХҐХєХїХҐХґХўХҐЦЂ"
+ LOCALE_SMONTHNAME10 "ХЂХёХЇХїХҐХґХўХҐЦЂ"
+ LOCALE_SMONTHNAME11 "Х†ХёХµХҐХґХўХҐЦЂ"
+ LOCALE_SMONTHNAME12 "ФґХҐХЇХїХҐХґХўХҐЦЂ"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "hy-AM"
+ LOCALE_SNATIVECTRYNAME "ХЂХЎХµХЎХЅХїХЎХ¶"
+ LOCALE_SNATIVECURRNAME "Х¤ЦЂХЎХґ"
+ LOCALE_SNATIVEDIGITS "0123456789"
+ LOCALE_SNATIVELANGNAME "ХЂХЎХµХҐЦЂХҐХ¶"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Armn;"
+ LOCALE_SSHORTDATE "dd.MM.yyyy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "H:mm:ss"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/kan.nls b/reactos/dll/win32/kernel32/nls/kan.nls
index dc58af47b8c..725ba84e471 100644
--- a/reactos/dll/win32/kernel32/nls/kan.nls
+++ b/reactos/dll/win32/kernel32/nls/kan.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_KANNADA, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x002f\x8040\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"0"
- LOCALE_ICOUNTRY L"91"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"2"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"91"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"044b"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"0"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"044b"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"12"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"4"
- LOCALE_INEGSYMPRECEDES L"1"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"4"
- LOCALE_IPOSSYMPRECEDES L"1"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"1"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x0caa\x0cc2\x0cb0\x0ccd\x0cb5\x0cbe\x0cb9\x0ccd\x0ca8"
- LOCALE_S2359 L"\x0c85\x0caa\x0cb0\x0cbe\x0cb9\x0ccd\x0ca8"
- LOCALE_SABBREVCTRYNAME L"IND"
- LOCALE_SABBREVDAYNAME1 L"\x0cb8\x0ccb."
- LOCALE_SABBREVDAYNAME2 L"\x0cae\x0c82."
- LOCALE_SABBREVDAYNAME3 L"\x0cac\x0cc1."
- LOCALE_SABBREVDAYNAME4 L"\x0c97\x0cc1."
- LOCALE_SABBREVDAYNAME5 L"\x0cb6\x0cc1."
- LOCALE_SABBREVDAYNAME6 L"\x0cb6\x0ca8\x0cbf."
- LOCALE_SABBREVDAYNAME7 L"\x0cb0."
- LOCALE_SABBREVLANGNAME L"KAN"
- LOCALE_SABBREVMONTHNAME1 L"\x0c9c\x0ca8\x0cb5\x0cb0\x0cc0"
- LOCALE_SABBREVMONTHNAME2 L"\x0cab\x0cc6\x0cac\x0ccd\x0cb0\x0cb5\x0cb0\x0cc0"
- LOCALE_SABBREVMONTHNAME3 L"\x0cae\x0cbe\x0cb0\x0ccd\x0c9a\x0ccd"
- LOCALE_SABBREVMONTHNAME4 L"\x0c8e\x0caa\x0ccd\x0cb0\x0cbf\x0cb2\x0ccd"
- LOCALE_SABBREVMONTHNAME5 L"\x0cae\x0cc6"
- LOCALE_SABBREVMONTHNAME6 L"\x0c9c\x0cc2\x0ca8\x0ccd"
- LOCALE_SABBREVMONTHNAME7 L"\x0c9c\x0cc1\x0cb2\x0cc8"
- LOCALE_SABBREVMONTHNAME8 L"\x0c86\x0c97\x0cb8\x0ccd\x0c9f\x0ccd"
- LOCALE_SABBREVMONTHNAME9 L"\x0cb8\x0caa\x0ccd\x0c9f\x0cc6\x0c82\x0cac\x0cb0\x0ccd"
- LOCALE_SABBREVMONTHNAME10 L"\x0c85\x0c95\x0ccd\x0c9f\x0ccb\x0cac\x0cb0\x0ccd"
- LOCALE_SABBREVMONTHNAME11 L"\x0ca8\x0cb5\x0cc6\x0c82\x0cac\x0cb0\x0ccd"
- LOCALE_SABBREVMONTHNAME12 L"\x0ca1\x0cbf\x0cb8\x0cc6\x0c82\x0cac\x0cb0\x0ccd"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"India"
- LOCALE_SCURRENCY L"\x0cb0\x0cc2"
- LOCALE_SDATE L"-"
- LOCALE_SDAYNAME1 L"\x0cb8\x0ccb\x0cae\x0cb5\x0cbe\x0cb0"
- LOCALE_SDAYNAME2 L"\x0cae\x0c82\x0c97\x0cb3\x0cb5\x0cbe\x0cb0"
- LOCALE_SDAYNAME3 L"\x0cac\x0cc1\x0ca7\x0cb5\x0cbe\x0cb0"
- LOCALE_SDAYNAME4 L"\x0c97\x0cc1\x0cb0\x0cc1\x0cb5\x0cbe\x0cb0"
- LOCALE_SDAYNAME5 L"\x0cb6\x0cc1\x0c95\x0ccd\x0cb0\x0cb5\x0cbe\x0cb0"
- LOCALE_SDAYNAME6 L"\x0cb6\x0ca8\x0cbf\x0cb5\x0cbe\x0cb0"
- LOCALE_SDAYNAME7 L"\x0cb0\x0cb5\x0cbf\x0cb5\x0cbe\x0cb0"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"India"
- LOCALE_SENGCURRNAME L"Indian Rupee"
- LOCALE_SENGLANGUAGE L"Kannada"
- LOCALE_SGROUPING L"3;2;0"
- LOCALE_SINTLSYMBOL L"INR"
- LOCALE_SISO3166CTRYNAME L"IN"
- LOCALE_SISO639LANGNAME L"kn"
- LOCALE_SLANGUAGE L"Kannada"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"dd MMMM yyyy"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;2;0"
- LOCALE_SMONTHNAME1 L"\x0c9c\x0ca8\x0cb5\x0cb0\x0cc0"
- LOCALE_SMONTHNAME2 L"\x0cab\x0cc6\x0cac\x0ccd\x0cb0\x0cb5\x0cb0\x0cc0"
- LOCALE_SMONTHNAME3 L"\x0cae\x0cbe\x0cb0\x0ccd\x0c9a\x0ccd"
- LOCALE_SMONTHNAME4 L"\x0c8e\x0caa\x0ccd\x0cb0\x0cbf\x0cb2\x0ccd"
- LOCALE_SMONTHNAME5 L"\x0cae\x0cc6"
- LOCALE_SMONTHNAME6 L"\x0c9c\x0cc2\x0ca8\x0ccd"
- LOCALE_SMONTHNAME7 L"\x0c9c\x0cc1\x0cb2\x0cc8"
- LOCALE_SMONTHNAME8 L"\x0c86\x0c97\x0cb8\x0ccd\x0c9f\x0ccd"
- LOCALE_SMONTHNAME9 L"\x0cb8\x0caa\x0ccd\x0c9f\x0cc6\x0c82\x0cac\x0cb0\x0ccd"
- LOCALE_SMONTHNAME10 L"\x0c85\x0c95\x0ccd\x0c9f\x0ccb\x0cac\x0cb0\x0ccd"
- LOCALE_SMONTHNAME11 L"\x0ca8\x0cb5\x0cc6\x0c82\x0cac\x0cb0\x0ccd"
- LOCALE_SMONTHNAME12 L"\x0ca1\x0cbf\x0cb8\x0cc6\x0c82\x0cac\x0cb0\x0ccd"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"kn-IN"
- LOCALE_SNATIVECTRYNAME L"\x0cad\x0cbe\x0cb0\x0ca4"
- LOCALE_SNATIVECURRNAME L"\x0cb0\x0cc2\x0caa\x0cbe\x0caf\x0cbf"
- LOCALE_SNATIVEDIGITS L"\x0ce6\x0ce7\x0ce8\x0ce9\x0cea\x0ceb\x0cec\x0ced\x0cee\x0cef"
- LOCALE_SNATIVELANGNAME L"\x0c95\x0ca8\x0ccd\x0ca8\x0ca1"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Knda;"
- LOCALE_SSHORTDATE L"dd-MM-yy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"HH:mm:ss"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "0"
+ LOCALE_ICOUNTRY "91"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "2"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "91"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "044b"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "0"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "044b"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "12"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "4"
+ LOCALE_INEGSYMPRECEDES "1"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "4"
+ LOCALE_IPOSSYMPRECEDES "1"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "1"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "аІЄаі‚аІ°аіЌаІµаІѕаІ№аіЌаІЁ"
+ LOCALE_S2359 "аІ…аІЄаІ°аІѕаІ№аіЌаІЁ"
+ LOCALE_SABBREVCTRYNAME "IND"
+ LOCALE_SABBREVDAYNAME1 "аІёаі‹."
+ LOCALE_SABBREVDAYNAME2 "аІ®аІ‚."
+ LOCALE_SABBREVDAYNAME3 "аІ¬аіЃ."
+ LOCALE_SABBREVDAYNAME4 "аІ—аіЃ."
+ LOCALE_SABBREVDAYNAME5 "аІ¶аіЃ."
+ LOCALE_SABBREVDAYNAME6 "аІ¶аІЁаІї."
+ LOCALE_SABBREVDAYNAME7 "аІ°."
+ LOCALE_SABBREVLANGNAME "KAN"
+ LOCALE_SABBREVMONTHNAME1 "аІњаІЁаІµаІ°аіЂ"
+ LOCALE_SABBREVMONTHNAME2 "аІ«аі†аІ¬аіЌаІ°аІµаІ°аіЂ"
+ LOCALE_SABBREVMONTHNAME3 "аІ®аІѕаІ°аіЌаІљаіЌ"
+ LOCALE_SABBREVMONTHNAME4 "аІЋаІЄаіЌаІ°аІїаІІаіЌ"
+ LOCALE_SABBREVMONTHNAME5 "аІ®аі†"
+ LOCALE_SABBREVMONTHNAME6 "аІњаі‚аІЁаіЌ"
+ LOCALE_SABBREVMONTHNAME7 "аІњаіЃаІІаі€"
+ LOCALE_SABBREVMONTHNAME8 "аІ†аІ—аІёаіЌаІџаіЌ"
+ LOCALE_SABBREVMONTHNAME9 "аІёаІЄаіЌаІџаі†аІ‚аІ¬аІ°аіЌ"
+ LOCALE_SABBREVMONTHNAME10 "аІ…аІ•аіЌаІџаі‹аІ¬аІ°аіЌ"
+ LOCALE_SABBREVMONTHNAME11 "аІЁаІµаі†аІ‚аІ¬аІ°аіЌ"
+ LOCALE_SABBREVMONTHNAME12 "аІЎаІїаІёаі†аІ‚аІ¬аІ°аіЌ"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "India"
+ LOCALE_SCURRENCY "аІ°аі‚"
+ LOCALE_SDATE "-"
+ LOCALE_SDAYNAME1 "аІёаі‹аІ®аІµаІѕаІ°"
+ LOCALE_SDAYNAME2 "аІ®аІ‚аІ—аІіаІµаІѕаІ°"
+ LOCALE_SDAYNAME3 "аІ¬аіЃаІ§аІµаІѕаІ°"
+ LOCALE_SDAYNAME4 "аІ—аіЃаІ°аіЃаІµаІѕаІ°"
+ LOCALE_SDAYNAME5 "аІ¶аіЃаІ•аіЌаІ°аІµаІѕаІ°"
+ LOCALE_SDAYNAME6 "аІ¶аІЁаІїаІµаІѕаІ°"
+ LOCALE_SDAYNAME7 "аІ°аІµаІїаІµаІѕаІ°"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "India"
+ LOCALE_SENGCURRNAME "Indian Rupee"
+ LOCALE_SENGLANGUAGE "Kannada"
+ LOCALE_SGROUPING "3;2;0"
+ LOCALE_SINTLSYMBOL "INR"
+ LOCALE_SISO3166CTRYNAME "IN"
+ LOCALE_SISO639LANGNAME "kn"
+ LOCALE_SLANGUAGE "Kannada"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "dd MMMM yyyy"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;2;0"
+ LOCALE_SMONTHNAME1 "аІњаІЁаІµаІ°аіЂ"
+ LOCALE_SMONTHNAME2 "аІ«аі†аІ¬аіЌаІ°аІµаІ°аіЂ"
+ LOCALE_SMONTHNAME3 "аІ®аІѕаІ°аіЌаІљаіЌ"
+ LOCALE_SMONTHNAME4 "аІЋаІЄаіЌаІ°аІїаІІаіЌ"
+ LOCALE_SMONTHNAME5 "аІ®аі†"
+ LOCALE_SMONTHNAME6 "аІњаі‚аІЁаіЌ"
+ LOCALE_SMONTHNAME7 "аІњаіЃаІІаі€"
+ LOCALE_SMONTHNAME8 "аІ†аІ—аІёаіЌаІџаіЌ"
+ LOCALE_SMONTHNAME9 "аІёаІЄаіЌаІџаі†аІ‚аІ¬аІ°аіЌ"
+ LOCALE_SMONTHNAME10 "аІ…аІ•аіЌаІџаі‹аІ¬аІ°аіЌ"
+ LOCALE_SMONTHNAME11 "аІЁаІµаі†аІ‚аІ¬аІ°аіЌ"
+ LOCALE_SMONTHNAME12 "аІЎаІїаІёаі†аІ‚аІ¬аІ°аіЌ"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "kn-IN"
+ LOCALE_SNATIVECTRYNAME "аІаІѕаІ°аІ¤"
+ LOCALE_SNATIVECURRNAME "аІ°аі‚аІЄаІѕаІЇаІї"
+ LOCALE_SNATIVEDIGITS "аі¦аі§аіЁаі©аіЄаі«аі¬аіаі®аіЇ"
+ LOCALE_SNATIVELANGNAME "аІ•аІЁаіЌаІЁаІЎ"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Knda;"
+ LOCALE_SSHORTDATE "dd-MM-yy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "HH:mm:ss"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/kat.nls b/reactos/dll/win32/kernel32/nls/kat.nls
index 52002fa75ca..d9d1430bb45 100644
--- a/reactos/dll/win32/kernel32/nls/kat.nls
+++ b/reactos/dll/win32/kernel32/nls/kat.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_GEORGIAN, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x002f\x8400\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0013\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"1"
- LOCALE_ICOUNTRY L"995"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"3"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"995"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"0437"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"0"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"0437"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"8"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"1"
- LOCALE_INEGSYMPRECEDES L"0"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"1"
- LOCALE_IPOSSYMPRECEDES L"0"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"0"
- LOCALE_ITLZERO L"0"
- LOCALE_S1159 L""
- LOCALE_S2359 L""
- LOCALE_SABBREVCTRYNAME L"GEO"
- LOCALE_SABBREVDAYNAME1 L"\x10dd\x10e0\x10e8\x10d0\x10d1\x10d0\x10d7\x10d8"
- LOCALE_SABBREVDAYNAME2 L"\x10e1\x10d0\x10db\x10e8\x10d0\x10d1\x10d0\x10d7\x10d8"
- LOCALE_SABBREVDAYNAME3 L"\x10dd\x10d7\x10ee\x10e8\x10d0\x10d1\x10d0\x10d7\x10d8"
- LOCALE_SABBREVDAYNAME4 L"\x10ee\x10e3\x10d7\x10e8\x10d0\x10d1\x10d0\x10d7\x10d8"
- LOCALE_SABBREVDAYNAME5 L"\x10de\x10d0\x10e0\x10d0\x10e1\x10d9\x10d4\x10d5\x10d8"
- LOCALE_SABBREVDAYNAME6 L"\x10e8\x10d0\x10d1\x10d0\x10d7\x10d8"
- LOCALE_SABBREVDAYNAME7 L"\x10d9\x10d5\x10d8\x10e0\x10d0"
- LOCALE_SABBREVLANGNAME L"KAT"
- LOCALE_SABBREVMONTHNAME1 L"\x10d8\x10d0\x10dc"
- LOCALE_SABBREVMONTHNAME2 L"\x10d7\x10d4\x10d1"
- LOCALE_SABBREVMONTHNAME3 L"\x10db\x10d0\x10e0"
- LOCALE_SABBREVMONTHNAME4 L"\x10d0\x10de\x10e0"
- LOCALE_SABBREVMONTHNAME5 L"\x10db\x10d0\x10d8\x10e1"
- LOCALE_SABBREVMONTHNAME6 L"\x10d8\x10d5\x10dc"
- LOCALE_SABBREVMONTHNAME7 L"\x10d8\x10d5\x10da"
- LOCALE_SABBREVMONTHNAME8 L"\x10d0\x10d2\x10d5"
- LOCALE_SABBREVMONTHNAME9 L"\x10e1\x10d4\x10e5"
- LOCALE_SABBREVMONTHNAME10 L"\x10dd\x10e5\x10e2"
- LOCALE_SABBREVMONTHNAME11 L"\x10dc\x10dd\x10d4\x10db"
- LOCALE_SABBREVMONTHNAME12 L"\x10d3\x10d4\x10d9"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"Georgia"
- LOCALE_SCURRENCY L"Lari"
- LOCALE_SDATE L"."
- LOCALE_SDAYNAME1 L"\x10dd\x10e0\x10e8\x10d0\x10d1\x10d0\x10d7\x10d8"
- LOCALE_SDAYNAME2 L"\x10e1\x10d0\x10db\x10e8\x10d0\x10d1\x10d0\x10d7\x10d8"
- LOCALE_SDAYNAME3 L"\x10dd\x10d7\x10ee\x10e8\x10d0\x10d1\x10d0\x10d7\x10d8"
- LOCALE_SDAYNAME4 L"\x10ee\x10e3\x10d7\x10e8\x10d0\x10d1\x10d0\x10d7\x10d8"
- LOCALE_SDAYNAME5 L"\x10de\x10d0\x10e0\x10d0\x10e1\x10d9\x10d4\x10d5\x10d8"
- LOCALE_SDAYNAME6 L"\x10e8\x10d0\x10d1\x10d0\x10d7\x10d8"
- LOCALE_SDAYNAME7 L"\x10d9\x10d5\x10d8\x10e0\x10d0"
- LOCALE_SDECIMAL L","
- LOCALE_SENGCOUNTRY L"Georgia"
- LOCALE_SENGCURRNAME L"Lari"
- LOCALE_SENGLANGUAGE L"Georgian"
- LOCALE_SGROUPING L"3;0"
- LOCALE_SINTLSYMBOL L"GEL"
- LOCALE_SISO3166CTRYNAME L"GE"
- LOCALE_SISO639LANGNAME L"ka"
- LOCALE_SLANGUAGE L"Georgian"
- LOCALE_SLIST L";"
- LOCALE_SLONGDATE L"yyyy '\x10ec\x10da\x10d8\x10e1' dd MM, dddd"
- LOCALE_SMONDECIMALSEP L","
- LOCALE_SMONGROUPING L"3;0"
- LOCALE_SMONTHNAME1 L"\x10d8\x10d0\x10dc\x10d5\x10d0\x10e0\x10d8"
- LOCALE_SMONTHNAME2 L"\x10d7\x10d4\x10d1\x10d4\x10e0\x10d5\x10d0\x10da\x10d8"
- LOCALE_SMONTHNAME3 L"\x10db\x10d0\x10e0\x10e2\x10d8"
- LOCALE_SMONTHNAME4 L"\x10d0\x10de\x10e0\x10d8\x10da\x10d8"
- LOCALE_SMONTHNAME5 L"\x10db\x10d0\x10d8\x10e1\x10d8"
- LOCALE_SMONTHNAME6 L"\x10d8\x10d5\x10dc\x10d8\x10e1\x10d8"
- LOCALE_SMONTHNAME7 L"\x10d8\x10d5\x10da\x10d8\x10e1\x10d8"
- LOCALE_SMONTHNAME8 L"\x10d0\x10d2\x10d5\x10d8\x10e1\x10e2\x10dd"
- LOCALE_SMONTHNAME9 L"\x10e1\x10d4\x10e5\x10e2\x10d4\x10db\x10d1\x10d4\x10e0\x10d8"
- LOCALE_SMONTHNAME10 L"\x10dd\x10e5\x10e2\x10dd\x10db\x10d1\x10d4\x10e0\x10d8"
- LOCALE_SMONTHNAME11 L"\x10dc\x10dd\x10d4\x10db\x10d1\x10d4\x10e0\x10d8"
- LOCALE_SMONTHNAME12 L"\x10d3\x10d4\x10d9\x10d4\x10db\x10d1\x10d4\x10e0\x10d8"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L"\x00a0"
- LOCALE_SNAME L"ka-GE"
- LOCALE_SNATIVECTRYNAME L"\x10e1\x10d0\x10e5\x10d0\x10e0\x10d7\x10d5\x10d4\x10da\x10dd"
- LOCALE_SNATIVECURRNAME L"\x10da\x10d0\x10e0\x10d8"
- LOCALE_SNATIVEDIGITS L"0123456789"
- LOCALE_SNATIVELANGNAME L"\x10e5\x10d0\x10e0\x10d7\x10e3\x10da\x10d8"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Geor;"
- LOCALE_SSHORTDATE L"dd.MM.yyyy"
- LOCALE_SSORTNAME L"Traditional"
- LOCALE_STHOUSAND L"\x00a0"
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"H:mm:ss"
- LOCALE_SYEARMONTH L"MMMM yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "1"
+ LOCALE_ICOUNTRY "995"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "3"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "995"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "0437"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "0"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "0437"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "8"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "1"
+ LOCALE_INEGSYMPRECEDES "0"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "1"
+ LOCALE_IPOSSYMPRECEDES "0"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "0"
+ LOCALE_ITLZERO "0"
+ LOCALE_S1159 ""
+ LOCALE_S2359 ""
+ LOCALE_SABBREVCTRYNAME "GEO"
+ LOCALE_SABBREVDAYNAME1 "бѓќбѓ бѓЁбѓђбѓ‘бѓђбѓ—бѓ"
+ LOCALE_SABBREVDAYNAME2 "бѓЎбѓђбѓ›бѓЁбѓђбѓ‘бѓђбѓ—бѓ"
+ LOCALE_SABBREVDAYNAME3 "бѓќбѓ—бѓ®бѓЁбѓђбѓ‘бѓђбѓ—бѓ"
+ LOCALE_SABBREVDAYNAME4 "бѓ®бѓЈбѓ—бѓЁбѓђбѓ‘бѓђбѓ—бѓ"
+ LOCALE_SABBREVDAYNAME5 "бѓћбѓђбѓ бѓђбѓЎбѓ™бѓ”бѓ•бѓ"
+ LOCALE_SABBREVDAYNAME6 "бѓЁбѓђбѓ‘бѓђбѓ—бѓ"
+ LOCALE_SABBREVDAYNAME7 "бѓ™бѓ•бѓбѓ бѓђ"
+ LOCALE_SABBREVLANGNAME "KAT"
+ LOCALE_SABBREVMONTHNAME1 "бѓбѓђбѓњ"
+ LOCALE_SABBREVMONTHNAME2 "бѓ—бѓ”бѓ‘"
+ LOCALE_SABBREVMONTHNAME3 "бѓ›бѓђбѓ "
+ LOCALE_SABBREVMONTHNAME4 "бѓђбѓћбѓ "
+ LOCALE_SABBREVMONTHNAME5 "бѓ›бѓђбѓбѓЎ"
+ LOCALE_SABBREVMONTHNAME6 "бѓбѓ•бѓњ"
+ LOCALE_SABBREVMONTHNAME7 "бѓбѓ•бѓљ"
+ LOCALE_SABBREVMONTHNAME8 "бѓђбѓ’бѓ•"
+ LOCALE_SABBREVMONTHNAME9 "სექ"
+ LOCALE_SABBREVMONTHNAME10 "ოქტ"
+ LOCALE_SABBREVMONTHNAME11 "бѓњбѓќбѓ”бѓ›"
+ LOCALE_SABBREVMONTHNAME12 "бѓ“бѓ”бѓ™"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "Georgia"
+ LOCALE_SCURRENCY "Lari"
+ LOCALE_SDATE "."
+ LOCALE_SDAYNAME1 "бѓќбѓ бѓЁбѓђбѓ‘бѓђбѓ—бѓ"
+ LOCALE_SDAYNAME2 "бѓЎбѓђбѓ›бѓЁбѓђбѓ‘бѓђбѓ—бѓ"
+ LOCALE_SDAYNAME3 "бѓќбѓ—бѓ®бѓЁбѓђбѓ‘бѓђбѓ—бѓ"
+ LOCALE_SDAYNAME4 "бѓ®бѓЈбѓ—бѓЁбѓђбѓ‘бѓђбѓ—бѓ"
+ LOCALE_SDAYNAME5 "бѓћбѓђбѓ бѓђбѓЎбѓ™бѓ”бѓ•бѓ"
+ LOCALE_SDAYNAME6 "бѓЁбѓђбѓ‘бѓђбѓ—бѓ"
+ LOCALE_SDAYNAME7 "бѓ™бѓ•бѓбѓ бѓђ"
+ LOCALE_SDECIMAL ","
+ LOCALE_SENGCOUNTRY "Georgia"
+ LOCALE_SENGCURRNAME "Lari"
+ LOCALE_SENGLANGUAGE "Georgian"
+ LOCALE_SGROUPING "3;0"
+ LOCALE_SINTLSYMBOL "GE"
+ LOCALE_SISO3166CTRYNAME "GE"
+ LOCALE_SISO639LANGNAME "ka"
+ LOCALE_SLANGUAGE "Georgian"
+ LOCALE_SLIST ";"
+ LOCALE_SLONGDATE "yyyy 'бѓ¬бѓљбѓбѓЎ' dd MM, dddd"
+ LOCALE_SMONDECIMALSEP ","
+ LOCALE_SMONGROUPING "3;0"
+ LOCALE_SMONTHNAME1 "бѓбѓђбѓњбѓ•бѓђбѓ бѓ"
+ LOCALE_SMONTHNAME2 "бѓ—бѓ”бѓ‘бѓ”бѓ бѓ•бѓђбѓљбѓ"
+ LOCALE_SMONTHNAME3 "бѓ›бѓђбѓ бѓўбѓ"
+ LOCALE_SMONTHNAME4 "бѓђбѓћбѓ бѓбѓљбѓ"
+ LOCALE_SMONTHNAME5 "бѓ›бѓђбѓбѓЎбѓ"
+ LOCALE_SMONTHNAME6 "бѓбѓ•бѓњбѓбѓЎбѓ"
+ LOCALE_SMONTHNAME7 "бѓбѓ•бѓљбѓбѓЎбѓ"
+ LOCALE_SMONTHNAME8 "бѓђбѓ’бѓ•бѓбѓЎбѓўбѓќ"
+ LOCALE_SMONTHNAME9 "სექტემბერбѓ"
+ LOCALE_SMONTHNAME10 "ოქტომბერбѓ"
+ LOCALE_SMONTHNAME11 "бѓњбѓќбѓ”бѓ›бѓ‘бѓ”бѓ бѓ"
+ LOCALE_SMONTHNAME12 "бѓ“бѓ”бѓ™бѓ”бѓ›бѓ‘бѓ”бѓ бѓ"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP "В "
+ LOCALE_SNAME "ka-GE"
+ LOCALE_SNATIVECTRYNAME "საქართველო"
+ LOCALE_SNATIVECURRNAME "бѓљбѓђбѓ бѓ"
+ LOCALE_SNATIVEDIGITS "0123456789"
+ LOCALE_SNATIVELANGNAME "ქართულбѓ"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Geor;"
+ LOCALE_SSHORTDATE "dd.MM.yyyy"
+ LOCALE_SSORTNAME "Traditional"
+ LOCALE_STHOUSAND "В "
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "H:mm:ss"
+ LOCALE_SYEARMONTH "MMMM yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/knk.nls b/reactos/dll/win32/kernel32/nls/knk.nls
index 02c564c7466..705398d26cb 100644
--- a/reactos/dll/win32/kernel32/nls/knk.nls
+++ b/reactos/dll/win32/kernel32/nls/knk.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_KONKANI, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x802f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"1"
- LOCALE_ICOUNTRY L"91"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"2"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"91"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"0457"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"0"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"0457"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"12"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"4"
- LOCALE_INEGSYMPRECEDES L"1"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"4"
- LOCALE_IPOSSYMPRECEDES L"1"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"1"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x092e.\x092a\x0942."
- LOCALE_S2359 L"\x092e.\x0928\x0902."
- LOCALE_SABBREVCTRYNAME L"IND"
- LOCALE_SABBREVDAYNAME1 L"\x0938\x094b\x092e."
- LOCALE_SABBREVDAYNAME2 L"\x092e\x0902\x0917\x0933."
- LOCALE_SABBREVDAYNAME3 L"\x092c\x0941\x0927."
- LOCALE_SABBREVDAYNAME4 L"\x092c\x093f\x0930\x0947."
- LOCALE_SABBREVDAYNAME5 L"\x0938\x0941\x0915\x094d\x0930."
- LOCALE_SABBREVDAYNAME6 L"\x0936\x0947\x0928."
- LOCALE_SABBREVDAYNAME7 L"\x0906\x092f."
- LOCALE_SABBREVLANGNAME L"KNK"
- LOCALE_SABBREVMONTHNAME1 L"\x091c\x093e\x0928\x0947\x0935\x093e\x0930\x0940"
- LOCALE_SABBREVMONTHNAME2 L"\x092b\x0947\x092c\x094d\x0930\x0941\x0935\x093e\x0930\x0940"
- LOCALE_SABBREVMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
- LOCALE_SABBREVMONTHNAME4 L"\x090f\x092a\x094d\x0930\x093f\x0932"
- LOCALE_SABBREVMONTHNAME5 L"\x092e\x0947"
- LOCALE_SABBREVMONTHNAME6 L"\x091c\x0942\x0928"
- LOCALE_SABBREVMONTHNAME7 L"\x091c\x0941\x0932\x0948"
- LOCALE_SABBREVMONTHNAME8 L"\x0911\x0917\x0938\x094d\x091f"
- LOCALE_SABBREVMONTHNAME9 L"\x0938\x092a\x094d\x091f\x0947\x0902\x092c\x0930"
- LOCALE_SABBREVMONTHNAME10 L"\x0911\x0915\x094d\x091f\x094b\x092c\x0930"
- LOCALE_SABBREVMONTHNAME11 L"\x0928\x094b\x0935\x0947\x092e\x094d\x092c\x0930"
- LOCALE_SABBREVMONTHNAME12 L"\x0921\x093f\x0938\x0947\x0902\x092c\x0930"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"India"
- LOCALE_SCURRENCY L"\x0930\x0941"
- LOCALE_SDATE L"-"
- LOCALE_SDAYNAME1 L"\x0938\x094b\x092e\x093e\x0930"
- LOCALE_SDAYNAME2 L"\x092e\x0902\x0917\x0933\x093e\x0930"
- LOCALE_SDAYNAME3 L"\x092c\x0941\x0927\x0935\x093e\x0930"
- LOCALE_SDAYNAME4 L"\x092c\x093f\x0930\x0947\x0938\x094d\x0924\x093e\x0930"
- LOCALE_SDAYNAME5 L"\x0938\x0941\x0915\x094d\x0930\x093e\x0930"
- LOCALE_SDAYNAME6 L"\x0936\x0947\x0928\x0935\x093e\x0930"
- LOCALE_SDAYNAME7 L"\x0906\x092f\x0924\x093e\x0930"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"India"
- LOCALE_SENGCURRNAME L"Indian Rupee"
- LOCALE_SENGLANGUAGE L"Konkani"
- LOCALE_SGROUPING L"3;2;0"
- LOCALE_SINTLSYMBOL L"INR"
- LOCALE_SISO3166CTRYNAME L"IN"
- LOCALE_SISO639LANGNAME L"kok"
- LOCALE_SLANGUAGE L"Konkani"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"dd MMMM yyyy"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;2;0"
- LOCALE_SMONTHNAME1 L"\x091c\x093e\x0928\x0947\x0935\x093e\x0930\x0940"
- LOCALE_SMONTHNAME2 L"\x092b\x0947\x092c\x094d\x0930\x0941\x0935\x093e\x0930\x0940"
- LOCALE_SMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
- LOCALE_SMONTHNAME4 L"\x090f\x092a\x094d\x0930\x093f\x0932"
- LOCALE_SMONTHNAME5 L"\x092e\x0947"
- LOCALE_SMONTHNAME6 L"\x091c\x0942\x0928"
- LOCALE_SMONTHNAME7 L"\x091c\x0941\x0932\x0948"
- LOCALE_SMONTHNAME8 L"\x0911\x0917\x0938\x094d\x091f"
- LOCALE_SMONTHNAME9 L"\x0938\x092a\x094d\x091f\x0947\x0902\x092c\x0930"
- LOCALE_SMONTHNAME10 L"\x0911\x0915\x094d\x091f\x094b\x092c\x0930"
- LOCALE_SMONTHNAME11 L"\x0928\x094b\x0935\x0947\x092e\x094d\x092c\x0930"
- LOCALE_SMONTHNAME12 L"\x0921\x093f\x0938\x0947\x0902\x092c\x0930"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"kok-IN"
- LOCALE_SNATIVECTRYNAME L"\x092d\x093e\x0930\x0924"
- LOCALE_SNATIVECURRNAME L"\x0930\x0941\x092a\x092f"
- LOCALE_SNATIVEDIGITS L"\x0966\x0967\x0968\x0969\x096a\x096b\x096c\x096d\x096e\x096f"
- LOCALE_SNATIVELANGNAME L"\x0915\x094b\x0902\x0915\x0923\x0940"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Deva;"
- LOCALE_SSHORTDATE L"dd-MM-yyyy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"HH:mm:ss"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "1"
+ LOCALE_ICOUNTRY "91"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "2"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "91"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "0457"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "0"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "0457"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "12"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "4"
+ LOCALE_INEGSYMPRECEDES "1"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "4"
+ LOCALE_IPOSSYMPRECEDES "1"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "1"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "म.पू."
+ LOCALE_S2359 "म.नं."
+ LOCALE_SABBREVCTRYNAME "IND"
+ LOCALE_SABBREVDAYNAME1 "सोम."
+ LOCALE_SABBREVDAYNAME2 "मंगळ."
+ LOCALE_SABBREVDAYNAME3 "बुध."
+ LOCALE_SABBREVDAYNAME4 "बिरे."
+ LOCALE_SABBREVDAYNAME5 "सुक्र."
+ LOCALE_SABBREVDAYNAME6 "शेन."
+ LOCALE_SABBREVDAYNAME7 "आय."
+ LOCALE_SABBREVLANGNAME "KNK"
+ LOCALE_SABBREVMONTHNAME1 "जानेवारी"
+ LOCALE_SABBREVMONTHNAME2 "फेब्रुवारी"
+ LOCALE_SABBREVMONTHNAME3 "मार्च"
+ LOCALE_SABBREVMONTHNAME4 "एप्रिल"
+ LOCALE_SABBREVMONTHNAME5 "मे"
+ LOCALE_SABBREVMONTHNAME6 "जून"
+ LOCALE_SABBREVMONTHNAME7 "जुलै"
+ LOCALE_SABBREVMONTHNAME8 "ऑगस्ट"
+ LOCALE_SABBREVMONTHNAME9 "सप्टेंबर"
+ LOCALE_SABBREVMONTHNAME10 "ऑक्टोबर"
+ LOCALE_SABBREVMONTHNAME11 "नोवेम्बर"
+ LOCALE_SABBREVMONTHNAME12 "डिसेंबर"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "India"
+ LOCALE_SCURRENCY "रु"
+ LOCALE_SDATE "-"
+ LOCALE_SDAYNAME1 "सोमार"
+ LOCALE_SDAYNAME2 "मंगळार"
+ LOCALE_SDAYNAME3 "बुधवार"
+ LOCALE_SDAYNAME4 "बिरेस्तार"
+ LOCALE_SDAYNAME5 "सुक्रार"
+ LOCALE_SDAYNAME6 "शेनवार"
+ LOCALE_SDAYNAME7 "आयतार"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "India"
+ LOCALE_SENGCURRNAME "Indian Rupee"
+ LOCALE_SENGLANGUAGE "Konkani"
+ LOCALE_SGROUPING "3;2;0"
+ LOCALE_SINTLSYMBOL "INR"
+ LOCALE_SISO3166CTRYNAME "IN"
+ LOCALE_SISO639LANGNAME "kok"
+ LOCALE_SLANGUAGE "Konkani"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "dd MMMM yyyy"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;2;0"
+ LOCALE_SMONTHNAME1 "जानेवारी"
+ LOCALE_SMONTHNAME2 "फेब्रुवारी"
+ LOCALE_SMONTHNAME3 "मार्च"
+ LOCALE_SMONTHNAME4 "एप्रिल"
+ LOCALE_SMONTHNAME5 "मे"
+ LOCALE_SMONTHNAME6 "जून"
+ LOCALE_SMONTHNAME7 "जुलै"
+ LOCALE_SMONTHNAME8 "ऑगस्ट"
+ LOCALE_SMONTHNAME9 "सप्टेंबर"
+ LOCALE_SMONTHNAME10 "ऑक्टोबर"
+ LOCALE_SMONTHNAME11 "नोवेम्बर"
+ LOCALE_SMONTHNAME12 "डिसेंबर"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "kok-IN"
+ LOCALE_SNATIVECTRYNAME "а¤а¤ѕа¤°а¤¤"
+ LOCALE_SNATIVECURRNAME "रुपय"
+ LOCALE_SNATIVEDIGITS "०१२३४५६аҐаҐ®аҐЇ"
+ LOCALE_SNATIVELANGNAME "कोंकणी"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Deva;"
+ LOCALE_SSHORTDATE "dd-MM-yyyy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "HH:mm:ss"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/mar.nls b/reactos/dll/win32/kernel32/nls/mar.nls
index 8d2b151c958..531819599a0 100644
--- a/reactos/dll/win32/kernel32/nls/mar.nls
+++ b/reactos/dll/win32/kernel32/nls/mar.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_MARATHI, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x802f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"1"
- LOCALE_ICOUNTRY L"91"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"2"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"91"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"044e"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"0"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"044e"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"12"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"4"
- LOCALE_INEGSYMPRECEDES L"1"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"4"
- LOCALE_IPOSSYMPRECEDES L"1"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"1"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x092e.\x092a\x0942."
- LOCALE_S2359 L"\x092e.\x0928\x0902."
- LOCALE_SABBREVCTRYNAME L"IND"
- LOCALE_SABBREVDAYNAME1 L"\x0938\x094b\x092e."
- LOCALE_SABBREVDAYNAME2 L"\x092e\x0902\x0917\x0933."
- LOCALE_SABBREVDAYNAME3 L"\x092c\x0941\x0927."
- LOCALE_SABBREVDAYNAME4 L"\x0917\x0941\x0930\x0941."
- LOCALE_SABBREVDAYNAME5 L"\x0936\x0941\x0915\x094d\x0930."
- LOCALE_SABBREVDAYNAME6 L"\x0936\x0928\x093f."
- LOCALE_SABBREVDAYNAME7 L"\x0930\x0935\x093f."
- LOCALE_SABBREVLANGNAME L"MAR"
- LOCALE_SABBREVMONTHNAME1 L"\x091c\x093e\x0928\x0947."
- LOCALE_SABBREVMONTHNAME2 L"\x092b\x0947\x092c\x094d\x0930\x0941."
- LOCALE_SABBREVMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
- LOCALE_SABBREVMONTHNAME4 L"\x090f\x092a\x094d\x0930\x093f\x0932"
- LOCALE_SABBREVMONTHNAME5 L"\x092e\x0947"
- LOCALE_SABBREVMONTHNAME6 L"\x091c\x0942\x0928"
- LOCALE_SABBREVMONTHNAME7 L"\x091c\x0941\x0932\x0948"
- LOCALE_SABBREVMONTHNAME8 L"\x0911\x0917\x0938\x094d\x091f"
- LOCALE_SABBREVMONTHNAME9 L"\x0938\x092a\x094d\x091f\x0947\x0902."
- LOCALE_SABBREVMONTHNAME10 L"\x0911\x0915\x094d\x091f\x094b."
- LOCALE_SABBREVMONTHNAME11 L"\x0928\x094b\x0935\x094d\x0939\x0947\x0902."
- LOCALE_SABBREVMONTHNAME12 L"\x0921\x093f\x0938\x0947\x0902."
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"India"
- LOCALE_SCURRENCY L"\x0930\x0941"
- LOCALE_SDATE L"-"
- LOCALE_SDAYNAME1 L"\x0938\x094b\x092e\x0935\x093e\x0930"
- LOCALE_SDAYNAME2 L"\x092e\x0902\x0917\x0933\x0935\x093e\x0930"
- LOCALE_SDAYNAME3 L"\x092c\x0941\x0927\x0935\x093e\x0930"
- LOCALE_SDAYNAME4 L"\x0917\x0941\x0930\x0941\x0935\x093e\x0930"
- LOCALE_SDAYNAME5 L"\x0936\x0941\x0915\x094d\x0930\x0935\x093e\x0930"
- LOCALE_SDAYNAME6 L"\x0936\x0928\x093f\x0935\x093e\x0930"
- LOCALE_SDAYNAME7 L"\x0930\x0935\x093f\x0935\x093e\x0930"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"India"
- LOCALE_SENGCURRNAME L"Indian Rupee"
- LOCALE_SENGLANGUAGE L"Marathi"
- LOCALE_SGROUPING L"3;2;0"
- LOCALE_SINTLSYMBOL L"INR"
- LOCALE_SISO3166CTRYNAME L"IN"
- LOCALE_SISO639LANGNAME L"mr"
- LOCALE_SLANGUAGE L"Marathi"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"dd MMMM yyyy"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;2;0"
- LOCALE_SMONTHNAME1 L"\x091c\x093e\x0928\x0947\x0935\x093e\x0930\x0940"
- LOCALE_SMONTHNAME2 L"\x092b\x0947\x092c\x094d\x0930\x0941\x0935\x093e\x0930\x0940"
- LOCALE_SMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
- LOCALE_SMONTHNAME4 L"\x090f\x092a\x094d\x0930\x093f\x0932"
- LOCALE_SMONTHNAME5 L"\x092e\x0947"
- LOCALE_SMONTHNAME6 L"\x091c\x0942\x0928"
- LOCALE_SMONTHNAME7 L"\x091c\x0941\x0932\x0948"
- LOCALE_SMONTHNAME8 L"\x0911\x0917\x0938\x094d\x091f"
- LOCALE_SMONTHNAME9 L"\x0938\x092a\x094d\x091f\x0947\x0902\x092c\x0930"
- LOCALE_SMONTHNAME10 L"\x0911\x0915\x094d\x091f\x094b\x092c\x0930"
- LOCALE_SMONTHNAME11 L"\x0928\x094b\x0935\x094d\x0939\x0947\x0902\x092c\x0930"
- LOCALE_SMONTHNAME12 L"\x0921\x093f\x0938\x0947\x0902\x092c\x0930"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"mr-IN"
- LOCALE_SNATIVECTRYNAME L"\x092d\x093e\x0930\x0924"
- LOCALE_SNATIVECURRNAME L"\x0930\x0941\x092a\x092f\x093e"
- LOCALE_SNATIVEDIGITS L"\x0966\x0967\x0968\x0969\x096a\x096b\x096c\x096d\x096e\x096f"
- LOCALE_SNATIVELANGNAME L"\x092e\x0930\x093e\x0920\x0940"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Mlym;"
- LOCALE_SSHORTDATE L"dd-MM-yyyy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"HH:mm:ss"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "1"
+ LOCALE_ICOUNTRY "91"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "2"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "91"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "044e"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "0"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "044e"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "12"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "4"
+ LOCALE_INEGSYMPRECEDES "1"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "4"
+ LOCALE_IPOSSYMPRECEDES "1"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "1"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "म.पू."
+ LOCALE_S2359 "म.नं."
+ LOCALE_SABBREVCTRYNAME "IND"
+ LOCALE_SABBREVDAYNAME1 "सोम."
+ LOCALE_SABBREVDAYNAME2 "मंगळ."
+ LOCALE_SABBREVDAYNAME3 "बुध."
+ LOCALE_SABBREVDAYNAME4 "गुरु."
+ LOCALE_SABBREVDAYNAME5 "शुक्र."
+ LOCALE_SABBREVDAYNAME6 "शनि."
+ LOCALE_SABBREVDAYNAME7 "रवि."
+ LOCALE_SABBREVLANGNAME "MAR"
+ LOCALE_SABBREVMONTHNAME1 "जाने."
+ LOCALE_SABBREVMONTHNAME2 "फेब्रु."
+ LOCALE_SABBREVMONTHNAME3 "मार्च"
+ LOCALE_SABBREVMONTHNAME4 "एप्रिल"
+ LOCALE_SABBREVMONTHNAME5 "मे"
+ LOCALE_SABBREVMONTHNAME6 "जून"
+ LOCALE_SABBREVMONTHNAME7 "जुलै"
+ LOCALE_SABBREVMONTHNAME8 "ऑगस्ट"
+ LOCALE_SABBREVMONTHNAME9 "सप्टें."
+ LOCALE_SABBREVMONTHNAME10 "ऑक्टो."
+ LOCALE_SABBREVMONTHNAME11 "नोव्हें."
+ LOCALE_SABBREVMONTHNAME12 "डिसें."
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "India"
+ LOCALE_SCURRENCY "रु"
+ LOCALE_SDATE "-"
+ LOCALE_SDAYNAME1 "सोमवार"
+ LOCALE_SDAYNAME2 "मंगळवार"
+ LOCALE_SDAYNAME3 "बुधवार"
+ LOCALE_SDAYNAME4 "गुरुवार"
+ LOCALE_SDAYNAME5 "शुक्रवार"
+ LOCALE_SDAYNAME6 "शनिवार"
+ LOCALE_SDAYNAME7 "रविवार"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "India"
+ LOCALE_SENGCURRNAME "Indian Rupee"
+ LOCALE_SENGLANGUAGE "Marathi"
+ LOCALE_SGROUPING "3;2;0"
+ LOCALE_SINTLSYMBOL "INR"
+ LOCALE_SISO3166CTRYNAME "IN"
+ LOCALE_SISO639LANGNAME "mr"
+ LOCALE_SLANGUAGE "Marathi"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "dd MMMM yyyy"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;2;0"
+ LOCALE_SMONTHNAME1 "जानेवारी"
+ LOCALE_SMONTHNAME2 "फेब्रुवारी"
+ LOCALE_SMONTHNAME3 "मार्च"
+ LOCALE_SMONTHNAME4 "एप्रिल"
+ LOCALE_SMONTHNAME5 "मे"
+ LOCALE_SMONTHNAME6 "जून"
+ LOCALE_SMONTHNAME7 "जुलै"
+ LOCALE_SMONTHNAME8 "ऑगस्ट"
+ LOCALE_SMONTHNAME9 "सप्टेंबर"
+ LOCALE_SMONTHNAME10 "ऑक्टोबर"
+ LOCALE_SMONTHNAME11 "नोव्हेंबर"
+ LOCALE_SMONTHNAME12 "डिसेंबर"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "mr-IN"
+ LOCALE_SNATIVECTRYNAME "а¤а¤ѕа¤°а¤¤"
+ LOCALE_SNATIVECURRNAME "रुपया"
+ LOCALE_SNATIVEDIGITS "०१२३४५६аҐаҐ®аҐЇ"
+ LOCALE_SNATIVELANGNAME "मराठी"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Mlym;"
+ LOCALE_SSHORTDATE "dd-MM-yyyy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "HH:mm:ss"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/pan.nls b/reactos/dll/win32/kernel32/nls/pan.nls
index 2c237e08693..febaa1d7f52 100644
--- a/reactos/dll/win32/kernel32/nls/pan.nls
+++ b/reactos/dll/win32/kernel32/nls/pan.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_PUNJABI, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x002f\x8002\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"0"
- LOCALE_ICOUNTRY L"91"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"2"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"91"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"0446"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"0"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"0446"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"12"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"4"
- LOCALE_INEGSYMPRECEDES L"1"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"4"
- LOCALE_IPOSSYMPRECEDES L"1"
- LOCALE_ITIME L"0"
- LOCALE_ITIMEMARKPOSN L"1"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x0a38\x0a35\x0a47\x0a30\x0a47"
- LOCALE_S2359 L"\x0a36\x0a3e\x0a2e"
- LOCALE_SABBREVCTRYNAME L"IND"
- LOCALE_SABBREVDAYNAME1 L"\x0a38\x0a4b\x0a2e."
- LOCALE_SABBREVDAYNAME2 L"\x0a2e\x0a70\x0a17\x0a32."
- LOCALE_SABBREVDAYNAME3 L"\x0a2c\x0a41\x0a27."
- LOCALE_SABBREVDAYNAME4 L"\x0a35\x0a40\x0a30."
- LOCALE_SABBREVDAYNAME5 L"\x0a36\x0a41\x0a15\x0a30."
- LOCALE_SABBREVDAYNAME6 L"\x0a36\x0a28\x0a40."
- LOCALE_SABBREVDAYNAME7 L"\x0a10\x0a24."
- LOCALE_SABBREVLANGNAME L"PAN"
- LOCALE_SABBREVMONTHNAME1 L"\x0a1c\x0a28\x0a35\x0a30\x0a40"
- LOCALE_SABBREVMONTHNAME2 L"\x0a5e\x0a30\x0a35\x0a30\x0a40"
- LOCALE_SABBREVMONTHNAME3 L"\x0a2e\x0a3e\x0a30\x0a1a"
- LOCALE_SABBREVMONTHNAME4 L"\x0a05\x0a2a\x0a4d\x0a30\x0a48\x0a32"
- LOCALE_SABBREVMONTHNAME5 L"\x0a2e\x0a08"
- LOCALE_SABBREVMONTHNAME6 L"\x0a1c\x0a42\x0a28"
- LOCALE_SABBREVMONTHNAME7 L"\x0a1c\x0a41\x0a32\x0a3e\x0a08"
- LOCALE_SABBREVMONTHNAME8 L"\x0a05\x0a17\x0a38\x0a24"
- LOCALE_SABBREVMONTHNAME9 L"\x0a38\x0a24\x0a70\x0a2c\x0a30"
- LOCALE_SABBREVMONTHNAME10 L"\x0a05\x0a15\x0a24\x0a42\x0a2c\x0a30"
- LOCALE_SABBREVMONTHNAME11 L"\x0a28\x0a35\x0a70\x0a2c\x0a30"
- LOCALE_SABBREVMONTHNAME12 L"\x0a26\x0a38\x0a70\x0a2c\x0a30"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"India"
- LOCALE_SCURRENCY L"\x0a30\x0a41"
- LOCALE_SDATE L"-"
- LOCALE_SDAYNAME1 L"\x0a38\x0a4b\x0a2e\x0a35\x0a3e\x0a30"
- LOCALE_SDAYNAME2 L"\x0a2e\x0a70\x0a17\x0a32\x0a35\x0a3e\x0a30"
- LOCALE_SDAYNAME3 L"\x0a2c\x0a41\x0a27\x0a35\x0a3e\x0a30"
- LOCALE_SDAYNAME4 L"\x0a35\x0a40\x0a30\x0a35\x0a3e\x0a30"
- LOCALE_SDAYNAME5 L"\x0a36\x0a41\x0a71\x0a15\x0a30\x0a35\x0a3e\x0a30"
- LOCALE_SDAYNAME6 L"\x0a36\x0a28\x0a40\x0a1a\x0a30\x0a35\x0a3e\x0a30"
- LOCALE_SDAYNAME7 L"\x0a10\x0a24\x0a35\x0a3e\x0a30"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"India"
- LOCALE_SENGCURRNAME L"Indian Rupee"
- LOCALE_SENGLANGUAGE L"Punjabi"
- LOCALE_SGROUPING L"3;2;0"
- LOCALE_SINTLSYMBOL L"INR"
- LOCALE_SISO3166CTRYNAME L"IN"
- LOCALE_SISO639LANGNAME L"pa"
- LOCALE_SLANGUAGE L"Punjabi"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"dd MMMM yyyy dddd"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;2;0"
- LOCALE_SMONTHNAME1 L"\x0a1c\x0a28\x0a35\x0a30\x0a40"
- LOCALE_SMONTHNAME2 L"\x0a5e\x0a30\x0a35\x0a30\x0a40"
- LOCALE_SMONTHNAME3 L"\x0a2e\x0a3e\x0a30\x0a1a"
- LOCALE_SMONTHNAME4 L"\x0a05\x0a2a\x0a4d\x0a30\x0a48\x0a32"
- LOCALE_SMONTHNAME5 L"\x0a2e\x0a08"
- LOCALE_SMONTHNAME6 L"\x0a1c\x0a42\x0a28"
- LOCALE_SMONTHNAME7 L"\x0a1c\x0a41\x0a32\x0a3e\x0a08"
- LOCALE_SMONTHNAME8 L"\x0a05\x0a17\x0a38\x0a24"
- LOCALE_SMONTHNAME9 L"\x0a38\x0a24\x0a70\x0a2c\x0a30"
- LOCALE_SMONTHNAME10 L"\x0a05\x0a15\x0a24\x0a42\x0a2c\x0a30"
- LOCALE_SMONTHNAME11 L"\x0a28\x0a35\x0a70\x0a2c\x0a30"
- LOCALE_SMONTHNAME12 L"\x0a26\x0a38\x0a70\x0a2c\x0a30"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"pa-IN"
- LOCALE_SNATIVECTRYNAME L"\x0a2d\x0a3e\x0a30\x0a24"
- LOCALE_SNATIVECURRNAME L"\x0a30\x0a41\x0a2a\x0a3f\x0a06"
- LOCALE_SNATIVEDIGITS L"\x0a66\x0a67\x0a68\x0a69\x0a6a\x0a6b\x0a6c\x0a6d\x0a6e\x0a6f"
- LOCALE_SNATIVELANGNAME L"\x0a2a\x0a70\x0a1c\x0a3e\x0a2c\x0a40"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Guru;"
- LOCALE_SSHORTDATE L"dd-MM-yy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"tt hh:mm:ss"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "0"
+ LOCALE_ICOUNTRY "91"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "2"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "91"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "0446"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "0"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "0446"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "12"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "4"
+ LOCALE_INEGSYMPRECEDES "1"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "4"
+ LOCALE_IPOSSYMPRECEDES "1"
+ LOCALE_ITIME "0"
+ LOCALE_ITIMEMARKPOSN "1"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "ਸਵੇਰੇ"
+ LOCALE_S2359 "аЁ¶аЁѕаЁ®"
+ LOCALE_SABBREVCTRYNAME "IND"
+ LOCALE_SABBREVDAYNAME1 "аЁёа©‹аЁ®."
+ LOCALE_SABBREVDAYNAME2 "аЁ®а©°аЁ—аЁІ."
+ LOCALE_SABBREVDAYNAME3 "аЁ¬а©ЃаЁ§."
+ LOCALE_SABBREVDAYNAME4 "аЁµа©ЂаЁ°."
+ LOCALE_SABBREVDAYNAME5 "аЁ¶а©ЃаЁ•аЁ°."
+ LOCALE_SABBREVDAYNAME6 "аЁ¶аЁЁа©Ђ."
+ LOCALE_SABBREVDAYNAME7 "аЁђаЁ¤."
+ LOCALE_SABBREVLANGNAME "PAN"
+ LOCALE_SABBREVMONTHNAME1 "аЁњаЁЁаЁµаЁ°а©Ђ"
+ LOCALE_SABBREVMONTHNAME2 "а©ћаЁ°аЁµаЁ°а©Ђ"
+ LOCALE_SABBREVMONTHNAME3 "аЁ®аЁѕаЁ°аЁљ"
+ LOCALE_SABBREVMONTHNAME4 "аЁ…аЁЄа©ЌаЁ°а©€аЁІ"
+ LOCALE_SABBREVMONTHNAME5 "аЁ®аЁ€"
+ LOCALE_SABBREVMONTHNAME6 "аЁња©‚аЁЁ"
+ LOCALE_SABBREVMONTHNAME7 "аЁња©ЃаЁІаЁѕаЁ€"
+ LOCALE_SABBREVMONTHNAME8 "аЁ…аЁ—аЁёаЁ¤"
+ LOCALE_SABBREVMONTHNAME9 "аЁёаЁ¤а©°аЁ¬аЁ°"
+ LOCALE_SABBREVMONTHNAME10 "аЁ…аЁ•аЁ¤а©‚аЁ¬аЁ°"
+ LOCALE_SABBREVMONTHNAME11 "аЁЁаЁµа©°аЁ¬аЁ°"
+ LOCALE_SABBREVMONTHNAME12 "аЁ¦аЁёа©°аЁ¬аЁ°"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "India"
+ LOCALE_SCURRENCY "аЁ°а©Ѓ"
+ LOCALE_SDATE "-"
+ LOCALE_SDAYNAME1 "аЁёа©‹аЁ®аЁµаЁѕаЁ°"
+ LOCALE_SDAYNAME2 "аЁ®а©°аЁ—аЁІаЁµаЁѕаЁ°"
+ LOCALE_SDAYNAME3 "аЁ¬а©ЃаЁ§аЁµаЁѕаЁ°"
+ LOCALE_SDAYNAME4 "аЁµа©ЂаЁ°аЁµаЁѕаЁ°"
+ LOCALE_SDAYNAME5 "аЁ¶а©Ѓа©±аЁ•аЁ°аЁµаЁѕаЁ°"
+ LOCALE_SDAYNAME6 "аЁ¶аЁЁа©ЂаЁљаЁ°аЁµаЁѕаЁ°"
+ LOCALE_SDAYNAME7 "аЁђаЁ¤аЁµаЁѕаЁ°"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "India"
+ LOCALE_SENGCURRNAME "Indian Rupee"
+ LOCALE_SENGLANGUAGE "Punjabi"
+ LOCALE_SGROUPING "3;2;0"
+ LOCALE_SINTLSYMBOL "INR"
+ LOCALE_SISO3166CTRYNAME "IN"
+ LOCALE_SISO639LANGNAME "pa"
+ LOCALE_SLANGUAGE "Punjabi"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "dd MMMM yyyy dddd"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;2;0"
+ LOCALE_SMONTHNAME1 "аЁњаЁЁаЁµаЁ°а©Ђ"
+ LOCALE_SMONTHNAME2 "а©ћаЁ°аЁµаЁ°а©Ђ"
+ LOCALE_SMONTHNAME3 "аЁ®аЁѕаЁ°аЁљ"
+ LOCALE_SMONTHNAME4 "аЁ…аЁЄа©ЌаЁ°а©€аЁІ"
+ LOCALE_SMONTHNAME5 "аЁ®аЁ€"
+ LOCALE_SMONTHNAME6 "аЁња©‚аЁЁ"
+ LOCALE_SMONTHNAME7 "аЁња©ЃаЁІаЁѕаЁ€"
+ LOCALE_SMONTHNAME8 "аЁ…аЁ—аЁёаЁ¤"
+ LOCALE_SMONTHNAME9 "аЁёаЁ¤а©°аЁ¬аЁ°"
+ LOCALE_SMONTHNAME10 "аЁ…аЁ•аЁ¤а©‚аЁ¬аЁ°"
+ LOCALE_SMONTHNAME11 "аЁЁаЁµа©°аЁ¬аЁ°"
+ LOCALE_SMONTHNAME12 "аЁ¦аЁёа©°аЁ¬аЁ°"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "pa-IN"
+ LOCALE_SNATIVECTRYNAME "аЁаЁѕаЁ°аЁ¤"
+ LOCALE_SNATIVECURRNAME "аЁ°а©ЃаЁЄаЁїаЁ†"
+ LOCALE_SNATIVEDIGITS "੦੧੨੩੪੫੬а©а©®а©Ї"
+ LOCALE_SNATIVELANGNAME "аЁЄа©°аЁњаЁѕаЁ¬а©Ђ"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Guru;"
+ LOCALE_SSHORTDATE "dd-MM-yy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "tt hh:mm:ss"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/san.nls b/reactos/dll/win32/kernel32/nls/san.nls
index ce236d7ce04..d6f353f3858 100644
--- a/reactos/dll/win32/kernel32/nls/san.nls
+++ b/reactos/dll/win32/kernel32/nls/san.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_SANSKRIT, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x802f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"1"
- LOCALE_ICOUNTRY L"91"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"2"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"91"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"044f"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"6"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"044f"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"12"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"4"
- LOCALE_INEGSYMPRECEDES L"1"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"4"
- LOCALE_IPOSSYMPRECEDES L"1"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"1"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x092a\x0942\x0930\x094d\x0935\x093e\x0939\x094d\x0928"
- LOCALE_S2359 L"\x0905\x092a\x0930\x093e\x0939\x094d\x0928"
- LOCALE_SABBREVCTRYNAME L"IND"
- LOCALE_SABBREVDAYNAME1 L"\x0938\x094b\x092e\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SABBREVDAYNAME2 L"\x092e\x0919\x094d\x0917\x0932\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SABBREVDAYNAME3 L"\x092c\x0941\x0927\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SABBREVDAYNAME4 L"\x0917\x0941\x0930\x0941\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SABBREVDAYNAME5 L"\x0936\x0941\x0915\x094d\x0930\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SABBREVDAYNAME6 L"\x0936\x0928\x093f\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SABBREVDAYNAME7 L"\x0930\x0935\x093f\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SABBREVLANGNAME L"SAN"
- LOCALE_SABBREVMONTHNAME1 L"\x091c\x0928\x0935\x0930\x0940"
- LOCALE_SABBREVMONTHNAME2 L"\x092b\x0930\x0935\x0930\x0940"
- LOCALE_SABBREVMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
- LOCALE_SABBREVMONTHNAME4 L"\x0905\x092a\x094d\x0930\x0948\x0932"
- LOCALE_SABBREVMONTHNAME5 L"\x092e\x0908"
- LOCALE_SABBREVMONTHNAME6 L"\x091c\x0942\x0928"
- LOCALE_SABBREVMONTHNAME7 L"\x091c\x0941\x0932\x093e\x0908"
- LOCALE_SABBREVMONTHNAME8 L"\x0905\x0917\x0938\x094d\x0924"
- LOCALE_SABBREVMONTHNAME9 L"\x0938\x093f\x0924\x092e\x094d\x092c\x0930"
- LOCALE_SABBREVMONTHNAME10 L"\x0905\x0915\x094d\x0924\x0942\x092c\x0930"
- LOCALE_SABBREVMONTHNAME11 L"\x0928\x0935\x092e\x094d\x092c\x0930"
- LOCALE_SABBREVMONTHNAME12 L"\x0926\x093f\x0938\x092e\x094d\x092c\x0930"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"India"
- LOCALE_SCURRENCY L"\x0930\x0941"
- LOCALE_SDATE L"-"
- LOCALE_SDAYNAME1 L"\x0938\x094b\x092e\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SDAYNAME2 L"\x092e\x0919\x094d\x0917\x0932\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SDAYNAME3 L"\x092c\x0941\x0927\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SDAYNAME4 L"\x0917\x0941\x0930\x0941\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SDAYNAME5 L"\x0936\x0941\x0915\x094d\x0930\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SDAYNAME6 L"\x0936\x0928\x093f\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SDAYNAME7 L"\x0930\x0935\x093f\x0935\x093e\x0938\x0930\x0903"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"India"
- LOCALE_SENGCURRNAME L"Indian Rupee"
- LOCALE_SENGLANGUAGE L"Sanskrit"
- LOCALE_SGROUPING L"3;2;0"
- LOCALE_SINTLSYMBOL L"INR"
- LOCALE_SISO3166CTRYNAME L"IN"
- LOCALE_SISO639LANGNAME L"sa"
- LOCALE_SLANGUAGE L"Sanskrit"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"dd MMMM yyyy dddd"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;2;0"
- LOCALE_SMONTHNAME1 L"\x091c\x0928\x0935\x0930\x0940"
- LOCALE_SMONTHNAME2 L"\x092b\x0930\x0935\x0930\x0940"
- LOCALE_SMONTHNAME3 L"\x092e\x093e\x0930\x094d\x091a"
- LOCALE_SMONTHNAME4 L"\x0905\x092a\x094d\x0930\x0948\x0932"
- LOCALE_SMONTHNAME5 L"\x092e\x0908"
- LOCALE_SMONTHNAME6 L"\x091c\x0942\x0928"
- LOCALE_SMONTHNAME7 L"\x091c\x0941\x0932\x093e\x0908"
- LOCALE_SMONTHNAME8 L"\x0905\x0917\x0938\x094d\x0924"
- LOCALE_SMONTHNAME9 L"\x0938\x093f\x0924\x092e\x094d\x092c\x0930"
- LOCALE_SMONTHNAME10 L"\x0905\x0915\x094d\x0924\x0942\x092c\x0930"
- LOCALE_SMONTHNAME11 L"\x0928\x0935\x092e\x094d\x092c\x0930"
- LOCALE_SMONTHNAME12 L"\x0926\x093f\x0938\x092e\x094d\x092c\x0930"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"sa-IN"
- LOCALE_SNATIVECTRYNAME L"\x092d\x093e\x0930\x0924\x092e\x094d"
- LOCALE_SNATIVECURRNAME L"\x0930\x0941\x094d\x092f\x0915\x092e\x094d"
- LOCALE_SNATIVEDIGITS L"\x0966\x0967\x0968\x0969\x096a\x096b\x096c\x096d\x096e\x096f"
- LOCALE_SNATIVELANGNAME L"\x0938\x0902\x0938\x094d\x0915\x0943\x0924"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Deva;"
- LOCALE_SSHORTDATE L"dd-MM-yyyy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"HH:mm:ss"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "1"
+ LOCALE_ICOUNTRY "91"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "2"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "91"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "044f"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "6"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "044f"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "12"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "4"
+ LOCALE_INEGSYMPRECEDES "1"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "4"
+ LOCALE_IPOSSYMPRECEDES "1"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "1"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "पूर्वाह्न"
+ LOCALE_S2359 "अपराह्न"
+ LOCALE_SABBREVCTRYNAME "IND"
+ LOCALE_SABBREVDAYNAME1 "सोमवासरः"
+ LOCALE_SABBREVDAYNAME2 "मङ्गलवासरः"
+ LOCALE_SABBREVDAYNAME3 "बुधवासरः"
+ LOCALE_SABBREVDAYNAME4 "गुरुवासरः"
+ LOCALE_SABBREVDAYNAME5 "शुक्रवासरः"
+ LOCALE_SABBREVDAYNAME6 "शनिवासरः"
+ LOCALE_SABBREVDAYNAME7 "रविवासरः"
+ LOCALE_SABBREVLANGNAME "SAN"
+ LOCALE_SABBREVMONTHNAME1 "जनवरी"
+ LOCALE_SABBREVMONTHNAME2 "फरवरी"
+ LOCALE_SABBREVMONTHNAME3 "मार्च"
+ LOCALE_SABBREVMONTHNAME4 "अप्रैल"
+ LOCALE_SABBREVMONTHNAME5 "मई"
+ LOCALE_SABBREVMONTHNAME6 "जून"
+ LOCALE_SABBREVMONTHNAME7 "जुलाई"
+ LOCALE_SABBREVMONTHNAME8 "अगस्त"
+ LOCALE_SABBREVMONTHNAME9 "सितम्बर"
+ LOCALE_SABBREVMONTHNAME10 "अक्तूबर"
+ LOCALE_SABBREVMONTHNAME11 "नवम्बर"
+ LOCALE_SABBREVMONTHNAME12 "दिसम्बर"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "India"
+ LOCALE_SCURRENCY "रु"
+ LOCALE_SDATE "-"
+ LOCALE_SDAYNAME1 "सोमवासरः"
+ LOCALE_SDAYNAME2 "मङ्गलवासरः"
+ LOCALE_SDAYNAME3 "बुधवासरः"
+ LOCALE_SDAYNAME4 "गुरुवासरः"
+ LOCALE_SDAYNAME5 "शुक्रवासरः"
+ LOCALE_SDAYNAME6 "शनिवासरः"
+ LOCALE_SDAYNAME7 "रविवासरः"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "India"
+ LOCALE_SENGCURRNAME "Indian Rupee"
+ LOCALE_SENGLANGUAGE "Sanskrit"
+ LOCALE_SGROUPING "3;2;0"
+ LOCALE_SINTLSYMBOL "INR"
+ LOCALE_SISO3166CTRYNAME "IN"
+ LOCALE_SISO639LANGNAME "sa"
+ LOCALE_SLANGUAGE "Sanskrit"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "dd MMMM yyyy dddd"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;2;0"
+ LOCALE_SMONTHNAME1 "जनवरी"
+ LOCALE_SMONTHNAME2 "फरवरी"
+ LOCALE_SMONTHNAME3 "मार्च"
+ LOCALE_SMONTHNAME4 "अप्रैल"
+ LOCALE_SMONTHNAME5 "मई"
+ LOCALE_SMONTHNAME6 "जून"
+ LOCALE_SMONTHNAME7 "जुलाई"
+ LOCALE_SMONTHNAME8 "अगस्त"
+ LOCALE_SMONTHNAME9 "सितम्बर"
+ LOCALE_SMONTHNAME10 "अक्तूबर"
+ LOCALE_SMONTHNAME11 "नवम्बर"
+ LOCALE_SMONTHNAME12 "दिसम्बर"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "sa-IN"
+ LOCALE_SNATIVECTRYNAME "а¤а¤ѕа¤°а¤¤а¤®аҐЌ"
+ LOCALE_SNATIVECURRNAME "रु्यकम्"
+ LOCALE_SNATIVEDIGITS "०१२३४५६аҐаҐ®аҐЇ"
+ LOCALE_SNATIVELANGNAME "संस्कृत"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Deva;"
+ LOCALE_SSHORTDATE "dd-MM-yyyy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "HH:mm:ss"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/syr.nls b/reactos/dll/win32/kernel32/nls/syr.nls
index 8cead3b864b..45bb96c25a0 100644
--- a/reactos/dll/win32/kernel32/nls/syr.nls
+++ b/reactos/dll/win32/kernel32/nls/syr.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_SYRIAC, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x60af\x8000\x3848\x1000\x0088\x0000\x0000\x0800\x0040\x0000\x0000\x2000\x0040\x0000\x0000\x2008"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"1"
- LOCALE_ICOUNTRY L"963"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"2"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"963"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"045a"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"5"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"045a"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"3"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"0"
- LOCALE_INEGSIGNPOSN L"2"
- LOCALE_INEGSYMPRECEDES L"1"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"1"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"2"
- LOCALE_IPOSSYMPRECEDES L"1"
- LOCALE_ITIME L"0"
- LOCALE_ITIMEMARKPOSN L"0"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x0729.\x071b"
- LOCALE_S2359 L"\x0712.\x071b"
- LOCALE_SABBREVCTRYNAME L"SYR"
- LOCALE_SABBREVDAYNAME1 L"\x070f\x0712\x00a0\x070f\x0712\x072b"
- LOCALE_SABBREVDAYNAME2 L"\x070f\x0713\x00a0\x070f\x0712\x072b"
- LOCALE_SABBREVDAYNAME3 L"\x070f\x0715\x00a0\x070f\x0712\x072b"
- LOCALE_SABBREVDAYNAME4 L"\x070f\x0717\x00a0\x070f\x0712\x072b"
- LOCALE_SABBREVDAYNAME5 L"\x070f\x0725\x072a\x0718\x0712"
- LOCALE_SABBREVDAYNAME6 L"\x070f\x072b\x0712"
- LOCALE_SABBREVDAYNAME7 L"\x070f\x0710\x00a0\x070f\x0712\x072b"
- LOCALE_SABBREVLANGNAME L"SYR"
- LOCALE_SABBREVMONTHNAME1 L"\x070f\x071f\x0722\x00a0\x070f\x0712"
- LOCALE_SABBREVMONTHNAME2 L"\x072b\x0712\x071b"
- LOCALE_SABBREVMONTHNAME3 L"\x0710\x0715\x072a"
- LOCALE_SABBREVMONTHNAME4 L"\x0722\x071d\x0723\x0722"
- LOCALE_SABBREVMONTHNAME5 L"\x0710\x071d\x072a"
- LOCALE_SABBREVMONTHNAME6 L"\x071a\x0719\x071d\x072a\x0722"
- LOCALE_SABBREVMONTHNAME7 L"\x072c\x0721\x0718\x0719"
- LOCALE_SABBREVMONTHNAME8 L"\x0710\x0712"
- LOCALE_SABBREVMONTHNAME9 L"\x0710\x071d\x0720\x0718\x0720"
- LOCALE_SABBREVMONTHNAME10 L"\x070f\x072c\x072b\x00a0\x070f\x0710"
- LOCALE_SABBREVMONTHNAME11 L"\x070f\x072c\x072b\x00a0\x070f\x0712"
- LOCALE_SABBREVMONTHNAME12 L"\x070f\x071f\x0722\x00a0\x070f\x0710"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"Syria"
- LOCALE_SCURRENCY L"\x0644.\x0633.\x200f"
- LOCALE_SDATE L"/"
- LOCALE_SDAYNAME1 L"\x072c\x072a\x071d\x0722\x00a0\x0712\x072b\x0712\x0710"
- LOCALE_SDAYNAME2 L"\x072c\x0720\x072c\x0710\x00a0\x0712\x072b\x0712\x0710"
- LOCALE_SDAYNAME3 L"\x0710\x072a\x0712\x0725\x0710\x00a0\x0712\x072b\x0712\x0710"
- LOCALE_SDAYNAME4 L"\x071a\x0721\x072b\x0710\x00a0\x0712\x072b\x0712\x0710"
- LOCALE_SDAYNAME5 L"\x0725\x072a\x0718\x0712\x072c\x0710"
- LOCALE_SDAYNAME6 L"\x072b\x0712\x072c\x0710"
- LOCALE_SDAYNAME7 L"\x071a\x0715\x00a0\x0712\x072b\x0712\x0710"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"Syria"
- LOCALE_SENGCURRNAME L"Syrian Pound"
- LOCALE_SENGLANGUAGE L"Syriac"
- LOCALE_SGROUPING L"3;0"
- LOCALE_SINTLSYMBOL L"SYP"
- LOCALE_SISO3166CTRYNAME L"SY"
- LOCALE_SISO639LANGNAME L"syr"
- LOCALE_SLANGUAGE L"Syriac"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"dd MMMM, yyyy"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;0"
- LOCALE_SMONTHNAME1 L"\x071f\x0722\x0718\x0722\x00a0\x0710\x071a\x072a\x071d"
- LOCALE_SMONTHNAME2 L"\x072b\x0712\x071b"
- LOCALE_SMONTHNAME3 L"\x0710\x0715\x072a"
- LOCALE_SMONTHNAME4 L"\x0722\x071d\x0723\x0722"
- LOCALE_SMONTHNAME5 L"\x0710\x071d\x072a"
- LOCALE_SMONTHNAME6 L"\x071a\x0719\x071d\x072a\x0722"
- LOCALE_SMONTHNAME7 L"\x072c\x0721\x0718\x0719"
- LOCALE_SMONTHNAME8 L"\x0710\x0712"
- LOCALE_SMONTHNAME9 L"\x0710\x071d\x0720\x0718\x0720"
- LOCALE_SMONTHNAME10 L"\x072c\x072b\x072a\x071d\x00a0\x0729\x0715\x071d\x0721"
- LOCALE_SMONTHNAME11 L"\x072c\x072b\x072a\x071d\x00a0\x0710\x071a\x072a\x071d"
- LOCALE_SMONTHNAME12 L"\x071f\x0722\x0718\x0722\x00a0\x0729\x0715\x071d\x0721"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"syr-SY"
- LOCALE_SNATIVECTRYNAME L"\x0633\x0648\x0631\x064a\x0627"
- LOCALE_SNATIVECURRNAME L"\x062c\x0646\x064a\x0647\x00a0\x0633\x0648\x0631\x064a"
- LOCALE_SNATIVEDIGITS L"0123456789"
- LOCALE_SNATIVELANGNAME L"\x0723\x0718\x072a\x071d\x071d\x0710"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L"+"
- LOCALE_SSCRIPTS L"Syrc;"
- LOCALE_SSHORTDATE L"dd/MM/yyyy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"hh:mm:ss tt"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "1"
+ LOCALE_ICOUNTRY "963"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "2"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "963"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "045a"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "5"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "045a"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "3"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "0"
+ LOCALE_INEGSIGNPOSN "2"
+ LOCALE_INEGSYMPRECEDES "1"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "1"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "2"
+ LOCALE_IPOSSYMPRECEDES "1"
+ LOCALE_ITIME "0"
+ LOCALE_ITIMEMARKPOSN "0"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "Ь©.Ь›"
+ LOCALE_S2359 "Ь’.Ь›"
+ LOCALE_SABBREVCTRYNAME "SYR"
+ LOCALE_SABBREVDAYNAME1 "ЬЏЬ’В ЬЏЬ’Ь«"
+ LOCALE_SABBREVDAYNAME2 "ЬЏЬ“В ЬЏЬ’Ь«"
+ LOCALE_SABBREVDAYNAME3 "ЬЏЬ•В ЬЏЬ’Ь«"
+ LOCALE_SABBREVDAYNAME4 "ЬЏЬ—В ЬЏЬ’Ь«"
+ LOCALE_SABBREVDAYNAME5 "ЬЏЬҐЬЄЬЬ’"
+ LOCALE_SABBREVDAYNAME6 "ЬЏЬ«Ь’"
+ LOCALE_SABBREVDAYNAME7 "ЬЏЬђВ ЬЏЬ’Ь«"
+ LOCALE_SABBREVLANGNAME "SYR"
+ LOCALE_SABBREVMONTHNAME1 "ЬЏЬџЬўВ ЬЏЬ’"
+ LOCALE_SABBREVMONTHNAME2 "Ь«Ь’Ь›"
+ LOCALE_SABBREVMONTHNAME3 "ЬђЬ•ЬЄ"
+ LOCALE_SABBREVMONTHNAME4 "ЬўЬќЬЈЬў"
+ LOCALE_SABBREVMONTHNAME5 "ЬђЬќЬЄ"
+ LOCALE_SABBREVMONTHNAME6 "ЬљЬ™ЬќЬЄЬў"
+ LOCALE_SABBREVMONTHNAME7 "Ь¬ЬЎЬЬ™"
+ LOCALE_SABBREVMONTHNAME8 "ЬђЬ’"
+ LOCALE_SABBREVMONTHNAME9 "ЬђЬќЬ ЬЬ "
+ LOCALE_SABBREVMONTHNAME10 "ЬЏЬ¬Ь«В ЬЏЬђ"
+ LOCALE_SABBREVMONTHNAME11 "ЬЏЬ¬Ь«В ЬЏЬ’"
+ LOCALE_SABBREVMONTHNAME12 "ЬЏЬџЬўВ ЬЏЬђ"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "Syria"
+ LOCALE_SCURRENCY "ل.س.‏"
+ LOCALE_SDATE "/"
+ LOCALE_SDAYNAME1 "Ь¬ЬЄЬќЬўВ Ь’Ь«Ь’Ьђ"
+ LOCALE_SDAYNAME2 "Ь¬Ь Ь¬ЬђВ Ь’Ь«Ь’Ьђ"
+ LOCALE_SDAYNAME3 "ЬђЬЄЬ’ЬҐЬђВ Ь’Ь«Ь’Ьђ"
+ LOCALE_SDAYNAME4 "ЬљЬЎЬ«ЬђВ Ь’Ь«Ь’Ьђ"
+ LOCALE_SDAYNAME5 "ЬҐЬЄЬЬ’Ь¬Ьђ"
+ LOCALE_SDAYNAME6 "Ь«Ь’Ь¬Ьђ"
+ LOCALE_SDAYNAME7 "ЬљЬ•В Ь’Ь«Ь’Ьђ"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "Syria"
+ LOCALE_SENGCURRNAME "Syrian Pound"
+ LOCALE_SENGLANGUAGE "Syriac"
+ LOCALE_SGROUPING "3;0"
+ LOCALE_SINTLSYMBOL "SYP"
+ LOCALE_SISO3166CTRYNAME "SY"
+ LOCALE_SISO639LANGNAME "syr"
+ LOCALE_SLANGUAGE "Syriac"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "dd MMMM, yyyy"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;0"
+ LOCALE_SMONTHNAME1 "ЬџЬўЬЬўВ ЬђЬљЬЄЬќ"
+ LOCALE_SMONTHNAME2 "Ь«Ь’Ь›"
+ LOCALE_SMONTHNAME3 "ЬђЬ•ЬЄ"
+ LOCALE_SMONTHNAME4 "ЬўЬќЬЈЬў"
+ LOCALE_SMONTHNAME5 "ЬђЬќЬЄ"
+ LOCALE_SMONTHNAME6 "ЬљЬ™ЬќЬЄЬў"
+ LOCALE_SMONTHNAME7 "Ь¬ЬЎЬЬ™"
+ LOCALE_SMONTHNAME8 "ЬђЬ’"
+ LOCALE_SMONTHNAME9 "ЬђЬќЬ ЬЬ "
+ LOCALE_SMONTHNAME10 "Ь¬Ь«ЬЄЬќВ Ь©Ь•ЬќЬЎ"
+ LOCALE_SMONTHNAME11 "Ь¬Ь«ЬЄЬќВ ЬђЬљЬЄЬќ"
+ LOCALE_SMONTHNAME12 "ЬџЬўЬЬўВ Ь©Ь•ЬќЬЎ"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "syr-SY"
+ LOCALE_SNATIVECTRYNAME "ШіЩ€Ш±ЩЉШ§"
+ LOCALE_SNATIVECURRNAME "Ш¬Щ†ЩЉЩ‡В ШіЩ€Ш±ЩЉ"
+ LOCALE_SNATIVEDIGITS "0123456789"
+ LOCALE_SNATIVELANGNAME "ЬЈЬЬЄЬќЬќЬђ"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN "+"
+ LOCALE_SSCRIPTS "Syrc;"
+ LOCALE_SSHORTDATE "dd/MM/yyyy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "hh:mm:ss tt"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/tam.nls b/reactos/dll/win32/kernel32/nls/tam.nls
index 00e112bf63d..9820517264b 100644
--- a/reactos/dll/win32/kernel32/nls/tam.nls
+++ b/reactos/dll/win32/kernel32/nls/tam.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_TAMIL, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x002f\x8010\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"1"
- LOCALE_ICOUNTRY L"91"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"2"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"91"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"0449"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"0"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"0449"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"12"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"4"
- LOCALE_INEGSYMPRECEDES L"1"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"4"
- LOCALE_IPOSSYMPRECEDES L"1"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"1"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x0b95\x0bbe\x0bb2\x0bc8"
- LOCALE_S2359 L"\x0bae\x0bbe\x0bb2\x0bc8"
- LOCALE_SABBREVCTRYNAME L"IND"
- LOCALE_SABBREVDAYNAME1 L"\x0ba4\x0bbf"
- LOCALE_SABBREVDAYNAME2 L"\x0b9a\x0bc6"
- LOCALE_SABBREVDAYNAME3 L"\x0baa\x0bc1"
- LOCALE_SABBREVDAYNAME4 L"\x0bb5\x0bbf"
- LOCALE_SABBREVDAYNAME5 L"\x0bb5\x0bc6"
- LOCALE_SABBREVDAYNAME6 L"\x0b9a"
- LOCALE_SABBREVDAYNAME7 L"\x0b9e\x0bbe"
- LOCALE_SABBREVLANGNAME L"TAM"
- LOCALE_SABBREVMONTHNAME1 L"\x0b9c\x0ba9."
- LOCALE_SABBREVMONTHNAME2 L"\x0baa\x0bc6\x0baa\x0bcd."
- LOCALE_SABBREVMONTHNAME3 L"\x0bae\x0bbe\x0bb0\x0bcd."
- LOCALE_SABBREVMONTHNAME4 L"\x0b8f\x0baa\x0bcd."
- LOCALE_SABBREVMONTHNAME5 L"\x0bae\x0bc7"
- LOCALE_SABBREVMONTHNAME6 L"\x0b9c\x0bc2\x0ba9\x0bcd"
- LOCALE_SABBREVMONTHNAME7 L"\x0b9c\x0bc2\x0bb2\x0bc8"
- LOCALE_SABBREVMONTHNAME8 L"\x0b86\x0b95."
- LOCALE_SABBREVMONTHNAME9 L"\x0b9a\x0bc6\x0baa\x0bcd."
- LOCALE_SABBREVMONTHNAME10 L"\x0b85\x0b95\x0bcd."
- LOCALE_SABBREVMONTHNAME11 L"\x0ba8\x0bb5."
- LOCALE_SABBREVMONTHNAME12 L"\x0b9f\x0bbf\x0b9a."
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"India"
- LOCALE_SCURRENCY L"\x0bb0\x0bc2"
- LOCALE_SDATE L"-"
- LOCALE_SDAYNAME1 L"\x0ba4\x0bbf\x0b99\x0bcd\x0b95\x0bb3\x0bcd"
- LOCALE_SDAYNAME2 L"\x0b9a\x0bc6\x0bb5\x0bcd\x0bb5\x0bbe\x0baf\x0bcd"
- LOCALE_SDAYNAME3 L"\x0baa\x0bc1\x0ba4\x0ba9\x0bcd"
- LOCALE_SDAYNAME4 L"\x0bb5\x0bbf\x0baf\x0bbe\x0bb4\x0ba9\x0bcd"
- LOCALE_SDAYNAME5 L"\x0bb5\x0bc6\x0bb3\x0bcd\x0bb3\x0bbf"
- LOCALE_SDAYNAME6 L"\x0b9a\x0ba9\x0bbf"
- LOCALE_SDAYNAME7 L"\x0b9e\x0bbe\x0baf\x0bbf\x0bb1\x0bc1"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"India"
- LOCALE_SENGCURRNAME L"Indian Rupee"
- LOCALE_SENGLANGUAGE L"Tamil"
- LOCALE_SGROUPING L"3;2;0"
- LOCALE_SINTLSYMBOL L"INR"
- LOCALE_SISO3166CTRYNAME L"IN"
- LOCALE_SISO639LANGNAME L"ta"
- LOCALE_SLANGUAGE L"Tamil"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"dd MMMM yyyy"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;2;0"
- LOCALE_SMONTHNAME1 L"\x0b9c\x0ba9\x0bb5\x0bb0\x0bbf"
- LOCALE_SMONTHNAME2 L"\x0baa\x0bc6\x0baa\x0bcd\x0bb0\x0bb5\x0bb0\x0bbf"
- LOCALE_SMONTHNAME3 L"\x0bae\x0bbe\x0bb0\x0bcd\x0b9a\x0bcd"
- LOCALE_SMONTHNAME4 L"\x0b8f\x0baa\x0bcd\x0bb0\x0bb2\x0bcd"
- LOCALE_SMONTHNAME5 L"\x0bae\x0bc7"
- LOCALE_SMONTHNAME6 L"\x0b9c\x0bc2\x0ba9\x0bcd"
- LOCALE_SMONTHNAME7 L"\x0b9c\x0bc2\x0bb2\x0bc8"
- LOCALE_SMONTHNAME8 L"\x0b86\x0b95\x0bb8\x0bcd\x0b9f\x0bcd"
- LOCALE_SMONTHNAME9 L"\x0b9a\x0bc6\x0baa\x0bcd\x0b9f\x0bae\x0bcd\x0baa\x0bb0\x0bcd"
- LOCALE_SMONTHNAME10 L"\x0b85\x0b95\x0bcd\x0b9f\x0bcb\x0baa\x0bb0\x0bcd"
- LOCALE_SMONTHNAME11 L"\x0ba8\x0bb5\x0bae\x0bcd\x0baa\x0bb0\x0bcd"
- LOCALE_SMONTHNAME12 L"\x0b9f\x0bbf\x0b9a\x0bae\x0bcd\x0baa\x0bb0\x0bcd"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"ta-IN"
- LOCALE_SNATIVECTRYNAME L"\x0b87\x0ba8\x0bcd\x0ba4\x0bbf\x0baf\x0bbe"
- LOCALE_SNATIVECURRNAME L"\x0bb0\x0bc2\x0baa\x0bbe\x0baf\x0bcd"
- LOCALE_SNATIVEDIGITS L"0123456789"
- LOCALE_SNATIVELANGNAME L"\x0ba4\x0bae\x0bbf\x0bb4\x0bcd"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Taml;"
- LOCALE_SSHORTDATE L"dd-MM-yyyy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"HH:mm:ss"
- LOCALE_SYEARMONTH L"MMMM yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "1"
+ LOCALE_ICOUNTRY "91"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "2"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "91"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "0449"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "0"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "0449"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "12"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "4"
+ LOCALE_INEGSYMPRECEDES "1"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "4"
+ LOCALE_IPOSSYMPRECEDES "1"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "1"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "а®•а®ѕа®ІаЇ€"
+ LOCALE_S2359 "а®®а®ѕа®ІаЇ€"
+ LOCALE_SABBREVCTRYNAME "IND"
+ LOCALE_SABBREVDAYNAME1 "தி"
+ LOCALE_SABBREVDAYNAME2 "а®љаЇ†"
+ LOCALE_SABBREVDAYNAME3 "а®ЄаЇЃ"
+ LOCALE_SABBREVDAYNAME4 "а®µа®ї"
+ LOCALE_SABBREVDAYNAME5 "а®µаЇ†"
+ LOCALE_SABBREVDAYNAME6 "а®љ"
+ LOCALE_SABBREVDAYNAME7 "а®ћа®ѕ"
+ LOCALE_SABBREVLANGNAME "TAM"
+ LOCALE_SABBREVMONTHNAME1 "а®ња®©."
+ LOCALE_SABBREVMONTHNAME2 "а®ЄаЇ†а®ЄаЇЌ."
+ LOCALE_SABBREVMONTHNAME3 "а®®а®ѕа®°аЇЌ."
+ LOCALE_SABBREVMONTHNAME4 "а®Џа®ЄаЇЌ."
+ LOCALE_SABBREVMONTHNAME5 "а®®аЇ‡"
+ LOCALE_SABBREVMONTHNAME6 "а®њаЇ‚а®©аЇЌ"
+ LOCALE_SABBREVMONTHNAME7 "а®њаЇ‚а®ІаЇ€"
+ LOCALE_SABBREVMONTHNAME8 "ஆக."
+ LOCALE_SABBREVMONTHNAME9 "а®љаЇ†а®ЄаЇЌ."
+ LOCALE_SABBREVMONTHNAME10 "а®…а®•аЇЌ."
+ LOCALE_SABBREVMONTHNAME11 "а®Ёа®µ."
+ LOCALE_SABBREVMONTHNAME12 "а®џа®їа®љ."
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "India"
+ LOCALE_SCURRENCY "а®°аЇ‚"
+ LOCALE_SDATE "-"
+ LOCALE_SDAYNAME1 "திங்கள்"
+ LOCALE_SDAYNAME2 "а®љаЇ†а®µаЇЌа®µа®ѕа®ЇаЇЌ"
+ LOCALE_SDAYNAME3 "புதன்"
+ LOCALE_SDAYNAME4 "வியாழன்"
+ LOCALE_SDAYNAME5 "а®µаЇ†а®іаЇЌа®іа®ї"
+ LOCALE_SDAYNAME6 "а®ља®©а®ї"
+ LOCALE_SDAYNAME7 "а®ћа®ѕа®Їа®їа®±аЇЃ"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "India"
+ LOCALE_SENGCURRNAME "Indian Rupee"
+ LOCALE_SENGLANGUAGE "Tamil"
+ LOCALE_SGROUPING "3;2;0"
+ LOCALE_SINTLSYMBOL "INR"
+ LOCALE_SISO3166CTRYNAME "IN"
+ LOCALE_SISO639LANGNAME "ta"
+ LOCALE_SLANGUAGE "Tamil"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "dd MMMM yyyy"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;2;0"
+ LOCALE_SMONTHNAME1 "а®ња®©а®µа®°а®ї"
+ LOCALE_SMONTHNAME2 "а®ЄаЇ†а®ЄаЇЌа®°а®µа®°а®ї"
+ LOCALE_SMONTHNAME3 "а®®а®ѕа®°аЇЌа®љаЇЌ"
+ LOCALE_SMONTHNAME4 "а®Џа®ЄаЇЌа®°а®ІаЇЌ"
+ LOCALE_SMONTHNAME5 "а®®аЇ‡"
+ LOCALE_SMONTHNAME6 "а®њаЇ‚а®©аЇЌ"
+ LOCALE_SMONTHNAME7 "а®њаЇ‚а®ІаЇ€"
+ LOCALE_SMONTHNAME8 "ஆகஸ்ட்"
+ LOCALE_SMONTHNAME9 "а®љаЇ†а®ЄаЇЌа®џа®®аЇЌа®Єа®°аЇЌ"
+ LOCALE_SMONTHNAME10 "а®…а®•аЇЌа®џаЇ‹а®Єа®°аЇЌ"
+ LOCALE_SMONTHNAME11 "а®Ёа®µа®®аЇЌа®Єа®°аЇЌ"
+ LOCALE_SMONTHNAME12 "а®џа®їа®ља®®аЇЌа®Єа®°аЇЌ"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "ta-IN"
+ LOCALE_SNATIVECTRYNAME "இந்தியா"
+ LOCALE_SNATIVECURRNAME "а®°аЇ‚а®Єа®ѕа®ЇаЇЌ"
+ LOCALE_SNATIVEDIGITS "0123456789"
+ LOCALE_SNATIVELANGNAME "தமிழ்"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Taml;"
+ LOCALE_SSHORTDATE "dd-MM-yyyy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "HH:mm:ss"
+ LOCALE_SYEARMONTH "MMMM yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/nls/tel.nls b/reactos/dll/win32/kernel32/nls/tel.nls
index 72a4991ecf2..370a6c96104 100644
--- a/reactos/dll/win32/kernel32/nls/tel.nls
+++ b/reactos/dll/win32/kernel32/nls/tel.nls
@@ -18,139 +18,139 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#pragma code_page(0) /* Unicode only */
+#pragma code_page(65001) /* UTF-8 */
STRINGTABLE LANGUAGE LANG_TELUGU, SUBLANG_DEFAULT
{
LOCALE_FONTSIGNATURE L"\x002f\x8020\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0003\x0000\x0000\xc5d4"
- LOCALE_ICALENDARTYPE L"1"
- LOCALE_ICENTURY L"0"
- LOCALE_ICOUNTRY L"91"
- LOCALE_ICURRDIGITS L"2"
- LOCALE_ICURRENCY L"2"
- LOCALE_IDATE L"1"
- LOCALE_IDAYLZERO L"1"
- LOCALE_IDEFAULTANSICODEPAGE L"0"
- LOCALE_IDEFAULTCODEPAGE L"1"
- LOCALE_IDEFAULTCOUNTRY L"91"
- LOCALE_IDEFAULTEBCDICCODEPAGE L"500"
- LOCALE_IDEFAULTLANGUAGE L"044a"
- LOCALE_IDEFAULTMACCODEPAGE L"2"
- LOCALE_IDEFAULTUNIXCODEPAGE L"65001"
- LOCALE_IDIGITS L"2"
- LOCALE_IDIGITSUBSTITUTION L"1"
- LOCALE_IFIRSTDAYOFWEEK L"0"
- LOCALE_IFIRSTWEEKOFYEAR L"0"
- LOCALE_IINTLCURRDIGITS L"2"
- LOCALE_ILANGUAGE L"044a"
- LOCALE_ILDATE L"1"
- LOCALE_ILZERO L"1"
- LOCALE_IMEASURE L"0"
- LOCALE_IMONLZERO L"1"
- LOCALE_INEGCURR L"12"
- LOCALE_INEGNUMBER L"1"
- LOCALE_INEGSEPBYSPACE L"1"
- LOCALE_INEGSIGNPOSN L"4"
- LOCALE_INEGSYMPRECEDES L"1"
- LOCALE_IOPTIONALCALENDAR L"0"
- LOCALE_IPAPERSIZE L"9"
- LOCALE_IPOSSEPBYSPACE L"1"
- LOCALE_IPOSSIGNPOSN L"4"
- LOCALE_IPOSSYMPRECEDES L"1"
- LOCALE_ITIME L"1"
- LOCALE_ITIMEMARKPOSN L"1"
- LOCALE_ITLZERO L"1"
- LOCALE_S1159 L"\x0c2a\x0c42\x0c30\x0c4d\x0c35\x0c3e\x0c39\x0c4d\x0c28"
- LOCALE_S2359 L"\x0c05\x0c2a\x0c30\x0c3e\x0c39\x0c4d\x0c28"
- LOCALE_SABBREVCTRYNAME L"IND"
- LOCALE_SABBREVDAYNAME1 L"\x0c38\x0c4b\x0c2e."
- LOCALE_SABBREVDAYNAME2 L"\x0c2e\x0c02\x0c17\x0c33."
- LOCALE_SABBREVDAYNAME3 L"\x0c2c\x0c41\x0c27."
- LOCALE_SABBREVDAYNAME4 L"\x0c17\x0c41\x0c30\x0c41."
- LOCALE_SABBREVDAYNAME5 L"\x0c36\x0c41\x0c15\x0c4d\x0c30."
- LOCALE_SABBREVDAYNAME6 L"\x0c36\x0c28\x0c3f."
- LOCALE_SABBREVDAYNAME7 L"\x0c06\x0c26\x0c3f."
- LOCALE_SABBREVLANGNAME L"TEL"
- LOCALE_SABBREVMONTHNAME1 L"\x0c1c\x0c28\x0c35\x0c30\x0c3f"
- LOCALE_SABBREVMONTHNAME2 L"\x0c2b\x0c3f\x0c2c\x0c4d\x0c30\x0c35\x0c30\x0c3f"
- LOCALE_SABBREVMONTHNAME3 L"\x0c2e\x0c3e\x0c30\x0c4d\x0c1a\x0c3f"
- LOCALE_SABBREVMONTHNAME4 L"\x0c0f\x0c2a\x0c4d\x0c30\x0c3f\x0c32\x0c4d"
- LOCALE_SABBREVMONTHNAME5 L"\x0c2e\x0c47"
- LOCALE_SABBREVMONTHNAME6 L"\x0c1c\x0c42\x0c28\x0c4d"
- LOCALE_SABBREVMONTHNAME7 L"\x0c1c\x0c42\x0c32\x0c48"
- LOCALE_SABBREVMONTHNAME8 L"\x0c06\x0c17\x0c38\x0c4d\x0c1f\x0c41"
- LOCALE_SABBREVMONTHNAME9 L"\x0c38\x0c46\x0c2a\x0c4d\x0c1f\x0c46\x0c02\x0c2c\x0c30\x0c4d"
- LOCALE_SABBREVMONTHNAME10 L"\x0c05\x0c15\x0c4d\x0c1f\x0c4b\x0c2c\x0c30\x0c4d"
- LOCALE_SABBREVMONTHNAME11 L"\x0c28\x0c35\x0c02\x0c2c\x0c30\x0c4d"
- LOCALE_SABBREVMONTHNAME12 L"\x0c21\x0c3f\x0c38\x0c46\x0c02\x0c2c\x0c30\x0c4d"
- LOCALE_SABBREVMONTHNAME13 L""
- LOCALE_SCOUNTRY L"India"
- LOCALE_SCURRENCY L"\x0c30\x0c42"
- LOCALE_SDATE L"-"
- LOCALE_SDAYNAME1 L"\x0c38\x0c4b\x0c2e\x0c35\x0c3e\x0c30\x0c02"
- LOCALE_SDAYNAME2 L"\x0c2e\x0c02\x0c17\x0c33\x0c35\x0c3e\x0c30\x0c02"
- LOCALE_SDAYNAME3 L"\x0c2c\x0c41\x0c27\x0c35\x0c3e\x0c30\x0c02"
- LOCALE_SDAYNAME4 L"\x0c17\x0c41\x0c30\x0c41\x0c35\x0c3e\x0c30\x0c02"
- LOCALE_SDAYNAME5 L"\x0c36\x0c41\x0c15\x0c4d\x0c30\x0c35\x0c3e\x0c30\x0c02"
- LOCALE_SDAYNAME6 L"\x0c36\x0c28\x0c3f\x0c35\x0c3e\x0c30\x0c02"
- LOCALE_SDAYNAME7 L"\x0c06\x0c26\x0c3f\x0c35\x0c3e\x0c30\x0c02"
- LOCALE_SDECIMAL L"."
- LOCALE_SENGCOUNTRY L"India"
- LOCALE_SENGCURRNAME L"Indian Rupee"
- LOCALE_SENGLANGUAGE L"Telugu"
- LOCALE_SGROUPING L"3;2;0"
- LOCALE_SINTLSYMBOL L"INR"
- LOCALE_SISO3166CTRYNAME L"IN"
- LOCALE_SISO639LANGNAME L"te"
- LOCALE_SLANGUAGE L"Telugu"
- LOCALE_SLIST L","
- LOCALE_SLONGDATE L"dd MMMM yyyy"
- LOCALE_SMONDECIMALSEP L"."
- LOCALE_SMONGROUPING L"3;2;0"
- LOCALE_SMONTHNAME1 L"\x0c1c\x0c28\x0c35\x0c30\x0c3f"
- LOCALE_SMONTHNAME2 L"\x0c2b\x0c3f\x0c2c\x0c4d\x0c30\x0c35\x0c30\x0c3f"
- LOCALE_SMONTHNAME3 L"\x0c2e\x0c3e\x0c30\x0c4d\x0c1a\x0c3f"
- LOCALE_SMONTHNAME4 L"\x0c0f\x0c2a\x0c4d\x0c30\x0c3f\x0c32\x0c4d"
- LOCALE_SMONTHNAME5 L"\x0c2e\x0c47"
- LOCALE_SMONTHNAME6 L"\x0c1c\x0c42\x0c28\x0c4d"
- LOCALE_SMONTHNAME7 L"\x0c1c\x0c42\x0c32\x0c48"
- LOCALE_SMONTHNAME8 L"\x0c06\x0c17\x0c38\x0c4d\x0c1f\x0c41"
- LOCALE_SMONTHNAME9 L"\x0c38\x0c46\x0c2a\x0c4d\x0c1f\x0c46\x0c02\x0c2c\x0c30\x0c4d"
- LOCALE_SMONTHNAME10 L"\x0c05\x0c15\x0c4d\x0c1f\x0c4b\x0c2c\x0c30\x0c4d"
- LOCALE_SMONTHNAME11 L"\x0c28\x0c35\x0c02\x0c2c\x0c30\x0c4d"
- LOCALE_SMONTHNAME12 L"\x0c21\x0c3f\x0c38\x0c46\x0c02\x0c2c\x0c30\x0c4d"
- LOCALE_SMONTHNAME13 L""
- LOCALE_SMONTHOUSANDSEP L","
- LOCALE_SNAME L"te-IN"
- LOCALE_SNATIVECTRYNAME L"\x0c2d\x0c3e\x0c30\x0c24\x00a0\x0c26\x0c47\x0c36\x0c02"
- LOCALE_SNATIVECURRNAME L"\x0c30\x0c42\x0c2a\x0c3e\x0c2f\x0c3f"
- LOCALE_SNATIVEDIGITS L"\x0c66\x0c67\x0c68\x0c69\x0c6a\x0c6b\x0c6c\x0c6d\x0c6e\x0c6f"
- LOCALE_SNATIVELANGNAME L"\x0c24\x0c46\x0c32\x0c41\x0c17\x0c41"
- LOCALE_SNEGATIVESIGN L"-"
- LOCALE_SPOSITIVESIGN L""
- LOCALE_SSCRIPTS L"Telu;"
- LOCALE_SSHORTDATE L"dd-MM-yy"
- LOCALE_SSORTNAME L"Default"
- LOCALE_STHOUSAND L","
- LOCALE_STIME L":"
- LOCALE_STIMEFORMAT L"HH:mm:ss"
- LOCALE_SYEARMONTH L"MMMM, yyyy"
+ LOCALE_ICALENDARTYPE "1"
+ LOCALE_ICENTURY "0"
+ LOCALE_ICOUNTRY "91"
+ LOCALE_ICURRDIGITS "2"
+ LOCALE_ICURRENCY "2"
+ LOCALE_IDATE "1"
+ LOCALE_IDAYLZERO "1"
+ LOCALE_IDEFAULTANSICODEPAGE "0"
+ LOCALE_IDEFAULTCODEPAGE "1"
+ LOCALE_IDEFAULTCOUNTRY "91"
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
+ LOCALE_IDEFAULTLANGUAGE "044a"
+ LOCALE_IDEFAULTMACCODEPAGE "2"
+ LOCALE_IDEFAULTUNIXCODEPAGE "65001"
+ LOCALE_IDIGITS "2"
+ LOCALE_IDIGITSUBSTITUTION "1"
+ LOCALE_IFIRSTDAYOFWEEK "0"
+ LOCALE_IFIRSTWEEKOFYEAR "0"
+ LOCALE_IINTLCURRDIGITS "2"
+ LOCALE_ILANGUAGE "044a"
+ LOCALE_ILDATE "1"
+ LOCALE_ILZERO "1"
+ LOCALE_IMEASURE "0"
+ LOCALE_IMONLZERO "1"
+ LOCALE_INEGCURR "12"
+ LOCALE_INEGNUMBER "1"
+ LOCALE_INEGSEPBYSPACE "1"
+ LOCALE_INEGSIGNPOSN "4"
+ LOCALE_INEGSYMPRECEDES "1"
+ LOCALE_IOPTIONALCALENDAR "0"
+ LOCALE_IPAPERSIZE "9"
+ LOCALE_IPOSSEPBYSPACE "1"
+ LOCALE_IPOSSIGNPOSN "4"
+ LOCALE_IPOSSYMPRECEDES "1"
+ LOCALE_ITIME "1"
+ LOCALE_ITIMEMARKPOSN "1"
+ LOCALE_ITLZERO "1"
+ LOCALE_S1159 "పూర్వాహ్న"
+ LOCALE_S2359 "а°…а°Єа°°а°ѕа°№а±Ќа°Ё"
+ LOCALE_SABBREVCTRYNAME "IND"
+ LOCALE_SABBREVDAYNAME1 "సోమ."
+ LOCALE_SABBREVDAYNAME2 "а°®а°‚а°—а°і."
+ LOCALE_SABBREVDAYNAME3 "а°¬а±Ѓа°§."
+ LOCALE_SABBREVDAYNAME4 "а°—а±Ѓа°°а±Ѓ."
+ LOCALE_SABBREVDAYNAME5 "а°¶а±Ѓа°•а±Ќа°°."
+ LOCALE_SABBREVDAYNAME6 "а°¶а°Ёа°ї."
+ LOCALE_SABBREVDAYNAME7 "а°†а°¦а°ї."
+ LOCALE_SABBREVLANGNAME "TE"
+ LOCALE_SABBREVMONTHNAME1 "а°ња°Ёа°µа°°а°ї"
+ LOCALE_SABBREVMONTHNAME2 "а°«а°їа°¬а±Ќа°°а°µа°°а°ї"
+ LOCALE_SABBREVMONTHNAME3 "а°®а°ѕа°°а±Ќа°ља°ї"
+ LOCALE_SABBREVMONTHNAME4 "а°Џа°Єа±Ќа°°а°їа°Іа±Ќ"
+ LOCALE_SABBREVMONTHNAME5 "మే"
+ LOCALE_SABBREVMONTHNAME6 "జూన్"
+ LOCALE_SABBREVMONTHNAME7 "జూలై"
+ LOCALE_SABBREVMONTHNAME8 "а°†а°—а°ёа±Ќа°џа±Ѓ"
+ LOCALE_SABBREVMONTHNAME9 "సెప్టెంబర్"
+ LOCALE_SABBREVMONTHNAME10 "అక్టోబర్"
+ LOCALE_SABBREVMONTHNAME11 "а°Ёа°µа°‚а°¬а°°а±Ќ"
+ LOCALE_SABBREVMONTHNAME12 "డిసెంబర్"
+ LOCALE_SABBREVMONTHNAME13 ""
+ LOCALE_SCOUNTRY "India"
+ LOCALE_SCURRENCY "రూ"
+ LOCALE_SDATE "-"
+ LOCALE_SDAYNAME1 "సోమవారం"
+ LOCALE_SDAYNAME2 "а°®а°‚а°—а°іа°µа°ѕа°°а°‚"
+ LOCALE_SDAYNAME3 "а°¬а±Ѓа°§а°µа°ѕа°°а°‚"
+ LOCALE_SDAYNAME4 "а°—а±Ѓа°°а±Ѓа°µа°ѕа°°а°‚"
+ LOCALE_SDAYNAME5 "а°¶а±Ѓа°•а±Ќа°°а°µа°ѕа°°а°‚"
+ LOCALE_SDAYNAME6 "а°¶а°Ёа°їа°µа°ѕа°°а°‚"
+ LOCALE_SDAYNAME7 "а°†а°¦а°їа°µа°ѕа°°а°‚"
+ LOCALE_SDECIMAL "."
+ LOCALE_SENGCOUNTRY "India"
+ LOCALE_SENGCURRNAME "Indian Rupee"
+ LOCALE_SENGLANGUAGE "Telugu"
+ LOCALE_SGROUPING "3;2;0"
+ LOCALE_SINTLSYMBOL "INR"
+ LOCALE_SISO3166CTRYNAME "IN"
+ LOCALE_SISO639LANGNAME "te"
+ LOCALE_SLANGUAGE "Telugu"
+ LOCALE_SLIST ","
+ LOCALE_SLONGDATE "dd MMMM yyyy"
+ LOCALE_SMONDECIMALSEP "."
+ LOCALE_SMONGROUPING "3;2;0"
+ LOCALE_SMONTHNAME1 "а°ња°Ёа°µа°°а°ї"
+ LOCALE_SMONTHNAME2 "а°«а°їа°¬а±Ќа°°а°µа°°а°ї"
+ LOCALE_SMONTHNAME3 "а°®а°ѕа°°а±Ќа°ља°ї"
+ LOCALE_SMONTHNAME4 "а°Џа°Єа±Ќа°°а°їа°Іа±Ќ"
+ LOCALE_SMONTHNAME5 "మే"
+ LOCALE_SMONTHNAME6 "జూన్"
+ LOCALE_SMONTHNAME7 "జూలై"
+ LOCALE_SMONTHNAME8 "а°†а°—а°ёа±Ќа°џа±Ѓ"
+ LOCALE_SMONTHNAME9 "సెప్టెంబర్"
+ LOCALE_SMONTHNAME10 "అక్టోబర్"
+ LOCALE_SMONTHNAME11 "а°Ёа°µа°‚а°¬а°°а±Ќ"
+ LOCALE_SMONTHNAME12 "డిసెంబర్"
+ LOCALE_SMONTHNAME13 ""
+ LOCALE_SMONTHOUSANDSEP ","
+ LOCALE_SNAME "te-IN"
+ LOCALE_SNATIVECTRYNAME "а°а°ѕа°°а°¤В దేశం"
+ LOCALE_SNATIVECURRNAME "రూపాయి"
+ LOCALE_SNATIVEDIGITS "౦౧౨౩౪౫౬а±а±®а±Ї"
+ LOCALE_SNATIVELANGNAME "తెలుగు"
+ LOCALE_SNEGATIVESIGN "-"
+ LOCALE_SPOSITIVESIGN ""
+ LOCALE_SSCRIPTS "Telu;"
+ LOCALE_SSHORTDATE "dd-MM-yy"
+ LOCALE_SSORTNAME "Default"
+ LOCALE_STHOUSAND ","
+ LOCALE_STIME ":"
+ LOCALE_STIMEFORMAT "HH:mm:ss"
+ LOCALE_SYEARMONTH "MMMM, yyyy"
- LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE L"Western Europe and United States"
- LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE L"Central Europe"
- LGRPID_BALTIC+LGRPID_RES_BASE L"Baltic"
- LGRPID_GREEK+LGRPID_RES_BASE L"Greek"
- LGRPID_CYRILLIC+LGRPID_RES_BASE L"Cyrillic"
- LGRPID_TURKISH+LGRPID_RES_BASE L"Turkic"
- LGRPID_JAPANESE+LGRPID_RES_BASE L"Japanese"
- LGRPID_KOREAN+LGRPID_RES_BASE L"Korean"
- LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE L"Traditional Chinese"
- LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE L"Simplified Chinese"
- LGRPID_THAI+LGRPID_RES_BASE L"Thai"
- LGRPID_HEBREW+LGRPID_RES_BASE L"Hebrew"
- LGRPID_ARABIC+LGRPID_RES_BASE L"Arabic"
- LGRPID_VIETNAMESE+LGRPID_RES_BASE L"Vietnamese"
- LGRPID_INDIC+LGRPID_RES_BASE L"Indic"
- LGRPID_GEORGIAN+LGRPID_RES_BASE L"Georgian"
- LGRPID_ARMENIAN+LGRPID_RES_BASE L"Armenian"
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
diff --git a/reactos/dll/win32/kernel32/process/proc.c b/reactos/dll/win32/kernel32/process/proc.c
index f86cf80f537..6b16595f59c 100644
--- a/reactos/dll/win32/kernel32/process/proc.c
+++ b/reactos/dll/win32/kernel32/process/proc.c
@@ -17,6 +17,8 @@
#include
+typedef INT (WINAPI *MessageBoxW_Proc) (HWND, LPCWSTR, LPCWSTR, UINT);
+
/* GLOBALS *******************************************************************/
WaitForInputIdleType lpfnGlobalRegisterWaitForInputIdle;
@@ -617,8 +619,8 @@ TerminateProcess (HANDLE hProcess,
* @unimplemented
*/
VOID STDCALL
-FatalAppExitA (UINT uAction,
- LPCSTR lpMessageText)
+FatalAppExitA(UINT uAction,
+ LPCSTR lpMessageText)
{
UNICODE_STRING MessageTextU;
ANSI_STRING MessageText;
@@ -640,9 +642,24 @@ FatalAppExitA (UINT uAction,
*/
VOID STDCALL
FatalAppExitW(UINT uAction,
- LPCWSTR lpMessageText)
+ LPCWSTR lpMessageText)
{
- return;
+ static const WCHAR szUser32[] = L"user32.dll\0";
+
+ HMODULE hModule = GetModuleHandleW(szUser32);
+ MessageBoxW_Proc pMessageBoxW = NULL;
+
+ DPRINT1("AppExit\n");
+
+ if (hModule)
+ pMessageBoxW = (MessageBoxW_Proc) GetProcAddress(hModule, "MessageBoxW");
+
+ if (pMessageBoxW)
+ pMessageBoxW(0, lpMessageText, NULL, MB_SYSTEMMODAL | MB_OK);
+ else
+ DPRINT1("%s\n", lpMessageText);
+
+ ExitProcess(0);
}
@@ -895,4 +912,34 @@ GetProcessHandleCount(HANDLE hProcess,
return FALSE;
}
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+IsWow64Process(
+ HANDLE hProcess,
+ PBOOL Wow64Process
+ )
+{
+ ULONG pbi;
+ NTSTATUS Status;
+
+ Status = NtQueryInformationProcess(hProcess,
+ ProcessWow64Information,
+ &pbi,
+ sizeof(pbi),
+ NULL);
+
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError(RtlNtStatusToDosError(Status));
+ return FALSE;
+ }
+
+ *Wow64Process = (pbi != 0);
+ return TRUE;
+}
+
/* EOF */
diff --git a/reactos/dll/win32/lpk/lpk.rbuild b/reactos/dll/win32/lpk/lpk.rbuild
index 596ef1414a3..44d703b1040 100644
--- a/reactos/dll/win32/lpk/lpk.rbuild
+++ b/reactos/dll/win32/lpk/lpk.rbuild
@@ -12,5 +12,4 @@
stub.c
lpk.rc
- lpk.spec
diff --git a/reactos/dll/win32/lsasrv/lsasrv.c b/reactos/dll/win32/lsasrv/lsasrv.c
index 758cc05e2eb..ba058895d43 100644
--- a/reactos/dll/win32/lsasrv/lsasrv.c
+++ b/reactos/dll/win32/lsasrv/lsasrv.c
@@ -42,9 +42,4 @@ void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
RtlFreeHeap(RtlGetProcessHeap(), 0, ptr);
}
-void __RPC_USER LSAPR_HANDLE_rundown(LSAPR_HANDLE hObject)
-{
-}
-
-
/* EOF */
diff --git a/reactos/dll/win32/lsasrv/lsasrv.rbuild b/reactos/dll/win32/lsasrv/lsasrv.rbuild
index 94e3d0b7f98..16a6d3d969f 100644
--- a/reactos/dll/win32/lsasrv/lsasrv.rbuild
+++ b/reactos/dll/win32/lsasrv/lsasrv.rbuild
@@ -11,5 +11,4 @@
lsarpc.c
lsasrv.c
lsasrv.rc
- lsasrv.spec
\ No newline at end of file
diff --git a/reactos/dll/win32/lz32/lz32.rbuild b/reactos/dll/win32/lz32/lz32.rbuild
index e07f179026c..5417ca96e0f 100644
--- a/reactos/dll/win32/lz32/lz32.rbuild
+++ b/reactos/dll/win32/lz32/lz32.rbuild
@@ -9,5 +9,4 @@
kernel32
ntdll
version.rc
- lz32.spec
diff --git a/reactos/dll/win32/mapi32/mapi32.rbuild b/reactos/dll/win32/mapi32/mapi32.rbuild
index 503114e4182..39e527d1a8c 100644
--- a/reactos/dll/win32/mapi32/mapi32.rbuild
+++ b/reactos/dll/win32/mapi32/mapi32.rbuild
@@ -11,7 +11,6 @@
prop.c
sendmail.c
util.c
- mapi32.spec
wine
shlwapi
shell32
diff --git a/reactos/dll/win32/mlang/mlang.rbuild b/reactos/dll/win32/mlang/mlang.rbuild
index 357b7b840b9..b53438c5ab9 100644
--- a/reactos/dll/win32/mlang/mlang.rbuild
+++ b/reactos/dll/win32/mlang/mlang.rbuild
@@ -10,7 +10,6 @@
0x600
mlang.c
regsvr.c
- mlang.spec
wine
ole32
user32
diff --git a/reactos/dll/win32/mmdrv/mmdrv.rbuild b/reactos/dll/win32/mmdrv/mmdrv.rbuild
index 44430714713..b7779f386f4 100644
--- a/reactos/dll/win32/mmdrv/mmdrv.rbuild
+++ b/reactos/dll/win32/mmdrv/mmdrv.rbuild
@@ -13,5 +13,4 @@
common.c
wave.c
wave_io.c
- mmdrv.spec
diff --git a/reactos/dll/win32/modemui/modemui.rbuild b/reactos/dll/win32/modemui/modemui.rbuild
index 1f9a1decbe4..f3500094f82 100644
--- a/reactos/dll/win32/modemui/modemui.rbuild
+++ b/reactos/dll/win32/modemui/modemui.rbuild
@@ -10,5 +10,4 @@
netapi32
modemui.c
modemui.rc
- modemui.spec
diff --git a/reactos/dll/win32/mpr/mpr.rbuild b/reactos/dll/win32/mpr/mpr.rbuild
index d73fa25e234..4f7b67ac1d1 100644
--- a/reactos/dll/win32/mpr/mpr.rbuild
+++ b/reactos/dll/win32/mpr/mpr.rbuild
@@ -13,7 +13,6 @@
pwcache.c
wnet.c
mpr.rc
- mpr.spec
wine
user32
advapi32
diff --git a/reactos/dll/win32/mprapi/mprapi.rbuild b/reactos/dll/win32/mprapi/mprapi.rbuild
index 6507d49d1a2..c6a9bfbc783 100644
--- a/reactos/dll/win32/mprapi/mprapi.rbuild
+++ b/reactos/dll/win32/mprapi/mprapi.rbuild
@@ -6,5 +6,4 @@
wine
kernel32
mprapi.c
- mprapi.spec
diff --git a/reactos/dll/win32/msacm32/msacm32.rbuild b/reactos/dll/win32/msacm32/msacm32.rbuild
index ccd2b01752e..dd2f8c3c4de 100644
--- a/reactos/dll/win32/msacm32/msacm32.rbuild
+++ b/reactos/dll/win32/msacm32/msacm32.rbuild
@@ -15,5 +15,4 @@
msacm32_main.c
pcmconverter.c
stream.c
- msacm32.spec
diff --git a/reactos/dll/win32/msafd/misc/dllmain.c b/reactos/dll/win32/msafd/misc/dllmain.c
index 48d6e314085..f8501528d67 100644
--- a/reactos/dll/win32/msafd/misc/dllmain.c
+++ b/reactos/dll/win32/msafd/misc/dllmain.c
@@ -666,7 +666,7 @@ WSPSelect(
if (readfds != NULL) {
for (i = 0; i < readfds->fd_count; i++, j++) {
- PollInfo->Handles[j].Handle = readfds->fd_array[i];
+ PollInfo->Handles[j].Handle = LongToHandle(readfds->fd_array[i]);
PollInfo->Handles[j].Events = AFD_EVENT_RECEIVE |
AFD_EVENT_DISCONNECT |
AFD_EVENT_ABORT |
@@ -675,14 +675,14 @@ WSPSelect(
}
if (writefds != NULL) {
for (i = 0; i < writefds->fd_count; i++, j++) {
- PollInfo->Handles[j].Handle = writefds->fd_array[i];
+ PollInfo->Handles[j].Handle = LongToHandle(writefds->fd_array[i]);
PollInfo->Handles[j].Events = AFD_EVENT_SEND |
AFD_EVENT_CONNECT;
}
}
if (exceptfds != NULL) {
for (i = 0; i < exceptfds->fd_count; i++, j++) {
- PollInfo->Handles[j].Handle = exceptfds->fd_array[i];
+ PollInfo->Handles[j].Handle = LongToHandle(exceptfds->fd_array[i]);
PollInfo->Handles[j].Events = AFD_EVENT_OOB_RECEIVE |
AFD_EVENT_CONNECT_FAIL;
}
@@ -786,9 +786,9 @@ WSPAPI
WSPAccept(
SOCKET Handle,
struct sockaddr *SocketAddress,
- int *SocketAddressLength,
+ LPINT SocketAddressLength,
LPCONDITIONPROC lpfnCondition,
- DWORD_PTR dwCallbackData,
+ DWORD dwCallbackData,
LPINT lpErrno)
{
IO_STATUS_BLOCK IOSB;
diff --git a/reactos/dll/win32/msafd/msafd.rbuild b/reactos/dll/win32/msafd/msafd.rbuild
index 6e8b186d8b5..0f1fce57183 100644
--- a/reactos/dll/win32/msafd/msafd.rbuild
+++ b/reactos/dll/win32/msafd/msafd.rbuild
@@ -1,4 +1,4 @@
-
+
.
include
diff --git a/reactos/dll/win32/mscoree/mscoree.rbuild b/reactos/dll/win32/mscoree/mscoree.rbuild
index 76726a3e57f..f10592da560 100644
--- a/reactos/dll/win32/mscoree/mscoree.rbuild
+++ b/reactos/dll/win32/mscoree/mscoree.rbuild
@@ -7,5 +7,4 @@
uuid
corruntimehost.c
mscoree_main.c
- mscoree.spec
diff --git a/reactos/dll/win32/msgina/msgina.rbuild b/reactos/dll/win32/msgina/msgina.rbuild
index 951dc1c97e2..bb8049dde5f 100644
--- a/reactos/dll/win32/msgina/msgina.rbuild
+++ b/reactos/dll/win32/msgina/msgina.rbuild
@@ -14,5 +14,4 @@
stubs.c
tui.c
msgina.rc
- msgina.spec
diff --git a/reactos/dll/win32/mshtml.tlb/mshtml.tlb.rbuild b/reactos/dll/win32/mshtml.tlb/mshtml.tlb.rbuild
index 9964034d696..e026dcd46c0 100644
--- a/reactos/dll/win32/mshtml.tlb/mshtml.tlb.rbuild
+++ b/reactos/dll/win32/mshtml.tlb/mshtml.tlb.rbuild
@@ -9,7 +9,6 @@
mshtml_tlb
kernel32
- mshtml.tlb.spec
rsrc.rc
\ No newline at end of file
diff --git a/reactos/dll/win32/mshtml/mshtml.rbuild b/reactos/dll/win32/mshtml/mshtml.rbuild
index a50fba317ce..0853b793656 100644
--- a/reactos/dll/win32/mshtml/mshtml.rbuild
+++ b/reactos/dll/win32/mshtml/mshtml.rbuild
@@ -57,7 +57,6 @@
view.c
rsrc.rc
.
- mshtml.spec
wine
strmiids
uuid
diff --git a/reactos/dll/win32/msi/msi.rbuild b/reactos/dll/win32/msi/msi.rbuild
index 52b94462da2..08880b7adc6 100644
--- a/reactos/dll/win32/msi/msi.rbuild
+++ b/reactos/dll/win32/msi/msi.rbuild
@@ -52,7 +52,6 @@
where.c
msi.rc
.
- msi.spec
wine
uuid
urlmon
diff --git a/reactos/dll/win32/msimg32/msimg32.rbuild b/reactos/dll/win32/msimg32/msimg32.rbuild
index ef9162b3ffa..116eb5673be 100644
--- a/reactos/dll/win32/msimg32/msimg32.rbuild
+++ b/reactos/dll/win32/msimg32/msimg32.rbuild
@@ -10,5 +10,4 @@
kernel32
ntdll
msimg32_main.c
- msimg32.spec
diff --git a/reactos/dll/win32/mstask/mstask.rbuild b/reactos/dll/win32/mstask/mstask.rbuild
index 02843751570..e2ed3c4a5cd 100644
--- a/reactos/dll/win32/mstask/mstask.rbuild
+++ b/reactos/dll/win32/mstask/mstask.rbuild
@@ -16,7 +16,6 @@
task_trigger.c
mstask_local.idl
rsrc.rc
- mstask.spec
wine
uuid
ole32
diff --git a/reactos/dll/win32/msvcrt/msvcrt-i386.def b/reactos/dll/win32/msvcrt/msvcrt-i386.def
index 6c45a0fed01..73c775482b5 100644
--- a/reactos/dll/win32/msvcrt/msvcrt-i386.def
+++ b/reactos/dll/win32/msvcrt/msvcrt-i386.def
@@ -846,3 +846,5 @@ EXPORTS
wctomb @840
wprintf @841
wscanf @842
+
+ _swprintf=swprintf
diff --git a/reactos/dll/win32/msvcrt/msvcrt.rbuild b/reactos/dll/win32/msvcrt/msvcrt.rbuild
index bc22908ec08..cb249245acf 100644
--- a/reactos/dll/win32/msvcrt/msvcrt.rbuild
+++ b/reactos/dll/win32/msvcrt/msvcrt.rbuild
@@ -1,4 +1,4 @@
-
+
.
include
diff --git a/reactos/dll/win32/msvcrt20/msvcrt20.rbuild b/reactos/dll/win32/msvcrt20/msvcrt20.rbuild
index e6990b60397..fdf7e88f30e 100644
--- a/reactos/dll/win32/msvcrt20/msvcrt20.rbuild
+++ b/reactos/dll/win32/msvcrt20/msvcrt20.rbuild
@@ -1,14 +1,14 @@
-
+
.
include/reactos/wine
msvcrt20.c
- msvcrt20.spec
wine
+ msvcrt
kernel32
ntdll
diff --git a/reactos/dll/win32/msvcrt20/msvcrt20.spec b/reactos/dll/win32/msvcrt20/msvcrt20.spec
index 339cb1c063f..b107ea7272d 100644
--- a/reactos/dll/win32/msvcrt20/msvcrt20.spec
+++ b/reactos/dll/win32/msvcrt20/msvcrt20.spec
@@ -464,7 +464,7 @@
@ cdecl __dllonexit(ptr ptr ptr) msvcrt.__dllonexit
@ cdecl __doserrno() msvcrt.__doserrno
@ cdecl __fpecode() msvcrt.__fpecode
-@ cdecl __getmainargs(ptr ptr ptr long long) MSVCRT20__getmainargs
+@ cdecl __getmainargs(ptr ptr ptr ptr ptr) MSVCRT20__getmainargs
@ extern __initenv msvcrt.__initenv
@ cdecl __isascii(long) msvcrt.__isascii
@ cdecl __iscsym(long) msvcrt.__iscsym
diff --git a/reactos/dll/win32/msvcrt40/msvcrt40.rbuild b/reactos/dll/win32/msvcrt40/msvcrt40.rbuild
index e3516be4215..4e7ab666f4f 100644
--- a/reactos/dll/win32/msvcrt40/msvcrt40.rbuild
+++ b/reactos/dll/win32/msvcrt40/msvcrt40.rbuild
@@ -1,13 +1,12 @@
-
+
.
include/reactos/wine
msvcrt40.c
- msvcrt40.spec
wine
kernel32
diff --git a/reactos/dll/win32/msvfw32/msvfw32.rbuild b/reactos/dll/win32/msvfw32/msvfw32.rbuild
index db7b8feba25..37ffd8aa7e3 100644
--- a/reactos/dll/win32/msvfw32/msvfw32.rbuild
+++ b/reactos/dll/win32/msvfw32/msvfw32.rbuild
@@ -10,7 +10,6 @@
msvideo_main.c
drawdib.c
rsrc.rc
- msvfw32.spec
wine
winmm
version
diff --git a/reactos/dll/win32/msxml3/msxml3.rbuild b/reactos/dll/win32/msxml3/msxml3.rbuild
index 1496ec2aa71..da71855fecb 100644
--- a/reactos/dll/win32/msxml3/msxml3.rbuild
+++ b/reactos/dll/win32/msxml3/msxml3.rbuild
@@ -53,7 +53,6 @@
domimpl.c
entityref.c
version.rc
- msxml3.spec
stdole2
diff --git a/reactos/dll/win32/nddeapi/nddeapi.rbuild b/reactos/dll/win32/nddeapi/nddeapi.rbuild
index e2ce0e47cc3..a675b40fc8c 100644
--- a/reactos/dll/win32/nddeapi/nddeapi.rbuild
+++ b/reactos/dll/win32/nddeapi/nddeapi.rbuild
@@ -7,5 +7,4 @@
kernel32
ntdll
nddeapi.c
- nddeapi.spec
diff --git a/reactos/dll/win32/netapi32/netapi32.rbuild b/reactos/dll/win32/netapi32/netapi32.rbuild
index c9ed4eaff81..256dcc4a30d 100644
--- a/reactos/dll/win32/netapi32/netapi32.rbuild
+++ b/reactos/dll/win32/netapi32/netapi32.rbuild
@@ -18,7 +18,6 @@
netbios.c
share.c
wksta.c
- netapi32.spec
wine
iphlpapi
ws2_32
diff --git a/reactos/dll/win32/netcfgx/inetcfgcomp_iface.c b/reactos/dll/win32/netcfgx/inetcfgcomp_iface.c
index f44b7ff3eb6..f166fb8a51c 100644
--- a/reactos/dll/win32/netcfgx/inetcfgcomp_iface.c
+++ b/reactos/dll/win32/netcfgx/inetcfgcomp_iface.c
@@ -442,10 +442,11 @@ INetCfgComponent_fnRaisePropertyUi(
hr = CreateNotificationObject(This,iface, pUnk);
if (FAILED(hr))
return hr;
- if (dwFlags == NCRP_QUERY_PROPERTY_UI)
- return S_OK;
}
+ if (dwFlags == NCRP_QUERY_PROPERTY_UI)
+ return S_OK;
+
dwDefPages = 0;
Pages = 0;
diff --git a/reactos/dll/win32/netcfgx/lang/ru-RU.rc b/reactos/dll/win32/netcfgx/lang/ru-RU.rc
index 54e3223938c..fb2eba038f3 100644
--- a/reactos/dll/win32/netcfgx/lang/ru-RU.rc
+++ b/reactos/dll/win32/netcfgx/lang/ru-RU.rc
@@ -8,7 +8,7 @@ BEGIN
LTEXT "Параметры протокола IP могут назначаться автоматически, если сеть поддерживает такую возможность. В противном случае эти параметры можно получить у сетевого администратора.", -1, 9, 9, 228, 27
CONTROL "Получать IP-адрес автоматически", IDC_USEDHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 43, 210, 12
GROUPBOX "", -1, 9, 61, 228, 70, BS_GROUPBOX
- CONTROL "&Использовать указанный IP-адрес:", IDC_NODHCP, "BUTTON", BS_AUTORADIOBUTTON, 14, 59, 105, 12
+ CONTROL "&Использовать указанный IP-адрес:", IDC_NODHCP, "BUTTON", BS_AUTORADIOBUTTON, 14, 59, 140, 12
LTEXT "IP-адрес:", -1, 14, 75, 135, 8
CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP,150,75-2,80,12
LTEXT "Маска подсети:", -1, 14, 90, 135, 8
@@ -17,32 +17,32 @@ BEGIN
CONTROL "",IDC_DEFGATEWAY,"SysIPAddress32",WS_TABSTOP,150,105-2,80,12
CONTROL "Получать адрес DNS-сервера автоматически", IDC_AUTODNS, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 139, 210, 12
GROUPBOX "", -1, 9, 157, 228, 47, BS_GROUPBOX
- CONTROL "&Использовать следующие адреса DNS-серверов", IDC_FIXEDDNS, "BUTTON", BS_AUTORADIOBUTTON, 14, 155, 142, 12
+ CONTROL "&Использовать следующие адреса DNS-серверов", IDC_FIXEDDNS, "BUTTON", BS_AUTORADIOBUTTON, 14, 155, 185, 12
LTEXT "Предпочитаемый DNS-сервер:", -1, 14, 171, 135, 8
CONTROL "",IDC_DNS1,"SysIPAddress32",WS_TABSTOP,150,171-2,80,12
LTEXT "Альтернативный DNS-сервер:", -1, 14, 186, 135, 8
CONTROL "",IDC_DNS2,"SysIPAddress32",WS_TABSTOP,150,186-2,80,12
- PUSHBUTTON "&Дополнительно", IDC_ADVANCED, 186, 209, 50, 14, WS_TABSTOP
+ PUSHBUTTON "&Дополнительно", IDC_ADVANCED, 162, 209, 74, 14, WS_TABSTOP
END
IDD_TCPIP_ALTCF_DLG DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION
-CAPTION "Alternate Configuration"
+CAPTION "Альтернативная конфигурация"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "If this computer is used on more than one network, enter the alternate IP settings below", -1, 9, 9, 220, 20
- CONTROL "Au&tomatic private IP address", IDC_USEDHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 40, 210, 12
+ LTEXT "Если этот компьютер используется в нескольких сетях, введите параметры альтернативной конфигурации протокола IP:", -1, 9, 9, 230, 20
+ CONTROL "А&втоматический частный IP-адрес", IDC_USEDHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 40, 210, 12
GROUPBOX "", -1, 9, 55, 228, 80, BS_GROUPBOX
- CONTROL "U&ser configured", IDC_NODHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 55, 70, 12
- LTEXT "&IP адрес:", -1, 14, 75, 135, 8
+ CONTROL "Настраиваем&ый пользователем", IDC_NODHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 55, 130, 12
+ LTEXT "IP-&адрес:", -1, 14, 75, 135, 8
CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP, 150, 75, 80, 12
- LTEXT "&Маска подсети:", -1, 14, 95, 135, 8
+ LTEXT "Ма&ска подсети:", -1, 14, 95, 135, 8
CONTROL "",IDC_SUBNETMASK,"SysIPAddress32",WS_TABSTOP, 150, 95, 80, 12
- LTEXT "&Шлюз по умолчанию:", -1, 14, 115, 135, 8
+ LTEXT "&Основной шлюз:", -1, 14, 115, 135, 8
CONTROL "",IDC_DEFGATEWAY,"SysIPAddress32",WS_TABSTOP, 150, 115, 80, 12
- LTEXT "&Основной DNS сервер:", -1, 14, 150, 135, 8
+ LTEXT "Пр&едпочитаемый DNS-сервер:", -1, 14, 150, 135, 8
CONTROL "",IDC_DNS1,"SysIPAddress32",WS_TABSTOP, 150, 150, 80, 12
- LTEXT "&Дополнительный DNS сервер:", -1, 14, 165, 180, 8
+ LTEXT "Ал&ьтернативный DNS-сервер:", -1, 14, 165, 180, 8
CONTROL "",IDC_DNS2,"SysIPAddress32",WS_TABSTOP, 150, 165, 80, 12
END
@@ -51,19 +51,19 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION
CAPTION "Параметры IP"
FONT 8, "MS Shell Dlg"
BEGIN
- GROUPBOX "IP addressen", -1, 5, 5, 240, 90
+ GROUPBOX "IP-&адреса", -1, 5, 5, 240, 90
CONTROL "", IDC_IPLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 15, 15, 210, 55
- PUSHBUTTON "Добавить...", IDC_IPADD, 60, 75, 50, 14, WS_TABSTOP
- PUSHBUTTON "Изменить...", IDC_IPMOD, 120, 75, 50, 14, WS_TABSTOP
- PUSHBUTTON "Удалить", IDC_IPDEL, 180, 75, 50, 14, WS_TABSTOP
- GROUPBOX "Default gateways:", -1, 5, 100, 240, 90
+ PUSHBUTTON "&Добавить...", IDC_IPADD, 60, 75, 50, 14, WS_TABSTOP
+ PUSHBUTTON "&Изменить...", IDC_IPMOD, 120, 75, 50, 14, WS_TABSTOP
+ PUSHBUTTON "&Удалить", IDC_IPDEL, 180, 75, 50, 14, WS_TABSTOP
+ GROUPBOX "&Основные шлюзы:", -1, 5, 100, 240, 90
CONTROL "", IDC_GWLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 15, 110, 210, 55
- PUSHBUTTON "Добавить...", IDC_GWADD, 60, 170, 50, 14, WS_TABSTOP
- PUSHBUTTON "Изменить...", IDC_GWMOD, 120, 170, 50, 14, WS_TABSTOP
- PUSHBUTTON "Удалить", IDC_GWDEL, 180, 170, 50, 14, WS_TABSTOP
+ PUSHBUTTON "До&бавить...", IDC_GWADD, 60, 170, 50, 14, WS_TABSTOP
+ PUSHBUTTON "И&зменить...", IDC_GWMOD, 120, 170, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Уда&лить", IDC_GWDEL, 180, 170, 50, 14, WS_TABSTOP
GROUPBOX "", -1, 5, 200, 240, 30
- CHECKBOX "Автоматическая метрика", IDC_AUTOMETRIC, 9, 200, 90, 12, BS_AUTOCHECKBOX | WS_TABSTOP
- LTEXT "Метрика интерфейса:", -1, 15, 215, 90, 12
+ CHECKBOX "А&втоматическое назначение метрики", IDC_AUTOMETRIC, 9, 200, 146, 12, BS_AUTOCHECKBOX | WS_TABSTOP
+ LTEXT "Метрика ин&терфейса:", -1, 15, 215, 90, 12
EDITTEXT IDC_METRIC, 110, 212, 50, 12, WS_TABSTOP | ES_NUMBER
END
@@ -73,26 +73,26 @@ CAPTION "DNS"
FONT 8, "MS Shell Dlg"
BEGIN
LISTBOX IDC_DNSADDRLIST, 5, 15, 180, 60, LBS_NOTIFY
- LTEXT "D&NS server addresses, in order of use:", -1, 5, 5, 180, 12
+ LTEXT "&Адреса DNS-серверов, в порядке использования:", -1, 5, 5, 180, 10
PUSHBUTTON "Вверх", IDC_DNSADDRUP, 190, 30, 50, 14, WS_TABSTOP
PUSHBUTTON "Вниз", IDC_DNSADDRDOWN, 190, 50, 50, 14, WS_TABSTOP
PUSHBUTTON "&Добавить...", IDC_DNSADDRADD, 30, 70, 50, 14, WS_TABSTOP
- PUSHBUTTON "&Изменить...", IDC_DNSADDRMOD, 100, 70, 50, 14, WS_TABSTOP
+ PUSHBUTTON "И&зменить...", IDC_DNSADDRMOD, 100, 70, 50, 14, WS_TABSTOP
PUSHBUTTON "&Удалить", IDC_DNSADDRDEL, 170, 70, 50, 14, WS_TABSTOP
- LTEXT "The following three settings are applied to all connections with TCP/IP enabled. For resolution of unqualified names:", -1, 5, 90, 220, 24
- CONTROL "Append &primary and connection specific DNS suffixes", IDC_PRIMSUFFIX, "BUTTON", BS_AUTORADIOBUTTON, 5, 110, 160, 12
- CHECKBOX "Append parent suffi&xes of the primary DNS suffix", IDC_TOPPRIMSUFFIX, 15, 125, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP
- CONTROL "Append t&hese DNS suffixes(in order):", IDC_SELSUFFIX, "BUTTON", BS_AUTORADIOBUTTON, 5, 140, 190, 12
+ LTEXT "Следующие три параметра применяются для всех подключений, использующих TCP/IP. Для разрешения неизвестных имен:", -1, 5, 90, 238, 20
+ CONTROL "Дописывать &основной DNS-суффикс и суффикс подключения", IDC_PRIMSUFFIX, "BUTTON", BS_AUTORADIOBUTTON, 5, 110, 234, 12
+ CHECKBOX "Дописывать роди&тельские суффиксы осн. DNS-суффикса", IDC_TOPPRIMSUFFIX, 15, 125, 220, 12, BS_AUTOCHECKBOX | WS_TABSTOP
+ CONTROL "Дописывать сл&едующие DNS-суффиксы (по порядку):", IDC_SELSUFFIX, "BUTTON", BS_AUTORADIOBUTTON, 5, 140, 206, 12
LISTBOX IDC_DNSSUFFIXLIST, 5, 155, 180, 60, LBS_NOTIFY
PUSHBUTTON "Вверх", IDC_DNSSUFFIXUP, 190, 170, 50, 14, WS_TABSTOP
PUSHBUTTON "Вниз", IDC_DNSSUFFIXDOWN, 190, 190, 50, 14, WS_TABSTOP
- PUSHBUTTON "Д&обавить...", IDC_DNSSUFFIXADD, 30, 210, 50, 14, WS_TABSTOP
- PUSHBUTTON "И&зменить...", IDC_DNSSUFFIXMOD, 100, 210, 50, 14, WS_TABSTOP
- PUSHBUTTON "Уд&алить", IDC_DNSSUFFIXDEL, 170, 210, 50, 14, WS_TABSTOP
- LTEXT "DNS &suffix for this connection:", -1, 5, 225, 110, 14
+ PUSHBUTTON "До&бавить...", IDC_DNSSUFFIXADD, 30, 210, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Из&менить...", IDC_DNSSUFFIXMOD, 100, 210, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Уда&лить", IDC_DNSSUFFIXDEL, 170, 210, 50, 14, WS_TABSTOP
+ LTEXT "DNS-&суффикс подключения:", -1, 5, 225, 110, 14
EDITTEXT IDC_SUFFIX, 120, 225, 100, 12, WS_TABSTOP
- CHECKBOX "&Register this connection's addresses in DNS", IDC_REGSUFFIX, 15, 240, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP
- CHECKBOX "&Use this connection's DNS suffix in DNS registration", IDC_USESUFFIX, 15, 255, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP
+ CHECKBOX "Заре&гистрировать адреса этого подключения в DNS", IDC_REGSUFFIX, 8, 240, 204, 12, BS_AUTOCHECKBOX | WS_TABSTOP
+ CHECKBOX "&Использовать DNS-суффикс подключения при регистрации в DNS", IDC_USESUFFIX, 8, 255, 270, 12, BS_AUTOCHECKBOX | WS_TABSTOP
END
@@ -148,39 +148,39 @@ END
IDD_TCPIPSUFFIX_DLG DIALOGEX DISCARDABLE 0, 0, 200, 80
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "TCP/IP Domain Suffix"
+CAPTION "Доменный суффикс TCP/IP"
FONT 8, "MS Shell Dlg"
BEGIN
EDITTEXT IDC_SUFFIX, 5, 25, 190, 12, WS_TABSTOP
- LTEXT "Domain suffix:", -1, 5, 10, 120, 12
+ LTEXT "&Доменный суффикс:", -1, 5, 10, 120, 12
PUSHBUTTON "", IDC_OK, 50, 50, 50, 14, WS_TABSTOP
PUSHBUTTON "Отмена", IDCANCEL, 110, 50, 50, 14, WS_TABSTOP
END
IDD_TCPIP_FILTER_DLG DIALOGEX DISCARDABLE 0, 0, 305, 220
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "TCP/IP фильтрация"
+CAPTION "Фильтрация TCP/IP"
FONT 8, "MS Shell Dlg"
BEGIN
- CHECKBOX "Enable TCP/IP-Filtering (All adapters)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP
+ CHECKBOX "&Задействовать фильтрацию TCP/IP (все адаптеры)", IDC_USE_FILTER, 15, 5, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP
GROUPBOX "", -1, 5, 30, 90, 150
- CONTROL "Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12
- CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12
+ CONTROL "&Можно все", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12
+ CONTROL "&Только", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12
CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75
- PUSHBUTTON "Добавить", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP
- PUSHBUTTON "Удалить", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Добавить...", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP
+ PUSHBUTTON "&Удалить", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP
GROUPBOX "", -1, 105, 30, 90, 150
- CONTROL "Permit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12
- CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12
+ CONTROL "Мо&жно все", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12
+ CONTROL "То&лько", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12
CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75
- PUSHBUTTON "Добавить", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP
- PUSHBUTTON "Удалить", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Добавить...", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Уд&алить", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP
GROUPBOX "", -1, 205, 30, 90, 150
- CONTROL "Permit All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12
- CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12
+ CONTROL "Можно &все", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12
+ CONTROL "Тол&ько", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12
CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75
- PUSHBUTTON "Добавить", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP
- PUSHBUTTON "Удалить", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Добавить...", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Удал&ить", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP
PUSHBUTTON "OK", IDC_OK, 150, 190, 50, 14, WS_TABSTOP
PUSHBUTTON "Отмена", IDCANCEL, 210, 190, 50, 14, WS_TABSTOP
END
@@ -198,32 +198,32 @@ END
STRINGTABLE
BEGIN
- IDS_NET_CONNECT "Сетевое подключение"
- IDS_NO_IPADDR_SET "The adapter requires at least one IP address. Please enter one."
- IDS_NO_SUBMASK_SET "You have entered an address that is missing its subnet mask. Please add a subnet mask."
- IDS_TCPFILTERDESC "TCP/IP filtering allows you to control the type of TCP/IP network traffic that reaches your computer."
- IDS_TCPFILTER "TCP/IP Filtering"
- IDS_IPADDR "IP адрес"
+ IDS_NET_CONNECT "Сетевые подключения"
+ IDS_NO_IPADDR_SET "Этот адаптер требует ввода хотя бы одного IP-адреса. Введите адрес."
+ IDS_NO_SUBMASK_SET "Введен адрес без указания маски подсети. Введите маску подсети."
+ IDS_TCPFILTERDESC "Фильтрация TCP/IP позволяет контролировать сетевой трафик TCP/IP, поступающий на данный компьютер."
+ IDS_TCPFILTER "Фильтрация TCP/IP"
+ IDS_IPADDR "IP-адрес"
IDS_SUBMASK "Маска подсети"
IDS_GATEWAY "Шлюз"
IDS_METRIC "Метрика"
IDS_DHCPACTIVE "DHCP включен"
IDS_AUTOMATIC "Автоматически"
- IDS_NOITEMSEL "You have not selected an item. Select one first."
+ IDS_NOITEMSEL "Не выбрано ни одного элемента. Следует выбрать хоты бы один элемент."
IDS_TCPIP "ReactOS-TCP/IP"
IDS_ADD "Добавить"
IDS_MOD "OK"
- IDS_TCP_PORTS "TCP проты"
- IDS_UDP_PORTS "UDP проты"
- IDS_IP_PROTO "IP протоколы"
- IDS_PORT_RANGE "Port numbers must be greater than 0 and less than 65536. Please enter a number within this range."
- IDS_PROT_RANGE "Protocol numbers must be greater than 0 and less than 256. Please enter a number within this range."
- IDS_DUP_NUMBER "The number you are trying to add is already in the list. Please enter a different number."
- IDS_DISABLE_FILTER "Disabling this global TCP/IP setting will affect all adapters."
- IDS_NO_SUFFIX "The current setting of search method requires at least one DNS suffix. Please enter one or change the setting."
- IDS_DOMAIN_SUFFIX "Domain suffix is not a valid suffix."
- IDS_DNS_SUFFIX "The DNS domain name ""%s"" is not a valid DNS name."
- IDS_DUP_SUFFIX "The DNS suffix is already on the list."
- IDS_DUP_IPADDR "IP адрес уже в списке."
+ IDS_TCP_PORTS "TCP-проты"
+ IDS_UDP_PORTS "UDP-проты"
+ IDS_IP_PROTO "IP-протоколы"
+ IDS_PORT_RANGE "Номера портов должны быть больше 0 и меньше 65536. Введите номер в этом диапазоне."
+ IDS_PROT_RANGE "Номера протоколов должны быть больше 0 и меньше 256. Введите номер в этом диапазоне."
+ IDS_DUP_NUMBER "Номер, который вы хотите добавить, уже имеется в списке. Введите другой номер."
+ IDS_DISABLE_FILTER "Запрещение этого глобального параметра TCP/IP повлияет на все адаптеры."
+ IDS_NO_SUFFIX "Текущие установки метода поиска требуют указания по меньшей мере одного суффикса DNS. Введите суффикс или измените установки."
+ IDS_DOMAIN_SUFFIX "Неправильный суффикс домена."
+ IDS_DNS_SUFFIX "DNS-имя домена ""%s"" не является допустимым DNS-именем."
+ IDS_DUP_SUFFIX "DNS-суфикс уже имеется в списке."
+ IDS_DUP_IPADDR "IP-адрес уже имеется в списке."
IDS_DUP_GW "Шлюз по умолчанию уже в списке."
END
diff --git a/reactos/dll/win32/netcfgx/lang/sk-SK.rc b/reactos/dll/win32/netcfgx/lang/sk-SK.rc
index a84a8065dbd..253e7eb74ea 100644
--- a/reactos/dll/win32/netcfgx/lang/sk-SK.rc
+++ b/reactos/dll/win32/netcfgx/lang/sk-SK.rc
@@ -34,7 +34,7 @@ BEGIN
CONTROL "Au&tomatic private IP address", IDC_USEDHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 40, 210, 12
GROUPBOX "", -1, 9, 55, 228, 80, BS_GROUPBOX
CONTROL "U&ser configured", IDC_NODHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 55, 70, 12
- LTEXT "&IP address:", -1, 14, 75, 135, 8
+ LTEXT "Adresa &IP:", -1, 14, 75, 135, 8
CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP, 150, 75, 80, 12
LTEXT "S&ubnet mask:", -1, 14, 95, 135, 8
CONTROL "",IDC_SUBNETMASK,"SysIPAddress32",WS_TABSTOP, 150, 95, 80, 12
@@ -53,16 +53,16 @@ FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "IP addressen", -1, 5, 5, 240, 90
CONTROL "", IDC_IPLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 15, 15, 210, 55
- PUSHBUTTON "Add...", IDC_IPADD, 60, 75, 50, 14, WS_TABSTOP
- PUSHBUTTON "Edit...", IDC_IPMOD, 120, 75, 50, 14, WS_TABSTOP
- PUSHBUTTON "Remove", IDC_IPDEL, 180, 75, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Pridaќ...", IDC_IPADD, 60, 75, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Upraviќ...", IDC_IPMOD, 120, 75, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Odstrбniќ", IDC_IPDEL, 180, 75, 50, 14, WS_TABSTOP
GROUPBOX "Default gateways:", -1, 5, 100, 240, 90
CONTROL "", IDC_GWLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 15, 110, 210, 55
- PUSHBUTTON "Add...", IDC_GWADD, 60, 170, 50, 14, WS_TABSTOP
- PUSHBUTTON "Edit...", IDC_GWMOD, 120, 170, 50, 14, WS_TABSTOP
- PUSHBUTTON "Remove", IDC_GWDEL, 180, 170, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Pridaќ...", IDC_GWADD, 60, 170, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Upraviќ...", IDC_GWMOD, 120, 170, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Odstrбniќ", IDC_GWDEL, 180, 170, 50, 14, WS_TABSTOP
GROUPBOX "", -1, 5, 200, 240, 30
- CHECKBOX "Automatic metric", IDC_AUTOMETRIC, 9, 200, 90, 12, BS_AUTOCHECKBOX | WS_TABSTOP
+ CHECKBOX "Automatickб metrika", IDC_AUTOMETRIC, 9, 200, 90, 12, BS_AUTOCHECKBOX | WS_TABSTOP
LTEXT "Interface metric:", -1, 15, 215, 90, 12
EDITTEXT IDC_METRIC, 110, 212, 50, 12, WS_TABSTOP | ES_NUMBER
END
@@ -98,41 +98,41 @@ END
IDD_TCPIP_ADVOPT_DLG DIALOGEX DISCARDABLE 0, 0, 247, 247
STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION
-CAPTION "Options"
+CAPTION "Moћnosti"
FONT 8, "MS Shell Dlg"
BEGIN
LISTBOX IDC_OPTLIST, 5, 30, 230, 70
- LTEXT "&Optional settings", -1, 5, 15, 130, 12
- PUSHBUTTON "&Properties", IDC_OPTPROP, 160, 100, 70, 14, WS_TABSTOP
+ LTEXT "&Optional settings", -1, 5, 15, 130, 12 //volitelnй nastavenia
+ PUSHBUTTON "Vl&astnosti", IDC_OPTPROP, 160, 100, 70, 14, WS_TABSTOP
GROUPBOX "Description:", -1, 5, 120, 240, 70
LTEXT "", IDC_OPTDESC, 15, 130, 220, 33
END
IDD_TCPIPADDIP_DLG DIALOGEX DISCARDABLE 0, 0, 200, 70
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "TCP/IP Address"
+CAPTION "Adresa TCP/IP"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP, 100, 15, 80, 12
- LTEXT "IP address:", -1, 5, 15, 70, 12
- LTEXT "Subnet mask:", -1, 5, 30, 70, 12
+ LTEXT "Adresa IP:", -1, 5, 15, 70, 12
+ LTEXT "Maska podsiete:", -1, 5, 30, 70, 12
CONTROL "",IDC_SUBNETMASK,"SysIPAddress32", WS_TABSTOP, 100, 30, 80, 12
PUSHBUTTON "", IDC_OK, 50, 50, 50, 14, WS_TABSTOP
- PUSHBUTTON "Cancel", IDCANCEL, 110, 50, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Zruљiќ", IDCANCEL, 110, 50, 50, 14, WS_TABSTOP
END
IDD_TCPIPGW_DLG DIALOGEX DISCARDABLE 0, 0, 200, 80
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "TCP/IP Gateway Address"
+CAPTION "TCP/IP adresa brбny" //TCP/IP Gateway Address
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP, 100, 15, 80, 12
- LTEXT "Gateway:", -1, 5, 15, 70, 12
- CHECKBOX "Automatic metric", IDC_USEMETRIC, 15, 30, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP
- LTEXT "&Metric:", IDC_METRICTXT, 5, 45, 45, 12, WS_DISABLED
+ LTEXT "Brбna:", -1, 5, 15, 70, 12
+ CHECKBOX "Automatickб metrika", IDC_USEMETRIC, 15, 30, 190, 12, BS_AUTOCHECKBOX | WS_TABSTOP
+ LTEXT "&Metrika:", IDC_METRICTXT, 5, 45, 45, 12, WS_DISABLED
EDITTEXT IDC_METRIC, 100, 45, 50, 12, WS_TABSTOP | ES_NUMBER | WS_DISABLED
PUSHBUTTON "", IDC_OK, 50, 60, 50, 14, WS_TABSTOP
- PUSHBUTTON "Cancel", IDCANCEL, 110, 60, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Zruљiќ", IDCANCEL, 110, 60, 50, 14, WS_TABSTOP
END
IDD_TCPIPDNS_DLG DIALOGEX DISCARDABLE 0, 0, 200, 80
@@ -143,7 +143,7 @@ BEGIN
CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP, 5, 25, 80, 12
LTEXT "DNS server:", -1, 5, 10, 120, 12
PUSHBUTTON "", IDC_OK, 50, 50, 50, 14, WS_TABSTOP
- PUSHBUTTON "Cancel", IDCANCEL, 110, 50, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Zruљiќ", IDCANCEL, 110, 50, 50, 14, WS_TABSTOP
END
IDD_TCPIPSUFFIX_DLG DIALOGEX DISCARDABLE 0, 0, 200, 80
@@ -154,7 +154,7 @@ BEGIN
EDITTEXT IDC_SUFFIX, 5, 25, 190, 12, WS_TABSTOP
LTEXT "Domain suffix:", -1, 5, 10, 120, 12
PUSHBUTTON "", IDC_OK, 50, 50, 50, 14, WS_TABSTOP
- PUSHBUTTON "Cancel", IDCANCEL, 110, 50, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Zruљiќ", IDCANCEL, 110, 50, 50, 14, WS_TABSTOP
END
IDD_TCPIP_FILTER_DLG DIALOGEX DISCARDABLE 0, 0, 305, 220
@@ -167,22 +167,22 @@ BEGIN
CONTROL "Permit All", IDC_TCP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 30, 70, 12
CONTROL "Permit Only", IDC_TCP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 44, 70, 12
CONTROL "", IDC_TCP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 11, 62, 72, 75
- PUSHBUTTON "Add", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP
- PUSHBUTTON "Remove", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Pridaќ", IDC_TCP_ADD, 15, 141, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Odstrбniќ", IDC_TCP_DEL, 15, 161, 50, 14, WS_TABSTOP
GROUPBOX "", -1, 105, 30, 90, 150
CONTROL "Permit All", IDC_UDP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 30, 70, 12
CONTROL "Permit Only", IDC_UDP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 115, 44, 70, 12
CONTROL "", IDC_UDP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 111, 62, 72, 75
- PUSHBUTTON "Add", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP
- PUSHBUTTON "Remove", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Pridaќ", IDC_UDP_ADD, 115, 141, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Odstrбniќ", IDC_UDP_DEL, 115, 161, 50, 14, WS_TABSTOP
GROUPBOX "", -1, 205, 30, 90, 150
CONTROL "Permit All", IDC_IP_ALLOW_ALL, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 30, 70, 12
CONTROL "Permit Only", IDC_IP_RESTRICT, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 215, 44, 70, 12
CONTROL "", IDC_IP_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 211, 62, 72, 75
- PUSHBUTTON "Add", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP
- PUSHBUTTON "Remove", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Pridaќ", IDC_IP_ADD, 215, 141, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Odstrбniќ", IDC_IP_DEL, 215, 161, 50, 14, WS_TABSTOP
PUSHBUTTON "OK", IDC_OK, 150, 190, 50, 14, WS_TABSTOP
- PUSHBUTTON "Cancel", IDCANCEL, 210, 190, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Zruљiќ", IDCANCEL, 210, 190, 50, 14, WS_TABSTOP
END
IDD_TCPIP_PORT_DLG DIALOGEX DISCARDABLE 0, 0, 200, 60
@@ -193,7 +193,7 @@ BEGIN
EDITTEXT IDC_PORT_VAL, 5, 30, 70, 12, WS_TABSTOP | ES_NUMBER
LTEXT "", IDC_PORT_DESC, 5, 15, 40, 12
PUSHBUTTON "OK", IDC_OK, 120, 15, 50, 14, WS_TABSTOP
- PUSHBUTTON "Cancel", IDCANCEL, 120, 30, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Zruљiќ", IDCANCEL, 120, 30, 50, 14, WS_TABSTOP
END
STRINGTABLE
@@ -203,19 +203,19 @@ BEGIN
IDS_NO_SUBMASK_SET "You have entered an address that is missing its subnet mask. Please add a subnet mask."
IDS_TCPFILTERDESC "TCP/IP filtering allows you to control the type of TCP/IP network traffic that reaches your computer."
IDS_TCPFILTER "TCP/IP Filtering"
- IDS_IPADDR "IP address"
- IDS_SUBMASK "Subnet mask"
- IDS_GATEWAY "Gateway"
- IDS_METRIC "Metric"
+ IDS_IPADDR "Adresa IP"
+ IDS_SUBMASK "Maska podsiete"
+ IDS_GATEWAY "Brбna"
+ IDS_METRIC "Metrika"
IDS_DHCPACTIVE "DHCP Enabled"
IDS_AUTOMATIC "Automatic"
IDS_NOITEMSEL "You have not selected an item. Select one first."
IDS_TCPIP "ReactOS-TCP/IP"
- IDS_ADD "Add"
+ IDS_ADD "Pridaќ"
IDS_MOD "OK"
- IDS_TCP_PORTS "TCP Ports"
- IDS_UDP_PORTS "UDP Ports"
- IDS_IP_PROTO "IP protocols"
+ IDS_TCP_PORTS "TCP porty"
+ IDS_UDP_PORTS "UDP porty"
+ IDS_IP_PROTO "IP protokoly"
IDS_PORT_RANGE "Port numbers must be greater than 0 and less than 65536. Please enter a number within this range."
IDS_PROT_RANGE "Protocol numbers must be greater than 0 and less than 256. Please enter a number within this range."
IDS_DUP_NUMBER "The number you are trying to add is already in the list. Please enter a different number."
diff --git a/reactos/dll/win32/netcfgx/netcfgx.rbuild b/reactos/dll/win32/netcfgx/netcfgx.rbuild
index f520bd7149f..342b84acc8e 100644
--- a/reactos/dll/win32/netcfgx/netcfgx.rbuild
+++ b/reactos/dll/win32/netcfgx/netcfgx.rbuild
@@ -16,7 +16,6 @@
comctl32
ws2_32
netcfgx.c
- netcfgx.spec
classfactory.c
netcfg_iface.c
inetcfgcomp_iface.c
diff --git a/reactos/dll/win32/netid/netid.rbuild b/reactos/dll/win32/netid/netid.rbuild
index 3272cc530a9..62edbd39b54 100644
--- a/reactos/dll/win32/netid/netid.rbuild
+++ b/reactos/dll/win32/netid/netid.rbuild
@@ -10,5 +10,4 @@
netapi32
netid.c
netid.rc
- netid.spec
diff --git a/reactos/dll/win32/netshell/README b/reactos/dll/win32/netshell/README
new file mode 100644
index 00000000000..5f7fa4a9b18
--- /dev/null
+++ b/reactos/dll/win32/netshell/README
@@ -0,0 +1,58 @@
+=== Introduction ===
+
+The netshell library is responsible for managing network connections. The user interface is accessed
+by opening the control panel and selecting the "Network Connections" folder.
+The netshell library provides COM interfaces to enumerate available network adapters, network protocols, network clients and network transports
+and receive detailed information about them. However, it cannot configure these components. For configuration, look in the netcfgx documentation
+(Hint: INetCfg)
+
+=== Interface ===
+
+The user interface is exposed by implementing the IShellFolder interface as required by explorer
+namespace extension. The code is currently placed in shfldr_netconnect.c
+
+The enumeration of the available network connections is performed by the IShellFolder::EnumObjects
+(ISF_NetConnect_fnEnumObjects). It uses the INetConnectionManager interface implemented by netshell
+in connectmanager.c to enumerate all available network connections.
+
+The context menu of network connection items is populated by the IContextMenu::QueryContextMenu
+(ISF_NetConnect_IContextMenu3_QueryContextMenu) which is obtained by IShellFolder::GetUIObjectOf. The actions are performed by the
+IContextMenu::InvokeCommand function (ISF_NetConnect_IContextMenu3_InvokeCommand). At the moment
+the actions "Status" / "Properties" are implemented.
+
+=== Status Dialog & Notification Area ===
+
+The status dialog is implemented by IOleCommandTarget interface(CLSID_LanConnectStatusUI). This interface manages all status dialogs
+for all available dialogs. The interface is implemented as a singleton to advoid multiple notification icons
+appear in the Notification area of the explorer. Everytime the IShellFolder object is created (ISF_NetConnect_Constructor),
+it creates a reference to IOleCommandTarget interface and calls its IOleCommandTarget::Exec function with CGID_ShellServiceObject.
+This causes IOleCommandTarget interface to enumerate all available network connections, check if they should be shown (NCCF_SHOW_ICON flag set
+in the NETCON_PROPERTIES dwCharacter), and add them to notification area with Shell_NotifyIcon. For that purpose a hidden window is created (dialog
+procedure is LANStatusDlg) which receives WM_SHOWSTATUSDLG msg when it shall show display the status dialog.
+
+When a user wants to display the status dialog by clicking on the context menu of network connection item, the IShellFolder sends the NetCfgInstanceId of
+the selected network connection to IOleCommandTarget::Exec function. The function then looks up the specified notification item and then sends
+the WM_SHOWSTATUSDLG msg to specific window.
+
+=== Network Connections Property Dialog ===
+
+The network connections property dialog is implemented by the INetConnectionPropertyUi2 interface. The class id is obtained by calling
+INetConnection::GetUiObjectClassId of the current selected network connection. After obtaining the interface by calling CoCreateInstance, the
+selected network connection is stored as reference by calling INetConnectionPropertyUi::SetConnection. The next step is to call
+INetConnectionPropertyUi::AddPages to add custom property pages to the property sheet set. If the function suceeds, the caller can then invoke
+PropertySheetW function to display the properties.
+ Note: If the context doesnt match, i.e. the INetConnectionPropertyUi2 cannot work together
+ with current INetConnection, then it should fail INetConnectionPropertyUi::AddPages
+ Note: The function ShowNetConnectionProperties in shlfdr_netconnect.c shows how to invoke the Network Connections Property Dialog
+
+The enumeration of network components (protocols, client, transport) is done by using the INetCfg api). Initialization is performed in InitializeLANPropertiesUIDlg
+function. When a user accepts changes, it calls INetCfg::Apply or when it aborts the changes INetCfg::Cancel.
+
+=== Known Issues ===
+* The notification icons are only added once IShellFolder of netshell is created for the first time
+* Status changes of an adapter are not automatically updated because the information is cached
+* There seems to be an icon problem which makes icon blink in the status dialog
+
+Last Update 31/10/2008
+
+
diff --git a/reactos/dll/win32/netshell/lanconnectui.c b/reactos/dll/win32/netshell/lanconnectui.c
index 4c9b41ed149..34d3c6a02c8 100644
--- a/reactos/dll/win32/netshell/lanconnectui.c
+++ b/reactos/dll/win32/netshell/lanconnectui.c
@@ -307,7 +307,11 @@ LANPropertiesUIDlg(
PNET_ITEM pItem;
INetConnectionPropertyUiImpl * This;
LPPSHNOTIFY lppsn;
+ DWORD dwShowIcon;
HRESULT hr;
+ WCHAR szKey[200];
+ LPOLESTR pStr;
+ HKEY hKey;
switch(uMsg)
{
@@ -326,14 +330,31 @@ LANPropertiesUIDlg(
if (This->pNCfg)
{
hr = INetCfg_Apply(This->pNCfg);
- if (SUCCEEDED(hr))
- return PSNRET_NOERROR;
- else
+ if (FAILED(hr))
return PSNRET_INVALID;
}
+
+ if (SendDlgItemMessageW(hwndDlg, IDC_SHOWTASKBAR, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ dwShowIcon = 1;
+ else
+ dwShowIcon = 0;
+
+
+ if (StringFromCLSID(&This->pProperties->guidId, &pStr) == ERROR_SUCCESS)
+ {
+ swprintf(szKey, L"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s\\Connection", pStr);
+ CoTaskMemFree(pStr);
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, szKey, 0, KEY_WRITE, &hKey) == ERROR_SUCCESS)
+ {
+ RegSetValueExW(hKey, L"ShowIcon", 0, REG_DWORD, (LPBYTE)&dwShowIcon, sizeof(DWORD));
+ RegCloseKey(hKey);
+ }
+ }
+
return PSNRET_NOERROR;
}
- else if (lppsn->hdr.code == PSN_APPLY)
+#if 0
+ else if (lppsn->hdr.code == PSN_CANCEL)
{
This = (INetConnectionPropertyUiImpl*)GetWindowLongPtr(hwndDlg, DWLP_USER);
if (This->pNCfg)
@@ -346,6 +367,7 @@ LANPropertiesUIDlg(
}
return PSNRET_NOERROR;
}
+#endif
if (lppl->hdr.code == LVN_ITEMCHANGING)
{
ZeroMemory(&li, sizeof(li));
diff --git a/reactos/dll/win32/netshell/lang/es-ES.rc b/reactos/dll/win32/netshell/lang/es-ES.rc
index 64000115d4a..14df7e1c781 100644
--- a/reactos/dll/win32/netshell/lang/es-ES.rc
+++ b/reactos/dll/win32/netshell/lang/es-ES.rc
@@ -64,27 +64,27 @@ END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
-CAPTION "Network Connection Details"
+CAPTION "Detalles de la conexiуn de red"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Network Connection &Details:", -1, 15, 9, 170, 12
+ LTEXT "&Detalles de la conexiуn de red:", -1, 15, 9, 170, 12
CONTROL "", IDC_DETAILS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 15, 25, 170, 130
- PUSHBUTTON "&Close", IDC_CLOSE, 125, 165, 62, 14
+ PUSHBUTTON "&Cerrar", IDC_CLOSE, 125, 165, 62, 14
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_PHYSICAL_ADDRESS "Physical Address"
- IDS_IP_ADDRESS "IP Address"
- IDS_SUBNET_MASK "Subnet Mask"
- IDS_DEF_GATEWAY "Default Gateway"
- IDS_DHCP_SERVER "DHCP Server"
- IDS_LEASE_OBTAINED "Lease Obtained"
- IDS_LEASE_EXPIRES "Lease Expires"
- IDS_DNS_SERVERS "DNS Servers"
- IDS_WINS_SERVERS "WINS Servers"
- IDS_PROPERTY "Property"
- IDS_VALUE "Value"
+ IDS_PHYSICAL_ADDRESS "Direcciуn fнsica"
+ IDS_IP_ADDRESS "Direcciуn IP"
+ IDS_SUBNET_MASK "Mбscara de subred"
+ IDS_DEF_GATEWAY "Puerta de enlace predeterminada"
+ IDS_DHCP_SERVER "Servidor DHCP"
+ IDS_LEASE_OBTAINED "Concesiуn obtenida"
+ IDS_LEASE_EXPIRES "La concesiуn caduca"
+ IDS_DNS_SERVERS "Servidor DNS"
+ IDS_WINS_SERVERS "Servidor WINS"
+ IDS_PROPERTY "Propiedad"
+ IDS_VALUE "Valor"
IDS_NETWORKCONNECTION "Conexiones de red"
IDS_SHV_COLUMN_NAME "Nombre"
IDS_SHV_COLUMN_TYPE "Tipo"
diff --git a/reactos/dll/win32/netshell/lang/sk-SK.rc b/reactos/dll/win32/netshell/lang/sk-SK.rc
index 3555bac4795..4d0baf0e486 100644
--- a/reactos/dll/win32/netshell/lang/sk-SK.rc
+++ b/reactos/dll/win32/netshell/lang/sk-SK.rc
@@ -1,6 +1,6 @@
/* TRANSLATOR : Mбrio Kaиmбr /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR.: 31-08-2008
- * LAST CHANGE: 19-09-2008
+ * LAST CHANGE: 23-10-2008
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@@ -75,48 +75,48 @@ END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
-CAPTION "Network Connection Details"
+CAPTION "Podrobnosti sieќovйho pripojenia" //Sieќovй pripojenie - podrobnosti
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Network Connection &Details:", -1, 15, 9, 170, 12
+ LTEXT "Po&drobnosti sieќovйho pripojenia:", -1, 15, 9, 170, 12
CONTROL "", IDC_DETAILS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 15, 25, 170, 130
- PUSHBUTTON "&Close", IDC_CLOSE, 125, 165, 62, 14
+ PUSHBUTTON "&Zavrieќ", IDC_CLOSE, 125, 165, 62, 14
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_PHYSICAL_ADDRESS "Physical Address"
- IDS_IP_ADDRESS "IP Address"
- IDS_SUBNET_MASK "Subnet Mask"
- IDS_DEF_GATEWAY "Default Gateway"
+ IDS_PHYSICAL_ADDRESS "Fyzickб adresa"
+ IDS_IP_ADDRESS "Adresa IP"
+ IDS_SUBNET_MASK "Maska podsiete"
+ IDS_DEF_GATEWAY "Predvolenб brбna"
IDS_DHCP_SERVER "DHCP Server"
IDS_LEASE_OBTAINED "Lease Obtained"
IDS_LEASE_EXPIRES "Lease Expires"
- IDS_DNS_SERVERS "DNS Servers"
- IDS_WINS_SERVERS "WINS Servers"
- IDS_PROPERTY "Property"
- IDS_VALUE "Value"
- IDS_NETWORKCONNECTION "Network Connection"
+ IDS_DNS_SERVERS "Servery DNS"
+ IDS_WINS_SERVERS "Servery WINS"
+ IDS_PROPERTY "Vlastnosќ"
+ IDS_VALUE "Hodnota"
+ IDS_NETWORKCONNECTION "Sieќovй pripojenie"
IDS_SHV_COLUMN_NAME "Nбzov"
IDS_SHV_COLUMN_TYPE "Typ"
- IDS_SHV_COLUMN_STATE "Status"
+ IDS_SHV_COLUMN_STATE "Stav"
IDS_SHV_COLUMN_DEVNAME "Nбzov zariadenia"
- IDS_SHV_COLUMN_PHONE "Phone # or Host Address"
- IDS_SHV_COLUMN_OWNER "Owner"
- IDS_TYPE_ETHERNET "LAN or High-Speed Internet"
- IDS_STATUS_NON_OPERATIONAL "Disabled"
- IDS_STATUS_UNREACHABLE "Not Connected"
- IDS_STATUS_DISCONNECTED "Network cable unplugged"
- IDS_STATUS_CONNECTING "Acquiring network address"
- IDS_STATUS_CONNECTED "Connected"
- IDS_STATUS_OPERATIONAL "Connected"
+ IDS_SHV_COLUMN_PHONE "Telefуnne инslo alebo adresa hostiteѕa"
+ IDS_SHV_COLUMN_OWNER "Vlastnнk"
+ IDS_TYPE_ETHERNET "Lokбlna sieќ alebo vysokorэchlostnэ Internet"
+ IDS_STATUS_NON_OPERATIONAL "Vypnutй"
+ IDS_STATUS_UNREACHABLE "Nepripojenй"
+ IDS_STATUS_DISCONNECTED "Sieќovэ kбbel je odpojenэ"
+ IDS_STATUS_CONNECTING "Zнskavanie sieќovej adresy"
+ IDS_STATUS_CONNECTED "Pripojenй"
+ IDS_STATUS_OPERATIONAL "Pripojenй"
- IDS_NET_ACTIVATE "Enable"
- IDS_NET_DEACTIVATE "Disable"
+ IDS_NET_ACTIVATE "Zapnъќ"
+ IDS_NET_DEACTIVATE "Vypnъќ"
IDS_NET_STATUS "Stav"
IDS_NET_REPAIR "Opraviќ"
IDS_NET_CREATELINK "Vytvoriќ odkaz"
- IDS_NET_DELETE "Delete"
+ IDS_NET_DELETE "Odstrбniќ"
IDS_NET_RENAME "Premenovaќ"
IDS_NET_PROPERTIES "Vlastnosti"
diff --git a/reactos/dll/win32/netshell/lanstatusui.c b/reactos/dll/win32/netshell/lanstatusui.c
index 9d8f8232864..83de28d3569 100644
--- a/reactos/dll/win32/netshell/lanstatusui.c
+++ b/reactos/dll/win32/netshell/lanstatusui.c
@@ -556,6 +556,157 @@ LANStatusUiAdvancedDlg(
return FALSE;
}
+BOOL
+FindNetworkAdapter(HDEVINFO hInfo, SP_DEVINFO_DATA *pDevInfo, LPWSTR pGuid)
+{
+ DWORD dwIndex, dwSize;
+ HKEY hSubKey;
+ WCHAR szNetCfg[50];
+ WCHAR szDetail[200] = L"SYSTEM\\CurrentControlSet\\Control\\Class\\";
+
+ dwIndex = 0;
+ do
+ {
+
+ ZeroMemory(pDevInfo, sizeof(SP_DEVINFO_DATA));
+ pDevInfo->cbSize = sizeof(SP_DEVINFO_DATA);
+
+ /* get device info */
+ if (!SetupDiEnumDeviceInfo(hInfo, dwIndex++, pDevInfo))
+ break;
+
+ /* get device software registry path */
+ if (!SetupDiGetDeviceRegistryPropertyW(hInfo, pDevInfo, SPDRP_DRIVER, NULL, (LPBYTE)&szDetail[39], sizeof(szDetail)/sizeof(WCHAR) - 40, &dwSize))
+ break;
+
+ /* open device registry key */
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, szDetail, 0, KEY_READ, &hSubKey) != ERROR_SUCCESS)
+ break;
+
+ /* query NetCfgInstanceId for current device */
+ dwSize = sizeof(szNetCfg);
+ if (RegQueryValueExW(hSubKey, L"NetCfgInstanceId", NULL, NULL, (LPBYTE)szNetCfg, &dwSize) != ERROR_SUCCESS)
+ {
+ RegCloseKey(hSubKey);
+ break;
+ }
+ RegCloseKey(hSubKey);
+ if (!wcsicmp(pGuid, szNetCfg))
+ {
+ return TRUE;
+ }
+ }
+ while(TRUE);
+
+ return FALSE;
+}
+
+
+
+VOID
+DisableNetworkAdapter(INetConnection * pNet, LANSTATUSUI_CONTEXT * pContext, HWND hwndDlg)
+{
+ HKEY hKey;
+ NETCON_PROPERTIES * pProperties;
+ LPOLESTR pDisplayName;
+ WCHAR szPath[200];
+ DWORD dwSize, dwType;
+ LPWSTR pPnp;
+ HDEVINFO hInfo;
+ SP_DEVINFO_DATA DevInfo;
+ SP_PROPCHANGE_PARAMS PropChangeParams;
+ BOOL bClose = FALSE;
+ NOTIFYICONDATAW nid;
+
+ if (FAILED(INetConnection_GetProperties(pNet, &pProperties)))
+ return;
+
+
+ hInfo = SetupDiGetClassDevsW(&GUID_DEVCLASS_NET, NULL, NULL, DIGCF_PRESENT );
+ if (!hInfo)
+ {
+ NcFreeNetconProperties(pProperties);
+ return;
+ }
+
+ if (FAILED(StringFromCLSID(&pProperties->guidId, &pDisplayName)))
+ {
+ NcFreeNetconProperties(pProperties);
+ SetupDiDestroyDeviceInfoList(hInfo);
+ return;
+ }
+ NcFreeNetconProperties(pProperties);
+
+ if (FindNetworkAdapter(hInfo, &DevInfo, pDisplayName))
+ {
+ PropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
+ PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; //;
+ PropChangeParams.StateChange = DICS_DISABLE;
+ PropChangeParams.Scope = DICS_FLAG_CONFIGSPECIFIC;
+ PropChangeParams.HwProfile = 0;
+
+ if (SetupDiSetClassInstallParams(hInfo, &DevInfo, &PropChangeParams.ClassInstallHeader, sizeof(SP_PROPCHANGE_PARAMS)))
+ {
+ if (SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hInfo, &DevInfo))
+ bClose = TRUE;
+ }
+ }
+ SetupDiDestroyDeviceInfoList(hInfo);
+
+ swprintf(szPath, L"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s\\Connection", pDisplayName);
+ CoTaskMemFree(pDisplayName);
+
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, szPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
+ return;
+
+ dwSize = 0;
+ if (RegQueryValueExW(hKey, L"PnpInstanceID", NULL, &dwType, NULL, &dwSize) != ERROR_SUCCESS || dwType != REG_SZ)
+ {
+ RegCloseKey(hKey);
+ return;
+ }
+
+ pPnp = (LPWSTR)CoTaskMemAlloc(dwSize);
+ if (!pPnp)
+ {
+ RegCloseKey(hKey);
+ return;
+ }
+
+ if (RegQueryValueExW(hKey, L"PnpInstanceID", NULL, &dwType, (LPBYTE)pPnp, &dwSize) != ERROR_SUCCESS)
+ {
+ CoTaskMemFree(pPnp);
+ RegCloseKey(hKey);
+ return;
+ }
+ RegCloseKey(hKey);
+
+ swprintf(szPath, L"System\\CurrentControlSet\\Hardware Profiles\\Current\\System\\CurrentControlSet\\Enum\\%s", pPnp);
+ CoTaskMemFree(pPnp);
+
+ if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, szPath, 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS)
+ return;
+
+ dwSize = 1; /* enable = 0, disable = 1 */
+ RegSetValueExW(hKey, L"CSConfigFlags", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD));
+ RegCloseKey(hKey);
+
+ if (!bClose)
+ return;
+
+ PropSheet_PressButton(GetParent(hwndDlg), PSBTN_CANCEL);
+ ZeroMemory(&nid, sizeof(nid));
+ nid.cbSize = sizeof(nid);
+ nid.uID = pContext->uID;
+ nid.hWnd = pContext->hwndDlg;
+ nid.uFlags = NIF_STATE;
+ nid.dwState = NIS_HIDDEN;
+ nid.dwStateMask = NIS_HIDDEN;
+
+ Shell_NotifyIconW(NIM_MODIFY, &nid);
+}
+
+
INT_PTR
CALLBACK
LANStatusUiDlg(
@@ -591,8 +742,7 @@ LANStatusUiDlg(
}
else if (LOWORD(wParam) == IDC_ENDISABLE)
{
- //FIXME
- // disable network adapter
+ DisableNetworkAdapter(pContext->pNet, pContext, hwndDlg);
break;
}
case WM_NOTIFY:
diff --git a/reactos/dll/win32/netshell/netshell.rbuild b/reactos/dll/win32/netshell/netshell.rbuild
index 0fb25f7ca2c..f84175bf9fc 100644
--- a/reactos/dll/win32/netshell/netshell.rbuild
+++ b/reactos/dll/win32/netshell/netshell.rbuild
@@ -23,7 +23,6 @@
netshell.rc
classfactory.c
connectmanager.c
- netshell.spec
lanconnectui.c
lanstatusui.c
diff --git a/reactos/dll/win32/newdev/newdev.rbuild b/reactos/dll/win32/newdev/newdev.rbuild
index 814e0750b02..2b3b27d898e 100644
--- a/reactos/dll/win32/newdev/newdev.rbuild
+++ b/reactos/dll/win32/newdev/newdev.rbuild
@@ -5,7 +5,6 @@
stubs.c
wizard.c
newdev.rc
- newdev.spec
wine
gdi32
comctl32
diff --git a/reactos/dll/win32/ntdsapi/ntdsapi.rbuild b/reactos/dll/win32/ntdsapi/ntdsapi.rbuild
index 415b74eab51..2609543d4cc 100644
--- a/reactos/dll/win32/ntdsapi/ntdsapi.rbuild
+++ b/reactos/dll/win32/ntdsapi/ntdsapi.rbuild
@@ -8,5 +8,4 @@
kernel32
ntdll
ntdsapi.c
- ntdsapi.spec
diff --git a/reactos/dll/win32/ntmarta/ntmarta.rbuild b/reactos/dll/win32/ntmarta/ntmarta.rbuild
index faf28f26c8f..0bc6d679953 100644
--- a/reactos/dll/win32/ntmarta/ntmarta.rbuild
+++ b/reactos/dll/win32/ntmarta/ntmarta.rbuild
@@ -8,6 +8,5 @@
user32
ntmarta.c
ntmarta.rc
- ntmarta.spec
ntmarta.h
diff --git a/reactos/dll/win32/objsel/objsel.rbuild b/reactos/dll/win32/objsel/objsel.rbuild
index b9e080fc5d0..4298f36481a 100644
--- a/reactos/dll/win32/objsel/objsel.rbuild
+++ b/reactos/dll/win32/objsel/objsel.rbuild
@@ -19,6 +19,5 @@
objsel.c
regsvr.c
objsel.rc
- objsel.spec
diff --git a/reactos/dll/win32/odbc32/odbc32.rbuild b/reactos/dll/win32/odbc32/odbc32.rbuild
index 87205067049..6a71d3dae22 100644
--- a/reactos/dll/win32/odbc32/odbc32.rbuild
+++ b/reactos/dll/win32/odbc32/odbc32.rbuild
@@ -9,6 +9,5 @@
wine
kernel32
proxyodbc.c
- odbc32.spec
diff --git a/reactos/dll/win32/odbccp32/odbccp32.rbuild b/reactos/dll/win32/odbccp32/odbccp32.rbuild
index e30fbc515aa..a05c9fb918b 100644
--- a/reactos/dll/win32/odbccp32/odbccp32.rbuild
+++ b/reactos/dll/win32/odbccp32/odbccp32.rbuild
@@ -12,6 +12,5 @@
uuid
ntdll
odbccp32.c
- odbccp32.spec
diff --git a/reactos/dll/win32/ole32/clipboard.c b/reactos/dll/win32/ole32/clipboard.c
index 909b21547d2..0e9d55c4eca 100644
--- a/reactos/dll/win32/ole32/clipboard.c
+++ b/reactos/dll/win32/ole32/clipboard.c
@@ -956,7 +956,7 @@ static HRESULT OLEClipbrd_RenderFormat(IDataObject *pIDataObject, LPFORMATETC pF
/* Get the metafile picture out of it */
- if (!FAILED(hr = IDataObject_GetData(theOleClipboard->pIDataObjectSrc, &fmt2, &std2)))
+ if (SUCCEEDED(hr = IDataObject_GetData(theOleClipboard->pIDataObjectSrc, &fmt2, &std2)))
{
mfp = (METAFILEPICT *)GlobalLock(std2.u.hGlobal);
}
diff --git a/reactos/dll/win32/ole32/comcat.c b/reactos/dll/win32/ole32/comcat.c
new file mode 100644
index 00000000000..9120df09126
--- /dev/null
+++ b/reactos/dll/win32/ole32/comcat.c
@@ -0,0 +1,1353 @@
+/*
+ * Comcat implementation
+ *
+ * Copyright (C) 2002 John K. Hohm
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include
+#include
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "winreg.h"
+#include "winerror.h"
+
+#include "ole2.h"
+#include "comcat.h"
+#include "wine/unicode.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(ole);
+
+typedef struct
+{
+ const ICatRegisterVtbl *lpVtbl;
+ const ICatInformationVtbl *infVtbl;
+} ComCatMgrImpl;
+
+struct class_categories {
+ LPCWSTR impl_strings;
+ LPCWSTR req_strings;
+};
+
+static LPENUMCATEGORYINFO COMCAT_IEnumCATEGORYINFO_Construct(LCID lcid);
+static LPENUMGUID COMCAT_CLSID_IEnumGUID_Construct(struct class_categories *class_categories);
+static LPENUMGUID COMCAT_CATID_IEnumGUID_Construct(REFCLSID rclsid, LPCWSTR impl_req);
+
+/**********************************************************************
+ * File-scope string constants
+ */
+static const WCHAR comcat_keyname[] = {
+ 'C','o','m','p','o','n','e','n','t',' ','C','a','t','e','g','o','r','i','e','s',0 };
+static const WCHAR impl_keyname[] = {
+ 'I','m','p','l','e','m','e','n','t','e','d',' ','C','a','t','e','g','o','r','i','e','s',0 };
+static const WCHAR req_keyname[] = {
+ 'R','e','q','u','i','r','e','d',' ','C','a','t','e','g','o','r','i','e','s',0 };
+static const WCHAR clsid_keyname[] = { 'C','L','S','I','D',0 };
+
+
+static inline ComCatMgrImpl *impl_from_ICatInformation( ICatInformation *iface )
+{
+ return (ComCatMgrImpl *)((char*)iface - FIELD_OFFSET(ComCatMgrImpl, infVtbl));
+}
+
+
+/**********************************************************************
+ * COMCAT_RegisterClassCategories
+ */
+static HRESULT COMCAT_RegisterClassCategories(
+ REFCLSID rclsid,
+ LPCWSTR type,
+ ULONG cCategories,
+ const CATID *rgcatid)
+{
+ WCHAR keyname[39];
+ HRESULT res;
+ HKEY clsid_key, class_key, type_key;
+
+ if (cCategories && rgcatid == NULL) return E_POINTER;
+
+ /* Format the class key name. */
+ res = StringFromGUID2(rclsid, keyname, 39);
+ if (FAILED(res)) return res;
+
+ /* Create (or open) the CLSID key. */
+ res = RegCreateKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &clsid_key, NULL);
+ if (res != ERROR_SUCCESS) return E_FAIL;
+
+ /* Create (or open) the class key. */
+ res = RegCreateKeyExW(clsid_key, keyname, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &class_key, NULL);
+ if (res == ERROR_SUCCESS) {
+ /* Create (or open) the category type key. */
+ res = RegCreateKeyExW(class_key, type, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &type_key, NULL);
+ if (res == ERROR_SUCCESS) {
+ for (; cCategories; --cCategories, ++rgcatid) {
+ HKEY key;
+
+ /* Format the category key name. */
+ res = StringFromGUID2(rgcatid, keyname, 39);
+ if (FAILED(res)) continue;
+
+ /* Do the register. */
+ res = RegCreateKeyExW(type_key, keyname, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &key, NULL);
+ if (res == ERROR_SUCCESS) RegCloseKey(key);
+ }
+ res = S_OK;
+ } else res = E_FAIL;
+ RegCloseKey(class_key);
+ } else res = E_FAIL;
+ RegCloseKey(clsid_key);
+
+ return res;
+}
+
+/**********************************************************************
+ * COMCAT_UnRegisterClassCategories
+ */
+static HRESULT COMCAT_UnRegisterClassCategories(
+ REFCLSID rclsid,
+ LPCWSTR type,
+ ULONG cCategories,
+ const CATID *rgcatid)
+{
+ WCHAR keyname[68] = { 'C', 'L', 'S', 'I', 'D', '\\' };
+ HRESULT res;
+ HKEY type_key;
+
+ if (cCategories && rgcatid == NULL) return E_POINTER;
+
+ /* Format the class category type key name. */
+ res = StringFromGUID2(rclsid, keyname + 6, 39);
+ if (FAILED(res)) return res;
+ keyname[44] = '\\';
+ lstrcpyW(keyname + 45, type);
+
+ /* Open the class category type key. */
+ res = RegOpenKeyExW(HKEY_CLASSES_ROOT, keyname, 0,
+ KEY_READ | KEY_WRITE, &type_key);
+ if (res != ERROR_SUCCESS) return E_FAIL;
+
+ for (; cCategories; --cCategories, ++rgcatid) {
+ /* Format the category key name. */
+ res = StringFromGUID2(rgcatid, keyname, 39);
+ if (FAILED(res)) continue;
+
+ /* Do the unregister. */
+ RegDeleteKeyW(type_key, keyname);
+ }
+ RegCloseKey(type_key);
+
+ return S_OK;
+}
+
+/**********************************************************************
+ * COMCAT_GetCategoryDesc
+ */
+static HRESULT COMCAT_GetCategoryDesc(HKEY key, LCID lcid, PWCHAR pszDesc,
+ ULONG buf_wchars)
+{
+ static const WCHAR fmt[] = { '%', 'l', 'X', 0 };
+ WCHAR valname[5];
+ HRESULT res;
+ DWORD type, size = (buf_wchars - 1) * sizeof(WCHAR);
+
+ if (pszDesc == NULL) return E_INVALIDARG;
+
+ /* FIXME: lcid comparisons are more complex than this! */
+ wsprintfW(valname, fmt, lcid);
+ res = RegQueryValueExW(key, valname, 0, &type, (LPBYTE)pszDesc, &size);
+ if (res != ERROR_SUCCESS || type != REG_SZ) {
+ FIXME("Simplified lcid comparison\n");
+ return CAT_E_NODESCRIPTION;
+ }
+ pszDesc[size / sizeof(WCHAR)] = (WCHAR)0;
+
+ return S_OK;
+}
+
+/**********************************************************************
+ * COMCAT_PrepareClassCategories
+ */
+static struct class_categories *COMCAT_PrepareClassCategories(
+ ULONG impl_count, const CATID *impl_catids, ULONG req_count, const CATID *req_catids)
+{
+ struct class_categories *categories;
+ WCHAR *strings;
+
+ categories = HeapAlloc(
+ GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(struct class_categories) +
+ ((impl_count + req_count) * 39 + 2) * sizeof(WCHAR));
+ if (categories == NULL) return categories;
+
+ strings = (WCHAR *)(categories + 1);
+ categories->impl_strings = strings;
+ while (impl_count--) {
+ StringFromGUID2(impl_catids++, strings, 39);
+ strings += 39;
+ }
+ *strings++ = 0;
+
+ categories->req_strings = strings;
+ while (req_count--) {
+ StringFromGUID2(req_catids++, strings, 39);
+ strings += 39;
+ }
+ *strings++ = 0;
+
+ return categories;
+}
+
+/**********************************************************************
+ * COMCAT_IsClassOfCategories
+ */
+static HRESULT COMCAT_IsClassOfCategories(
+ HKEY key,
+ struct class_categories const* categories)
+{
+ static const WCHAR impl_keyname[] = { 'I', 'm', 'p', 'l', 'e', 'm', 'e', 'n',
+ 't', 'e', 'd', ' ', 'C', 'a', 't', 'e',
+ 'g', 'o', 'r', 'i', 'e', 's', 0 };
+ static const WCHAR req_keyname[] = { 'R', 'e', 'q', 'u', 'i', 'r', 'e', 'd',
+ ' ', 'C', 'a', 't', 'e', 'g', 'o', 'r',
+ 'i', 'e', 's', 0 };
+ HKEY subkey;
+ HRESULT res;
+ DWORD index;
+ LPCWSTR string;
+
+ /* Check that every given category is implemented by class. */
+ res = RegOpenKeyExW(key, impl_keyname, 0, KEY_READ, &subkey);
+ if (res != ERROR_SUCCESS) return S_FALSE;
+ for (string = categories->impl_strings; *string; string += 39) {
+ HKEY catkey;
+ res = RegOpenKeyExW(subkey, string, 0, 0, &catkey);
+ if (res != ERROR_SUCCESS) {
+ RegCloseKey(subkey);
+ return S_FALSE;
+ }
+ RegCloseKey(catkey);
+ }
+ RegCloseKey(subkey);
+
+ /* Check that all categories required by class are given. */
+ res = RegOpenKeyExW(key, req_keyname, 0, KEY_READ, &subkey);
+ if (res == ERROR_SUCCESS) {
+ for (index = 0; ; ++index) {
+ WCHAR keyname[39];
+ DWORD size = 39;
+
+ res = RegEnumKeyExW(subkey, index, keyname, &size,
+ NULL, NULL, NULL, NULL);
+ if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) break;
+ if (size != 38) continue; /* bogus catid in registry */
+ for (string = categories->req_strings; *string; string += 39)
+ if (!strcmpiW(string, keyname)) break;
+ if (!*string) {
+ RegCloseKey(subkey);
+ return S_FALSE;
+ }
+ }
+ RegCloseKey(subkey);
+ }
+
+ return S_OK;
+}
+
+/**********************************************************************
+ * COMCAT_ICatRegister_QueryInterface
+ */
+static HRESULT WINAPI COMCAT_ICatRegister_QueryInterface(
+ LPCATREGISTER iface,
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ ComCatMgrImpl *This = (ComCatMgrImpl *)iface;
+ TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
+
+ if (ppvObj == NULL) return E_POINTER;
+
+ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_ICatRegister)) {
+ *ppvObj = iface;
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+
+ if (IsEqualGUID(riid, &IID_ICatInformation)) {
+ *ppvObj = &This->infVtbl;
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+/**********************************************************************
+ * COMCAT_ICatRegister_AddRef
+ */
+static ULONG WINAPI COMCAT_ICatRegister_AddRef(LPCATREGISTER iface)
+{
+ return 2; /* non-heap based object */
+}
+
+/**********************************************************************
+ * COMCAT_ICatRegister_Release
+ */
+static ULONG WINAPI COMCAT_ICatRegister_Release(LPCATREGISTER iface)
+{
+ return 1; /* non-heap based object */
+}
+
+/**********************************************************************
+ * COMCAT_ICatRegister_RegisterCategories
+ */
+static HRESULT WINAPI COMCAT_ICatRegister_RegisterCategories(
+ LPCATREGISTER iface,
+ ULONG cCategories,
+ CATEGORYINFO *rgci)
+{
+ HKEY comcat_key;
+ HRESULT res;
+
+ TRACE("\n");
+
+ if (cCategories && rgci == NULL)
+ return E_POINTER;
+
+ /* Create (or open) the component categories key. */
+ res = RegCreateKeyExW(HKEY_CLASSES_ROOT, comcat_keyname, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &comcat_key, NULL);
+ if (res != ERROR_SUCCESS) return E_FAIL;
+
+ for (; cCategories; --cCategories, ++rgci) {
+ static const WCHAR fmt[] = { '%', 'l', 'X', 0 };
+ WCHAR keyname[39];
+ WCHAR valname[9];
+ HKEY cat_key;
+
+ /* Create (or open) the key for this category. */
+ if (!StringFromGUID2(&rgci->catid, keyname, 39)) continue;
+ res = RegCreateKeyExW(comcat_key, keyname, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &cat_key, NULL);
+ if (res != ERROR_SUCCESS) continue;
+
+ /* Set the value for this locale's description. */
+ wsprintfW(valname, fmt, rgci->lcid);
+ RegSetValueExW(cat_key, valname, 0, REG_SZ,
+ (CONST BYTE*)(rgci->szDescription),
+ (lstrlenW(rgci->szDescription) + 1) * sizeof(WCHAR));
+
+ RegCloseKey(cat_key);
+ }
+
+ RegCloseKey(comcat_key);
+ return S_OK;
+}
+
+/**********************************************************************
+ * COMCAT_ICatRegister_UnRegisterCategories
+ */
+static HRESULT WINAPI COMCAT_ICatRegister_UnRegisterCategories(
+ LPCATREGISTER iface,
+ ULONG cCategories,
+ CATID *rgcatid)
+{
+ HKEY comcat_key;
+ HRESULT res;
+
+ TRACE("\n");
+
+ if (cCategories && rgcatid == NULL)
+ return E_POINTER;
+
+ /* Open the component categories key. */
+ res = RegOpenKeyExW(HKEY_CLASSES_ROOT, comcat_keyname, 0,
+ KEY_READ | KEY_WRITE, &comcat_key);
+ if (res != ERROR_SUCCESS) return E_FAIL;
+
+ for (; cCategories; --cCategories, ++rgcatid) {
+ WCHAR keyname[39];
+
+ /* Delete the key for this category. */
+ if (!StringFromGUID2(rgcatid, keyname, 39)) continue;
+ RegDeleteKeyW(comcat_key, keyname);
+ }
+
+ RegCloseKey(comcat_key);
+ return S_OK;
+}
+
+/**********************************************************************
+ * COMCAT_ICatRegister_RegisterClassImplCategories
+ */
+static HRESULT WINAPI COMCAT_ICatRegister_RegisterClassImplCategories(
+ LPCATREGISTER iface,
+ REFCLSID rclsid,
+ ULONG cCategories,
+ CATID *rgcatid)
+{
+ TRACE("\n");
+
+ return COMCAT_RegisterClassCategories(
+ rclsid, impl_keyname, cCategories, rgcatid);
+}
+
+/**********************************************************************
+ * COMCAT_ICatRegister_UnRegisterClassImplCategories
+ */
+static HRESULT WINAPI COMCAT_ICatRegister_UnRegisterClassImplCategories(
+ LPCATREGISTER iface,
+ REFCLSID rclsid,
+ ULONG cCategories,
+ CATID *rgcatid)
+{
+ TRACE("\n");
+
+ return COMCAT_UnRegisterClassCategories(
+ rclsid, impl_keyname, cCategories, rgcatid);
+}
+
+/**********************************************************************
+ * COMCAT_ICatRegister_RegisterClassReqCategories
+ */
+static HRESULT WINAPI COMCAT_ICatRegister_RegisterClassReqCategories(
+ LPCATREGISTER iface,
+ REFCLSID rclsid,
+ ULONG cCategories,
+ CATID *rgcatid)
+{
+ TRACE("\n");
+
+ return COMCAT_RegisterClassCategories(
+ rclsid, req_keyname, cCategories, rgcatid);
+}
+
+/**********************************************************************
+ * COMCAT_ICatRegister_UnRegisterClassReqCategories
+ */
+static HRESULT WINAPI COMCAT_ICatRegister_UnRegisterClassReqCategories(
+ LPCATREGISTER iface,
+ REFCLSID rclsid,
+ ULONG cCategories,
+ CATID *rgcatid)
+{
+ TRACE("\n");
+
+ return COMCAT_UnRegisterClassCategories(
+ rclsid, req_keyname, cCategories, rgcatid);
+}
+
+/**********************************************************************
+ * COMCAT_ICatInformation_QueryInterface
+ */
+static HRESULT WINAPI COMCAT_ICatInformation_QueryInterface(
+ LPCATINFORMATION iface,
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ ComCatMgrImpl *This = impl_from_ICatInformation( iface );
+ return IUnknown_QueryInterface((LPUNKNOWN)This, riid, ppvObj);
+}
+
+/**********************************************************************
+ * COMCAT_ICatInformation_AddRef
+ */
+static ULONG WINAPI COMCAT_ICatInformation_AddRef(LPCATINFORMATION iface)
+{
+ ComCatMgrImpl *This = impl_from_ICatInformation( iface );
+ return IUnknown_AddRef((LPUNKNOWN)This);
+}
+
+/**********************************************************************
+ * COMCAT_ICatInformation_Release
+ */
+static ULONG WINAPI COMCAT_ICatInformation_Release(LPCATINFORMATION iface)
+{
+ ComCatMgrImpl *This = impl_from_ICatInformation( iface );
+ return IUnknown_Release((LPUNKNOWN)This);
+}
+
+/**********************************************************************
+ * COMCAT_ICatInformation_EnumCategories
+ */
+static HRESULT WINAPI COMCAT_ICatInformation_EnumCategories(
+ LPCATINFORMATION iface,
+ LCID lcid,
+ LPENUMCATEGORYINFO *ppenumCatInfo)
+{
+ TRACE("\n");
+
+ if (ppenumCatInfo == NULL) return E_POINTER;
+
+ *ppenumCatInfo = COMCAT_IEnumCATEGORYINFO_Construct(lcid);
+ if (*ppenumCatInfo == NULL) return E_OUTOFMEMORY;
+ IEnumCATEGORYINFO_AddRef(*ppenumCatInfo);
+ return S_OK;
+}
+
+/**********************************************************************
+ * COMCAT_ICatInformation_GetCategoryDesc
+ */
+static HRESULT WINAPI COMCAT_ICatInformation_GetCategoryDesc(
+ LPCATINFORMATION iface,
+ REFCATID rcatid,
+ LCID lcid,
+ PWCHAR *ppszDesc)
+{
+ WCHAR keyname[60] = { 'C', 'o', 'm', 'p', 'o', 'n', 'e', 'n',
+ 't', ' ', 'C', 'a', 't', 'e', 'g', 'o',
+ 'r', 'i', 'e', 's', '\\', 0 };
+ HKEY key;
+ HRESULT res;
+
+ TRACE("\n\tCATID:\t%s\n\tLCID:\t%X\n",debugstr_guid(rcatid), lcid);
+
+ if (rcatid == NULL || ppszDesc == NULL) return E_INVALIDARG;
+
+ /* Open the key for this category. */
+ if (!StringFromGUID2(rcatid, keyname + 21, 39)) return E_FAIL;
+ res = RegOpenKeyExW(HKEY_CLASSES_ROOT, keyname, 0, KEY_READ, &key);
+ if (res != ERROR_SUCCESS) return CAT_E_CATIDNOEXIST;
+
+ /* Allocate a sensible amount of memory for the description. */
+ *ppszDesc = (PWCHAR) CoTaskMemAlloc(128 * sizeof(WCHAR));
+ if (*ppszDesc == NULL) {
+ RegCloseKey(key);
+ return E_OUTOFMEMORY;
+ }
+
+ /* Get the description, and make sure it's null terminated. */
+ res = COMCAT_GetCategoryDesc(key, lcid, *ppszDesc, 128);
+ RegCloseKey(key);
+ if (FAILED(res)) {
+ CoTaskMemFree(*ppszDesc);
+ return res;
+ }
+
+ return S_OK;
+}
+
+/**********************************************************************
+ * COMCAT_ICatInformation_EnumClassesOfCategories
+ */
+static HRESULT WINAPI COMCAT_ICatInformation_EnumClassesOfCategories(
+ LPCATINFORMATION iface,
+ ULONG cImplemented,
+ CATID *rgcatidImpl,
+ ULONG cRequired,
+ CATID *rgcatidReq,
+ LPENUMCLSID *ppenumCLSID)
+{
+ struct class_categories *categories;
+
+ TRACE("\n");
+
+ if (cImplemented == (ULONG)-1)
+ cImplemented = 0;
+ if (cRequired == (ULONG)-1)
+ cRequired = 0;
+
+ if (ppenumCLSID == NULL ||
+ (cImplemented && rgcatidImpl == NULL) ||
+ (cRequired && rgcatidReq == NULL)) return E_POINTER;
+
+ categories = COMCAT_PrepareClassCategories(cImplemented, rgcatidImpl,
+ cRequired, rgcatidReq);
+ if (categories == NULL) return E_OUTOFMEMORY;
+ *ppenumCLSID = COMCAT_CLSID_IEnumGUID_Construct(categories);
+ if (*ppenumCLSID == NULL) {
+ HeapFree(GetProcessHeap(), 0, categories);
+ return E_OUTOFMEMORY;
+ }
+ IEnumGUID_AddRef(*ppenumCLSID);
+ return S_OK;
+}
+
+/**********************************************************************
+ * COMCAT_ICatInformation_IsClassOfCategories
+ */
+static HRESULT WINAPI COMCAT_ICatInformation_IsClassOfCategories(
+ LPCATINFORMATION iface,
+ REFCLSID rclsid,
+ ULONG cImplemented,
+ CATID *rgcatidImpl,
+ ULONG cRequired,
+ CATID *rgcatidReq)
+{
+ WCHAR keyname[45] = { 'C', 'L', 'S', 'I', 'D', '\\', 0 };
+ HRESULT res;
+ struct class_categories *categories;
+ HKEY key;
+
+ if (WINE_TRACE_ON(ole)) {
+ ULONG count;
+ TRACE("\n\tCLSID:\t%s\n\tImplemented %u\n",debugstr_guid(rclsid),cImplemented);
+ for (count = 0; count < cImplemented; ++count)
+ TRACE("\t\t%s\n",debugstr_guid(&rgcatidImpl[count]));
+ TRACE("\tRequired %u\n",cRequired);
+ for (count = 0; count < cRequired; ++count)
+ TRACE("\t\t%s\n",debugstr_guid(&rgcatidReq[count]));
+ }
+
+ if ((cImplemented && rgcatidImpl == NULL) ||
+ (cRequired && rgcatidReq == NULL)) return E_POINTER;
+
+ res = StringFromGUID2(rclsid, keyname + 6, 39);
+ if (FAILED(res)) return res;
+
+ categories = COMCAT_PrepareClassCategories(cImplemented, rgcatidImpl,
+ cRequired, rgcatidReq);
+ if (categories == NULL) return E_OUTOFMEMORY;
+
+ res = RegOpenKeyExW(HKEY_CLASSES_ROOT, keyname, 0, KEY_READ, &key);
+ if (res == ERROR_SUCCESS) {
+ res = COMCAT_IsClassOfCategories(key, categories);
+ RegCloseKey(key);
+ } else res = S_FALSE;
+
+ HeapFree(GetProcessHeap(), 0, categories);
+
+ return res;
+}
+
+/**********************************************************************
+ * COMCAT_ICatInformation_EnumImplCategoriesOfClass
+ */
+static HRESULT WINAPI COMCAT_ICatInformation_EnumImplCategoriesOfClass(
+ LPCATINFORMATION iface,
+ REFCLSID rclsid,
+ LPENUMCATID *ppenumCATID)
+{
+ static const WCHAR postfix[24] = { '\\', 'I', 'm', 'p', 'l', 'e', 'm', 'e',
+ 'n', 't', 'e', 'd', ' ', 'C', 'a', 't',
+ 'e', 'g', 'o', 'r', 'i', 'e', 's', 0 };
+
+ TRACE("\n\tCLSID:\t%s\n",debugstr_guid(rclsid));
+
+ if (rclsid == NULL || ppenumCATID == NULL)
+ return E_POINTER;
+
+ *ppenumCATID = COMCAT_CATID_IEnumGUID_Construct(rclsid, postfix);
+ if (*ppenumCATID == NULL) return E_OUTOFMEMORY;
+ return S_OK;
+}
+
+/**********************************************************************
+ * COMCAT_ICatInformation_EnumReqCategoriesOfClass
+ */
+static HRESULT WINAPI COMCAT_ICatInformation_EnumReqCategoriesOfClass(
+ LPCATINFORMATION iface,
+ REFCLSID rclsid,
+ LPENUMCATID *ppenumCATID)
+{
+ static const WCHAR postfix[21] = { '\\', 'R', 'e', 'q', 'u', 'i', 'r', 'e',
+ 'd', ' ', 'C', 'a', 't', 'e', 'g', 'o',
+ 'r', 'i', 'e', 's', 0 };
+
+ TRACE("\n\tCLSID:\t%s\n",debugstr_guid(rclsid));
+
+ if (rclsid == NULL || ppenumCATID == NULL)
+ return E_POINTER;
+
+ *ppenumCATID = COMCAT_CATID_IEnumGUID_Construct(rclsid, postfix);
+ if (*ppenumCATID == NULL) return E_OUTOFMEMORY;
+ return S_OK;
+}
+
+/**********************************************************************
+ * COMCAT_ICatRegister_Vtbl
+ */
+static const ICatRegisterVtbl COMCAT_ICatRegister_Vtbl =
+{
+ COMCAT_ICatRegister_QueryInterface,
+ COMCAT_ICatRegister_AddRef,
+ COMCAT_ICatRegister_Release,
+ COMCAT_ICatRegister_RegisterCategories,
+ COMCAT_ICatRegister_UnRegisterCategories,
+ COMCAT_ICatRegister_RegisterClassImplCategories,
+ COMCAT_ICatRegister_UnRegisterClassImplCategories,
+ COMCAT_ICatRegister_RegisterClassReqCategories,
+ COMCAT_ICatRegister_UnRegisterClassReqCategories
+};
+
+
+/**********************************************************************
+ * COMCAT_ICatInformation_Vtbl
+ */
+static const ICatInformationVtbl COMCAT_ICatInformation_Vtbl =
+{
+ COMCAT_ICatInformation_QueryInterface,
+ COMCAT_ICatInformation_AddRef,
+ COMCAT_ICatInformation_Release,
+ COMCAT_ICatInformation_EnumCategories,
+ COMCAT_ICatInformation_GetCategoryDesc,
+ COMCAT_ICatInformation_EnumClassesOfCategories,
+ COMCAT_ICatInformation_IsClassOfCategories,
+ COMCAT_ICatInformation_EnumImplCategoriesOfClass,
+ COMCAT_ICatInformation_EnumReqCategoriesOfClass
+};
+
+/**********************************************************************
+ * static ComCatMgr instance
+ */
+static ComCatMgrImpl COMCAT_ComCatMgr =
+{
+ &COMCAT_ICatRegister_Vtbl,
+ &COMCAT_ICatInformation_Vtbl
+};
+
+/**********************************************************************
+ * COMCAT_IClassFactory_QueryInterface (also IUnknown)
+ */
+static HRESULT WINAPI COMCAT_IClassFactory_QueryInterface(
+ LPCLASSFACTORY iface,
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
+
+ if (ppvObj == NULL) return E_POINTER;
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IClassFactory))
+ {
+ *ppvObj = (LPVOID)iface;
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+/**********************************************************************
+ * COMCAT_IClassFactory_AddRef (also IUnknown)
+ */
+static ULONG WINAPI COMCAT_IClassFactory_AddRef(LPCLASSFACTORY iface)
+{
+ return 2; /* non-heap based object */
+}
+
+/**********************************************************************
+ * COMCAT_IClassFactory_Release (also IUnknown)
+ */
+static ULONG WINAPI COMCAT_IClassFactory_Release(LPCLASSFACTORY iface)
+{
+ return 1; /* non-heap based object */
+}
+
+/**********************************************************************
+ * COMCAT_IClassFactory_CreateInstance
+ */
+static HRESULT WINAPI COMCAT_IClassFactory_CreateInstance(
+ LPCLASSFACTORY iface,
+ LPUNKNOWN pUnkOuter,
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ HRESULT res;
+ TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
+
+ if (ppvObj == NULL) return E_POINTER;
+
+ /* Don't support aggregation (Windows doesn't) */
+ if (pUnkOuter != NULL) return CLASS_E_NOAGGREGATION;
+
+ res = IUnknown_QueryInterface((LPUNKNOWN)&COMCAT_ComCatMgr, riid, ppvObj);
+ if (SUCCEEDED(res)) {
+ return res;
+ }
+
+ return CLASS_E_CLASSNOTAVAILABLE;
+}
+
+/**********************************************************************
+ * COMCAT_IClassFactory_LockServer
+ */
+static HRESULT WINAPI COMCAT_IClassFactory_LockServer(
+ LPCLASSFACTORY iface,
+ BOOL fLock)
+{
+ FIXME("(%d), stub!\n",fLock);
+ return S_OK;
+}
+
+/**********************************************************************
+ * static ClassFactory instance
+ */
+static const IClassFactoryVtbl ComCatCFVtbl =
+{
+ COMCAT_IClassFactory_QueryInterface,
+ COMCAT_IClassFactory_AddRef,
+ COMCAT_IClassFactory_Release,
+ COMCAT_IClassFactory_CreateInstance,
+ COMCAT_IClassFactory_LockServer
+};
+
+static const IClassFactoryVtbl *ComCatCF = &ComCatCFVtbl;
+
+HRESULT ComCatCF_Create(REFIID riid, LPVOID *ppv)
+{
+ return IClassFactory_QueryInterface((IClassFactory *)&ComCatCF, riid, ppv);
+}
+
+/**********************************************************************
+ * IEnumCATEGORYINFO implementation
+ *
+ * This implementation is not thread-safe. The manager itself is, but
+ * I can't imagine a valid use of an enumerator in several threads.
+ */
+typedef struct
+{
+ const IEnumCATEGORYINFOVtbl *lpVtbl;
+ LONG ref;
+ LCID lcid;
+ HKEY key;
+ DWORD next_index;
+} IEnumCATEGORYINFOImpl;
+
+static ULONG WINAPI COMCAT_IEnumCATEGORYINFO_AddRef(LPENUMCATEGORYINFO iface)
+{
+ IEnumCATEGORYINFOImpl *This = (IEnumCATEGORYINFOImpl *)iface;
+
+ TRACE("\n");
+
+ return InterlockedIncrement(&This->ref);
+}
+
+static HRESULT WINAPI COMCAT_IEnumCATEGORYINFO_QueryInterface(
+ LPENUMCATEGORYINFO iface,
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
+
+ if (ppvObj == NULL) return E_POINTER;
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IEnumCATEGORYINFO))
+ {
+ *ppvObj = (LPVOID)iface;
+ COMCAT_IEnumCATEGORYINFO_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI COMCAT_IEnumCATEGORYINFO_Release(LPENUMCATEGORYINFO iface)
+{
+ IEnumCATEGORYINFOImpl *This = (IEnumCATEGORYINFOImpl *)iface;
+ ULONG ref;
+
+ TRACE("\n");
+
+ ref = InterlockedDecrement(&This->ref);
+ if (ref == 0) {
+ if (This->key) RegCloseKey(This->key);
+ HeapFree(GetProcessHeap(), 0, This);
+ return 0;
+ }
+ return ref;
+}
+
+static HRESULT WINAPI COMCAT_IEnumCATEGORYINFO_Next(
+ LPENUMCATEGORYINFO iface,
+ ULONG celt,
+ CATEGORYINFO *rgelt,
+ ULONG *pceltFetched)
+{
+ IEnumCATEGORYINFOImpl *This = (IEnumCATEGORYINFOImpl *)iface;
+ ULONG fetched = 0;
+
+ TRACE("\n");
+
+ if (rgelt == NULL) return E_POINTER;
+
+ if (This->key) while (fetched < celt) {
+ LSTATUS res;
+ HRESULT hr;
+ WCHAR catid[39];
+ DWORD cName = 39;
+ HKEY subkey;
+
+ res = RegEnumKeyExW(This->key, This->next_index, catid, &cName,
+ NULL, NULL, NULL, NULL);
+ if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) break;
+ ++(This->next_index);
+
+ hr = CLSIDFromString(catid, &rgelt->catid);
+ if (FAILED(hr)) continue;
+
+ res = RegOpenKeyExW(This->key, catid, 0, KEY_READ, &subkey);
+ if (res != ERROR_SUCCESS) continue;
+
+ hr = COMCAT_GetCategoryDesc(subkey, This->lcid,
+ rgelt->szDescription, 128);
+ RegCloseKey(subkey);
+ if (FAILED(hr)) continue;
+
+ rgelt->lcid = This->lcid;
+ ++fetched;
+ ++rgelt;
+ }
+
+ if (pceltFetched) *pceltFetched = fetched;
+ return fetched == celt ? S_OK : S_FALSE;
+}
+
+static HRESULT WINAPI COMCAT_IEnumCATEGORYINFO_Skip(
+ LPENUMCATEGORYINFO iface,
+ ULONG celt)
+{
+ IEnumCATEGORYINFOImpl *This = (IEnumCATEGORYINFOImpl *)iface;
+
+ TRACE("\n");
+
+ This->next_index += celt;
+ /* This should return S_FALSE when there aren't celt elems to skip. */
+ return S_OK;
+}
+
+static HRESULT WINAPI COMCAT_IEnumCATEGORYINFO_Reset(LPENUMCATEGORYINFO iface)
+{
+ IEnumCATEGORYINFOImpl *This = (IEnumCATEGORYINFOImpl *)iface;
+
+ TRACE("\n");
+
+ This->next_index = 0;
+ return S_OK;
+}
+
+static HRESULT WINAPI COMCAT_IEnumCATEGORYINFO_Clone(
+ LPENUMCATEGORYINFO iface,
+ IEnumCATEGORYINFO **ppenum)
+{
+ IEnumCATEGORYINFOImpl *This = (IEnumCATEGORYINFOImpl *)iface;
+ static const WCHAR keyname[] = { 'C', 'o', 'm', 'p', 'o', 'n', 'e', 'n',
+ 't', ' ', 'C', 'a', 't', 'e', 'g', 'o',
+ 'r', 'i', 'e', 's', 0 };
+ IEnumCATEGORYINFOImpl *new_this;
+
+ TRACE("\n");
+
+ if (ppenum == NULL) return E_POINTER;
+
+ new_this = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IEnumCATEGORYINFOImpl));
+ if (new_this == NULL) return E_OUTOFMEMORY;
+
+ new_this->lpVtbl = This->lpVtbl;
+ new_this->ref = 1;
+ new_this->lcid = This->lcid;
+ /* FIXME: could we more efficiently use DuplicateHandle? */
+ RegOpenKeyExW(HKEY_CLASSES_ROOT, keyname, 0, KEY_READ, &new_this->key);
+ new_this->next_index = This->next_index;
+
+ *ppenum = (LPENUMCATEGORYINFO)new_this;
+ return S_OK;
+}
+
+static const IEnumCATEGORYINFOVtbl COMCAT_IEnumCATEGORYINFO_Vtbl =
+{
+ COMCAT_IEnumCATEGORYINFO_QueryInterface,
+ COMCAT_IEnumCATEGORYINFO_AddRef,
+ COMCAT_IEnumCATEGORYINFO_Release,
+ COMCAT_IEnumCATEGORYINFO_Next,
+ COMCAT_IEnumCATEGORYINFO_Skip,
+ COMCAT_IEnumCATEGORYINFO_Reset,
+ COMCAT_IEnumCATEGORYINFO_Clone
+};
+
+static LPENUMCATEGORYINFO COMCAT_IEnumCATEGORYINFO_Construct(LCID lcid)
+{
+ IEnumCATEGORYINFOImpl *This;
+
+ This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IEnumCATEGORYINFOImpl));
+ if (This) {
+ static const WCHAR keyname[] = { 'C', 'o', 'm', 'p', 'o', 'n', 'e', 'n',
+ 't', ' ', 'C', 'a', 't', 'e', 'g', 'o',
+ 'r', 'i', 'e', 's', 0 };
+
+ This->lpVtbl = &COMCAT_IEnumCATEGORYINFO_Vtbl;
+ This->lcid = lcid;
+ RegOpenKeyExW(HKEY_CLASSES_ROOT, keyname, 0, KEY_READ, &This->key);
+ }
+ return (LPENUMCATEGORYINFO)This;
+}
+
+/**********************************************************************
+ * ClassesOfCategories IEnumCLSID (IEnumGUID) implementation
+ *
+ * This implementation is not thread-safe. The manager itself is, but
+ * I can't imagine a valid use of an enumerator in several threads.
+ */
+typedef struct
+{
+ const IEnumGUIDVtbl *lpVtbl;
+ LONG ref;
+ struct class_categories *categories;
+ HKEY key;
+ DWORD next_index;
+} CLSID_IEnumGUIDImpl;
+
+static ULONG WINAPI COMCAT_CLSID_IEnumGUID_AddRef(LPENUMGUID iface)
+{
+ CLSID_IEnumGUIDImpl *This = (CLSID_IEnumGUIDImpl *)iface;
+ TRACE("\n");
+
+ return InterlockedIncrement(&This->ref);
+}
+
+static HRESULT WINAPI COMCAT_CLSID_IEnumGUID_QueryInterface(
+ LPENUMGUID iface,
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
+
+ if (ppvObj == NULL) return E_POINTER;
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IEnumGUID))
+ {
+ *ppvObj = (LPVOID)iface;
+ COMCAT_CLSID_IEnumGUID_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI COMCAT_CLSID_IEnumGUID_Release(LPENUMGUID iface)
+{
+ CLSID_IEnumGUIDImpl *This = (CLSID_IEnumGUIDImpl *)iface;
+ ULONG ref;
+
+ TRACE("\n");
+
+ ref = InterlockedDecrement(&This->ref);
+ if (ref == 0) {
+ if (This->key) RegCloseKey(This->key);
+ HeapFree(GetProcessHeap(), 0, (LPVOID)This->categories);
+ HeapFree(GetProcessHeap(), 0, This);
+ return 0;
+ }
+ return ref;
+}
+
+static HRESULT WINAPI COMCAT_CLSID_IEnumGUID_Next(
+ LPENUMGUID iface,
+ ULONG celt,
+ GUID *rgelt,
+ ULONG *pceltFetched)
+{
+ CLSID_IEnumGUIDImpl *This = (CLSID_IEnumGUIDImpl *)iface;
+ ULONG fetched = 0;
+
+ TRACE("\n");
+
+ if (rgelt == NULL) return E_POINTER;
+
+ if (This->key) while (fetched < celt) {
+ LSTATUS res;
+ HRESULT hr;
+ WCHAR clsid[39];
+ DWORD cName = 39;
+ HKEY subkey;
+
+ res = RegEnumKeyExW(This->key, This->next_index, clsid, &cName,
+ NULL, NULL, NULL, NULL);
+ if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) break;
+ ++(This->next_index);
+
+ hr = CLSIDFromString(clsid, rgelt);
+ if (FAILED(hr)) continue;
+
+ res = RegOpenKeyExW(This->key, clsid, 0, KEY_READ, &subkey);
+ if (res != ERROR_SUCCESS) continue;
+
+ hr = COMCAT_IsClassOfCategories(subkey, This->categories);
+ RegCloseKey(subkey);
+ if (hr != S_OK) continue;
+
+ ++fetched;
+ ++rgelt;
+ }
+
+ if (pceltFetched) *pceltFetched = fetched;
+ return fetched == celt ? S_OK : S_FALSE;
+}
+
+static HRESULT WINAPI COMCAT_CLSID_IEnumGUID_Skip(
+ LPENUMGUID iface,
+ ULONG celt)
+{
+ CLSID_IEnumGUIDImpl *This = (CLSID_IEnumGUIDImpl *)iface;
+
+ TRACE("\n");
+
+ This->next_index += celt;
+ FIXME("Never returns S_FALSE\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI COMCAT_CLSID_IEnumGUID_Reset(LPENUMGUID iface)
+{
+ CLSID_IEnumGUIDImpl *This = (CLSID_IEnumGUIDImpl *)iface;
+
+ TRACE("\n");
+
+ This->next_index = 0;
+ return S_OK;
+}
+
+static HRESULT WINAPI COMCAT_CLSID_IEnumGUID_Clone(
+ LPENUMGUID iface,
+ IEnumGUID **ppenum)
+{
+ CLSID_IEnumGUIDImpl *This = (CLSID_IEnumGUIDImpl *)iface;
+ static const WCHAR keyname[] = { 'C', 'L', 'S', 'I', 'D', 0 };
+ CLSID_IEnumGUIDImpl *new_this;
+ DWORD size;
+
+ TRACE("\n");
+
+ if (ppenum == NULL) return E_POINTER;
+
+ new_this = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CLSID_IEnumGUIDImpl));
+ if (new_this == NULL) return E_OUTOFMEMORY;
+
+ new_this->lpVtbl = This->lpVtbl;
+ new_this->ref = 1;
+ size = HeapSize(GetProcessHeap(), 0, (LPVOID)This->categories);
+ new_this->categories =
+ HeapAlloc(GetProcessHeap(), 0, size);
+ if (new_this->categories == NULL) {
+ HeapFree(GetProcessHeap(), 0, new_this);
+ return E_OUTOFMEMORY;
+ }
+ memcpy((LPVOID)new_this->categories, This->categories, size);
+ /* FIXME: could we more efficiently use DuplicateHandle? */
+ RegOpenKeyExW(HKEY_CLASSES_ROOT, keyname, 0, KEY_READ, &new_this->key);
+ new_this->next_index = This->next_index;
+
+ *ppenum = (LPENUMGUID)new_this;
+ return S_OK;
+}
+
+static const IEnumGUIDVtbl COMCAT_CLSID_IEnumGUID_Vtbl =
+{
+ COMCAT_CLSID_IEnumGUID_QueryInterface,
+ COMCAT_CLSID_IEnumGUID_AddRef,
+ COMCAT_CLSID_IEnumGUID_Release,
+ COMCAT_CLSID_IEnumGUID_Next,
+ COMCAT_CLSID_IEnumGUID_Skip,
+ COMCAT_CLSID_IEnumGUID_Reset,
+ COMCAT_CLSID_IEnumGUID_Clone
+};
+
+static LPENUMGUID COMCAT_CLSID_IEnumGUID_Construct(struct class_categories *categories)
+{
+ CLSID_IEnumGUIDImpl *This;
+
+ This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CLSID_IEnumGUIDImpl));
+ if (This) {
+ static const WCHAR keyname[] = { 'C', 'L', 'S', 'I', 'D', 0 };
+
+ This->lpVtbl = &COMCAT_CLSID_IEnumGUID_Vtbl;
+ This->categories = categories;
+ RegOpenKeyExW(HKEY_CLASSES_ROOT, keyname, 0, KEY_READ, &This->key);
+ }
+ return (LPENUMGUID)This;
+}
+
+/**********************************************************************
+ * CategoriesOfClass IEnumCATID (IEnumGUID) implementation
+ *
+ * This implementation is not thread-safe. The manager itself is, but
+ * I can't imagine a valid use of an enumerator in several threads.
+ */
+typedef struct
+{
+ const IEnumGUIDVtbl *lpVtbl;
+ LONG ref;
+ WCHAR keyname[68];
+ HKEY key;
+ DWORD next_index;
+} CATID_IEnumGUIDImpl;
+
+static ULONG WINAPI COMCAT_CATID_IEnumGUID_AddRef(LPENUMGUID iface)
+{
+ CATID_IEnumGUIDImpl *This = (CATID_IEnumGUIDImpl *)iface;
+ TRACE("\n");
+
+ return InterlockedIncrement(&This->ref);
+}
+
+static HRESULT WINAPI COMCAT_CATID_IEnumGUID_QueryInterface(
+ LPENUMGUID iface,
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
+
+ if (ppvObj == NULL) return E_POINTER;
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IEnumGUID))
+ {
+ *ppvObj = (LPVOID)iface;
+ COMCAT_CATID_IEnumGUID_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI COMCAT_CATID_IEnumGUID_Release(LPENUMGUID iface)
+{
+ CATID_IEnumGUIDImpl *This = (CATID_IEnumGUIDImpl *)iface;
+ ULONG ref;
+
+ TRACE("\n");
+
+ ref = InterlockedDecrement(&This->ref);
+ if (ref == 0) {
+ if (This->key) RegCloseKey(This->key);
+ HeapFree(GetProcessHeap(), 0, This);
+ return 0;
+ }
+ return ref;
+}
+
+static HRESULT WINAPI COMCAT_CATID_IEnumGUID_Next(
+ LPENUMGUID iface,
+ ULONG celt,
+ GUID *rgelt,
+ ULONG *pceltFetched)
+{
+ CATID_IEnumGUIDImpl *This = (CATID_IEnumGUIDImpl *)iface;
+ ULONG fetched = 0;
+
+ TRACE("\n");
+
+ if (rgelt == NULL) return E_POINTER;
+
+ if (This->key) while (fetched < celt) {
+ LSTATUS res;
+ HRESULT hr;
+ WCHAR catid[39];
+ DWORD cName = 39;
+
+ res = RegEnumKeyExW(This->key, This->next_index, catid, &cName,
+ NULL, NULL, NULL, NULL);
+ if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) break;
+ ++(This->next_index);
+
+ hr = CLSIDFromString(catid, rgelt);
+ if (FAILED(hr)) continue;
+
+ ++fetched;
+ ++rgelt;
+ }
+
+ if (pceltFetched) *pceltFetched = fetched;
+ return fetched == celt ? S_OK : S_FALSE;
+}
+
+static HRESULT WINAPI COMCAT_CATID_IEnumGUID_Skip(
+ LPENUMGUID iface,
+ ULONG celt)
+{
+ CATID_IEnumGUIDImpl *This = (CATID_IEnumGUIDImpl *)iface;
+
+ TRACE("\n");
+
+ This->next_index += celt;
+ FIXME("Never returns S_FALSE\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI COMCAT_CATID_IEnumGUID_Reset(LPENUMGUID iface)
+{
+ CATID_IEnumGUIDImpl *This = (CATID_IEnumGUIDImpl *)iface;
+
+ TRACE("\n");
+
+ This->next_index = 0;
+ return S_OK;
+}
+
+static HRESULT WINAPI COMCAT_CATID_IEnumGUID_Clone(
+ LPENUMGUID iface,
+ IEnumGUID **ppenum)
+{
+ CATID_IEnumGUIDImpl *This = (CATID_IEnumGUIDImpl *)iface;
+ CATID_IEnumGUIDImpl *new_this;
+
+ TRACE("\n");
+
+ if (ppenum == NULL) return E_POINTER;
+
+ new_this = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CATID_IEnumGUIDImpl));
+ if (new_this == NULL) return E_OUTOFMEMORY;
+
+ new_this->lpVtbl = This->lpVtbl;
+ new_this->ref = 1;
+ lstrcpyW(new_this->keyname, This->keyname);
+ /* FIXME: could we more efficiently use DuplicateHandle? */
+ RegOpenKeyExW(HKEY_CLASSES_ROOT, new_this->keyname, 0, KEY_READ, &new_this->key);
+ new_this->next_index = This->next_index;
+
+ *ppenum = (LPENUMGUID)new_this;
+ return S_OK;
+}
+
+static const IEnumGUIDVtbl COMCAT_CATID_IEnumGUID_Vtbl =
+{
+ COMCAT_CATID_IEnumGUID_QueryInterface,
+ COMCAT_CATID_IEnumGUID_AddRef,
+ COMCAT_CATID_IEnumGUID_Release,
+ COMCAT_CATID_IEnumGUID_Next,
+ COMCAT_CATID_IEnumGUID_Skip,
+ COMCAT_CATID_IEnumGUID_Reset,
+ COMCAT_CATID_IEnumGUID_Clone
+};
+
+static LPENUMGUID COMCAT_CATID_IEnumGUID_Construct(
+ REFCLSID rclsid, LPCWSTR postfix)
+{
+ CATID_IEnumGUIDImpl *This;
+
+ This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CATID_IEnumGUIDImpl));
+ if (This) {
+ WCHAR prefix[6] = { 'C', 'L', 'S', 'I', 'D', '\\' };
+
+ This->lpVtbl = &COMCAT_CATID_IEnumGUID_Vtbl;
+ memcpy(This->keyname, prefix, sizeof(prefix));
+ StringFromGUID2(rclsid, This->keyname + 6, 39);
+ lstrcpyW(This->keyname + 44, postfix);
+ RegOpenKeyExW(HKEY_CLASSES_ROOT, This->keyname, 0, KEY_READ, &This->key);
+ }
+ return (LPENUMGUID)This;
+}
diff --git a/reactos/dll/win32/ole32/compobj.c b/reactos/dll/win32/ole32/compobj.c
index 69f42fcc997..37907eccca1 100644
--- a/reactos/dll/win32/ole32/compobj.c
+++ b/reactos/dll/win32/ole32/compobj.c
@@ -34,9 +34,6 @@
* - Implement the OXID resolver so we don't need magic endpoint names for
* clients and servers to meet up
*
- * - Make all ole interface marshaling use NDR to be wire compatible with
- * native DCOM
- *
*/
#include "config.h"
@@ -66,14 +63,12 @@
WINE_DEFAULT_DEBUG_CHANNEL(ole);
-HINSTANCE OLE32_hInstance = 0; /* FIXME: make static ... */
+HINSTANCE OLE32_hInstance = 0;
#define ARRAYSIZE(array) (sizeof(array)/sizeof((array)[0]))
/****************************************************************************
* This section defines variables internal to the COM module.
- *
- * TODO: Most of these things will have to be made thread-safe.
*/
static HRESULT COM_GetRegisteredClassObject(const struct apartment *apt, REFCLSID rclsid,
@@ -116,7 +111,7 @@ static LONG s_COMServerProcessReferences = 0;
* objects.
*
* TODO: Make this data structure aware of inter-process communication. This
- * means that parts of this will be exported to the Wine Server.
+ * means that parts of this will be exported to rpcss.
*/
typedef struct tagRegisteredClass
{
@@ -209,8 +204,8 @@ static void COMPOBJ_InitProcess( void )
* following class is created. The *caller* of CoMarshalInterface (i.e., the
* application) is responsible for pumping the message loop in that thread.
* The WM_USER messages which point to the RPCs are then dispatched to
- * COM_AptWndProc by the user's code from the apartment in which the interface
- * was unmarshalled.
+ * apartment_wndproc by the user's code from the apartment in which the
+ * interface was unmarshalled.
*/
memset(&wclass, 0, sizeof(wclass));
wclass.lpfnWndProc = apartment_wndproc;
@@ -560,6 +555,8 @@ struct host_thread_params
HWND apartment_hwnd;
};
+/* thread for hosting an object to allow an object to appear to be created in
+ * an apartment with an incompatible threading model */
static DWORD CALLBACK apartment_hostobject_thread(LPVOID p)
{
struct host_thread_params *params = p;
@@ -609,7 +606,12 @@ static DWORD CALLBACK apartment_hostobject_thread(LPVOID p)
return S_OK;
}
-static HRESULT apartment_hostobject_in_hostapt(struct apartment *apt, BOOL multi_threaded, BOOL main_apartment, HKEY hkeydll, REFCLSID rclsid, REFIID riid, void **ppv)
+/* finds or creates a host apartment, creates the object inside it and returns
+ * a proxy to it so that the object can be used in the apartment of the
+ * caller of this function */
+static HRESULT apartment_hostobject_in_hostapt(
+ struct apartment *apt, BOOL multi_threaded, BOOL main_apartment,
+ HKEY hkeydll, REFCLSID rclsid, REFIID riid, void **ppv)
{
struct host_object_params params;
HWND apartment_hwnd = NULL;
@@ -715,6 +717,8 @@ static HRESULT apartment_hostobject_in_hostapt(struct apartment *apt, BOOL multi
return hr;
}
+/* create a window for the apartment or return the current one if one has
+ * already been created */
HRESULT apartment_createwindowifneeded(struct apartment *apt)
{
if (apt->multi_threaded)
@@ -738,6 +742,7 @@ HRESULT apartment_createwindowifneeded(struct apartment *apt)
return S_OK;
}
+/* retrieves the window for the main- or apartment-threaded apartment */
HWND apartment_getwindow(const struct apartment *apt)
{
assert(!apt->multi_threaded);
@@ -750,6 +755,8 @@ void apartment_joinmta(void)
COM_CurrentInfo()->apt = MTA;
}
+/* gets the specified class object by loading the appropriate DLL, if
+ * necessary and calls the DllGetClassObject function for the DLL */
static HRESULT apartment_getclassobject(struct apartment *apt, LPCWSTR dllpath,
BOOL apartment_threaded,
REFCLSID rclsid, REFIID riid, void **ppv)
@@ -822,6 +829,8 @@ static HRESULT apartment_getclassobject(struct apartment *apt, LPCWSTR dllpath,
return hr;
}
+/* frees unused libraries loaded by apartment_getclassobject by calling the
+ * DLL's DllCanUnloadNow entry point */
static void apartment_freeunusedlibraries(struct apartment *apt, DWORD delay)
{
struct apartment_loaded_dll *entry, *next;
@@ -834,6 +843,10 @@ static void apartment_freeunusedlibraries(struct apartment *apt, DWORD delay)
if (real_delay == INFINITE)
{
+ /* DLLs that return multi-threaded objects aren't unloaded
+ * straight away to cope for programs that have races between
+ * last object destruction and threads in the DLLs that haven't
+ * finished, despite DllCanUnloadNow returning S_OK */
if (entry->multi_threaded)
real_delay = 10 * 60 * 1000; /* 10 minutes */
else
diff --git a/reactos/dll/win32/ole32/compobj_private.h b/reactos/dll/win32/ole32/compobj_private.h
index fbfe37c2b9c..81d591ea3fb 100644
--- a/reactos/dll/win32/ole32/compobj_private.h
+++ b/reactos/dll/win32/ole32/compobj_private.h
@@ -4,7 +4,7 @@
* Copyright 1999 Francis Beaudet
* Copyright 1999 Sylvain St-Germain
* Copyright 2002 Marcus Meissner
- * Copyright 2003 Ove Kеven, TransGaming Technologies
+ * Copyright 2003 Ove KГҐven, TransGaming Technologies
* Copyright 2004 Mike Hearn, Rob Shearman, CodeWeavers Inc
*
* This library is free software; you can redistribute it and/or
diff --git a/reactos/dll/win32/ole32/dcom.idl b/reactos/dll/win32/ole32/dcom.idl
index d4abf43e721..a1c0dcd5689 100644
--- a/reactos/dll/win32/ole32/dcom.idl
+++ b/reactos/dll/win32/ole32/dcom.idl
@@ -1,5 +1,5 @@
/*
- * Copyright 2003 Ove Kеven, TransGaming Technologies
+ * Copyright 2003 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/reactos/dll/win32/ole32/defaulthandler.c b/reactos/dll/win32/ole32/defaulthandler.c
index afacc510dd7..6844ee86b3a 100644
--- a/reactos/dll/win32/ole32/defaulthandler.c
+++ b/reactos/dll/win32/ole32/defaulthandler.c
@@ -64,6 +64,13 @@
WINE_DEFAULT_DEBUG_CHANNEL(ole);
+enum storage_state
+{
+ storage_state_uninitialised,
+ storage_state_initialised,
+ storage_state_loaded
+};
+
/****************************************************************************
* DefaultHandler
*
@@ -119,16 +126,14 @@ struct DefaultHandler
/* connection cookie for the advise on the delegate OLE object */
DWORD dwAdvConn;
+
+ /* storage passed to Load or InitNew */
+ IStorage *storage;
+ enum storage_state storage_state;
};
typedef struct DefaultHandler DefaultHandler;
-/*
- * Here, I define utility functions to help with the casting of the
- * "This" parameter.
- * There is a version to accommodate all of the VTables implemented
- * by this object.
- */
static inline DefaultHandler *impl_from_IOleObject( IOleObject *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpVtbl));
@@ -186,7 +191,6 @@ static HRESULT WINAPI DefaultHandler_NDIUnknown_QueryInterface(
{
DefaultHandler *This = impl_from_NDIUnknown(iface);
- /* Perform a sanity check on the parameters. */
if (!ppvObject)
return E_INVALIDARG;
@@ -258,7 +262,6 @@ static ULONG WINAPI DefaultHandler_NDIUnknown_Release(
DefaultHandler *This = impl_from_NDIUnknown(iface);
ULONG ref;
- /* Decrease the reference count on this object. */
ref = InterlockedDecrement(&This->ref);
if (!ref) DefaultHandler_Destroy(This);
@@ -361,7 +364,6 @@ static HRESULT WINAPI DefaultHandler_GetClientSite(
{
DefaultHandler *This = impl_from_IOleObject(iface);
- /* Sanity check. */
if (!ppClientSite)
return E_POINTER;
@@ -402,7 +404,6 @@ static HRESULT WINAPI DefaultHandler_SetHostNames(
HeapFree( GetProcessHeap(), 0, This->containerObj );
This->containerObj = NULL;
- /* Copy the string supplied. */
if (szContainerApp)
{
if ((This->containerApp = HeapAlloc( GetProcessHeap(), 0,
@@ -419,8 +420,8 @@ static HRESULT WINAPI DefaultHandler_SetHostNames(
return S_OK;
}
-/* undos the work done by DefaultHandler_Run */
-static void WINAPI DefaultHandler_Stop(DefaultHandler *This)
+/* undoes the work done by DefaultHandler_Run */
+static void DefaultHandler_Stop(DefaultHandler *This)
{
if (!object_is_running(This))
return;
@@ -631,8 +632,15 @@ static HRESULT WINAPI DefaultHandler_EnumVerbs(
static HRESULT WINAPI DefaultHandler_Update(
IOleObject* iface)
{
- FIXME(": Stub\n");
- return E_NOTIMPL;
+ DefaultHandler *This = impl_from_IOleObject(iface);
+ TRACE("(%p)\n", iface);
+
+ if (!object_is_running(This))
+ {
+ FIXME("Should run object\n");
+ return E_NOTIMPL;
+ }
+ return IOleObject_Update(This->pOleDelegate);
}
/************************************************************************
@@ -645,9 +653,13 @@ static HRESULT WINAPI DefaultHandler_Update(
static HRESULT WINAPI DefaultHandler_IsUpToDate(
IOleObject* iface)
{
- TRACE("(%p)\n", iface);
+ DefaultHandler *This = impl_from_IOleObject(iface);
+ TRACE("(%p)\n", iface);
- return OLE_E_NOTRUNNING;
+ if (object_is_running(This))
+ return IOleObject_IsUpToDate(This->pOleDelegate);
+
+ return OLE_E_NOTRUNNING;
}
/************************************************************************
@@ -668,7 +680,6 @@ static HRESULT WINAPI DefaultHandler_GetUserClassID(
if (object_is_running(This))
return IOleObject_GetUserClassID(This->pOleDelegate, pClsid);
- /* Sanity check. */
if (!pClsid)
return E_POINTER;
@@ -693,6 +704,8 @@ static HRESULT WINAPI DefaultHandler_GetUserType(
DefaultHandler *This = impl_from_IOleObject(iface);
TRACE("(%p, %d, %p)\n", iface, dwFormOfType, pszUserType);
+ if (object_is_running(This))
+ return IOleObject_GetUserType(This->pOleDelegate, dwFormOfType, pszUserType);
return OleRegGetUserType(&This->clsid, dwFormOfType, pszUserType);
}
@@ -764,9 +777,6 @@ static HRESULT WINAPI DefaultHandler_GetExtent(
targetDevice,
psizel);
- /*
- * Cleanup
- */
IViewObject2_Release(cacheView);
return hres;
@@ -845,7 +855,6 @@ static HRESULT WINAPI DefaultHandler_EnumAdvise(
TRACE("(%p, %p)\n", iface, ppenumAdvise);
- /* Sanity check */
if (!ppenumAdvise)
return E_POINTER;
@@ -1202,7 +1211,6 @@ static HRESULT WINAPI DefaultHandler_EnumDAdvise(
TRACE("(%p, %p)\n", iface, ppenumAdvise);
- /* Sanity check */
if (!ppenumAdvise)
return E_POINTER;
@@ -1305,7 +1313,12 @@ static HRESULT WINAPI DefaultHandler_Run(
IOleObject_QueryInterface(This->pOleDelegate, &IID_IPersistStorage,
(void **)&This->pPSDelegate);
if (This->pPSDelegate)
- hr = IPersistStorage_InitNew(This->pPSDelegate, NULL);
+ {
+ if(This->storage_state == storage_state_initialised)
+ hr = IPersistStorage_InitNew(This->pPSDelegate, This->storage);
+ else if(This->storage_state == storage_state_loaded)
+ hr = IPersistStorage_Load(This->pPSDelegate, This->storage);
+ }
}
if (SUCCEEDED(hr) && This->containerApp)
@@ -1507,9 +1520,17 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_GetClassID(
IPersistStorage* iface,
CLSID* clsid)
{
- DefaultHandler *This = impl_from_IPersistStorage(iface);
+ DefaultHandler *This = impl_from_IPersistStorage(iface);
+ HRESULT hr;
- return IPersistStorage_GetClassID(This->dataCache_PersistStg, clsid);
+ TRACE("(%p)->(%p)\n", iface, clsid);
+
+ if(object_is_running(This))
+ hr = IPersistStorage_GetClassID(This->pPSDelegate, clsid);
+ else
+ hr = IPersistStorage_GetClassID(This->dataCache_PersistStg, clsid);
+
+ return hr;
}
/************************************************************************
@@ -1519,9 +1540,106 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_GetClassID(
static HRESULT WINAPI DefaultHandler_IPersistStorage_IsDirty(
IPersistStorage* iface)
{
- DefaultHandler *This = impl_from_IPersistStorage(iface);
+ DefaultHandler *This = impl_from_IPersistStorage(iface);
+ HRESULT hr;
- return IPersistStorage_IsDirty(This->dataCache_PersistStg);
+ TRACE("(%p)\n", iface);
+
+ hr = IPersistStorage_IsDirty(This->dataCache_PersistStg);
+ if(hr != S_FALSE) return hr;
+
+ if(object_is_running(This))
+ hr = IPersistStorage_IsDirty(This->pPSDelegate);
+
+ return hr;
+}
+
+/***********************************************************************
+ * init_ole_stream
+ *
+ * Creates the '\1Ole' stream.
+ * The format of this stream is as follows:
+ *
+ * DWORD Version == 0x02000001
+ * DWORD Flags - low bit set indicates the object is a link otherwise it's embedded.
+ * DWORD LinkupdateOption - [MS-OLEDS describes this as an implementation specific hint
+ * supplied by the app that creates the data structure. May be
+ * ignored on processing].
+ *
+ * DWORD Reserved == 0
+ * DWORD MonikerStreamSize - size of the rest of the data (ie CLSID + moniker stream data).
+ * CLSID clsid - class id of object capable of processing the moniker
+ * BYTE data[] - moniker data for a link
+ */
+
+static const WCHAR OleStream[] = {1,'O','l','e',0};
+typedef struct
+{
+ DWORD version;
+ DWORD flags;
+ DWORD link_update_opt;
+ DWORD res;
+ DWORD moniker_size;
+} ole_stream_header_t;
+static const DWORD ole_stream_version = 0x02000001;
+
+static void init_ole_stream(IStorage *storage)
+{
+ HRESULT hr;
+ IStream *stream;
+
+ hr = IStorage_CreateStream(storage, OleStream, STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stream);
+ if(SUCCEEDED(hr))
+ {
+ DWORD written;
+ ole_stream_header_t header;
+
+ header.version = ole_stream_version;
+ header.flags = 0;
+ header.link_update_opt = 0;
+ header.res = 0;
+ header.moniker_size = 0;
+
+ IStream_Write(stream, &header, sizeof(header), &written);
+ IStream_Release(stream);
+ }
+ return;
+}
+
+static HRESULT load_ole_stream(DefaultHandler *This, IStorage *storage)
+{
+ IStream *stream;
+ HRESULT hr;
+
+ hr = IStorage_OpenStream(storage, OleStream, NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &stream);
+
+ if(SUCCEEDED(hr))
+ {
+ DWORD read;
+ ole_stream_header_t header;
+
+ hr = IStream_Read(stream, &header, sizeof(header), &read);
+ if(hr == S_OK && read == sizeof(header) && header.version == ole_stream_version)
+ {
+ if(header.flags & 1)
+ {
+ /* FIXME: Read the moniker and deal with the link */
+ FIXME("Linked objects are not supported yet\n");
+ }
+ }
+ else
+ {
+ WARN("Incorrect OleStream header\n");
+ hr = DV_E_CLIPFORMAT;
+ }
+ IStream_Release(stream);
+ }
+ else
+ {
+ init_ole_stream(storage);
+ hr = S_OK;
+ }
+ return hr;
}
/************************************************************************
@@ -1532,9 +1650,25 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_InitNew(
IPersistStorage* iface,
IStorage* pStg)
{
- DefaultHandler *This = impl_from_IPersistStorage(iface);
+ DefaultHandler *This = impl_from_IPersistStorage(iface);
+ HRESULT hr;
- return IPersistStorage_InitNew(This->dataCache_PersistStg, pStg);
+ TRACE("(%p)->(%p)\n", iface, pStg);
+ init_ole_stream(pStg);
+
+ hr = IPersistStorage_InitNew(This->dataCache_PersistStg, pStg);
+
+ if(SUCCEEDED(hr) && object_is_running(This))
+ hr = IPersistStorage_InitNew(This->pPSDelegate, pStg);
+
+ if(SUCCEEDED(hr))
+ {
+ IStorage_AddRef(pStg);
+ This->storage = pStg;
+ This->storage_state = storage_state_initialised;
+ }
+
+ return hr;
}
@@ -1546,9 +1680,26 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_Load(
IPersistStorage* iface,
IStorage* pStg)
{
- DefaultHandler *This = impl_from_IPersistStorage(iface);
+ DefaultHandler *This = impl_from_IPersistStorage(iface);
+ HRESULT hr;
- return IPersistStorage_Load(This->dataCache_PersistStg, pStg);
+ TRACE("(%p)->(%p)\n", iface, pStg);
+
+ hr = load_ole_stream(This, pStg);
+
+ if(SUCCEEDED(hr))
+ hr = IPersistStorage_Load(This->dataCache_PersistStg, pStg);
+
+ if(SUCCEEDED(hr) && object_is_running(This))
+ hr = IPersistStorage_Load(This->pPSDelegate, pStg);
+
+ if(SUCCEEDED(hr))
+ {
+ IStorage_AddRef(pStg);
+ This->storage = pStg;
+ This->storage_state = storage_state_loaded;
+ }
+ return hr;
}
@@ -1559,11 +1710,18 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_Load(
static HRESULT WINAPI DefaultHandler_IPersistStorage_Save(
IPersistStorage* iface,
IStorage* pStgSave,
- BOOL fSaveAsLoad)
+ BOOL fSameAsLoad)
{
- DefaultHandler *This = impl_from_IPersistStorage(iface);
+ DefaultHandler *This = impl_from_IPersistStorage(iface);
+ HRESULT hr;
- return IPersistStorage_Save(This->dataCache_PersistStg, pStgSave, fSaveAsLoad);
+ TRACE("(%p)->(%p, %d)\n", iface, pStgSave, fSameAsLoad);
+
+ hr = IPersistStorage_Save(This->dataCache_PersistStg, pStgSave, fSameAsLoad);
+ if(SUCCEEDED(hr) && object_is_running(This))
+ hr = IPersistStorage_Save(This->pPSDelegate, pStgSave, fSameAsLoad);
+
+ return hr;
}
@@ -1575,9 +1733,25 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_SaveCompleted(
IPersistStorage* iface,
IStorage* pStgNew)
{
- DefaultHandler *This = impl_from_IPersistStorage(iface);
+ DefaultHandler *This = impl_from_IPersistStorage(iface);
+ HRESULT hr;
- return IPersistStorage_SaveCompleted(This->dataCache_PersistStg, pStgNew);
+ TRACE("(%p)->(%p)\n", iface, pStgNew);
+
+ hr = IPersistStorage_SaveCompleted(This->dataCache_PersistStg, pStgNew);
+
+ if(SUCCEEDED(hr) && object_is_running(This))
+ hr = IPersistStorage_SaveCompleted(This->pPSDelegate, pStgNew);
+
+ if(pStgNew)
+ {
+ IStorage_AddRef(pStgNew);
+ if(This->storage) IStorage_Release(This->storage);
+ This->storage = pStgNew;
+ This->storage_state = storage_state_loaded;
+ }
+
+ return hr;
}
@@ -1588,9 +1762,21 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_SaveCompleted(
static HRESULT WINAPI DefaultHandler_IPersistStorage_HandsOffStorage(
IPersistStorage* iface)
{
- DefaultHandler *This = impl_from_IPersistStorage(iface);
+ DefaultHandler *This = impl_from_IPersistStorage(iface);
+ HRESULT hr;
- return IPersistStorage_HandsOffStorage(This->dataCache_PersistStg);
+ TRACE("(%p)\n", iface);
+
+ hr = IPersistStorage_HandsOffStorage(This->dataCache_PersistStg);
+
+ if(SUCCEEDED(hr) && object_is_running(This))
+ hr = IPersistStorage_HandsOffStorage(This->pPSDelegate);
+
+ if(This->storage) IStorage_Release(This->storage);
+ This->storage = NULL;
+ This->storage_state = storage_state_uninitialised;
+
+ return hr;
}
@@ -1696,9 +1882,6 @@ static DefaultHandler* DefaultHandler_Construct(
DefaultHandler* This = NULL;
HRESULT hr;
- /*
- * Allocate space for the object.
- */
This = HeapAlloc(GetProcessHeap(), 0, sizeof(DefaultHandler));
if (!This)
@@ -1741,9 +1924,7 @@ static DefaultHandler* DefaultHandler_Construct(
hr = IUnknown_QueryInterface(This->dataCache, &IID_IPersistStorage, (void**)&This->dataCache_PersistStg);
if(FAILED(hr))
ERR("Unexpected error creating data cache\n");
- /*
- * Initialize the other data members of the class.
- */
+
This->clsid = *clsid;
This->clientSite = NULL;
This->oleAdviseHolder = NULL;
@@ -1755,6 +1936,8 @@ static DefaultHandler* DefaultHandler_Construct(
This->pDataDelegate = NULL;
This->dwAdvConn = 0;
+ This->storage = NULL;
+ This->storage_state = storage_state_uninitialised;
return This;
}
@@ -1765,13 +1948,11 @@ static void DefaultHandler_Destroy(
/* release delegates */
DefaultHandler_Stop(This);
- /* Free the strings idenfitying the object */
HeapFree( GetProcessHeap(), 0, This->containerApp );
This->containerApp = NULL;
HeapFree( GetProcessHeap(), 0, This->containerObj );
This->containerObj = NULL;
- /* Release our reference to the data cache. */
if (This->dataCache)
{
IPersistStorage_Release(This->dataCache_PersistStg);
@@ -1780,28 +1961,30 @@ static void DefaultHandler_Destroy(
This->dataCache = NULL;
}
- /* Same thing for the client site. */
if (This->clientSite)
{
IOleClientSite_Release(This->clientSite);
This->clientSite = NULL;
}
- /* And the advise holder. */
if (This->oleAdviseHolder)
{
IOleAdviseHolder_Release(This->oleAdviseHolder);
This->oleAdviseHolder = NULL;
}
- /* And the data advise holder. */
if (This->dataAdviseHolder)
{
IDataAdviseHolder_Release(This->dataAdviseHolder);
This->dataAdviseHolder = NULL;
}
- /* Free the actual default handler structure. */
+ if (This->storage)
+ {
+ IStorage_Release(This->storage);
+ This->storage = NULL;
+ }
+
HeapFree(GetProcessHeap(), 0, This);
}
@@ -1819,9 +2002,6 @@ HRESULT WINAPI OleCreateDefaultHandler(
TRACE("(%s, %p, %s, %p)\n", debugstr_guid(clsid), pUnkOuter, debugstr_guid(riid), ppvObj);
- /*
- * Sanity check
- */
if (!ppvObj)
return E_POINTER;
diff --git a/reactos/dll/win32/ole32/filemoniker.c b/reactos/dll/win32/ole32/filemoniker.c
index 74c867a2a8e..3dae13970aa 100644
--- a/reactos/dll/win32/ole32/filemoniker.c
+++ b/reactos/dll/win32/ole32/filemoniker.c
@@ -358,12 +358,12 @@ FileMonikerImpl_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty)
/* write a 0 WORD */
res=IStream_Write(pStm,&ZERO,sizeof(WORD),NULL);
- if (!SUCCEEDED(res)) return res;
+ if (FAILED(res)) return res;
/* write length of filePath string ( 0 included )*/
bytesA = WideCharToMultiByte( CP_ACP, 0, filePathW, -1, NULL, 0, NULL, NULL );
res=IStream_Write(pStm,&bytesA,sizeof(DWORD),NULL);
- if (!SUCCEEDED(res)) return res;
+ if (FAILED(res)) return res;
/* write A string (with '\0') */
filePathA=HeapAlloc(GetProcessHeap(),0,bytesA);
@@ -372,17 +372,17 @@ FileMonikerImpl_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty)
WideCharToMultiByte( CP_ACP, 0, filePathW, -1, filePathA, bytesA, NULL, &bUsedDefault);
res=IStream_Write(pStm,filePathA,bytesA,NULL);
HeapFree(GetProcessHeap(),0,filePathA);
- if (!SUCCEEDED(res)) return res;
+ if (FAILED(res)) return res;
/* write a DWORD 0xDEADFFFF */
res=IStream_Write(pStm,&DEADFFFF,sizeof(DWORD),NULL);
- if (!SUCCEEDED(res)) return res;
+ if (FAILED(res)) return res;
/* write 5 zero DWORDs */
for(i=0;i<5;i++)
{
res=IStream_Write(pStm,&ZERO,sizeof(DWORD),NULL);
- if (!SUCCEEDED(res)) return res;
+ if (FAILED(res)) return res;
}
/* Write the wide version if:
@@ -414,16 +414,16 @@ FileMonikerImpl_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty)
/* write bytes needed for the filepathW (without 0) + 6 */
bytesW = len*sizeof(WCHAR) + 6;
res=IStream_Write(pStm,&bytesW,sizeof(DWORD),NULL);
- if (!SUCCEEDED(res)) return res;
+ if (FAILED(res)) return res;
/* try again, without the extra 6 */
bytesW -= 6;
res=IStream_Write(pStm,&bytesW,sizeof(DWORD),NULL);
- if (!SUCCEEDED(res)) return res;
+ if (FAILED(res)) return res;
/* write a WORD 3 */
res=IStream_Write(pStm,&THREE,sizeof(WORD),NULL);
- if (!SUCCEEDED(res)) return res;
+ if (FAILED(res)) return res;
/* write W string (no 0) */
res=IStream_Write(pStm,filePathW,bytesW,NULL);
diff --git a/reactos/dll/win32/ole32/moniker.c b/reactos/dll/win32/ole32/moniker.c
index a4d2a5efc59..4e5646279b2 100644
--- a/reactos/dll/win32/ole32/moniker.c
+++ b/reactos/dll/win32/ole32/moniker.c
@@ -19,14 +19,11 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- *
- * TODO:
- * - IRunningObjectTable should work interprocess, but currently doesn't.
- * Native (on Win2k at least) uses an undocumented RPC interface, IROT, to
- * communicate with RPCSS which contains the table of marshalled data.
*/
-#include
+#include "config.h"
+#include "wine/port.h"
+
#include
#include
@@ -42,25 +39,33 @@
#include "wine/list.h"
#include "wine/debug.h"
#include "wine/unicode.h"
+#include "wine/exception.h"
#include "compobj_private.h"
#include "moniker.h"
+#include "irot.h"
WINE_DEFAULT_DEBUG_CHANNEL(ole);
/* see MSDN docs for IROTData::GetComparisonData, which states what this
- * constant is (http://msdn2.microsoft.com/en-us/library/ms693773.aspx) */
+ * constant is
+ */
#define MAX_COMPARISON_DATA 2048
+static LONG WINAPI rpc_filter(EXCEPTION_POINTERS *eptr)
+{
+ return I_RpcExceptionFilter(eptr->ExceptionRecord->ExceptionCode);
+}
+
/* define the structure of the running object table elements */
struct rot_entry
{
struct list entry;
- MInterfacePointer* object; /* marshaled running object*/
- MInterfacePointer* moniker; /* marshaled moniker that identifies this object */
- MInterfacePointer* moniker_data; /* moniker comparison data that identifies this object */
+ InterfaceData* object; /* marshaled running object*/
+ MonikerComparisonData* moniker_data; /* moniker comparison data that identifies this object */
DWORD cookie; /* cookie identifying this object */
FILETIME last_modified;
+ IrotContextHandle ctxt_handle;
};
/* define the RunningObjectTableImpl structure */
@@ -74,16 +79,7 @@ typedef struct RunningObjectTableImpl
} RunningObjectTableImpl;
static RunningObjectTableImpl* runningObjectTableInstance = NULL;
-
-
-
-static inline HRESULT WINAPI
-IrotRegister(DWORD *cookie)
-{
- static LONG last_cookie = 1;
- *cookie = InterlockedIncrement(&last_cookie);
- return S_OK;
-}
+static IrotHandle irot_handle;
/* define the EnumMonikerImpl structure */
typedef struct EnumMonikerImpl
@@ -91,17 +87,79 @@ typedef struct EnumMonikerImpl
const IEnumMonikerVtbl *lpVtbl;
LONG ref;
- MInterfacePointer **monikers;
- ULONG moniker_count;
+ InterfaceList *moniker_list;
ULONG pos;
} EnumMonikerImpl;
/* IEnumMoniker Local functions*/
-static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(MInterfacePointer **monikers,
- ULONG moniker_count, ULONG pos, IEnumMoniker **ppenumMoniker);
+static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(InterfaceList *moniker_list,
+ ULONG pos, IEnumMoniker **ppenumMoniker);
-static HRESULT create_stream_on_mip_ro(const MInterfacePointer *mip, IStream **stream)
+static IrotHandle get_irot_handle(void)
+{
+ if (!irot_handle)
+ {
+ RPC_STATUS status;
+ RPC_WSTR binding;
+ IrotHandle new_handle;
+ unsigned short ncacn_np[] = IROT_PROTSEQ;
+ unsigned short endpoint[] = IROT_ENDPOINT;
+ status = RpcStringBindingComposeW(NULL, ncacn_np, NULL, endpoint, NULL, &binding);
+ if (status == RPC_S_OK)
+ {
+ status = RpcBindingFromStringBindingW(binding, &new_handle);
+ RpcStringFreeW(&binding);
+ }
+ if (status != RPC_S_OK)
+ return NULL;
+ if (InterlockedCompareExchangePointer(&irot_handle, new_handle, NULL))
+ /* another thread beat us to it */
+ RpcBindingFree(&new_handle);
+ }
+ return irot_handle;
+}
+
+static BOOL start_rpcss(void)
+{
+ PROCESS_INFORMATION pi;
+ STARTUPINFOW si;
+ static WCHAR cmd[6];
+ static const WCHAR rpcss[] = {'r','p','c','s','s',0};
+ BOOL rslt;
+
+ TRACE("\n");
+
+ ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
+ ZeroMemory(&si, sizeof(STARTUPINFOA));
+ si.cb = sizeof(STARTUPINFOA);
+
+ memcpy(cmd, rpcss, sizeof(rpcss));
+
+ rslt = CreateProcessW(
+ NULL, /* executable */
+ cmd, /* command line */
+ NULL, /* process security attributes */
+ NULL, /* primary thread security attributes */
+ FALSE, /* inherit handles */
+ 0, /* creation flags */
+ NULL, /* use parent's environment */
+ NULL, /* use parent's current directory */
+ &si, /* STARTUPINFO pointer */
+ &pi /* PROCESS_INFORMATION */
+ );
+
+ if (rslt)
+ {
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+ Sleep(100);
+ }
+
+ return rslt;
+}
+
+static HRESULT create_stream_on_mip_ro(const InterfaceData *mip, IStream **stream)
{
HGLOBAL hglobal = GlobalAlloc(0, mip->ulCntData);
void *pv = GlobalLock(hglobal);
@@ -112,7 +170,33 @@ static HRESULT create_stream_on_mip_ro(const MInterfacePointer *mip, IStream **s
static inline void rot_entry_delete(struct rot_entry *rot_entry)
{
- /* FIXME: revoke entry from rpcss's copy of the ROT */
+ if (rot_entry->cookie)
+ {
+ InterfaceData *object = NULL;
+ InterfaceData *moniker = NULL;
+ __TRY
+ {
+ IrotRevoke(get_irot_handle(), rot_entry->cookie,
+ &rot_entry->ctxt_handle, &object, &moniker);
+ }
+ __EXCEPT(rpc_filter)
+ {
+ }
+ __ENDTRY
+ MIDL_user_free(object);
+ if (moniker)
+ {
+ IStream *stream;
+ HRESULT hr;
+ hr = create_stream_on_mip_ro(moniker, &stream);
+ if (hr == S_OK)
+ {
+ CoReleaseMarshalData(stream);
+ IUnknown_Release(stream);
+ }
+ }
+ MIDL_user_free(moniker);
+ }
if (rot_entry->object)
{
IStream *stream;
@@ -124,25 +208,13 @@ static inline void rot_entry_delete(struct rot_entry *rot_entry)
IUnknown_Release(stream);
}
}
- if (rot_entry->moniker)
- {
- IStream *stream;
- HRESULT hr;
- hr = create_stream_on_mip_ro(rot_entry->moniker, &stream);
- if (hr == S_OK)
- {
- CoReleaseMarshalData(stream);
- IUnknown_Release(stream);
- }
- }
HeapFree(GetProcessHeap(), 0, rot_entry->object);
- HeapFree(GetProcessHeap(), 0, rot_entry->moniker);
HeapFree(GetProcessHeap(), 0, rot_entry->moniker_data);
HeapFree(GetProcessHeap(), 0, rot_entry);
}
/* moniker_data must be freed with HeapFree when no longer in use */
-static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MInterfacePointer **moniker_data)
+static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MonikerComparisonData **moniker_data)
{
HRESULT hr;
IROTData *pROTData = NULL;
@@ -150,8 +222,14 @@ static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MInterfacePointer
if (SUCCEEDED(hr))
{
ULONG size = MAX_COMPARISON_DATA;
- *moniker_data = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(MInterfacePointer, abData[size]));
+ *moniker_data = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(MonikerComparisonData, abData[size]));
+ if (!*moniker_data)
+ {
+ IROTData_Release(pROTData);
+ return E_OUTOFMEMORY;
+ }
hr = IROTData_GetComparisonData(pROTData, (*moniker_data)->abData, size, &size);
+ IROTData_Release(pROTData);
if (hr != S_OK)
{
ERR("Failed to copy comparison data into buffer, hr = 0x%08x\n", hr);
@@ -185,7 +263,7 @@ static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MInterfacePointer
len = strlenW(pszDisplayName);
*moniker_data = HeapAlloc(GetProcessHeap(), 0,
- FIELD_OFFSET(MInterfacePointer, abData[sizeof(CLSID) + (len+1)*sizeof(WCHAR)]));
+ FIELD_OFFSET(MonikerComparisonData, abData[sizeof(CLSID) + (len+1)*sizeof(WCHAR)]));
if (!*moniker_data)
{
CoTaskMemFree(pszDisplayName);
@@ -195,6 +273,7 @@ static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MInterfacePointer
memcpy(&(*moniker_data)->abData[0], &clsid, sizeof(clsid));
memcpy(&(*moniker_data)->abData[sizeof(clsid)], pszDisplayName, (len+1)*sizeof(WCHAR));
+ CoTaskMemFree(pszDisplayName);
}
return S_OK;
}
@@ -267,6 +346,7 @@ static HRESULT WINAPI
RunningObjectTableImpl_Destroy(void)
{
struct list *cursor, *cursor2;
+ IrotHandle old_handle;
TRACE("()\n");
@@ -288,6 +368,11 @@ RunningObjectTableImpl_Destroy(void)
HeapFree(GetProcessHeap(),0,runningObjectTableInstance);
runningObjectTableInstance = NULL;
+ old_handle = irot_handle;
+ irot_handle = NULL;
+ if (old_handle)
+ RpcBindingFree(&old_handle);
+
return S_OK;
}
@@ -341,6 +426,7 @@ RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
IStream *pStream = NULL;
DWORD mshlflags;
IBindCtx *pbc;
+ InterfaceData *moniker = NULL;
TRACE("(%p,%d,%p,%p,%p)\n",This,grfFlags,punkObject,pmkObjectName,pdwRegister);
@@ -378,7 +464,7 @@ RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
const void *pv = GlobalLock(hglobal);
rot_entry->object = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(MInterfacePointer, abData[size]));
rot_entry->object->ulCntData = size;
- memcpy(&rot_entry->object->abData, pv, size);
+ memcpy(rot_entry->object->abData, pv, size);
GlobalUnlock(hglobal);
}
}
@@ -442,9 +528,9 @@ RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
{
SIZE_T size = GlobalSize(hglobal);
const void *pv = GlobalLock(hglobal);
- rot_entry->moniker = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(MInterfacePointer, abData[size]));
- rot_entry->moniker->ulCntData = size;
- memcpy(&rot_entry->moniker->abData, pv, size);
+ moniker = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(InterfaceData, abData[size]));
+ moniker->ulCntData = size;
+ memcpy(moniker->abData, pv, size);
GlobalUnlock(hglobal);
}
}
@@ -452,13 +538,35 @@ RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
IMoniker_Release(pmkObjectName);
if (hr != S_OK)
{
+ HeapFree(GetProcessHeap(), 0, moniker);
rot_entry_delete(rot_entry);
return hr;
}
- /* FIXME: not the right signature of IrotRegister function */
- hr = IrotRegister(&rot_entry->cookie);
- if (hr != S_OK)
+
+ while (TRUE)
+ {
+ __TRY
+ {
+ hr = IrotRegister(get_irot_handle(), rot_entry->moniker_data,
+ rot_entry->object, moniker,
+ &rot_entry->last_modified, grfFlags,
+ &rot_entry->cookie, &rot_entry->ctxt_handle);
+ }
+ __EXCEPT(rpc_filter)
+ {
+ hr = HRESULT_FROM_WIN32(GetExceptionCode());
+ }
+ __ENDTRY
+ if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
+ {
+ if (start_rpcss())
+ continue;
+ }
+ break;
+ }
+ HeapFree(GetProcessHeap(), 0, moniker);
+ if (FAILED(hr))
{
rot_entry_delete(rot_entry);
return hr;
@@ -468,7 +576,6 @@ RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
*pdwRegister = rot_entry->cookie;
EnterCriticalSection(&This->lock);
- /* FIXME: see if object was registered before and return MK_S_MONIKERALREADYREGISTERED */
list_add_tail(&This->rot, &rot_entry->entry);
LeaveCriticalSection(&This->lock);
@@ -516,9 +623,9 @@ static HRESULT WINAPI
RunningObjectTableImpl_IsRunning( IRunningObjectTable* iface, IMoniker *pmkObjectName)
{
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
- MInterfacePointer *moniker_data;
+ MonikerComparisonData *moniker_data;
HRESULT hr;
- struct rot_entry *rot_entry;
+ const struct rot_entry *rot_entry;
TRACE("(%p,%p)\n",This,pmkObjectName);
@@ -532,10 +639,10 @@ RunningObjectTableImpl_IsRunning( IRunningObjectTable* iface, IMoniker *pmkObjec
hr = S_FALSE;
EnterCriticalSection(&This->lock);
- LIST_FOR_EACH_ENTRY(rot_entry, &This->rot, struct rot_entry, entry)
+ LIST_FOR_EACH_ENTRY(rot_entry, &This->rot, const struct rot_entry, entry)
{
if ((rot_entry->moniker_data->ulCntData == moniker_data->ulCntData) &&
- !memcmp(&moniker_data->abData, &rot_entry->moniker_data->abData, moniker_data->ulCntData))
+ !memcmp(moniker_data->abData, rot_entry->moniker_data->abData, moniker_data->ulCntData))
{
hr = S_OK;
break;
@@ -543,7 +650,27 @@ RunningObjectTableImpl_IsRunning( IRunningObjectTable* iface, IMoniker *pmkObjec
}
LeaveCriticalSection(&This->lock);
- /* FIXME: call IrotIsRunning */
+ if (hr == S_FALSE)
+ {
+ while (TRUE)
+ {
+ __TRY
+ {
+ hr = IrotIsRunning(get_irot_handle(), moniker_data);
+ }
+ __EXCEPT(rpc_filter)
+ {
+ hr = HRESULT_FROM_WIN32(GetExceptionCode());
+ }
+ __ENDTRY
+ if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
+ {
+ if (start_rpcss())
+ continue;
+ }
+ break;
+ }
+ }
HeapFree(GetProcessHeap(), 0, moniker_data);
@@ -562,7 +689,9 @@ RunningObjectTableImpl_GetObject( IRunningObjectTable* iface,
IMoniker *pmkObjectName, IUnknown **ppunkObject)
{
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
- MInterfacePointer *moniker_data;
+ MonikerComparisonData *moniker_data;
+ InterfaceData *object = NULL;
+ IrotCookie cookie;
HRESULT hr;
struct rot_entry *rot_entry;
@@ -585,7 +714,7 @@ RunningObjectTableImpl_GetObject( IRunningObjectTable* iface,
LIST_FOR_EACH_ENTRY(rot_entry, &This->rot, struct rot_entry, entry)
{
if ((rot_entry->moniker_data->ulCntData == moniker_data->ulCntData) &&
- !memcmp(&moniker_data->abData, &rot_entry->moniker_data->abData, moniker_data->ulCntData))
+ !memcmp(moniker_data->abData, rot_entry->moniker_data->abData, moniker_data->ulCntData))
{
IStream *pStream;
hr = create_stream_on_mip_ro(rot_entry->object, &pStream);
@@ -603,9 +732,39 @@ RunningObjectTableImpl_GetObject( IRunningObjectTable* iface,
}
LeaveCriticalSection(&This->lock);
- /* FIXME: call IrotGetObject */
- WARN("Moniker unavailable - app may require interprocess running object table\n");
- hr = MK_E_UNAVAILABLE;
+ TRACE("moniker unavailable locally, calling SCM\n");
+
+ while (TRUE)
+ {
+ __TRY
+ {
+ hr = IrotGetObject(get_irot_handle(), moniker_data, &object, &cookie);
+ }
+ __EXCEPT(rpc_filter)
+ {
+ hr = HRESULT_FROM_WIN32(GetExceptionCode());
+ }
+ __ENDTRY
+ if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
+ {
+ if (start_rpcss())
+ continue;
+ }
+ break;
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ IStream *pStream;
+ hr = create_stream_on_mip_ro(object, &pStream);
+ if (hr == S_OK)
+ {
+ hr = CoUnmarshalInterface(pStream, &IID_IUnknown, (void **)ppunkObject);
+ IStream_Release(pStream);
+ }
+ }
+ else
+ WARN("Moniker unavailable, IrotGetObject returned 0x%08x\n", hr);
HeapFree(GetProcessHeap(), 0, moniker_data);
@@ -625,6 +784,7 @@ RunningObjectTableImpl_NoteChangeTime(IRunningObjectTable* iface,
{
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
struct rot_entry *rot_entry;
+ HRESULT hr = E_INVALIDARG;
TRACE("(%p,%d,%p)\n",This,dwRegister,pfiletime);
@@ -635,14 +795,34 @@ RunningObjectTableImpl_NoteChangeTime(IRunningObjectTable* iface,
{
rot_entry->last_modified = *pfiletime;
LeaveCriticalSection(&This->lock);
- return S_OK;
+
+ while (TRUE)
+ {
+ __TRY
+ {
+ hr = IrotNoteChangeTime(get_irot_handle(), dwRegister, pfiletime);
+ }
+ __EXCEPT(rpc_filter)
+ {
+ hr = HRESULT_FROM_WIN32(GetExceptionCode());
+ }
+ __ENDTRY
+ if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
+ {
+ if (start_rpcss())
+ continue;
+ }
+ break;
+ }
+
+ goto done;
}
}
LeaveCriticalSection(&This->lock);
- /* FIXME: call IrotNoteChangeTime */
-
- return E_INVALIDARG;
+done:
+ TRACE("-- 0x08%x\n", hr);
+ return hr;
}
/***********************************************************************
@@ -658,8 +838,8 @@ RunningObjectTableImpl_GetTimeOfLastChange(IRunningObjectTable* iface,
{
HRESULT hr = MK_E_UNAVAILABLE;
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
- MInterfacePointer *moniker_data;
- struct rot_entry *rot_entry;
+ MonikerComparisonData *moniker_data;
+ const struct rot_entry *rot_entry;
TRACE("(%p,%p,%p)\n",This,pmkObjectName,pfiletime);
@@ -677,10 +857,10 @@ RunningObjectTableImpl_GetTimeOfLastChange(IRunningObjectTable* iface,
hr = MK_E_UNAVAILABLE;
EnterCriticalSection(&This->lock);
- LIST_FOR_EACH_ENTRY(rot_entry, &This->rot, struct rot_entry, entry)
+ LIST_FOR_EACH_ENTRY(rot_entry, &This->rot, const struct rot_entry, entry)
{
if ((rot_entry->moniker_data->ulCntData == moniker_data->ulCntData) &&
- !memcmp(&moniker_data->abData, &rot_entry->moniker_data->abData, moniker_data->ulCntData))
+ !memcmp(moniker_data->abData, rot_entry->moniker_data->abData, moniker_data->ulCntData))
{
*pfiletime = rot_entry->last_modified;
hr = S_OK;
@@ -689,9 +869,31 @@ RunningObjectTableImpl_GetTimeOfLastChange(IRunningObjectTable* iface,
}
LeaveCriticalSection(&This->lock);
- /* FIXME: if (hr != S_OK) call IrotGetTimeOfLastChange */
+ if (hr != S_OK)
+ {
+ while (TRUE)
+ {
+ __TRY
+ {
+ hr = IrotGetTimeOfLastChange(get_irot_handle(), moniker_data, pfiletime);
+ }
+ __EXCEPT(rpc_filter)
+ {
+ hr = HRESULT_FROM_WIN32(GetExceptionCode());
+ }
+ __ENDTRY
+ if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
+ {
+ if (start_rpcss())
+ continue;
+ }
+ break;
+ }
+ }
HeapFree(GetProcessHeap(), 0, moniker_data);
+
+ TRACE("-- 0x%08x\n", hr);
return hr;
}
@@ -705,33 +907,36 @@ static HRESULT WINAPI
RunningObjectTableImpl_EnumRunning(IRunningObjectTable* iface,
IEnumMoniker **ppenumMoniker)
{
- HRESULT hr;
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
- MInterfacePointer **monikers;
- ULONG moniker_count = 0;
- const struct rot_entry *rot_entry;
- ULONG i = 0;
+ InterfaceList *interface_list = NULL;
+ HRESULT hr;
- EnterCriticalSection(&This->lock);
+ TRACE("(%p, %p)\n", This, ppenumMoniker);
- LIST_FOR_EACH_ENTRY( rot_entry, &This->rot, const struct rot_entry, entry )
- moniker_count++;
+ *ppenumMoniker = NULL;
- monikers = HeapAlloc(GetProcessHeap(), 0, moniker_count * sizeof(*monikers));
-
- LIST_FOR_EACH_ENTRY( rot_entry, &This->rot, const struct rot_entry, entry )
+ while (TRUE)
{
- SIZE_T size = FIELD_OFFSET(MInterfacePointer, abData[rot_entry->moniker->ulCntData]);
- monikers[i] = HeapAlloc(GetProcessHeap(), 0, size);
- memcpy(monikers[i], rot_entry->moniker, size);
- i++;
+ __TRY
+ {
+ hr = IrotEnumRunning(get_irot_handle(), &interface_list);
+ }
+ __EXCEPT(rpc_filter)
+ {
+ hr = HRESULT_FROM_WIN32(GetExceptionCode());
+ }
+ __ENDTRY
+ if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
+ {
+ if (start_rpcss())
+ continue;
+ }
+ break;
}
- LeaveCriticalSection(&This->lock);
-
- /* FIXME: call IrotEnumRunning and append data */
-
- hr = EnumMonikerImpl_CreateEnumROTMoniker(monikers, moniker_count, 0, ppenumMoniker);
+ if (SUCCEEDED(hr))
+ hr = EnumMonikerImpl_CreateEnumROTMoniker(interface_list,
+ 0, ppenumMoniker);
return hr;
}
@@ -767,9 +972,9 @@ HRESULT WINAPI RunningObjectTableImpl_Initialize(void)
/* initialize the virtual table function */
runningObjectTableInstance->lpVtbl = &VT_RunningObjectTableImpl;
- /* the initial reference is set to "1" ! because if set to "0" it will be not practis when */
- /* the ROT referred many times not in the same time (all the objects in the ROT will */
- /* be removed every time the ROT is removed ) */
+ /* the initial reference is set to "1" so that it isn't destroyed after its
+ * first use until the process is destroyed, as the running object table is
+ * a process-wide cache of a global table */
runningObjectTableInstance->ref = 1;
list_init(&runningObjectTableInstance->rot);
@@ -873,6 +1078,21 @@ static HRESULT get_moniker_for_progid_display_name(LPBC pbc,
IParseDisplayName *pdn;
hr = IMoniker_BindToObject(class_moniker, pbc, NULL,
&IID_IParseDisplayName, (void **)&pdn);
+ /* fallback to using IClassFactory to get IParseDisplayName -
+ * adsldp.dll depends on this */
+ if (FAILED(hr))
+ {
+ IClassFactory *pcf;
+ hr = IMoniker_BindToObject(class_moniker, pbc, NULL,
+ &IID_IClassFactory, (void **)&pcf);
+ if (SUCCEEDED(hr))
+ {
+ hr = IClassFactory_CreateInstance(pcf, NULL,
+ &IID_IParseDisplayName,
+ (void **)&pdn);
+ IClassFactory_Release(pcf);
+ }
+ }
IMoniker_Release(class_moniker);
if (SUCCEEDED(hr))
{
@@ -991,9 +1211,9 @@ HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid)
return res;
}
- /* if the file is not a storage object then attemps to match various bits in the file against a
- pattern in the registry. this case is not frequently used ! so I present only the psodocode for
- this case
+ /* If the file is not a storage object then attempt to match various bits in the file against a
+ pattern in the registry. This case is not frequently used, so I present only the pseudocode for
+ this case.
for(i=0;imoniker_count; i++)
- HeapFree(GetProcessHeap(), 0, This->monikers[i]);
- HeapFree(GetProcessHeap(), 0, This->monikers);
+ for (i = 0; i < This->moniker_list->size; i++)
+ HeapFree(GetProcessHeap(), 0, This->moniker_list->interfaces[i]);
+ HeapFree(GetProcessHeap(), 0, This->moniker_list);
HeapFree(GetProcessHeap(), 0, This);
}
@@ -1132,13 +1352,13 @@ static HRESULT WINAPI EnumMonikerImpl_Next(IEnumMoniker* iface, ULONG celt, IM
EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
HRESULT hr = S_OK;
- TRACE("(%p) TabCurrentPos %d Tablastindx %d\n", This, This->pos, This->moniker_count);
+ TRACE("(%p) TabCurrentPos %d Tablastindx %d\n", This, This->pos, This->moniker_list->size);
/* retrieve the requested number of moniker from the current position */
- for(i = 0; (This->pos < This->moniker_count) && (i < celt); i++)
+ for(i = 0; (This->pos < This->moniker_list->size) && (i < celt); i++)
{
IStream *stream;
- hr = create_stream_on_mip_ro(This->monikers[This->pos++], &stream);
+ hr = create_stream_on_mip_ro(This->moniker_list->interfaces[This->pos++], &stream);
if (hr != S_OK) break;
hr = CoUnmarshalInterface(stream, &IID_IMoniker, (void **)&rgelt[i]);
IStream_Release(stream);
@@ -1167,7 +1387,7 @@ static HRESULT WINAPI EnumMonikerImpl_Skip(IEnumMoniker* iface, ULONG celt)
TRACE("(%p)\n",This);
- if (This->pos + celt >= This->moniker_count)
+ if (This->pos + celt >= This->moniker_list->size)
return S_FALSE;
This->pos += celt;
@@ -1195,21 +1415,35 @@ static HRESULT WINAPI EnumMonikerImpl_Reset(IEnumMoniker* iface)
static HRESULT WINAPI EnumMonikerImpl_Clone(IEnumMoniker* iface, IEnumMoniker ** ppenum)
{
EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
- MInterfacePointer **monikers = HeapAlloc(GetProcessHeap(), 0, sizeof(*monikers)*This->moniker_count);
+ InterfaceList *moniker_list;
ULONG i;
TRACE("(%p)\n",This);
- for (i = 0; i < This->moniker_count; i++)
+ *ppenum = NULL;
+
+ moniker_list = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(InterfaceList, interfaces[This->moniker_list->size]));
+ if (!moniker_list)
+ return E_OUTOFMEMORY;
+
+ moniker_list->size = This->moniker_list->size;
+ for (i = 0; i < This->moniker_list->size; i++)
{
- SIZE_T size = FIELD_OFFSET(MInterfacePointer, abData[This->monikers[i]->ulCntData]);
- monikers[i] = HeapAlloc(GetProcessHeap(), 0, size);
- memcpy(monikers[i], This->monikers[i], size);
+ SIZE_T size = FIELD_OFFSET(InterfaceData, abData[This->moniker_list->interfaces[i]->ulCntData]);
+ moniker_list->interfaces[i] = HeapAlloc(GetProcessHeap(), 0, size);
+ if (!moniker_list->interfaces[i])
+ {
+ ULONG end = i;
+ for (i = 0; i < end; i++)
+ HeapFree(GetProcessHeap(), 0, moniker_list->interfaces[i]);
+ HeapFree(GetProcessHeap(), 0, moniker_list);
+ return E_OUTOFMEMORY;
+ }
+ memcpy(moniker_list->interfaces[i], This->moniker_list->interfaces[i], size);
}
/* copy the enum structure */
- return EnumMonikerImpl_CreateEnumROTMoniker(monikers, This->moniker_count,
- This->pos, ppenum);
+ return EnumMonikerImpl_CreateEnumROTMoniker(moniker_list, This->pos, ppenum);
}
/* Virtual function table for the IEnumMoniker class. */
@@ -1229,8 +1463,7 @@ static const IEnumMonikerVtbl VT_EnumMonikerImpl =
* Used by EnumRunning to create the structure and EnumClone
* to copy the structure
*/
-static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(MInterfacePointer **monikers,
- ULONG moniker_count,
+static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(InterfaceList *moniker_list,
ULONG current_pos,
IEnumMoniker **ppenumMoniker)
{
@@ -1250,8 +1483,7 @@ static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(MInterfacePointer **m
/* the initial reference is set to "1" */
This->ref = 1; /* set the ref count to one */
This->pos = current_pos; /* Set the list start posn */
- This->moniker_count = moniker_count; /* Need the same size table as ROT */
- This->monikers = monikers;
+ This->moniker_list = moniker_list;
*ppenumMoniker = (IEnumMoniker*)This;
@@ -1427,3 +1659,13 @@ HRESULT MonikerMarshal_Create(IMoniker *inner, IUnknown **outer)
*outer = (IUnknown *)&This->lpVtbl;
return S_OK;
}
+
+void * __RPC_USER MIDL_user_allocate(size_t size)
+{
+ return HeapAlloc(GetProcessHeap(), 0, size);
+}
+
+void __RPC_USER MIDL_user_free(void *p)
+{
+ HeapFree(GetProcessHeap(), 0, p);
+}
diff --git a/reactos/dll/win32/ole32/moniker.h b/reactos/dll/win32/ole32/moniker.h
index 32335c133a5..207b0e07491 100644
--- a/reactos/dll/win32/ole32/moniker.h
+++ b/reactos/dll/win32/ole32/moniker.h
@@ -36,6 +36,7 @@ HRESULT AntiMonikerCF_Create(REFIID riid, LPVOID *ppv);
HRESULT CompositeMonikerCF_Create(REFIID riid, LPVOID *ppv);
HRESULT ClassMonikerCF_Create(REFIID riid, LPVOID *ppv);
HRESULT PointerMonikerCF_Create(REFIID riid, LPVOID *ppv);
+HRESULT ComCatCF_Create(REFIID riid, LPVOID *ppv);
/* This function decomposes a String path to a String Table containing all the elements ("\" or "subDirectory" or "Directory" or "FileName") of the path */
int FileMonikerImpl_DecomposePath(LPCOLESTR str, LPOLESTR** stringTable);
diff --git a/reactos/dll/win32/ole32/ole2.c b/reactos/dll/win32/ole32/ole2.c
index 5cee7a1e9fe..bdbf6da7861 100644
--- a/reactos/dll/win32/ole32/ole2.c
+++ b/reactos/dll/win32/ole32/ole2.c
@@ -1299,7 +1299,7 @@ static OleMenuHookItem * OLEMenu_IsHookInstalled( DWORD tid )
*/
static BOOL OLEMenu_FindMainMenuIndex( HMENU hMainMenu, HMENU hPopupMenu, UINT *pnPos )
{
- UINT i, nItems;
+ INT i, nItems;
nItems = GetMenuItemCount( hMainMenu );
diff --git a/reactos/dll/win32/ole32/ole2nls.c b/reactos/dll/win32/ole32/ole2nls.c
index f42ddf9b92c..b21601b5390 100644
--- a/reactos/dll/win32/ole32/ole2nls.c
+++ b/reactos/dll/win32/ole32/ole2nls.c
@@ -3,7 +3,7 @@
*
* Copyright 1995 Martin von Loewis
* Copyright 1998 David Lee Lambert
- * Copyright 2000 Julio Cйsar Gбzquez
+ * Copyright 2000 Julio CГ©sar GГЎzquez
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/reactos/dll/win32/ole32/ole2stubs.c b/reactos/dll/win32/ole32/ole2stubs.c
index e3396516564..7c457047e57 100644
--- a/reactos/dll/win32/ole32/ole2stubs.c
+++ b/reactos/dll/win32/ole32/ole2stubs.c
@@ -119,3 +119,12 @@ HRESULT WINAPI OleRegEnumFormatEtc (
return E_NOTIMPL;
}
+
+/***********************************************************************
+ * CoGetCallerTID [OLE32.@]
+ */
+HRESULT WINAPI CoGetCallerTID(LPDWORD lpdwTID)
+{
+ FIXME("stub!\n");
+ return E_NOTIMPL;
+}
diff --git a/reactos/dll/win32/ole32/ole32.rbuild b/reactos/dll/win32/ole32/ole32.rbuild
index 275b9d0bdb0..2bcc7974f7b 100644
--- a/reactos/dll/win32/ole32/ole32.rbuild
+++ b/reactos/dll/win32/ole32/ole32.rbuild
@@ -14,6 +14,7 @@
advapi32
user32
gdi32
+ ole32_irot_client
ole32_proxy
rpcrt4
kernel32
@@ -24,6 +25,7 @@
bindctx.c
classmoniker.c
clipboard.c
+ comcat.c
compobj.c
compositemoniker.c
datacache.c
@@ -59,7 +61,6 @@
dcom.idl
irot.idl
.
- ole32.spec
irot.idl
diff --git a/reactos/dll/win32/ole32/ole32.spec b/reactos/dll/win32/ole32/ole32.spec
index 7561156884c..789da37e3e4 100644
--- a/reactos/dll/win32/ole32/ole32.spec
+++ b/reactos/dll/win32/ole32/ole32.spec
@@ -22,7 +22,7 @@
@ stdcall CoFreeUnusedLibraries()
@ stdcall CoFreeUnusedLibrariesEx(long long)
@ stdcall CoGetCallContext(ptr ptr)
-@ stub CoGetCallerTID
+@ stdcall CoGetCallerTID(ptr)
@ stdcall CoGetClassObject(ptr long ptr ptr ptr)
@ stdcall CoGetContextToken(ptr)
@ stub CoGetCurrentLogicalThreadId
@@ -276,4 +276,4 @@
@ stdcall WriteClassStm(ptr ptr)
@ stdcall WriteFmtUserTypeStg(ptr long ptr)
@ stub WriteOleStg
-@ stub WriteStringStream
+@ stub WriteStringStream
\ No newline at end of file
diff --git a/reactos/dll/win32/ole32/oleproxy.c b/reactos/dll/win32/ole32/oleproxy.c
index 64f4441a51a..99a86f009e3 100644
--- a/reactos/dll/win32/ole32/oleproxy.c
+++ b/reactos/dll/win32/ole32/oleproxy.c
@@ -2,7 +2,7 @@
* OLE32 proxy/stub handler
*
* Copyright 2002 Marcus Meissner
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -40,6 +40,7 @@
#include "compobj_private.h"
#include "moniker.h"
+#include "comcat.h"
#include "wine/debug.h"
@@ -88,6 +89,8 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv)
return ClassMonikerCF_Create(iid, ppv);
if (IsEqualCLSID(rclsid, &CLSID_PointerMoniker))
return PointerMonikerCF_Create(iid, ppv);
+ if (IsEqualGUID(rclsid, &CLSID_StdComponentCategoriesMgr))
+ return ComCatCF_Create(iid, ppv);
return NdrDllGetClassObject(rclsid, iid, ppv, OLE32_ProxyFileList,
&CLSID_PSFactoryBuffer, &PSFactoryBuffer);
diff --git a/reactos/dll/win32/ole32/regsvr.c b/reactos/dll/win32/ole32/regsvr.c
index e4109317b12..07ddde01661 100644
--- a/reactos/dll/win32/ole32/regsvr.c
+++ b/reactos/dll/win32/ole32/regsvr.c
@@ -32,6 +32,7 @@
#include "ole2.h"
#include "olectl.h"
+#include "comcat.h"
#include "initguid.h"
#include "compobj_private.h"
#include "moniker.h"
@@ -406,6 +407,9 @@ static GUID const CLSID_StdOleLink = {
static GUID const CLSID_PackagerMoniker = {
0x00000308, 0x0000, 0x0000, {0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46} };
+static GUID const CLSID_PSFactoryBuffer_actxprxy = {
+ 0xB8DA6310, 0xE19B, 0x11D0, {0x93,0x3C,0x00,0xA0,0xC9,0x0D,0xCA,0xA9} };
+
extern GUID const CLSID_Picture_Metafile;
extern GUID const CLSID_Picture_Dib;
@@ -492,6 +496,12 @@ static struct regsvr_coclass const coclass_list[] = {
"ole32.dll",
"Apartment"
},
+ { &CLSID_StdComponentCategoriesMgr,
+ "Component Categories Manager",
+ NULL,
+ "ole32.dll",
+ "Both"
+ },
{ NULL } /* list terminator */
};
@@ -502,6 +512,7 @@ static struct regsvr_coclass const coclass_list[] = {
#define INTERFACE_ENTRY(interface, base, clsid32, clsid16) { &IID_##interface, #interface, base, sizeof(interface##Vtbl)/sizeof(void*), clsid16, clsid32 }
#define BAS_INTERFACE_ENTRY(interface, base) INTERFACE_ENTRY(interface, &IID_##base, &CLSID_PSFactoryBuffer, NULL)
#define STD_INTERFACE_ENTRY(interface) INTERFACE_ENTRY(interface, NULL, &CLSID_PSFactoryBuffer, NULL)
+#define ACTX_INTERFACE_ENTRY(interface) INTERFACE_ENTRY(interface, NULL, &CLSID_PSFactoryBuffer_actxprxy, NULL)
#define LCL_INTERFACE_ENTRY(interface) INTERFACE_ENTRY(interface, NULL, NULL, NULL)
static const struct regsvr_interface interface_list[] = {
@@ -561,6 +572,10 @@ static const struct regsvr_interface interface_list[] = {
LCL_INTERFACE_ENTRY(IClientSecurity),
LCL_INTERFACE_ENTRY(IServerSecurity),
STD_INTERFACE_ENTRY(ISequentialStream),
+ ACTX_INTERFACE_ENTRY(IEnumGUID),
+ ACTX_INTERFACE_ENTRY(IEnumCATEGORYINFO),
+ ACTX_INTERFACE_ENTRY(ICatRegister),
+ ACTX_INTERFACE_ENTRY(ICatInformation),
{ NULL } /* list terminator */
};
diff --git a/reactos/dll/win32/ole32/rpc.c b/reactos/dll/win32/ole32/rpc.c
index b805dba656b..74d7968f3b4 100644
--- a/reactos/dll/win32/ole32/rpc.c
+++ b/reactos/dll/win32/ole32/rpc.c
@@ -1,7 +1,7 @@
/*
* RPC Manager
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
* Copyright 2002 Marcus Meissner
* Copyright 2005 Mike Hearn, Rob Shearman for CodeWeavers
*
diff --git a/reactos/dll/win32/ole32/storage32.c b/reactos/dll/win32/ole32/storage32.c
index 705585bd3d7..3c88a36f766 100644
--- a/reactos/dll/win32/ole32/storage32.c
+++ b/reactos/dll/win32/ole32/storage32.c
@@ -1906,7 +1906,7 @@ static HRESULT WINAPI StorageImpl_Stat( IStorage* iface,
StorageImpl* const This = (StorageImpl*)iface;
HRESULT result = StorageBaseImpl_Stat( iface, pstatstg, grfStatFlag );
- if ( !FAILED(result) && ((grfStatFlag & STATFLAG_NONAME) == 0) && This->pwcsName )
+ if ( SUCCEEDED(result) && ((grfStatFlag & STATFLAG_NONAME) == 0) && This->pwcsName )
{
CoTaskMemFree(pstatstg->pwcsName);
pstatstg->pwcsName = CoTaskMemAlloc((lstrlenW(This->pwcsName)+1)*sizeof(WCHAR));
@@ -5895,7 +5895,7 @@ HRESULT WINAPI StgOpenStorageEx(const WCHAR* pwcsName, DWORD grfMode, DWORD stgf
return STG_E_INVALIDPARAMETER;
}
- return StgOpenStorage(pwcsName, NULL, grfMode, (SNB)NULL, 0, (IStorage **)ppObjectOpen);
+ return StgOpenStorage(pwcsName, NULL, grfMode, NULL, 0, (IStorage **)ppObjectOpen);
}
@@ -6335,13 +6335,13 @@ HRESULT WINAPI OleLoadFromStream(IStream *pStm,REFIID iidInterface,void** ppvOb
TRACE("(%p,%s,%p)\n",pStm,debugstr_guid(iidInterface),ppvObj);
res=ReadClassStm(pStm,&clsid);
- if (!SUCCEEDED(res))
+ if (FAILED(res))
return res;
res=CoCreateInstance(&clsid,NULL,CLSCTX_INPROC_SERVER,iidInterface,ppvObj);
- if (!SUCCEEDED(res))
+ if (FAILED(res))
return res;
res=IUnknown_QueryInterface((IUnknown*)*ppvObj,&IID_IPersistStream,(LPVOID*)&xstm);
- if (!SUCCEEDED(res)) {
+ if (FAILED(res)) {
IUnknown_Release((IUnknown*)*ppvObj);
return res;
}
@@ -6583,7 +6583,7 @@ static HRESULT OLECONVERT_LoadOLE10(LPOLESTREAM pOleStream, OLECONVERT_OLESTREAM
int max_try = 6;
pData->pData = NULL;
- pData->pstrOleObjFileName = (CHAR *) NULL;
+ pData->pstrOleObjFileName = NULL;
for( nTryCnt=0;nTryCnt < max_try; nTryCnt++)
{
diff --git a/reactos/dll/win32/ole32/usrmarshal.c b/reactos/dll/win32/ole32/usrmarshal.c
index b8487c30031..e504485cb08 100644
--- a/reactos/dll/win32/ole32/usrmarshal.c
+++ b/reactos/dll/win32/ole32/usrmarshal.c
@@ -2010,8 +2010,10 @@ HRESULT CALLBACK IEnumUnknown_Next_Proxy(
IUnknown **rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ ULONG fetched;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ if (!pceltFetched) pceltFetched = &fetched;
+ return IEnumUnknown_RemoteNext_Proxy(This, celt, rgelt, pceltFetched);
}
HRESULT __RPC_STUB IEnumUnknown_Next_Stub(
@@ -2020,8 +2022,12 @@ HRESULT __RPC_STUB IEnumUnknown_Next_Stub(
IUnknown **rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ HRESULT hr;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ *pceltFetched = 0;
+ hr = IEnumUnknown_Next(This, celt, rgelt, pceltFetched);
+ if (hr == S_OK) *pceltFetched = celt;
+ return hr;
}
HRESULT CALLBACK IBindCtx_SetBindOptions_Proxy(
@@ -2062,8 +2068,10 @@ HRESULT CALLBACK IEnumMoniker_Next_Proxy(
IMoniker **rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ ULONG fetched;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ if (!pceltFetched) pceltFetched = &fetched;
+ return IEnumMoniker_RemoteNext_Proxy(This, celt, rgelt, pceltFetched);
}
HRESULT __RPC_STUB IEnumMoniker_Next_Stub(
@@ -2072,8 +2080,12 @@ HRESULT __RPC_STUB IEnumMoniker_Next_Stub(
IMoniker **rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ HRESULT hr;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ *pceltFetched = 0;
+ hr = IEnumMoniker_Next(This, celt, rgelt, pceltFetched);
+ if (hr == S_OK) *pceltFetched = celt;
+ return hr;
}
BOOL CALLBACK IRunnableObject_IsRunning_Proxy(
@@ -2142,8 +2154,10 @@ HRESULT CALLBACK IEnumString_Next_Proxy(
LPOLESTR *rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ ULONG fetched;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ if (!pceltFetched) pceltFetched = &fetched;
+ return IEnumString_RemoteNext_Proxy(This, celt, rgelt, pceltFetched);
}
HRESULT __RPC_STUB IEnumString_Next_Stub(
@@ -2152,8 +2166,12 @@ HRESULT __RPC_STUB IEnumString_Next_Stub(
LPOLESTR *rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ HRESULT hr;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ *pceltFetched = 0;
+ hr = IEnumString_Next(This, celt, rgelt, pceltFetched);
+ if (hr == S_OK) *pceltFetched = celt;
+ return hr;
}
HRESULT CALLBACK ISequentialStream_Read_Proxy(
@@ -2244,8 +2262,10 @@ HRESULT CALLBACK IEnumSTATSTG_Next_Proxy(
STATSTG *rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ ULONG fetched;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ if (!pceltFetched) pceltFetched = &fetched;
+ return IEnumSTATSTG_RemoteNext_Proxy(This, celt, rgelt, pceltFetched);
}
HRESULT __RPC_STUB IEnumSTATSTG_Next_Stub(
@@ -2254,8 +2274,12 @@ HRESULT __RPC_STUB IEnumSTATSTG_Next_Stub(
STATSTG *rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ HRESULT hr;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ *pceltFetched = 0;
+ hr = IEnumSTATSTG_Next(This, celt, rgelt, pceltFetched);
+ if (hr == S_OK) *pceltFetched = celt;
+ return hr;
}
HRESULT CALLBACK IStorage_OpenStream_Proxy(
@@ -2398,8 +2422,9 @@ HRESULT CALLBACK IEnumFORMATETC_Next_Proxy(
FORMATETC *rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ ULONG fetched;
+ if (!pceltFetched) pceltFetched = &fetched;
+ return IEnumFORMATETC_RemoteNext_Proxy(This, celt, rgelt, pceltFetched);
}
HRESULT __RPC_STUB IEnumFORMATETC_Next_Stub(
@@ -2408,8 +2433,11 @@ HRESULT __RPC_STUB IEnumFORMATETC_Next_Stub(
FORMATETC *rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ HRESULT hr;
+ *pceltFetched = 0;
+ hr = IEnumFORMATETC_Next(This, celt, rgelt, pceltFetched);
+ if (hr == S_OK) *pceltFetched = celt;
+ return hr;
}
HRESULT CALLBACK IEnumSTATDATA_Next_Proxy(
@@ -2418,8 +2446,10 @@ HRESULT CALLBACK IEnumSTATDATA_Next_Proxy(
STATDATA *rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ ULONG fetched;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ if (!pceltFetched) pceltFetched = &fetched;
+ return IEnumSTATDATA_RemoteNext_Proxy(This, celt, rgelt, pceltFetched);
}
HRESULT __RPC_STUB IEnumSTATDATA_Next_Stub(
@@ -2428,8 +2458,12 @@ HRESULT __RPC_STUB IEnumSTATDATA_Next_Stub(
STATDATA *rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ HRESULT hr;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ *pceltFetched = 0;
+ hr = IEnumSTATDATA_Next(This, celt, rgelt, pceltFetched);
+ if (hr == S_OK) *pceltFetched = celt;
+ return hr;
}
void CALLBACK IAdviseSink_OnDataChange_Proxy(
@@ -2642,8 +2676,10 @@ HRESULT CALLBACK IEnumOLEVERB_Next_Proxy(
LPOLEVERB rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ ULONG fetched;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ if (!pceltFetched) pceltFetched = &fetched;
+ return IEnumOLEVERB_RemoteNext_Proxy(This, celt, rgelt, pceltFetched);
}
HRESULT __RPC_STUB IEnumOLEVERB_Next_Stub(
@@ -2652,8 +2688,12 @@ HRESULT __RPC_STUB IEnumOLEVERB_Next_Stub(
LPOLEVERB rgelt,
ULONG *pceltFetched)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ HRESULT hr;
+ TRACE("(%p)->(%d, %p, %p)\n", This, celt, rgelt, pceltFetched);
+ *pceltFetched = 0;
+ hr = IEnumOLEVERB_Next(This, celt, rgelt, pceltFetched);
+ if (hr == S_OK) *pceltFetched = celt;
+ return hr;
}
HRESULT CALLBACK IViewObject_Draw_Proxy(
diff --git a/reactos/dll/win32/oleacc/oleacc.rbuild b/reactos/dll/win32/oleacc/oleacc.rbuild
index 8773c36f2cf..79c8ec05b82 100644
--- a/reactos/dll/win32/oleacc/oleacc.rbuild
+++ b/reactos/dll/win32/oleacc/oleacc.rbuild
@@ -8,7 +8,6 @@
include/reactos/wine
main.c
- oleacc.spec
wine
kernel32
ntdll
diff --git a/reactos/dll/win32/oleaut32/oleaut32.rbuild b/reactos/dll/win32/oleaut32/oleaut32.rbuild
index 4dba811a42e..1cc9243f803 100644
--- a/reactos/dll/win32/oleaut32/oleaut32.rbuild
+++ b/reactos/dll/win32/oleaut32/oleaut32.rbuild
@@ -29,7 +29,6 @@
oleaut32.rc
oleaut32_oaidl.idl
.
- oleaut32.spec
oleaut32_proxy
wine
ole32
diff --git a/reactos/dll/win32/oledlg/oledlg.rbuild b/reactos/dll/win32/oledlg/oledlg.rbuild
index 3fc06294075..ed0acac1f08 100644
--- a/reactos/dll/win32/oledlg/oledlg.rbuild
+++ b/reactos/dll/win32/oledlg/oledlg.rbuild
@@ -17,6 +17,5 @@
oledlg_main.c
pastespl.c
rsrc.rc
- oledlg.spec
diff --git a/reactos/dll/win32/olepro32/olepro32.rbuild b/reactos/dll/win32/olepro32/olepro32.rbuild
index 46d046ef334..68ff9b537bc 100644
--- a/reactos/dll/win32/olepro32/olepro32.rbuild
+++ b/reactos/dll/win32/olepro32/olepro32.rbuild
@@ -12,5 +12,4 @@
ntdll
olepro32stubs.c
version.rc
- olepro32.spec
diff --git a/reactos/dll/win32/opengl32/opengl32.rbuild b/reactos/dll/win32/opengl32/opengl32.rbuild
index 5471e4e9dab..5c01e9307f2 100644
--- a/reactos/dll/win32/opengl32/opengl32.rbuild
+++ b/reactos/dll/win32/opengl32/opengl32.rbuild
@@ -10,5 +10,4 @@
gl.c
opengl32.c
wgl.c
- opengl32.spec
diff --git a/reactos/dll/win32/pdh/pdh.rbuild b/reactos/dll/win32/pdh/pdh.rbuild
index e5533d203f7..e79416c36c6 100644
--- a/reactos/dll/win32/pdh/pdh.rbuild
+++ b/reactos/dll/win32/pdh/pdh.rbuild
@@ -8,5 +8,4 @@
kernel32
ntdll
pdh_main.c
- pdh.spec
diff --git a/reactos/dll/win32/powrprof/powrprof.rbuild b/reactos/dll/win32/powrprof/powrprof.rbuild
index cb3a18ea202..5688f9f20ea 100644
--- a/reactos/dll/win32/powrprof/powrprof.rbuild
+++ b/reactos/dll/win32/powrprof/powrprof.rbuild
@@ -11,5 +11,4 @@
comctl32
powrprof.c
powrprof.rc
- powrprof.spec
diff --git a/reactos/dll/win32/printui/printui.rbuild b/reactos/dll/win32/printui/printui.rbuild
index fe9985e7e38..2c1be931331 100644
--- a/reactos/dll/win32/printui/printui.rbuild
+++ b/reactos/dll/win32/printui/printui.rbuild
@@ -9,5 +9,4 @@
ntdll
printui.c
printui.rc
- printui.spec
diff --git a/reactos/dll/win32/pstorec/pstorec.rbuild b/reactos/dll/win32/pstorec/pstorec.rbuild
index 493a30f22df..3ed50e6ea91 100644
--- a/reactos/dll/win32/pstorec/pstorec.rbuild
+++ b/reactos/dll/win32/pstorec/pstorec.rbuild
@@ -5,5 +5,4 @@
kernel32
uuid
pstorec.c
- pstorec.spec
diff --git a/reactos/dll/win32/rasapi32/rasapi32.rbuild b/reactos/dll/win32/rasapi32/rasapi32.rbuild
index b932be1f356..b25947d0b2a 100644
--- a/reactos/dll/win32/rasapi32/rasapi32.rbuild
+++ b/reactos/dll/win32/rasapi32/rasapi32.rbuild
@@ -7,7 +7,6 @@
include/reactos/wine
rasapi.c
- rasapi32.spec
wine
kernel32
ntdll
diff --git a/reactos/dll/win32/rasdlg/rasdlg.rbuild b/reactos/dll/win32/rasdlg/rasdlg.rbuild
index 6f31a16681f..a903c55401f 100644
--- a/reactos/dll/win32/rasdlg/rasdlg.rbuild
+++ b/reactos/dll/win32/rasdlg/rasdlg.rbuild
@@ -8,5 +8,4 @@
uuid
rasdlg.c
rasdlg.rc
- rasdlg.spec
diff --git a/reactos/dll/win32/rasman/rasman.rbuild b/reactos/dll/win32/rasman/rasman.rbuild
index 5df7820ec03..c2e6da74923 100644
--- a/reactos/dll/win32/rasman/rasman.rbuild
+++ b/reactos/dll/win32/rasman/rasman.rbuild
@@ -8,5 +8,4 @@
uuid
rasman.c
rasman.rc
- rasman.spec
diff --git a/reactos/dll/win32/riched20/riched20.rbuild b/reactos/dll/win32/riched20/riched20.rbuild
index 06194cc800b..32c4edf2fe8 100644
--- a/reactos/dll/win32/riched20/riched20.rbuild
+++ b/reactos/dll/win32/riched20/riched20.rbuild
@@ -26,7 +26,6 @@
wrap.c
writer.c
version.rc
- riched20.spec
wine
uuid
ole32
diff --git a/reactos/dll/win32/riched32/riched32.rbuild b/reactos/dll/win32/riched32/riched32.rbuild
index 95dab6eb1d8..590c1b3940c 100644
--- a/reactos/dll/win32/riched32/riched32.rbuild
+++ b/reactos/dll/win32/riched32/riched32.rbuild
@@ -8,7 +8,6 @@
richedit.c
version.rc
- riched32.spec
wine
riched20
user32
diff --git a/reactos/dll/win32/rpcrt4/cproxy.c b/reactos/dll/win32/rpcrt4/cproxy.c
index 084285a5458..7979c0ecb31 100644
--- a/reactos/dll/win32/rpcrt4/cproxy.c
+++ b/reactos/dll/win32/rpcrt4/cproxy.c
@@ -1,7 +1,7 @@
/*
* COM proxy implementation
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -58,10 +58,6 @@ static const IRpcProxyBufferVtbl StdProxy_Vtbl;
#define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field))
-/* How the Windows stubless proxy thunks work is explained at
- * http://msdn.microsoft.com/library/en-us/dnmsj99/html/com0199.asp,
- * but I'll use a slightly different method, to make life easier */
-
#if defined(__i386__)
#include "pshpack1.h"
@@ -389,6 +385,8 @@ void WINAPI NdrProxySendReceive(void *This,
}
pStubMsg->dwStubPhase = PROXY_SENDRECEIVE;
+ /* avoid sending uninitialised parts of the buffer on the wire */
+ pStubMsg->RpcMsg->BufferLength = pStubMsg->Buffer - (unsigned char *)pStubMsg->RpcMsg->Buffer;
hr = IRpcChannelBuffer_SendReceive(pStubMsg->pRpcChannelBuffer,
(RPCOLEMESSAGE*)pStubMsg->RpcMsg,
&Status);
diff --git a/reactos/dll/win32/rpcrt4/cpsf.c b/reactos/dll/win32/rpcrt4/cpsf.c
index 373c97a75ea..94496956333 100644
--- a/reactos/dll/win32/rpcrt4/cpsf.c
+++ b/reactos/dll/win32/rpcrt4/cpsf.c
@@ -1,7 +1,7 @@
/*
* COM proxy/stub factory (CStdPSFactory) implementation
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -174,7 +174,7 @@ HRESULT WINAPI NdrDllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv,
if(max_delegating_vtbl_size > 0)
create_delegating_vtbl(max_delegating_vtbl_size);
}
- if (IsEqualGUID(rclsid, pclsid))
+ if (pclsid && IsEqualGUID(rclsid, pclsid))
return IPSFactoryBuffer_QueryInterface((LPPSFACTORYBUFFER)pPSFactoryBuffer, iid, ppv);
else {
const ProxyFileInfo *info;
diff --git a/reactos/dll/win32/rpcrt4/cpsf.h b/reactos/dll/win32/rpcrt4/cpsf.h
index 5ce8fe6575e..d8867d40e60 100644
--- a/reactos/dll/win32/rpcrt4/cpsf.h
+++ b/reactos/dll/win32/rpcrt4/cpsf.h
@@ -1,7 +1,7 @@
/*
* COM proxy definitions
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/reactos/dll/win32/rpcrt4/cstub.c b/reactos/dll/win32/rpcrt4/cstub.c
index d0b24c98dfb..85411cd81e9 100644
--- a/reactos/dll/win32/rpcrt4/cstub.c
+++ b/reactos/dll/win32/rpcrt4/cstub.c
@@ -1,7 +1,7 @@
/*
* COM stub (CStdStubBuffer) implementation
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,6 +18,9 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include "config.h"
+#include "wine/port.h"
+
#include
#define COBJMACROS
@@ -39,9 +42,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole);
#define STUB_HEADER(This) (((const CInterfaceStubHeader*)((This)->lpVtbl))[-1])
-static WINE_EXCEPTION_FILTER(stub_filter)
+static LONG WINAPI stub_filter(EXCEPTION_POINTERS *eptr)
{
- if (GetExceptionInformation()->ExceptionRecord->ExceptionFlags & EXCEPTION_NONCONTINUABLE)
+ if (eptr->ExceptionRecord->ExceptionFlags & EXCEPTION_NONCONTINUABLE)
return EXCEPTION_CONTINUE_SEARCH;
return EXCEPTION_EXECUTE_HANDLER;
}
@@ -218,9 +221,7 @@ void create_delegating_vtbl(DWORD num_methods)
if(current_vtbl.table && current_vtbl.table->ref == 0)
{
TRACE("freeing old table\n");
- VirtualFree(current_vtbl.table->methods,
- (current_vtbl.table->size - 3) * sizeof(vtbl_method_t),
- MEM_RELEASE);
+ VirtualFree(current_vtbl.table->methods, 0, MEM_RELEASE);
HeapFree(GetProcessHeap(), 0, current_vtbl.table);
}
size = (num_methods - 3) * sizeof(vtbl_method_t);
@@ -255,9 +256,7 @@ static void release_delegating_vtbl(IUnknownVtbl *vtbl)
if(table->ref == 0 && table != current_vtbl.table)
{
TRACE("... and we're not current so free'ing\n");
- VirtualFree(current_vtbl.table->methods,
- (current_vtbl.table->size - 3) * sizeof(vtbl_method_t),
- MEM_RELEASE);
+ VirtualFree(current_vtbl.table->methods, 0, MEM_RELEASE);
HeapFree(GetProcessHeap(), 0, table);
}
LeaveCriticalSection(&delegating_vtbl_section);
diff --git a/reactos/dll/win32/rpcrt4/epm.idl b/reactos/dll/win32/rpcrt4/epm.idl
new file mode 100644
index 00000000000..62f16f6774a
--- /dev/null
+++ b/reactos/dll/win32/rpcrt4/epm.idl
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2008 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wine/epm.idl"
diff --git a/reactos/dll/win32/rpcrt4/epm_towers.h b/reactos/dll/win32/rpcrt4/epm_towers.h
index 7570cc2e846..1afd3eb3376 100644
--- a/reactos/dll/win32/rpcrt4/epm_towers.h
+++ b/reactos/dll/win32/rpcrt4/epm_towers.h
@@ -19,6 +19,8 @@
*
*/
+#include "epm_c.h"
+
#define EPM_PROTOCOL_DNET_NSP 0x04
#define EPM_PROTOCOL_OSI_TP4 0x05
#define EPM_PROTOCOL_OSI_CLNS 0x06
@@ -48,10 +50,6 @@
#include
-typedef unsigned char u_int8;
-typedef unsigned short u_int16;
-typedef unsigned int u_int32;
-
typedef struct
{
u_int16 count_lhs;
diff --git a/reactos/dll/win32/rpcrt4/ndr_clientserver.c b/reactos/dll/win32/rpcrt4/ndr_clientserver.c
index 968ea61134f..a051489dab2 100644
--- a/reactos/dll/win32/rpcrt4/ndr_clientserver.c
+++ b/reactos/dll/win32/rpcrt4/ndr_clientserver.c
@@ -1,7 +1,7 @@
/*
* MIDL proxy/stub stuff
*
- * Copyright 2002 Ove Kеven, TransGaming Technologies
+ * Copyright 2002 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/reactos/dll/win32/rpcrt4/ndr_es.c b/reactos/dll/win32/rpcrt4/ndr_es.c
index 3423d396cb8..b0bb7cc5f40 100644
--- a/reactos/dll/win32/rpcrt4/ndr_es.c
+++ b/reactos/dll/win32/rpcrt4/ndr_es.c
@@ -156,7 +156,18 @@ RPC_STATUS RPC_ENTRY MesEncodeFixedBufferHandleCreate(
*pHandle = (handle_t)pEsMsg;
- return RPC_S_OK;}
+ return RPC_S_OK;
+}
+
+/***********************************************************************
+ * MesEncodeDynBufferHandleCreate [RPCRT4.@]
+ */
+RPC_STATUS RPC_ENTRY MesEncodeDynBufferHandleCreate(char **ppBuffer,
+ ULONG *pEncodedSize, handle_t *pHandle)
+{
+ FIXME("%p %p %p stub\n", ppBuffer, pEncodedSize, pHandle);
+ return RPC_S_OK;
+}
/***********************************************************************
* MesDecodeBufferHandleCreate [RPCRT4.@]
diff --git a/reactos/dll/win32/rpcrt4/ndr_marshall.c b/reactos/dll/win32/rpcrt4/ndr_marshall.c
index bda04be31f4..3be736d1edc 100644
--- a/reactos/dll/win32/rpcrt4/ndr_marshall.c
+++ b/reactos/dll/win32/rpcrt4/ndr_marshall.c
@@ -361,10 +361,10 @@ typedef struct _NDR_MEMORY_LIST
* If the function is unable to allocate memory an ERROR_OUTOFMEMORY
* exception is raised.
*/
-void * WINAPI NdrAllocate(MIDL_STUB_MESSAGE *pStubMsg, size_t len)
+void * WINAPI NdrAllocate(MIDL_STUB_MESSAGE *pStubMsg, SIZE_T len)
{
- size_t aligned_len;
- size_t adjusted_len;
+ SIZE_T aligned_len;
+ SIZE_T adjusted_len;
void *p;
NDR_MEMORY_LIST *mem_list;
@@ -373,7 +373,7 @@ void * WINAPI NdrAllocate(MIDL_STUB_MESSAGE *pStubMsg, size_t len)
/* check for overflow */
if (adjusted_len < len)
{
- ERR("overflow of adjusted_len %d, len %d\n", adjusted_len, len);
+ ERR("overflow of adjusted_len %ld, len %ld\n", adjusted_len, len);
RpcRaiseException(RPC_X_BAD_STUB_DATA);
}
@@ -861,7 +861,10 @@ static void PointerUnmarshall(PMIDL_STUB_MESSAGE pStubMsg,
if (pointer_id)
pointer_needs_unmarshaling = 1;
else
+ {
+ *pPointer = NULL;
pointer_needs_unmarshaling = 0;
+ }
break;
case RPC_FC_FP:
pointer_id = NDR_LOCAL_UINT32_READ(Buffer);
diff --git a/reactos/dll/win32/rpcrt4/ndr_misc.h b/reactos/dll/win32/rpcrt4/ndr_misc.h
index b6dfaffe768..c3beff4d725 100644
--- a/reactos/dll/win32/rpcrt4/ndr_misc.h
+++ b/reactos/dll/win32/rpcrt4/ndr_misc.h
@@ -1,7 +1,7 @@
/*
* NDR definitions
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/reactos/dll/win32/rpcrt4/ndr_ole.c b/reactos/dll/win32/rpcrt4/ndr_ole.c
index 9bfab956d0e..729ab0b9f1e 100644
--- a/reactos/dll/win32/rpcrt4/ndr_ole.c
+++ b/reactos/dll/win32/rpcrt4/ndr_ole.c
@@ -1,7 +1,7 @@
/*
* OLE32 callouts, COM interface marshalling
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/reactos/dll/win32/rpcrt4/ndr_stubless.c b/reactos/dll/win32/rpcrt4/ndr_stubless.c
index 275502a7e6d..0daf22e9364 100644
--- a/reactos/dll/win32/rpcrt4/ndr_stubless.c
+++ b/reactos/dll/win32/rpcrt4/ndr_stubless.c
@@ -1,7 +1,7 @@
/*
* NDR -Oi,-Oif,-Oicf Interpreter
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
* Copyright 2003-5 Robert Shearman (for CodeWeavers)
*
* This library is free software; you can redistribute it and/or
diff --git a/reactos/dll/win32/rpcrt4/rpc_async.c b/reactos/dll/win32/rpcrt4/rpc_async.c
index 4ff86a34a56..33fdc774304 100644
--- a/reactos/dll/win32/rpcrt4/rpc_async.c
+++ b/reactos/dll/win32/rpcrt4/rpc_async.c
@@ -64,7 +64,7 @@ RPC_STATUS WINAPI RpcAsyncInitializeHandle(PRPC_ASYNC_STATE pAsync, unsigned int
pAsync->Flags = 0;
pAsync->StubInfo = NULL;
pAsync->RuntimeInfo = NULL;
- memset(&pAsync->Reserved, 0, sizeof(*pAsync) - FIELD_OFFSET(RPC_ASYNC_STATE, Reserved));
+ memset(pAsync->Reserved, 0, sizeof(*pAsync) - FIELD_OFFSET(RPC_ASYNC_STATE, Reserved));
return RPC_S_OK;
}
diff --git a/reactos/dll/win32/rpcrt4/rpc_binding.c b/reactos/dll/win32/rpcrt4/rpc_binding.c
index 6a17a8c31ea..71d3c395ebc 100644
--- a/reactos/dll/win32/rpcrt4/rpc_binding.c
+++ b/reactos/dll/win32/rpcrt4/rpc_binding.c
@@ -1,7 +1,7 @@
/*
* RPC binding API
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
* Copyright 2003 Mike Hearn
* Copyright 2004 Filip Navara
* Copyright 2006 CodeWeavers
@@ -435,7 +435,7 @@ static RPC_WSTR unescape_string_binding_componentW(
{
RPC_WSTR component, p;
- if (len == -1) len = strlen((const char *)string_binding);
+ if (len == -1) len = strlenW(string_binding);
component = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(*component));
if (!component) return NULL;
diff --git a/reactos/dll/win32/rpcrt4/rpc_binding.h b/reactos/dll/win32/rpcrt4/rpc_binding.h
index 3251df210c7..25a21083ceb 100644
--- a/reactos/dll/win32/rpcrt4/rpc_binding.h
+++ b/reactos/dll/win32/rpcrt4/rpc_binding.h
@@ -1,7 +1,7 @@
/*
* RPC binding API
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -21,7 +21,6 @@
#ifndef __WINE_RPC_BINDING_H
#define __WINE_RPC_BINDING_H
-#include "wine/rpcss_shared.h"
#include "rpcndr.h"
#include "security.h"
#include "wine/list.h"
@@ -150,9 +149,6 @@ RPC_STATUS RPCRT4_ReleaseBinding(RpcBinding* Binding);
RPC_STATUS RPCRT4_OpenBinding(RpcBinding* Binding, RpcConnection** Connection,
const RPC_SYNTAX_IDENTIFIER *TransferSyntax, const RPC_SYNTAX_IDENTIFIER *InterfaceId);
RPC_STATUS RPCRT4_CloseBinding(RpcBinding* Binding, RpcConnection* Connection);
-BOOL RPCRT4_RPCSSOnDemandCall(PRPCSS_NP_MESSAGE msg, char *vardata_payload, PRPCSS_NP_REPLY reply);
-HANDLE RPCRT4_GetMasterMutex(void);
-HANDLE RPCRT4_RpcssNPConnect(void);
static inline const char *rpcrt4_conn_get_name(const RpcConnection *Connection)
{
diff --git a/reactos/dll/win32/rpcrt4/rpc_defs.h b/reactos/dll/win32/rpcrt4/rpc_defs.h
index f552490ade7..cae77c4f356 100644
--- a/reactos/dll/win32/rpcrt4/rpc_defs.h
+++ b/reactos/dll/win32/rpcrt4/rpc_defs.h
@@ -1,7 +1,7 @@
/*
* RPC definitions
*
- * Copyright 2001-2002 Ove Kеven, TransGaming Technologies
+ * Copyright 2001-2002 Ove KГҐven, TransGaming Technologies
* Copyright 2004 Filip Navara
*
* This library is free software; you can redistribute it and/or
diff --git a/reactos/dll/win32/rpcrt4/rpc_epmap.c b/reactos/dll/win32/rpcrt4/rpc_epmap.c
index 46244ec36e0..1b279d43ed6 100644
--- a/reactos/dll/win32/rpcrt4/rpc_epmap.c
+++ b/reactos/dll/win32/rpcrt4/rpc_epmap.c
@@ -2,7 +2,8 @@
* RPC endpoint mapper
*
* Copyright 2002 Greg Turner
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
+ * Copyright 2008 Robert Shearman (for CodeWeavers)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -17,14 +18,9 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- *
- * TODO:
- * - actually do things right
*/
#include
-#include
-#include
#include "windef.h"
#include "winbase.h"
@@ -33,8 +29,10 @@
#include "rpc.h"
#include "wine/debug.h"
+#include "wine/exception.h"
#include "rpc_binding.h"
+#include "epm_c.h"
#include "epm_towers.h"
WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -43,8 +41,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole);
*
* ncadg_ip_udp: 135
* ncacn_ip_tcp: 135
- * ncacn_np: \\pipe\epmapper (?)
+ * ncacn_np: \\pipe\epmapper
* ncalrpc: epmapper
+ * ncacn_http: 593
*
* If the user's machine ran a DCE RPC daemon, it would
* probably be possible to connect to it, but there are many
@@ -63,77 +62,222 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole);
* of running a fully functional DCOM server using Wine...
*/
+static const struct epm_endpoints
+{
+ const char *protseq;
+ const char *endpoint;
+} epm_endpoints[] =
+{
+ { "ncacn_np", "\\pipe\\epmapper" },
+ { "ncacn_ip_tcp", "135" },
+ { "ncacn_ip_udp", "135" },
+ { "ncalrpc", "epmapper" },
+ { "ncacn_http", "593" },
+};
+
+static BOOL start_rpcss(void)
+{
+ PROCESS_INFORMATION pi;
+ STARTUPINFOW si;
+ static WCHAR cmd[6];
+ static const WCHAR rpcss[] = {'r','p','c','s','s',0};
+ BOOL rslt;
+
+ TRACE("\n");
+
+ ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
+ ZeroMemory(&si, sizeof(STARTUPINFOA));
+ si.cb = sizeof(STARTUPINFOA);
+
+ memcpy(cmd, rpcss, sizeof(rpcss));
+
+ rslt = CreateProcessW(
+ NULL, /* executable */
+ cmd, /* command line */
+ NULL, /* process security attributes */
+ NULL, /* primary thread security attributes */
+ FALSE, /* inherit handles */
+ 0, /* creation flags */
+ NULL, /* use parent's environment */
+ NULL, /* use parent's current directory */
+ &si, /* STARTUPINFO pointer */
+ &pi /* PROCESS_INFORMATION */
+ );
+
+ if (rslt)
+ {
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+ Sleep(100);
+ }
+
+ return rslt;
+}
+
+static inline BOOL is_epm_destination_local(RPC_BINDING_HANDLE handle)
+{
+ RpcBinding *bind = (RpcBinding *)handle;
+ const char *protseq = bind->Protseq;
+ const char *network_addr = bind->NetworkAddr;
+
+ return ((!strcmp(protseq, "ncalrpc") && !network_addr) ||
+ (!strcmp(protseq, "ncacn_np") &&
+ (!network_addr || !strcmp(network_addr, "."))));
+}
+
+static RPC_STATUS get_epm_handle_client(RPC_BINDING_HANDLE handle, RPC_BINDING_HANDLE *epm_handle)
+{
+ RpcBinding *bind = (RpcBinding *)handle;
+ const char * pszEndpoint = NULL;
+ RPC_STATUS status;
+ RpcBinding* epm_bind;
+ unsigned int i;
+
+ if (bind->server)
+ return RPC_S_INVALID_BINDING;
+
+ for (i = 0; i < sizeof(epm_endpoints)/sizeof(epm_endpoints[0]); i++)
+ if (!strcmp(bind->Protseq, epm_endpoints[i].protseq))
+ pszEndpoint = epm_endpoints[i].endpoint;
+
+ if (!pszEndpoint)
+ {
+ FIXME("no endpoint for the endpoint-mapper found for protseq %s\n", debugstr_a(bind->Protseq));
+ return RPC_S_PROTSEQ_NOT_SUPPORTED;
+ }
+
+ status = RpcBindingCopy(handle, epm_handle);
+ if (status != RPC_S_OK) return status;
+
+ epm_bind = (RpcBinding*)*epm_handle;
+ if (epm_bind->AuthInfo)
+ {
+ /* don't bother with authenticating against the EPM by default
+ * (see EnableAuthEpResolution registry value) */
+ RpcAuthInfo_Release(epm_bind->AuthInfo);
+ epm_bind->AuthInfo = NULL;
+ }
+ RPCRT4_ResolveBinding(epm_bind, pszEndpoint);
+ TRACE("RPC_S_OK\n");
+ return RPC_S_OK;
+}
+
+static RPC_STATUS get_epm_handle_server(RPC_BINDING_HANDLE *epm_handle)
+{
+ unsigned char string_binding[] = "ncacn_np:.[\\\\pipe\\\\epmapper]";
+
+ return RpcBindingFromStringBindingA(string_binding, epm_handle);
+}
+
+static LONG WINAPI rpc_filter(EXCEPTION_POINTERS *__eptr)
+{
+ switch (GetExceptionCode())
+ {
+ case EXCEPTION_ACCESS_VIOLATION:
+ case EXCEPTION_ILLEGAL_INSTRUCTION:
+ return EXCEPTION_CONTINUE_SEARCH;
+ default:
+ return EXCEPTION_EXECUTE_HANDLER;
+ }
+}
+
/***********************************************************************
* RpcEpRegisterA (RPCRT4.@)
*/
RPC_STATUS WINAPI RpcEpRegisterA( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector,
UUID_VECTOR *UuidVector, RPC_CSTR Annotation )
{
- RPCSS_NP_MESSAGE msg;
- RPCSS_NP_REPLY reply;
- char *vardata_payload, *vp;
PRPC_SERVER_INTERFACE If = (PRPC_SERVER_INTERFACE)IfSpec;
- unsigned long c;
- RPC_STATUS rslt = RPC_S_OK;
+ unsigned long i;
+ RPC_STATUS status = RPC_S_OK;
+ error_status_t status2;
+ ept_entry_t *entries;
+ handle_t handle;
TRACE("(%p,%p,%p,%s)\n", IfSpec, BindingVector, UuidVector, debugstr_a((char*)Annotation));
TRACE(" ifid=%s\n", debugstr_guid(&If->InterfaceId.SyntaxGUID));
- for (c=0; cCount; c++) {
- RpcBinding* bind = (RpcBinding*)(BindingVector->BindingH[c]);
- TRACE(" protseq[%ld]=%s\n", c, debugstr_a(bind->Protseq));
- TRACE(" endpoint[%ld]=%s\n", c, debugstr_a(bind->Endpoint));
+ for (i=0; iCount; i++) {
+ RpcBinding* bind = (RpcBinding*)(BindingVector->BindingH[i]);
+ TRACE(" protseq[%ld]=%s\n", i, debugstr_a(bind->Protseq));
+ TRACE(" endpoint[%ld]=%s\n", i, debugstr_a(bind->Endpoint));
}
if (UuidVector) {
- for (c=0; cCount; c++)
- TRACE(" obj[%ld]=%s\n", c, debugstr_guid(UuidVector->Uuid[c]));
+ for (i=0; iCount; i++)
+ TRACE(" obj[%ld]=%s\n", i, debugstr_guid(UuidVector->Uuid[i]));
}
- /* FIXME: Do something with annotation. */
+ if (!BindingVector->Count) return RPC_S_OK;
- /* construct the message to rpcss */
- msg.message_type = RPCSS_NP_MESSAGE_TYPEID_REGISTEREPMSG;
- msg.message.registerepmsg.iface = If->InterfaceId;
- msg.message.registerepmsg.no_replace = 0;
+ entries = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*entries) * BindingVector->Count * (UuidVector ? UuidVector->Count : 1));
+ if (!entries)
+ return RPC_S_OUT_OF_MEMORY;
- msg.message.registerepmsg.object_count = (UuidVector) ? UuidVector->Count : 0;
- msg.message.registerepmsg.binding_count = BindingVector->Count;
-
- /* calculate vardata payload size */
- msg.vardata_payload_size = msg.message.registerepmsg.object_count * sizeof(UUID);
- for (c=0; c < msg.message.registerepmsg.binding_count; c++) {
- RpcBinding *bind = (RpcBinding *)(BindingVector->BindingH[c]);
- msg.vardata_payload_size += strlen(bind->Protseq) + 1;
- msg.vardata_payload_size += strlen(bind->Endpoint) + 1;
+ status = get_epm_handle_server(&handle);
+ if (status != RPC_S_OK)
+ {
+ HeapFree(GetProcessHeap(), 0, entries);
+ return status;
}
- /* allocate the payload buffer */
- vp = vardata_payload = LocalAlloc(LPTR, msg.vardata_payload_size);
- if (!vardata_payload)
- return RPC_S_OUT_OF_MEMORY;
+ for (i = 0; i < BindingVector->Count; i++)
+ {
+ unsigned j;
+ RpcBinding* bind = (RpcBinding*)(BindingVector->BindingH[i]);
+ for (j = 0; j < (UuidVector ? UuidVector->Count : 1); j++)
+ {
+ int len = strlen((char *)Annotation);
+ status = TowerConstruct(&If->InterfaceId, &If->TransferSyntax,
+ bind->Protseq, bind->Endpoint,
+ bind->NetworkAddr,
+ &entries[i*(UuidVector ? UuidVector->Count : 1) + j].tower);
+ if (status != RPC_S_OK) break;
- /* populate the payload data */
- for (c=0; c < msg.message.registerepmsg.object_count; c++) {
- CopyMemory(vp, UuidVector->Uuid[c], sizeof(UUID));
- vp += sizeof(UUID);
+ if (UuidVector)
+ memcpy(&entries[i * UuidVector->Count].object, &UuidVector->Uuid[j], sizeof(GUID));
+ else
+ memset(&entries[i].object, 0, sizeof(entries[i].object));
+ memcpy(entries[i].annotation, Annotation, min(len + 1, ept_max_annotation_size));
+ }
}
- for (c=0; c < msg.message.registerepmsg.binding_count; c++) {
- RpcBinding *bind = (RpcBinding*)(BindingVector->BindingH[c]);
- unsigned long pslen = strlen(bind->Protseq) + 1, eplen = strlen(bind->Endpoint) + 1;
- CopyMemory(vp, bind->Protseq, pslen);
- vp += pslen;
- CopyMemory(vp, bind->Endpoint, eplen);
- vp += eplen;
+ if (status == RPC_S_OK)
+ {
+ while (TRUE)
+ {
+ __TRY
+ {
+ ept_insert(handle, BindingVector->Count * (UuidVector ? UuidVector->Count : 1),
+ entries, TRUE, &status2);
+ }
+ __EXCEPT(rpc_filter)
+ {
+ status2 = GetExceptionCode();
+ }
+ __ENDTRY
+ if (status2 == RPC_S_SERVER_UNAVAILABLE &&
+ is_epm_destination_local(handle))
+ {
+ if (start_rpcss())
+ continue;
+ }
+ if (status2 != RPC_S_OK)
+ ERR("ept_insert failed with error %d\n", status2);
+ status = status2; /* FIXME: convert status? */
+ break;
+ }
+ }
+ RpcBindingFree(&handle);
+
+ for (i = 0; i < BindingVector->Count; i++)
+ {
+ unsigned j;
+ for (j = 0; j < (UuidVector ? UuidVector->Count : 1); j++)
+ I_RpcFree(entries[i*(UuidVector ? UuidVector->Count : 1) + j].tower);
}
- /* send our request */
- if (!RPCRT4_RPCSSOnDemandCall(&msg, vardata_payload, &reply))
- rslt = RPC_S_OUT_OF_MEMORY;
+ HeapFree(GetProcessHeap(), 0, entries);
- /* free the payload buffer */
- LocalFree(vardata_payload);
-
- return rslt;
+ return status;
}
/***********************************************************************
@@ -142,68 +286,85 @@ RPC_STATUS WINAPI RpcEpRegisterA( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *Bind
RPC_STATUS WINAPI RpcEpUnregister( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector,
UUID_VECTOR *UuidVector )
{
- RPCSS_NP_MESSAGE msg;
- RPCSS_NP_REPLY reply;
- char *vardata_payload, *vp;
PRPC_SERVER_INTERFACE If = (PRPC_SERVER_INTERFACE)IfSpec;
- unsigned long c;
- RPC_STATUS rslt = RPC_S_OK;
+ unsigned long i;
+ RPC_STATUS status = RPC_S_OK;
+ error_status_t status2;
+ ept_entry_t *entries;
+ handle_t handle;
TRACE("(%p,%p,%p)\n", IfSpec, BindingVector, UuidVector);
TRACE(" ifid=%s\n", debugstr_guid(&If->InterfaceId.SyntaxGUID));
- for (c=0; cCount; c++) {
- RpcBinding* bind = (RpcBinding*)(BindingVector->BindingH[c]);
- TRACE(" protseq[%ld]=%s\n", c, debugstr_a(bind->Protseq));
- TRACE(" endpoint[%ld]=%s\n", c, debugstr_a(bind->Endpoint));
+ for (i=0; iCount; i++) {
+ RpcBinding* bind = (RpcBinding*)(BindingVector->BindingH[i]);
+ TRACE(" protseq[%ld]=%s\n", i, debugstr_a(bind->Protseq));
+ TRACE(" endpoint[%ld]=%s\n", i, debugstr_a(bind->Endpoint));
}
if (UuidVector) {
- for (c=0; cCount; c++)
- TRACE(" obj[%ld]=%s\n", c, debugstr_guid(UuidVector->Uuid[c]));
+ for (i=0; iCount; i++)
+ TRACE(" obj[%ld]=%s\n", i, debugstr_guid(UuidVector->Uuid[i]));
}
- /* construct the message to rpcss */
- msg.message_type = RPCSS_NP_MESSAGE_TYPEID_UNREGISTEREPMSG;
- msg.message.unregisterepmsg.iface = If->InterfaceId;
+ entries = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*entries) * BindingVector->Count * (UuidVector ? UuidVector->Count : 1));
+ if (!entries)
+ return RPC_S_OUT_OF_MEMORY;
- msg.message.unregisterepmsg.object_count = (UuidVector) ? UuidVector->Count : 0;
- msg.message.unregisterepmsg.binding_count = BindingVector->Count;
-
- /* calculate vardata payload size */
- msg.vardata_payload_size = msg.message.unregisterepmsg.object_count * sizeof(UUID);
- for (c=0; c < msg.message.unregisterepmsg.binding_count; c++) {
- RpcBinding *bind = (RpcBinding *)(BindingVector->BindingH[c]);
- msg.vardata_payload_size += strlen(bind->Protseq) + 1;
- msg.vardata_payload_size += strlen(bind->Endpoint) + 1;
+ status = get_epm_handle_server(&handle);
+ if (status != RPC_S_OK)
+ {
+ HeapFree(GetProcessHeap(), 0, entries);
+ return status;
}
- /* allocate the payload buffer */
- vp = vardata_payload = LocalAlloc(LPTR, msg.vardata_payload_size);
- if (!vardata_payload)
- return RPC_S_OUT_OF_MEMORY;
+ for (i = 0; i < BindingVector->Count; i++)
+ {
+ unsigned j;
+ RpcBinding* bind = (RpcBinding*)(BindingVector->BindingH[i]);
+ for (j = 0; j < (UuidVector ? UuidVector->Count : 1); j++)
+ {
+ status = TowerConstruct(&If->InterfaceId, &If->TransferSyntax,
+ bind->Protseq, bind->Endpoint,
+ bind->NetworkAddr,
+ &entries[i*(UuidVector ? UuidVector->Count : 1) + j].tower);
+ if (status != RPC_S_OK) break;
- /* populate the payload data */
- for (c=0; c < msg.message.unregisterepmsg.object_count; c++) {
- CopyMemory(vp, UuidVector->Uuid[c], sizeof(UUID));
- vp += sizeof(UUID);
+ if (UuidVector)
+ memcpy(&entries[i * UuidVector->Count + j].object, &UuidVector->Uuid[j], sizeof(GUID));
+ else
+ memset(&entries[i].object, 0, sizeof(entries[i].object));
+ }
}
- for (c=0; c < msg.message.unregisterepmsg.binding_count; c++) {
- RpcBinding *bind = (RpcBinding*)(BindingVector->BindingH[c]);
- unsigned long pslen = strlen(bind->Protseq) + 1, eplen = strlen(bind->Endpoint) + 1;
- CopyMemory(vp, bind->Protseq, pslen);
- vp += pslen;
- CopyMemory(vp, bind->Endpoint, eplen);
- vp += eplen;
+ if (status == RPC_S_OK)
+ {
+ __TRY
+ {
+ ept_insert(handle, BindingVector->Count * (UuidVector ? UuidVector->Count : 1),
+ entries, TRUE, &status2);
+ }
+ __EXCEPT(rpc_filter)
+ {
+ status2 = GetExceptionCode();
+ }
+ __ENDTRY
+ if (status2 == RPC_S_SERVER_UNAVAILABLE)
+ status2 = EPT_S_NOT_REGISTERED;
+ if (status2 != RPC_S_OK)
+ ERR("ept_insert failed with error %d\n", status2);
+ status = status2; /* FIXME: convert status? */
+ }
+ RpcBindingFree(&handle);
+
+ for (i = 0; i < BindingVector->Count; i++)
+ {
+ unsigned j;
+ for (j = 0; j < (UuidVector ? UuidVector->Count : 1); j++)
+ I_RpcFree(entries[i*(UuidVector ? UuidVector->Count : 1) + j].tower);
}
- /* send our request */
- if (!RPCRT4_RPCSSOnDemandCall(&msg, vardata_payload, &reply))
- rslt = RPC_S_OUT_OF_MEMORY;
+ HeapFree(GetProcessHeap(), 0, entries);
- /* free the payload buffer */
- LocalFree(vardata_payload);
-
- return rslt;
+ return status;
}
/***********************************************************************
@@ -211,50 +372,96 @@ RPC_STATUS WINAPI RpcEpUnregister( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *Bin
*/
RPC_STATUS WINAPI RpcEpResolveBinding( RPC_BINDING_HANDLE Binding, RPC_IF_HANDLE IfSpec )
{
- RPCSS_NP_MESSAGE msg;
- RPCSS_NP_REPLY reply;
PRPC_CLIENT_INTERFACE If = (PRPC_CLIENT_INTERFACE)IfSpec;
RpcBinding* bind = (RpcBinding*)Binding;
+ RPC_STATUS status;
+ error_status_t status2;
+ handle_t handle;
+ ept_lookup_handle_t entry_handle = NULL;
+ twr_t *tower;
+ twr_t *towers[4] = { NULL };
+ unsigned32 num_towers, i;
+ GUID uuid = GUID_NULL;
+ char *resolved_endpoint = NULL;
TRACE("(%p,%p)\n", Binding, IfSpec);
TRACE(" protseq=%s\n", debugstr_a(bind->Protseq));
TRACE(" obj=%s\n", debugstr_guid(&bind->ObjectUuid));
+ TRACE(" networkaddr=%s\n", debugstr_a(bind->NetworkAddr));
TRACE(" ifid=%s\n", debugstr_guid(&If->InterfaceId.SyntaxGUID));
- /* FIXME: totally untested */
-
/* just return for fully bound handles */
if (bind->Endpoint && (bind->Endpoint[0] != '\0'))
return RPC_S_OK;
- /* construct the message to rpcss */
- msg.message_type = RPCSS_NP_MESSAGE_TYPEID_RESOLVEEPMSG;
- msg.message.resolveepmsg.iface = If->InterfaceId;
- msg.message.resolveepmsg.object = bind->ObjectUuid;
-
- msg.vardata_payload_size = strlen(bind->Protseq) + 1;
-
- /* send the message */
- if (!RPCRT4_RPCSSOnDemandCall(&msg, bind->Protseq, &reply))
- return RPC_S_OUT_OF_MEMORY;
-
- /* empty-string result means not registered */
- if (reply.as_string[0] == '\0')
- return EPT_S_NOT_REGISTERED;
+ status = get_epm_handle_client(Binding, &handle);
+ if (status != RPC_S_OK) return status;
- /* otherwise we fully bind the handle & return RPC_S_OK */
- return RPCRT4_ResolveBinding(Binding, reply.as_string);
+ status = TowerConstruct(&If->InterfaceId, &If->TransferSyntax, bind->Protseq,
+ ((RpcBinding *)handle)->Endpoint,
+ bind->NetworkAddr, &tower);
+ if (status != RPC_S_OK)
+ {
+ WARN("couldn't get tower\n");
+ RpcBindingFree(&handle);
+ return status;
+ }
+
+ while (TRUE)
+ {
+ __TRY
+ {
+ ept_map(handle, &uuid, tower, &entry_handle, sizeof(towers)/sizeof(towers[0]), &num_towers, towers, &status2);
+ /* FIXME: translate status2? */
+ }
+ __EXCEPT(rpc_filter)
+ {
+ status2 = GetExceptionCode();
+ }
+ __ENDTRY
+ if (status2 == RPC_S_SERVER_UNAVAILABLE &&
+ is_epm_destination_local(handle))
+ {
+ if (start_rpcss())
+ continue;
+ }
+ break;
+ };
+
+ RpcBindingFree(&handle);
+ I_RpcFree(tower);
+
+ if (status2 != RPC_S_OK)
+ {
+ ERR("ept_map failed for ifid %s, protseq %s, networkaddr %s\n", debugstr_guid(&If->TransferSyntax.SyntaxGUID), bind->Protseq, bind->NetworkAddr);
+ return status2;
+ }
+
+ for (i = 0; i < num_towers; i++)
+ {
+ /* only parse the tower if we haven't already found a suitable
+ * endpoint, otherwise just free the tower */
+ if (!resolved_endpoint)
+ {
+ status = TowerExplode(towers[i], NULL, NULL, NULL, &resolved_endpoint, NULL);
+ TRACE("status = %ld\n", status);
+ }
+ I_RpcFree(towers[i]);
+ }
+
+ if (resolved_endpoint)
+ {
+ RPCRT4_ResolveBinding(Binding, resolved_endpoint);
+ I_RpcFree(resolved_endpoint);
+ return RPC_S_OK;
+ }
+
+ WARN("couldn't find an endpoint\n");
+ return EPT_S_NOT_REGISTERED;
}
-typedef unsigned int unsigned32;
-typedef struct twr_t
- {
- unsigned32 tower_length;
- /* [size_is] */ BYTE tower_octet_string[ 1 ];
- } twr_t;
-
-/***********************************************************************
- * TowerExplode (RPCRT4.@)
+/*****************************************************************************
+ * TowerExplode (RPCRT4.@)
*/
RPC_STATUS WINAPI TowerExplode(
const twr_t *tower, PRPC_SYNTAX_IDENTIFIER object, PRPC_SYNTAX_IDENTIFIER syntax,
@@ -388,3 +595,13 @@ RPC_STATUS WINAPI TowerConstruct(
}
return RPC_S_OK;
}
+
+void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t len)
+{
+ return HeapAlloc(GetProcessHeap(), 0, len);
+}
+
+void __RPC_USER MIDL_user_free(void __RPC_FAR * ptr)
+{
+ HeapFree(GetProcessHeap(), 0, ptr);
+}
diff --git a/reactos/dll/win32/rpcrt4/rpc_message.c b/reactos/dll/win32/rpcrt4/rpc_message.c
index 48c7df0d085..e59fc81d809 100644
--- a/reactos/dll/win32/rpcrt4/rpc_message.c
+++ b/reactos/dll/win32/rpcrt4/rpc_message.c
@@ -1,7 +1,7 @@
/*
* RPC messages
*
- * Copyright 2001-2002 Ove Kеven, TransGaming Technologies
+ * Copyright 2001-2002 Ove KГҐven, TransGaming Technologies
* Copyright 2004 Filip Navara
* Copyright 2006 CodeWeavers
*
@@ -1005,7 +1005,10 @@ RPC_STATUS WINAPI I_RpcNegotiateTransferSyntax(PRPC_MESSAGE pMsg)
TRACE("(%p)\n", pMsg);
if (!bind || bind->server)
+ {
+ ERR("no binding\n");
return RPC_S_INVALID_BINDING;
+ }
/* if we already have a connection, we don't need to negotiate again */
if (!pMsg->ReservedForRuntime)
@@ -1065,7 +1068,10 @@ RPC_STATUS WINAPI I_RpcGetBuffer(PRPC_MESSAGE pMsg)
TRACE("(%p): BufferLength=%d\n", pMsg, pMsg->BufferLength);
if (!bind)
+ {
+ ERR("no binding\n");
return RPC_S_INVALID_BINDING;
+ }
pMsg->Buffer = I_RpcAllocate(pMsg->BufferLength);
TRACE("Buffer=%p\n", pMsg->Buffer);
@@ -1118,7 +1124,11 @@ RPC_STATUS WINAPI I_RpcFreeBuffer(PRPC_MESSAGE pMsg)
TRACE("(%p) Buffer=%p\n", pMsg, pMsg->Buffer);
- if (!bind) return RPC_S_INVALID_BINDING;
+ if (!bind)
+ {
+ ERR("no binding\n");
+ return RPC_S_INVALID_BINDING;
+ }
if (pMsg->ReservedForRuntime)
{
diff --git a/reactos/dll/win32/rpcrt4/rpc_message.h b/reactos/dll/win32/rpcrt4/rpc_message.h
index 95eb8076ab8..7e746cbb2c5 100644
--- a/reactos/dll/win32/rpcrt4/rpc_message.h
+++ b/reactos/dll/win32/rpcrt4/rpc_message.h
@@ -21,7 +21,6 @@
#ifndef __WINE_RPC_MESSAGE_H
#define __WINE_RPC_MESSAGE_H
-#include "wine/rpcss_shared.h"
#include "rpc_defs.h"
typedef unsigned int NCA_STATUS;
diff --git a/reactos/dll/win32/rpcrt4/rpc_server.c b/reactos/dll/win32/rpcrt4/rpc_server.c
index 953cccfa94d..6201166a750 100644
--- a/reactos/dll/win32/rpcrt4/rpc_server.c
+++ b/reactos/dll/win32/rpcrt4/rpc_server.c
@@ -1,7 +1,7 @@
/*
* RPC server API
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
* Copyright 2004 Filip Navara
* Copyright 2006-2008 Robert Shearman (for CodeWeavers)
*
@@ -138,29 +138,24 @@ static RpcServerInterface* RPCRT4_find_interface(UUID* object,
}
LeaveCriticalSection(&server_cs);
if (&cif->entry == &server_interfaces) cif = NULL;
- TRACE("returning %p for %s\n", cif, debugstr_guid(object));
+ TRACE("returning %p for object %s, if_id { %d.%d %s }\n", cif,
+ debugstr_guid(object), if_id->SyntaxVersion.MajorVersion,
+ if_id->SyntaxVersion.MinorVersion, debugstr_guid(&if_id->SyntaxGUID));
return cif;
}
static void RPCRT4_release_server_interface(RpcServerInterface *sif)
{
if (!InterlockedDecrement(&sif->CurrentCalls) &&
- sif->CallsCompletedEvent) {
+ sif->Delete) {
/* sif must have been removed from server_interfaces before
* CallsCompletedEvent is set */
- SetEvent(sif->CallsCompletedEvent);
+ if (sif->CallsCompletedEvent)
+ SetEvent(sif->CallsCompletedEvent);
HeapFree(GetProcessHeap(), 0, sif);
}
}
-static WINE_EXCEPTION_FILTER(rpc_filter)
-{
- WARN("exception caught with code 0x%08x = %d\n", GetExceptionCode(), GetExceptionCode());
- TRACE("returning failure packet\n");
- /* catch every exception */
- return EXCEPTION_EXECUTE_HANDLER;
-}
-
static RPC_STATUS process_bind_packet(RpcConnection *conn, RpcPktBindHdr *hdr, RPC_MESSAGE *msg)
{
RPC_STATUS status;
@@ -294,7 +289,8 @@ static RPC_STATUS process_request_packet(RpcConnection *conn, RpcPktRequestHdr *
RPCRT4_SetThreadCurrentCallHandle(msg->Handle);
__TRY {
if (func) func(msg);
- } __EXCEPT(rpc_filter) {
+ } __EXCEPT_ALL {
+ WARN("exception caught with code 0x%08x = %d\n", GetExceptionCode(), GetExceptionCode());
exception = TRUE;
if (GetExceptionCode() == STATUS_ACCESS_VIOLATION)
status = ERROR_NOACCESS;
@@ -356,7 +352,7 @@ static void RPCRT4_process_packet(RpcConnection* conn, RpcPktHdr* hdr, RPC_MESSA
}
/* clean up */
- I_RpcFreeBuffer(msg);
+ I_RpcFree(msg->Buffer);
RPCRT4_FreeHeader(hdr);
HeapFree(GetProcessHeap(), 0, msg);
}
@@ -392,6 +388,7 @@ static DWORD CALLBACK RPCRT4_io_thread(LPVOID the_arg)
packet = HeapAlloc(GetProcessHeap(), 0, sizeof(RpcPacket));
if (!packet) {
I_RpcFree(msg->Buffer);
+ RPCRT4_FreeHeader(hdr);
HeapFree(GetProcessHeap(), 0, msg);
break;
}
@@ -401,6 +398,7 @@ static DWORD CALLBACK RPCRT4_io_thread(LPVOID the_arg)
if (!QueueUserWorkItem(RPCRT4_worker_thread, packet, WT_EXECUTELONGFUNCTION)) {
ERR("couldn't queue work item for worker thread, error was %d\n", GetLastError());
I_RpcFree(msg->Buffer);
+ RPCRT4_FreeHeader(hdr);
HeapFree(GetProcessHeap(), 0, msg);
HeapFree(GetProcessHeap(), 0, packet);
break;
@@ -852,7 +850,7 @@ RPC_STATUS WINAPI RpcServerRegisterIf2( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid,
sif = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(RpcServerInterface));
sif->If = If;
if (MgrTypeUuid) {
- memcpy(&sif->MgrTypeUuid, MgrTypeUuid, sizeof(UUID));
+ sif->MgrTypeUuid = *MgrTypeUuid;
sif->MgrEpv = MgrEpv;
} else {
memset(&sif->MgrTypeUuid, 0, sizeof(UUID));
@@ -893,8 +891,10 @@ RPC_STATUS WINAPI RpcServerUnregisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid
if ((!IfSpec || !memcmp(&If->InterfaceId, &cif->If->InterfaceId, sizeof(RPC_SYNTAX_IDENTIFIER))) &&
UuidEqual(MgrTypeUuid, &cif->MgrTypeUuid, &status)) {
list_remove(&cif->entry);
+ TRACE("unregistering cif %p\n", cif);
if (cif->CurrentCalls) {
completed = FALSE;
+ cif->Delete = TRUE;
if (WaitForCallsToComplete)
cif->CallsCompletedEvent = event = CreateEventW(NULL, FALSE, FALSE, NULL);
}
@@ -984,8 +984,8 @@ RPC_STATUS WINAPI RpcObjectSetType( UUID* ObjUuid, UUID* TypeUuid )
return RPC_S_ALREADY_REGISTERED;
/* ... otherwise create a new one and add it in. */
map = HeapAlloc(GetProcessHeap(), 0, sizeof(RpcObjTypeMap));
- memcpy(&map->Object, ObjUuid, sizeof(UUID));
- memcpy(&map->Type, TypeUuid, sizeof(UUID));
+ map->Object = *ObjUuid;
+ map->Type = *TypeUuid;
map->next = NULL;
if (prev)
prev->next = map; /* prev is the last map in the linklist */
@@ -1050,13 +1050,11 @@ RPC_STATUS WINAPI RpcMgmtWaitServerListen( void )
LeaveCriticalSection(&listen_cs);
return RPC_S_NOT_LISTENING;
}
-
- do
- {
- LeaveCriticalSection(&listen_cs);
+ do {
+ LeaveCriticalSection(&listen_cs);
LIST_FOR_EACH_ENTRY(cps, &protseqs, RpcServerProtseq, entry)
- WaitForSingleObject(cps->server_ready_event, INFINITE);
+ WaitForSingleObject(cps->server_ready_event, INFINITE);
EnterCriticalSection(&listen_cs);
} while (!std_listen);
@@ -1131,6 +1129,40 @@ RPC_STATUS WINAPI RpcMgmtInqIfIds(RPC_BINDING_HANDLE Binding, RPC_IF_ID_VECTOR *
return RPC_S_INVALID_BINDING;
}
+/***********************************************************************
+ * RpcMgmtInqStats (RPCRT4.@)
+ */
+RPC_STATUS WINAPI RpcMgmtInqStats(RPC_BINDING_HANDLE Binding, RPC_STATS_VECTOR **Statistics)
+{
+ RPC_STATS_VECTOR *stats;
+
+ FIXME("(%p,%p)\n", Binding, Statistics);
+
+ if ((stats = HeapAlloc(GetProcessHeap(), 0, sizeof(RPC_STATS_VECTOR))))
+ {
+ stats->Count = 1;
+ stats->Stats[0] = 0;
+ *Statistics = stats;
+ return RPC_S_OK;
+ }
+ return RPC_S_OUT_OF_RESOURCES;
+}
+
+/***********************************************************************
+ * RpcMgmtStatsVectorFree (RPCRT4.@)
+ */
+RPC_STATUS WINAPI RpcMgmtStatsVectorFree(RPC_STATS_VECTOR **StatsVector)
+{
+ FIXME("(%p)\n", StatsVector);
+
+ if (StatsVector)
+ {
+ HeapFree(GetProcessHeap(), 0, *StatsVector);
+ *StatsVector = NULL;
+ }
+ return RPC_S_OK;
+}
+
/***********************************************************************
* RpcMgmtEpEltInqBegin (RPCRT4.@)
*/
diff --git a/reactos/dll/win32/rpcrt4/rpc_server.h b/reactos/dll/win32/rpcrt4/rpc_server.h
index eb32be6afc9..ffd5b016e4b 100644
--- a/reactos/dll/win32/rpcrt4/rpc_server.h
+++ b/reactos/dll/win32/rpcrt4/rpc_server.h
@@ -1,7 +1,7 @@
/*
* RPC server API
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -73,6 +73,7 @@ typedef struct _RpcServerInterface
/* set when unregistering interface to let the caller of
* RpcServerUnregisterIf* know that all calls have finished */
HANDLE CallsCompletedEvent;
+ BOOL Delete; /* delete when the last call finishes */
} RpcServerInterface;
void RPCRT4_new_client(RpcConnection* conn);
diff --git a/reactos/dll/win32/rpcrt4/rpc_transport.c b/reactos/dll/win32/rpcrt4/rpc_transport.c
index 08261274b89..14aa908929e 100644
--- a/reactos/dll/win32/rpcrt4/rpc_transport.c
+++ b/reactos/dll/win32/rpcrt4/rpc_transport.c
@@ -1,7 +1,7 @@
/*
* RPC transport layer
*
- * Copyright 2001 Ove Kеven, TransGaming Technologies
+ * Copyright 2001 Ove KГҐven, TransGaming Technologies
* Copyright 2003 Mike Hearn
* Copyright 2004 Filip Navara
* Copyright 2006 Mike McCormack
@@ -29,32 +29,43 @@
#include
#include
#include
-#include
-
-#ifdef HAVE_UNISTD_H
-# include
-#endif
-#include
#include
#include
-#ifdef HAVE_SYS_SOCKET_H
-# include
-#endif
-#ifdef HAVE_NETINET_IN_H
-# include
-#endif
-#ifdef HAVE_NETINET_TCP_H
-# include
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include
-#endif
-#ifdef HAVE_NETDB_H
-#include
-#endif
-#ifdef HAVE_SYS_POLL_H
-#include
-#endif
+
+#if defined(__MINGW32__) || defined (_MSC_VER)
+# include
+# ifndef EADDRINUSE
+# define EADDRINUSE WSAEADDRINUSE
+# endif
+# ifndef EAGAIN
+# define EAGAIN WSAEWOULDBLOCK
+# endif
+#else
+# include
+# ifdef HAVE_UNISTD_H
+# include
+# endif
+# include
+# ifdef HAVE_SYS_SOCKET_H
+# include
+# endif
+# ifdef HAVE_NETINET_IN_H
+# include
+# endif
+# ifdef HAVE_NETINET_TCP_H
+# include
+# endif
+# ifdef HAVE_ARPA_INET_H
+# include
+# endif
+# ifdef HAVE_NETDB_H
+# include
+# endif
+# ifdef HAVE_SYS_POLL_H
+# include
+# endif
+# define closesocket close
+#endif /* defined(__MINGW32__) || defined (_MSC_VER) */
#include
#include
@@ -112,20 +123,29 @@ static RPC_STATUS rpcrt4_conn_listen_pipe(RpcConnection_np *npc)
return RPC_S_OK;
npc->listening = TRUE;
- if (ConnectNamedPipe(npc->pipe, &npc->ovl[0]))
- return RPC_S_OK;
+ for (;;)
+ {
+ if (ConnectNamedPipe(npc->pipe, &npc->ovl[0]))
+ return RPC_S_OK;
- if (GetLastError() == ERROR_PIPE_CONNECTED) {
- SetEvent(npc->ovl[0].hEvent);
- return RPC_S_OK;
+ switch(GetLastError())
+ {
+ case ERROR_PIPE_CONNECTED:
+ SetEvent(npc->ovl[0].hEvent);
+ return RPC_S_OK;
+ case ERROR_IO_PENDING:
+ /* will be completed in rpcrt4_protseq_np_wait_for_new_connection */
+ return RPC_S_OK;
+ case ERROR_NO_DATA_DETECTED:
+ /* client has disconnected, retry */
+ DisconnectNamedPipe( npc->pipe );
+ break;
+ default:
+ npc->listening = FALSE;
+ WARN("Couldn't ConnectNamedPipe (error was %d)\n", GetLastError());
+ return RPC_S_OUT_OF_RESOURCES;
+ }
}
- if (GetLastError() == ERROR_IO_PENDING) {
- /* will be completed in rpcrt4_protseq_np_wait_for_new_connection */
- return RPC_S_OK;
- }
- npc->listening = FALSE;
- WARN("Couldn't ConnectNamedPipe (error was %d)\n", GetLastError());
- return RPC_S_OUT_OF_RESOURCES;
}
static RPC_STATUS rpcrt4_conn_create_pipe(RpcConnection *Connection, LPCSTR pname)
@@ -196,9 +216,7 @@ static RPC_STATUS rpcrt4_conn_open_pipe(RpcConnection *Connection, LPCSTR pname,
TRACE("connection failed, error=%x\n", err);
return RPC_S_SERVER_TOO_BUSY;
}
- if (!wait)
- return RPC_S_SERVER_UNAVAILABLE;
- if (!WaitNamedPipeA(pname, NMPWAIT_WAIT_FOREVER)) {
+ if (!wait || !WaitNamedPipeA(pname, NMPWAIT_WAIT_FOREVER)) {
err = GetLastError();
WARN("connection failed, error=%x\n", err);
return RPC_S_SERVER_UNAVAILABLE;
@@ -212,7 +230,6 @@ static RPC_STATUS rpcrt4_conn_open_pipe(RpcConnection *Connection, LPCSTR pname,
SetNamedPipeHandleState(pipe, &dwMode, NULL, NULL);
npc->ovl[0].hEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
npc->ovl[1].hEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
-
npc->pipe = pipe;
return RPC_S_OK;
@@ -375,7 +392,7 @@ static int rpcrt4_conn_np_read(RpcConnection *Connection,
break;
ret = GetOverlappedResult(npc->pipe, &npc->ovl[0], &bytes_read, TRUE);
- if (!ret && GetLastError() != ERROR_MORE_DATA)
+ if (!ret && (GetLastError() != ERROR_MORE_DATA))
break;
bytes_left -= bytes_read;
@@ -395,12 +412,12 @@ static int rpcrt4_conn_np_write(RpcConnection *Connection,
while (bytes_left)
{
DWORD bytes_written;
- ret = WriteFile(npc->pipe, buf, count, &bytes_written, &npc->ovl[1]);
+ ret = WriteFile(npc->pipe, buf, bytes_left, &bytes_written, &npc->ovl[1]);
if ((!ret || !bytes_written) && (GetLastError() != ERROR_IO_PENDING))
break;
ret = GetOverlappedResult(npc->pipe, &npc->ovl[1], &bytes_written, TRUE);
- if (!ret && GetLastError() != ERROR_MORE_DATA)
+ if (!ret && (GetLastError() != ERROR_MORE_DATA))
break;
bytes_left -= bytes_written;
@@ -425,7 +442,6 @@ static int rpcrt4_conn_np_close(RpcConnection *Connection)
CloseHandle(npc->ovl[1].hEvent);
npc->ovl[1].hEvent = 0;
}
-
return 0;
}
@@ -508,7 +524,8 @@ static RPC_STATUS rpcrt4_ncacn_np_parse_top_of_tower(const unsigned char *tower_
if ((smb_floor->count_lhs != sizeof(smb_floor->protid)) ||
(smb_floor->protid != EPM_PROTOCOL_SMB) ||
- (smb_floor->count_rhs > tower_size))
+ (smb_floor->count_rhs > tower_size) ||
+ (tower_data[smb_floor->count_rhs - 1] != '\0'))
return EPT_S_NOT_REGISTERED;
if (endpoint)
@@ -531,7 +548,8 @@ static RPC_STATUS rpcrt4_ncacn_np_parse_top_of_tower(const unsigned char *tower_
if ((nb_floor->count_lhs != sizeof(nb_floor->protid)) ||
(nb_floor->protid != EPM_PROTOCOL_NETBIOS) ||
- (nb_floor->count_rhs > tower_size))
+ (nb_floor->count_rhs > tower_size) ||
+ (tower_data[nb_floor->count_rhs - 1] != '\0'))
return EPT_S_NOT_REGISTERED;
if (networkaddr)
@@ -681,7 +699,7 @@ static size_t rpcrt4_ncalrpc_get_top_of_tower(unsigned char *tower_data,
TRACE("(%p, %s, %s)\n", tower_data, networkaddr, endpoint);
- endpoint_size = strlen(networkaddr) + 1;
+ endpoint_size = strlen(endpoint) + 1;
size = sizeof(*pipe_floor) + endpoint_size;
if (!tower_data)
@@ -692,7 +710,7 @@ static size_t rpcrt4_ncalrpc_get_top_of_tower(unsigned char *tower_data,
tower_data += sizeof(*pipe_floor);
pipe_floor->count_lhs = sizeof(pipe_floor->protid);
- pipe_floor->protid = EPM_PROTOCOL_SMB;
+ pipe_floor->protid = EPM_PROTOCOL_PIPE;
pipe_floor->count_rhs = endpoint_size;
memcpy(tower_data, endpoint, endpoint_size);
@@ -710,9 +728,6 @@ static RPC_STATUS rpcrt4_ncalrpc_parse_top_of_tower(const unsigned char *tower_d
TRACE("(%p, %d, %p, %p)\n", tower_data, (int)tower_size, networkaddr, endpoint);
- *networkaddr = NULL;
- *endpoint = NULL;
-
if (tower_size < sizeof(*pipe_floor))
return EPT_S_NOT_REGISTERED;
@@ -720,10 +735,14 @@ static RPC_STATUS rpcrt4_ncalrpc_parse_top_of_tower(const unsigned char *tower_d
tower_size -= sizeof(*pipe_floor);
if ((pipe_floor->count_lhs != sizeof(pipe_floor->protid)) ||
- (pipe_floor->protid != EPM_PROTOCOL_SMB) ||
- (pipe_floor->count_rhs > tower_size))
+ (pipe_floor->protid != EPM_PROTOCOL_PIPE) ||
+ (pipe_floor->count_rhs > tower_size) ||
+ (tower_data[pipe_floor->count_rhs - 1] != '\0'))
return EPT_S_NOT_REGISTERED;
+ if (networkaddr)
+ *networkaddr = NULL;
+
if (endpoint)
{
*endpoint = I_RpcAllocate(pipe_floor->count_rhs);
@@ -751,14 +770,12 @@ static RpcConnection *rpcrt4_conn_tcp_alloc(void)
if (tcpc == NULL)
return NULL;
tcpc->sock = -1;
-#ifndef __REACTOS__
if (socketpair(PF_UNIX, SOCK_STREAM, 0, tcpc->cancel_fds) < 0)
{
ERR("socketpair() failed: %s\n", strerror(errno));
HeapFree(GetProcessHeap(), 0, tcpc);
return NULL;
}
-#endif
return &tcpc->common;
}
@@ -817,13 +834,14 @@ static RPC_STATUS rpcrt4_ncacn_ip_tcp_open(RpcConnection* Connection)
if (0>connect(sock, ai_cur->ai_addr, ai_cur->ai_addrlen))
{
WARN("connect() failed: %s\n", strerror(errno));
- close(sock);
+ closesocket(sock);
continue;
}
/* RPC depends on having minimal latency so disable the Nagle algorithm */
val = 1;
- setsockopt(sock, SOL_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
+ setsockopt(sock, SOL_TCP, TCP_NODELAY, &val, sizeof(val));
+ fcntl(sock, F_SETFL, O_NONBLOCK); /* make socket nonblocking */
tcpc->sock = sock;
@@ -845,7 +863,6 @@ static RPC_STATUS rpcrt4_protseq_ncacn_ip_tcp_open_endpoint(RpcServerProtseq *pr
struct addrinfo *ai;
struct addrinfo *ai_cur;
struct addrinfo hints;
- u_long blocking;
RpcConnection *first_connection = NULL;
TRACE("(%p, %s)\n", protseq, endpoint);
@@ -896,8 +913,8 @@ static RPC_STATUS rpcrt4_protseq_ncacn_ip_tcp_open_endpoint(RpcServerProtseq *pr
if (ret < 0)
{
WARN("bind failed: %s\n", strerror(errno));
- close(sock);
- if (errno == WSAEADDRINUSE)
+ closesocket(sock);
+ if (errno == EADDRINUSE)
status = RPC_S_DUPLICATE_ENDPOINT;
else
status = RPC_S_CANT_CREATE_ENDPOINT;
@@ -908,7 +925,7 @@ static RPC_STATUS rpcrt4_protseq_ncacn_ip_tcp_open_endpoint(RpcServerProtseq *pr
endpoint, NULL, NULL, NULL);
if (create_status != RPC_S_OK)
{
- close(sock);
+ closesocket(sock);
status = create_status;
continue;
}
@@ -926,8 +943,7 @@ static RPC_STATUS rpcrt4_protseq_ncacn_ip_tcp_open_endpoint(RpcServerProtseq *pr
* race-condition (poll() says it is readable, connection drops,
* and accept() blocks until the next connection comes...)
*/
- blocking = 1;
- ret = ioctlsocket(sock, FIONBIO, &blocking);
+ ret = fcntl(sock, F_SETFL, O_NONBLOCK);
if (ret < 0)
{
WARN("couldn't make socket non-blocking, error %d\n", ret);
@@ -970,7 +986,6 @@ static RPC_STATUS rpcrt4_conn_tcp_handoff(RpcConnection *old_conn, RpcConnection
int ret;
struct sockaddr_in address;
socklen_t addrsize;
- u_long blocking;
RpcConnection_tcp *server = (RpcConnection_tcp*) old_conn;
RpcConnection_tcp *client = (RpcConnection_tcp*) new_conn;
@@ -982,8 +997,7 @@ static RPC_STATUS rpcrt4_conn_tcp_handoff(RpcConnection *old_conn, RpcConnection
return RPC_S_OUT_OF_RESOURCES;
}
/* reset to blocking behaviour */
- blocking = 0;
- ret = ioctlsocket(ret, FIONBIO, &blocking);
+ fcntl(ret, F_SETFL, 0);
client->sock = ret;
TRACE("Accepted a new TCP connection\n");
return RPC_S_OK;
@@ -1065,7 +1079,7 @@ static int rpcrt4_conn_tcp_close(RpcConnection *Connection)
TRACE("%d\n", tcpc->sock);
if (tcpc->sock != -1)
- close(tcpc->sock);
+ closesocket(tcpc->sock);
tcpc->sock = -1;
close(tcpc->cancel_fds[0]);
close(tcpc->cancel_fds[1]);
@@ -1256,12 +1270,10 @@ static RpcServerProtseq *rpcrt4_protseq_sock_alloc(void)
if (ps)
{
int fds[2];
- u_long blocking;
if (!socketpair(PF_UNIX, SOCK_DGRAM, 0, fds))
{
- blocking = 1;
- ioctlsocket(fds[0], FIONBIO, &blocking);
- ioctlsocket(fds[1], FIONBIO, &blocking);
+ fcntl(fds[0], F_SETFL, O_NONBLOCK);
+ fcntl(fds[1], F_SETFL, O_NONBLOCK);
ps->mgr_event_rcv = fds[0];
ps->mgr_event_snd = fds[1];
}
diff --git a/reactos/dll/win32/rpcrt4/rpcrt4.rbuild b/reactos/dll/win32/rpcrt4/rpcrt4.rbuild
index 7fe08aa3ebc..73da7a23060 100644
--- a/reactos/dll/win32/rpcrt4/rpcrt4.rbuild
+++ b/reactos/dll/win32/rpcrt4/rpcrt4.rbuild
@@ -8,6 +8,7 @@
wine
uuid
+ rpcrt4_epm_client
kernel32
user32
advapi32
@@ -32,9 +33,12 @@
rpc_server.c
rpc_transport.c
rpcrt4_main.c
- rpcss_np_client.c
unix_func.c
ndr_es.c
rpcrt4.rc
- rpcrt4.spec
+ epm.idl
+ .
+
+
+ epm.idl
diff --git a/reactos/dll/win32/rpcrt4/rpcrt4.spec b/reactos/dll/win32/rpcrt4/rpcrt4.spec
index 4c0d4eaa26a..2c86e68032f 100644
--- a/reactos/dll/win32/rpcrt4/rpcrt4.spec
+++ b/reactos/dll/win32/rpcrt4/rpcrt4.spec
@@ -99,7 +99,7 @@
@ stub MesBufferHandleReset
@ stdcall MesDecodeBufferHandleCreate(ptr long ptr)
@ stdcall MesDecodeIncrementalHandleCreate(ptr ptr ptr)
-@ stub MesEncodeDynBufferHandleCreate
+@ stdcall MesEncodeDynBufferHandleCreate(ptr ptr ptr)
@ stdcall MesEncodeFixedBufferHandleCreate(ptr long ptr ptr)
@ stdcall MesEncodeIncrementalHandleCreate(ptr ptr ptr ptr)
@ stdcall MesHandleFree(ptr)
@@ -363,7 +363,7 @@
@ stdcall RpcBindingVectorFree(ptr)
@ stdcall RpcCancelAsyncCall(ptr long) RpcAsyncCancelCall
@ stdcall RpcCancelThread(ptr)
-@ stub RpcCancelThreadEx
+@ stdcall RpcCancelThreadEx(ptr long)
@ stub RpcCertGeneratePrincipalNameA
@ stub RpcCertGeneratePrincipalNameW
@ stdcall RpcCompleteAsyncCall(ptr ptr) RpcAsyncCompleteCall
@@ -399,13 +399,13 @@
@ stdcall RpcMgmtInqIfIds(ptr ptr)
@ stub RpcMgmtInqServerPrincNameA
@ stub RpcMgmtInqServerPrincNameW
-@ stub RpcMgmtInqStats
+@ stdcall RpcMgmtInqStats(ptr ptr)
@ stdcall RpcMgmtIsServerListening(ptr)
@ stub RpcMgmtSetAuthorizationFn
@ stdcall RpcMgmtSetCancelTimeout(long)
@ stdcall RpcMgmtSetComTimeout(ptr long)
@ stdcall RpcMgmtSetServerStackSize(long)
-@ stub RpcMgmtStatsVectorFree
+@ stdcall RpcMgmtStatsVectorFree(ptr)
@ stdcall RpcMgmtStopServerListening(ptr)
@ stdcall RpcMgmtWaitServerListen()
@ stub RpcNetworkInqProtseqsA
diff --git a/reactos/dll/win32/rpcrt4/rpcrt4_main.c b/reactos/dll/win32/rpcrt4/rpcrt4_main.c
index f1b564d9540..1f0b1bbd615 100644
--- a/reactos/dll/win32/rpcrt4/rpcrt4_main.c
+++ b/reactos/dll/win32/rpcrt4/rpcrt4_main.c
@@ -53,19 +53,12 @@
#include "rpcproxy.h"
#include "rpc_binding.h"
-#include "rpcss_np_client.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(rpc);
static UUID uuid_nil;
-static HANDLE master_mutex;
-
-HANDLE RPCRT4_GetMasterMutex(void)
-{
- return master_mutex;
-}
static CRITICAL_SECTION uuid_cs;
static CRITICAL_SECTION_DEBUG critsect_debug =
@@ -122,9 +115,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
- master_mutex = CreateMutexA( NULL, FALSE, RPCSS_MASTER_MUTEX_NAME);
- if (!master_mutex)
- ERR("Failed to create master mutex\n");
break;
case DLL_THREAD_DETACH:
@@ -145,8 +135,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
break;
case DLL_PROCESS_DETACH:
- CloseHandle(master_mutex);
- master_mutex = NULL;
break;
}
@@ -265,7 +253,7 @@ int WINAPI UuidEqual(UUID *Uuid1, UUID *Uuid2, RPC_STATUS *Status)
*
* PARAMS
* UUID *Uuid [I] Uuid to compare
- * RPC_STATUS *Status [O] retuns RPC_S_OK
+ * RPC_STATUS *Status [O] returns RPC_S_OK
*
* RETURNS
* TRUE/FALSE
@@ -645,102 +633,6 @@ HRESULT WINAPI DllRegisterServer( void )
return S_OK;
}
-static BOOL RPCRT4_StartRPCSS(void)
-{
- PROCESS_INFORMATION pi;
- STARTUPINFOA si;
- static char cmd[6];
- BOOL rslt;
-
- ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
- ZeroMemory(&si, sizeof(STARTUPINFOA));
- si.cb = sizeof(STARTUPINFOA);
-
- /* apparently it's not OK to use a constant string below */
- CopyMemory(cmd, "rpcss", 6);
-
- /* FIXME: will this do the right thing when run as a test? */
- rslt = CreateProcessA(
- NULL, /* executable */
- cmd, /* command line */
- NULL, /* process security attributes */
- NULL, /* primary thread security attributes */
- FALSE, /* inherit handles */
- 0, /* creation flags */
- NULL, /* use parent's environment */
- NULL, /* use parent's current directory */
- &si, /* STARTUPINFO pointer */
- &pi /* PROCESS_INFORMATION */
- );
-
- if (rslt) {
- CloseHandle(pi.hProcess);
- CloseHandle(pi.hThread);
- }
-
- return rslt;
-}
-
-/***********************************************************************
- * RPCRT4_RPCSSOnDemandCall (internal)
- *
- * Attempts to send a message to the RPCSS process
- * on the local machine, invoking it if necessary.
- * For remote RPCSS calls, use.... your imagination.
- *
- * PARAMS
- * msg [I] pointer to the RPCSS message
- * vardata_payload [I] pointer vardata portion of the RPCSS message
- * reply [O] pointer to reply structure
- *
- * RETURNS
- * TRUE if successful
- * FALSE otherwise
- */
-BOOL RPCRT4_RPCSSOnDemandCall(PRPCSS_NP_MESSAGE msg, char *vardata_payload, PRPCSS_NP_REPLY reply)
-{
- HANDLE client_handle;
- BOOL ret;
- int i, j = 0;
-
- TRACE("(msg == %p, vardata_payload == %p, reply == %p)\n", msg, vardata_payload, reply);
-
- client_handle = RPCRT4_RpcssNPConnect();
-
- while (INVALID_HANDLE_VALUE == client_handle) {
- /* start the RPCSS process */
- if (!RPCRT4_StartRPCSS()) {
- ERR("Unable to start RPCSS process.\n");
- return FALSE;
- }
- /* wait for a connection (w/ periodic polling) */
- for (i = 0; i < 60; i++) {
- Sleep(200);
- client_handle = RPCRT4_RpcssNPConnect();
- if (INVALID_HANDLE_VALUE != client_handle) break;
- }
- /* we are only willing to try twice */
- if (j++ >= 1) break;
- }
-
- if (INVALID_HANDLE_VALUE == client_handle) {
- /* no dice! */
- ERR("Unable to connect to RPCSS process!\n");
- SetLastError(RPC_E_SERVER_DIED_DNE);
- return FALSE;
- }
-
- /* great, we're connected. now send the message */
- ret = TRUE;
- if (!RPCRT4_SendReceiveNPMsg(client_handle, msg, vardata_payload, reply)) {
- ERR("Something is amiss: RPC_SendReceive failed.\n");
- ret = FALSE;
- }
- CloseHandle(client_handle);
-
- return ret;
-}
-
#define MAX_RPC_ERROR_TEXT 256
/******************************************************************************
@@ -1076,20 +968,10 @@ NDR_SCONTEXT RPCRT4_PopThreadContextHandle(void)
return context_handle;
}
-/******************************************************************************
- * RpcCancelThread (rpcrt4.@)
- */
-RPC_STATUS RPC_ENTRY RpcCancelThread(void* ThreadHandle)
+static RPC_STATUS rpc_cancel_thread(DWORD target_tid)
{
- DWORD target_tid;
struct threaddata *tdata;
- TRACE("(%p)\n", ThreadHandle);
-
- target_tid = GetThreadId(ThreadHandle);
- if (!target_tid)
- return RPC_S_INVALID_ARG;
-
EnterCriticalSection(&threaddata_cs);
LIST_FOR_EACH_ENTRY(tdata, &threaddata_list, struct threaddata, entry)
if (tdata->thread_id == target_tid)
@@ -1103,3 +985,34 @@ RPC_STATUS RPC_ENTRY RpcCancelThread(void* ThreadHandle)
return RPC_S_OK;
}
+
+/******************************************************************************
+ * RpcCancelThread (rpcrt4.@)
+ */
+RPC_STATUS RPC_ENTRY RpcCancelThread(void* ThreadHandle)
+{
+ TRACE("(%p)\n", ThreadHandle);
+ return RpcCancelThreadEx(ThreadHandle, 0);
+}
+
+/******************************************************************************
+ * RpcCancelThreadEx (rpcrt4.@)
+ */
+RPC_STATUS RPC_ENTRY RpcCancelThreadEx(void* ThreadHandle, LONG Timeout)
+{
+ DWORD target_tid;
+
+ FIXME("(%p, %d)\n", ThreadHandle, Timeout);
+
+ target_tid = GetThreadId(ThreadHandle);
+ if (!target_tid)
+ return RPC_S_INVALID_ARG;
+
+ if (Timeout)
+ {
+ FIXME("(%p, %d)\n", ThreadHandle, Timeout);
+ return RPC_S_OK;
+ }
+ else
+ return rpc_cancel_thread(target_tid);
+}
diff --git a/reactos/dll/win32/rpcrt4/rpcrt4_ros.diff b/reactos/dll/win32/rpcrt4/rpcrt4_ros.diff
index 31ffd1cb0be..548e18aacdb 100644
--- a/reactos/dll/win32/rpcrt4/rpcrt4_ros.diff
+++ b/reactos/dll/win32/rpcrt4/rpcrt4_ros.diff
@@ -1,8 +1,42 @@
+Index: epm_towers.h
+===================================================================
+--- epm_towers.h (working copy)
++++ epm_towers.h (working copy)
+@@ -17,11 +17,11 @@
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+-#include "epm.h"
++#include "epm_c.h"
+
+ #define EPM_PROTOCOL_DNET_NSP 0x04
+ #define EPM_PROTOCOL_OSI_TP4 0x05
+ #define EPM_PROTOCOL_OSI_CLNS 0x06
+ #define EPM_PROTOCOL_TCP 0x07
+Index: rpc_epmap.c
+===================================================================
+--- rpc_epmap.c (working copy)
++++ rpc_epmap.c (working copy)
+@@ -30,11 +30,11 @@
+
+ #include "wine/debug.h"
+ #include "wine/exception.h"
+
+ #include "rpc_binding.h"
+-#include "epm.h"
++#include "epm_c.h"
+ #include "epm_towers.h"
+
+ WINE_DEFAULT_DEBUG_CHANNEL(ole);
+
+ /* The "real" RPC portmapper endpoints that I know of are:
Index: rpc_server.c
===================================================================
--- rpc_server.c (working copy)
+++ rpc_server.c (working copy)
-@@ -1017,22 +1017,30 @@
+@@ -1040,22 +1040,28 @@
/***********************************************************************
* RpcMgmtServerWaitListen (RPCRT4.@)
*/
@@ -18,14 +52,12 @@ Index: rpc_server.c
return RPC_S_NOT_LISTENING;
}
-+ do
-+ {
++ do {
LeaveCriticalSection(&listen_cs);
++ LIST_FOR_EACH_ENTRY(cps, &protseqs, RpcServerProtseq, entry)
++ WaitForSingleObject(cps->server_ready_event, INFINITE);
- FIXME("not waiting for server calls to finish\n");
-+ LIST_FOR_EACH_ENTRY(cps, &protseqs, RpcServerProtseq, entry)
-+ WaitForSingleObject(cps->server_ready_event, INFINITE);
-+
+ EnterCriticalSection(&listen_cs);
+ } while (!std_listen);
+
@@ -39,11 +71,11 @@ Index: rpc_transport.c
===================================================================
--- rpc_transport.c (working copy)
+++ rpc_transport.c (working copy)
-@@ -54,10 +54,13 @@
- #endif
- #ifdef HAVE_SYS_POLL_H
- #include
- #endif
+@@ -65,10 +65,13 @@
+ # include
+ # endif
+ # define closesocket close
+ #endif /* defined(__MINGW32__) || defined (_MSC_VER) */
+#include
+#include
@@ -53,7 +85,7 @@ Index: rpc_transport.c
#include "winnls.h"
#include "winerror.h"
#include "winternl.h"
-@@ -71,10 +74,12 @@
+@@ -82,10 +85,12 @@
#include "rpc_binding.h"
#include "rpc_message.h"
#include "rpc_server.h"
@@ -66,7 +98,7 @@ Index: rpc_transport.c
#endif
WINE_DEFAULT_DEBUG_CHANNEL(rpc);
-@@ -83,11 +88,11 @@
+@@ -94,11 +99,11 @@
typedef struct _RpcConnection_np
{
@@ -79,25 +111,27 @@ Index: rpc_transport.c
static RpcConnection *rpcrt4_conn_np_alloc(void)
{
-@@ -105,15 +110,15 @@
- {
- if (npc->listening)
+@@ -118,17 +123,17 @@
return RPC_S_OK;
npc->listening = TRUE;
-- if (ConnectNamedPipe(npc->pipe, &npc->ovl))
-+ if (ConnectNamedPipe(npc->pipe, &npc->ovl[0]))
- return RPC_S_OK;
+ for (;;)
+ {
+- if (ConnectNamedPipe(npc->pipe, &npc->ovl))
++ if (ConnectNamedPipe(npc->pipe, &npc->ovl[0]))
+ return RPC_S_OK;
- if (GetLastError() == ERROR_PIPE_CONNECTED) {
-- SetEvent(npc->ovl.hEvent);
-+ SetEvent(npc->ovl[0].hEvent);
- return RPC_S_OK;
- }
- if (GetLastError() == ERROR_IO_PENDING) {
- /* will be completed in rpcrt4_protseq_np_wait_for_new_connection */
- return RPC_S_OK;
-@@ -126,11 +131,11 @@
+ switch(GetLastError())
+ {
+ case ERROR_PIPE_CONNECTED:
+- SetEvent(npc->ovl.hEvent);
++ SetEvent(npc->ovl[0].hEvent);
+ return RPC_S_OK;
+ case ERROR_IO_PENDING:
+ /* will be completed in rpcrt4_protseq_np_wait_for_new_connection */
+ return RPC_S_OK;
+ case ERROR_NO_DATA_DETECTED:
+@@ -146,11 +151,11 @@
static RPC_STATUS rpcrt4_conn_create_pipe(RpcConnection *Connection, LPCSTR pname)
{
RpcConnection_np *npc = (RpcConnection_np *) Connection;
@@ -110,7 +144,7 @@ Index: rpc_transport.c
RPC_MAX_PACKET_SIZE, RPC_MAX_PACKET_SIZE, 5000, NULL);
if (npc->pipe == INVALID_HANDLE_VALUE) {
WARN("CreateNamedPipe failed with error %d\n", GetLastError());
-@@ -139,11 +144,12 @@
+@@ -159,11 +164,12 @@
else
return RPC_S_CANT_CREATE_ENDPOINT;
}
@@ -124,7 +158,7 @@ Index: rpc_transport.c
* server thread as the thread must be alertable */
return RPC_S_OK;
}
-@@ -202,11 +208,13 @@
+@@ -220,11 +226,12 @@
/* success */
memset(&npc->ovl, 0, sizeof(npc->ovl));
/* pipe is connected; change to message-read mode. */
@@ -133,13 +167,12 @@ Index: rpc_transport.c
- npc->ovl.hEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
+ npc->ovl[0].hEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
+ npc->ovl[1].hEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
-+
npc->pipe = pipe;
return RPC_S_OK;
}
-@@ -308,11 +316,12 @@
+@@ -326,11 +333,12 @@
{
/* because of the way named pipes work, we'll transfer the connected pipe
* to the child, then reopen the server binding to continue listening */
@@ -153,7 +186,7 @@ Index: rpc_transport.c
old_npc->listening = FALSE;
}
-@@ -359,13 +368,18 @@
+@@ -377,13 +385,18 @@
unsigned int bytes_left = count;
while (bytes_left)
@@ -163,39 +196,39 @@ Index: rpc_transport.c
- if (!ret || !bytes_read)
+ ret = ReadFile(npc->pipe, buf, bytes_left, &bytes_read, &npc->ovl[0]);
+ if ((!ret || !bytes_read) && (GetLastError() != ERROR_IO_PENDING))
- break;
++ break;
+
+ ret = GetOverlappedResult(npc->pipe, &npc->ovl[0], &bytes_read, TRUE);
-+ if (!ret && GetLastError() != ERROR_MORE_DATA)
-+ break;
++ if (!ret && (GetLastError() != ERROR_MORE_DATA))
+ break;
+
bytes_left -= bytes_read;
buf += bytes_read;
}
return ret ? count : -1;
}
-@@ -379,13 +393,18 @@
+@@ -397,13 +410,18 @@
unsigned int bytes_left = count;
while (bytes_left)
{
DWORD bytes_written;
-- ret = WriteFile(npc->pipe, buf, count, &bytes_written, NULL);
+- ret = WriteFile(npc->pipe, buf, bytes_left, &bytes_written, NULL);
- if (!ret || !bytes_written)
-+ ret = WriteFile(npc->pipe, buf, count, &bytes_written, &npc->ovl[1]);
++ ret = WriteFile(npc->pipe, buf, bytes_left, &bytes_written, &npc->ovl[1]);
+ if ((!ret || !bytes_written) && (GetLastError() != ERROR_IO_PENDING))
- break;
++ break;
+
+ ret = GetOverlappedResult(npc->pipe, &npc->ovl[1], &bytes_written, TRUE);
-+ if (!ret && GetLastError() != ERROR_MORE_DATA)
-+ break;
++ if (!ret && (GetLastError() != ERROR_MORE_DATA))
+ break;
+
bytes_left -= bytes_written;
buf += bytes_written;
}
return ret ? count : -1;
}
-@@ -396,14 +415,19 @@
+@@ -414,13 +432,17 @@
if (npc->pipe) {
FlushFileBuffers(npc->pipe);
CloseHandle(npc->pipe);
@@ -212,13 +245,11 @@ Index: rpc_transport.c
+ CloseHandle(npc->ovl[1].hEvent);
+ npc->ovl[1].hEvent = 0;
}
-+
return 0;
}
static void rpcrt4_conn_np_cancel_call(RpcConnection *Connection)
- {
-@@ -547,11 +571,11 @@
+@@ -579,11 +601,11 @@
/* open and count connections */
*count = 1;
conn = CONTAINING_RECORD(protseq->conn, RpcConnection_np, common);
@@ -231,7 +262,7 @@ Index: rpc_transport.c
}
/* make array of connections */
-@@ -568,11 +592,11 @@
+@@ -600,11 +622,11 @@
objs[0] = npps->mgr_event;
*count = 1;
@@ -244,7 +275,7 @@ Index: rpc_transport.c
}
LeaveCriticalSection(&protseq->cs);
return objs;
-@@ -615,11 +639,11 @@
+@@ -647,11 +669,11 @@
b_handle = objs[res - WAIT_OBJECT_0];
/* find which connection got a RPC */
EnterCriticalSection(&protseq->cs);
@@ -257,120 +288,3 @@ Index: rpc_transport.c
cconn = NULL;
if (conn)
RPCRT4_SpawnConnection(&cconn, &conn->common);
-@@ -713,16 +737,18 @@
- RpcConnection_tcp *tcpc;
- tcpc = HeapAlloc(GetProcessHeap(), 0, sizeof(RpcConnection_tcp));
- if (tcpc == NULL)
- return NULL;
- tcpc->sock = -1;
-+#ifndef __REACTOS__
- if (socketpair(PF_UNIX, SOCK_STREAM, 0, tcpc->cancel_fds) < 0)
- {
- ERR("socketpair() failed: %s\n", strerror(errno));
- HeapFree(GetProcessHeap(), 0, tcpc);
- return NULL;
- }
-+#endif
- return &tcpc->common;
- }
-
- static RPC_STATUS rpcrt4_ncacn_ip_tcp_open(RpcConnection* Connection)
- {
-@@ -783,12 +809,11 @@
- continue;
- }
-
- /* RPC depends on having minimal latency so disable the Nagle algorithm */
- val = 1;
-- setsockopt(sock, SOL_TCP, TCP_NODELAY, &val, sizeof(val));
-- fcntl(sock, F_SETFL, O_NONBLOCK); /* make socket nonblocking */
-+ setsockopt(sock, SOL_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
-
- tcpc->sock = sock;
-
- freeaddrinfo(ai);
- TRACE("connected\n");
-@@ -806,10 +831,11 @@
- int sock;
- int ret;
- struct addrinfo *ai;
- struct addrinfo *ai_cur;
- struct addrinfo hints;
-+ u_long blocking;
- RpcConnection *first_connection = NULL;
-
- TRACE("(%p, %s)\n", protseq, endpoint);
-
- hints.ai_flags = AI_PASSIVE /* for non-localhost addresses */;
-@@ -857,11 +883,11 @@
- ret = bind(sock, ai_cur->ai_addr, ai_cur->ai_addrlen);
- if (ret < 0)
- {
- WARN("bind failed: %s\n", strerror(errno));
- close(sock);
-- if (errno == EADDRINUSE)
-+ if (errno == WSAEADDRINUSE)
- status = RPC_S_DUPLICATE_ENDPOINT;
- else
- status = RPC_S_CANT_CREATE_ENDPOINT;
- continue;
- }
-@@ -886,11 +912,12 @@
- }
- /* need a non-blocking socket, otherwise accept() has a potential
- * race-condition (poll() says it is readable, connection drops,
- * and accept() blocks until the next connection comes...)
- */
-- ret = fcntl(sock, F_SETFL, O_NONBLOCK);
-+ blocking = 1;
-+ ret = ioctlsocket(sock, FIONBIO, &blocking);
- if (ret < 0)
- {
- WARN("couldn't make socket non-blocking, error %d\n", ret);
- RPCRT4_DestroyConnection(&tcpc->common);
- status = RPC_S_OUT_OF_RESOURCES;
-@@ -929,10 +956,11 @@
- static RPC_STATUS rpcrt4_conn_tcp_handoff(RpcConnection *old_conn, RpcConnection *new_conn)
- {
- int ret;
- struct sockaddr_in address;
- socklen_t addrsize;
-+ u_long blocking;
- RpcConnection_tcp *server = (RpcConnection_tcp*) old_conn;
- RpcConnection_tcp *client = (RpcConnection_tcp*) new_conn;
-
- addrsize = sizeof(address);
- ret = accept(server->sock, (struct sockaddr*) &address, &addrsize);
-@@ -940,11 +968,12 @@
- {
- ERR("Failed to accept a TCP connection: error %d\n", ret);
- return RPC_S_OUT_OF_RESOURCES;
- }
- /* reset to blocking behaviour */
-- fcntl(ret, F_SETFL, 0);
-+ blocking = 0;
-+ ret = ioctlsocket(ret, FIONBIO, &blocking);
- client->sock = ret;
- TRACE("Accepted a new TCP connection\n");
- return RPC_S_OK;
- }
-
-@@ -1187,14 +1216,16 @@
- {
- RpcServerProtseq_sock *ps = HeapAlloc(GetProcessHeap(), 0, sizeof(*ps));
- if (ps)
- {
- int fds[2];
-+ u_long blocking;
- if (!socketpair(PF_UNIX, SOCK_DGRAM, 0, fds))
- {
-- fcntl(fds[0], F_SETFL, O_NONBLOCK);
-- fcntl(fds[1], F_SETFL, O_NONBLOCK);
-+ blocking = 1;
-+ ioctlsocket(fds[0], FIONBIO, &blocking);
-+ ioctlsocket(fds[1], FIONBIO, &blocking);
- ps->mgr_event_rcv = fds[0];
- ps->mgr_event_snd = fds[1];
- }
- else
- {
diff --git a/reactos/dll/win32/rpcrt4/rpcss_np_client.c b/reactos/dll/win32/rpcrt4/rpcss_np_client.c
deleted file mode 100644
index 016f77f5f15..00000000000
--- a/reactos/dll/win32/rpcrt4/rpcss_np_client.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * RPCSS named pipe client implementation
- *
- * Copyright (C) 2002 Greg Turner
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include
-#include
-
-#include "windef.h"
-#include "winbase.h"
-#include "wine/rpcss_shared.h"
-#include "wine/debug.h"
-
-#include "rpc_binding.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(ole);
-
-HANDLE RPCRT4_RpcssNPConnect(void)
-{
- HANDLE the_pipe;
- DWORD dwmode, wait_result;
- HANDLE master_mutex = RPCRT4_GetMasterMutex();
-
- TRACE("\n");
-
- while (TRUE) {
-
- wait_result = WaitForSingleObject(master_mutex, MASTER_MUTEX_TIMEOUT);
- switch (wait_result) {
- case WAIT_ABANDONED:
- case WAIT_OBJECT_0:
- break;
- case WAIT_FAILED:
- case WAIT_TIMEOUT:
- default:
- ERR("This should never happen: couldn't enter mutex.\n");
- return NULL;
- }
-
- /* try to open the client side of the named pipe. */
- the_pipe = CreateFileA(
- NAME_RPCSS_NAMED_PIPE, /* pipe name */
- GENERIC_READ | GENERIC_WRITE, /* r/w access */
- 0, /* no sharing */
- NULL, /* no security attributes */
- OPEN_EXISTING, /* open an existing pipe */
- 0, /* default attributes */
- NULL /* no template file */
- );
-
- if (the_pipe != INVALID_HANDLE_VALUE)
- break;
-
- if (GetLastError() != ERROR_PIPE_BUSY) {
- WARN("Unable to open named pipe %s (assuming unavailable).\n",
- debugstr_a(NAME_RPCSS_NAMED_PIPE));
- break;
- }
-
- WARN("Named pipe busy (will wait)\n");
-
- if (!ReleaseMutex(master_mutex))
- ERR("Failed to release master mutex. Expect deadlock.\n");
-
- /* wait for the named pipe. We are only willing to wait for 5 seconds.
- It should be available /very/ soon. */
- if (! WaitNamedPipeA(NAME_RPCSS_NAMED_PIPE, MASTER_MUTEX_WAITNAMEDPIPE_TIMEOUT))
- {
- ERR("Named pipe unavailable after waiting. Something is probably wrong.\n");
- break;
- }
-
- }
-
- if (the_pipe != INVALID_HANDLE_VALUE) {
- dwmode = PIPE_READMODE_MESSAGE;
- /* SetNamedPipeHandleState not implemented ATM, but still seems to work somehow. */
- if (! SetNamedPipeHandleState(the_pipe, &dwmode, NULL, NULL))
- WARN("Failed to set pipe handle state\n");
- }
-
- if (!ReleaseMutex(master_mutex))
- ERR("Uh oh, failed to leave the RPC Master Mutex!\n");
-
- return the_pipe;
-}
-
-BOOL RPCRT4_SendReceiveNPMsg(HANDLE np, PRPCSS_NP_MESSAGE msg, char *vardata, PRPCSS_NP_REPLY reply)
-{
- DWORD count;
- UINT32 payload_offset;
- RPCSS_NP_MESSAGE vardata_payload_msg;
-
- TRACE("(np == %p, msg == %p, vardata == %p, reply == %p)\n",
- np, msg, vardata, reply);
-
- if (! WriteFile(np, msg, sizeof(RPCSS_NP_MESSAGE), &count, NULL)) {
- ERR("write failed.\n");
- return FALSE;
- }
-
- if (count != sizeof(RPCSS_NP_MESSAGE)) {
- ERR("write count mismatch.\n");
- return FALSE;
- }
-
- /* process the vardata payload if necessary */
- vardata_payload_msg.message_type = RPCSS_NP_MESSAGE_TYPEID_VARDATAPAYLOADMSG;
- vardata_payload_msg.vardata_payload_size = 0; /* meaningless */
- for ( payload_offset = 0; payload_offset < msg->vardata_payload_size;
- payload_offset += VARDATA_PAYLOAD_BYTES ) {
- TRACE("sending vardata payload. vd=%p, po=%d, ps=%d\n", vardata,
- payload_offset, msg->vardata_payload_size);
- ZeroMemory(vardata_payload_msg.message.vardatapayloadmsg.payload, VARDATA_PAYLOAD_BYTES);
- CopyMemory(vardata_payload_msg.message.vardatapayloadmsg.payload,
- vardata,
- min( VARDATA_PAYLOAD_BYTES, msg->vardata_payload_size - payload_offset ));
- vardata += VARDATA_PAYLOAD_BYTES;
- if (! WriteFile(np, &vardata_payload_msg, sizeof(RPCSS_NP_MESSAGE), &count, NULL)) {
- ERR("vardata write failed at %u bytes.\n", payload_offset);
- return FALSE;
- }
- }
-
- if (! ReadFile(np, reply, sizeof(RPCSS_NP_REPLY), &count, NULL)) {
- ERR("read failed.\n");
- return FALSE;
- }
-
- if (count != sizeof(RPCSS_NP_REPLY)) {
- ERR("read count mismatch. got %d.\n", count);
- return FALSE;
- }
-
- /* message execution was successful */
- return TRUE;
-}
diff --git a/reactos/dll/win32/rpcrt4/unix_func.c b/reactos/dll/win32/rpcrt4/unix_func.c
index 9e29098756e..ad4de8b1fbb 100644
--- a/reactos/dll/win32/rpcrt4/unix_func.c
+++ b/reactos/dll/win32/rpcrt4/unix_func.c
@@ -167,3 +167,11 @@ inet_ntop (int af,
return 0;
}
+
+int fcntl(int fd,
+ int cmd,
+ long arg)
+{
+ // Stub
+ return 0;
+}
diff --git a/reactos/dll/win32/rpcrt4/unix_func.h b/reactos/dll/win32/rpcrt4/unix_func.h
index b4c04976458..c56427d2df1 100644
--- a/reactos/dll/win32/rpcrt4/unix_func.h
+++ b/reactos/dll/win32/rpcrt4/unix_func.h
@@ -14,6 +14,15 @@ struct pollfd
short revents; /* returned events */
};
+#define F_SETFL 4 /* set file->f_flags */
+
+#ifndef O_NONBLOCK
+#define O_NONBLOCK 00004000
+#endif
+
+#define EINTR 4 /* Interrupted system call */
+
int poll(struct pollfd *fds, unsigned long nfds, int timo);
int socketpair (int af, int type, int protocol, SOCKET socket[2]);
const char * inet_ntop (int af, const void *src, char *dst, size_t cnt);
+int fcntl(int fd, int cmd, long arg);
diff --git a/reactos/dll/win32/rsabase/rsabase.rbuild b/reactos/dll/win32/rsabase/rsabase.rbuild
index 15976242c98..c86ac676398 100644
--- a/reactos/dll/win32/rsabase/rsabase.rbuild
+++ b/reactos/dll/win32/rsabase/rsabase.rbuild
@@ -12,6 +12,5 @@
kernel32
ntdll
version.rc
- rsabase.spec
diff --git a/reactos/dll/win32/rsaenh/rsaenh.rbuild b/reactos/dll/win32/rsaenh/rsaenh.rbuild
index 9aaad68f9d9..e68a6cf87e8 100644
--- a/reactos/dll/win32/rsaenh/rsaenh.rbuild
+++ b/reactos/dll/win32/rsaenh/rsaenh.rbuild
@@ -18,7 +18,6 @@
rsa.c
rsaenh.c
version.rc
- rsaenh.spec
wine
crypt32
advapi32
diff --git a/reactos/dll/win32/samsrv/samsrv.rbuild b/reactos/dll/win32/samsrv/samsrv.rbuild
index fb0e46298a3..805b97dbd71 100644
--- a/reactos/dll/win32/samsrv/samsrv.rbuild
+++ b/reactos/dll/win32/samsrv/samsrv.rbuild
@@ -7,5 +7,4 @@
kernel32
samsrv.c
samsrv.rc
- samsrv.spec
diff --git a/reactos/dll/win32/schannel/schannel.rbuild b/reactos/dll/win32/schannel/schannel.rbuild
index c11ea8cde36..266313cbc2e 100644
--- a/reactos/dll/win32/schannel/schannel.rbuild
+++ b/reactos/dll/win32/schannel/schannel.rbuild
@@ -13,5 +13,4 @@
schannel_main.c
usermode.c
version.rc
- schannel.spec
diff --git a/reactos/dll/win32/secur32/secur32.rbuild b/reactos/dll/win32/secur32/secur32.rbuild
index 200c67a551f..18a31c42b7e 100644
--- a/reactos/dll/win32/secur32/secur32.rbuild
+++ b/reactos/dll/win32/secur32/secur32.rbuild
@@ -11,6 +11,5 @@
secext.c
sspi.c
secur32.rc
- secur32.spec
precomp.h
diff --git a/reactos/dll/win32/sensapi/sensapi.rbuild b/reactos/dll/win32/sensapi/sensapi.rbuild
index 6d766fb2f76..c4408d1e8ec 100644
--- a/reactos/dll/win32/sensapi/sensapi.rbuild
+++ b/reactos/dll/win32/sensapi/sensapi.rbuild
@@ -9,5 +9,4 @@
kernel32
ntdll
sensapi.c
- sensapi.spec
diff --git a/reactos/dll/win32/serialui/serialui.rbuild b/reactos/dll/win32/serialui/serialui.rbuild
index eb43bd52fea..af942fcfb3b 100644
--- a/reactos/dll/win32/serialui/serialui.rbuild
+++ b/reactos/dll/win32/serialui/serialui.rbuild
@@ -6,5 +6,4 @@
shlwapi
serialui.c
serialui.rc
- serialui.spec
diff --git a/reactos/dll/win32/setupapi/setupapi.rbuild b/reactos/dll/win32/setupapi/setupapi.rbuild
index 53c5f1bb97c..92d723b4bc8 100644
--- a/reactos/dll/win32/setupapi/setupapi.rbuild
+++ b/reactos/dll/win32/setupapi/setupapi.rbuild
@@ -36,5 +36,4 @@
stubs.c
rpc.c
setupapi.rc
- setupapi.spec
diff --git a/reactos/dll/win32/sfc/sfc.rbuild b/reactos/dll/win32/sfc/sfc.rbuild
index 263c55ca301..527c0f6f07d 100644
--- a/reactos/dll/win32/sfc/sfc.rbuild
+++ b/reactos/dll/win32/sfc/sfc.rbuild
@@ -3,6 +3,5 @@
.
kernel32
sfc.c
- sfc.spec
precomp.h
diff --git a/reactos/dll/win32/sfc_os/sfc_os.rbuild b/reactos/dll/win32/sfc_os/sfc_os.rbuild
index 6cc89c87ae9..4209bfda2df 100644
--- a/reactos/dll/win32/sfc_os/sfc_os.rbuild
+++ b/reactos/dll/win32/sfc_os/sfc_os.rbuild
@@ -3,6 +3,5 @@
.
kernel32
sfc_os.c
- sfc_os.spec
precomp.h
diff --git a/reactos/dll/win32/shdocvw/shdocvw.rbuild b/reactos/dll/win32/shdocvw/shdocvw.rbuild
index 34ec1935482..69258a12700 100644
--- a/reactos/dll/win32/shdocvw/shdocvw.rbuild
+++ b/reactos/dll/win32/shdocvw/shdocvw.rbuild
@@ -28,5 +28,4 @@
view.c
webbrowser.c
shdocvw.rc
- shdocvw.spec
diff --git a/reactos/dll/win32/shell32/dialogs.c b/reactos/dll/win32/shell32/dialogs.c
index d2fcf062349..7641816c051 100644
--- a/reactos/dll/win32/shell32/dialogs.c
+++ b/reactos/dll/win32/shell32/dialogs.c
@@ -117,7 +117,7 @@ INT_PTR CALLBACK PickIconProc(HWND hwndDlg,
pIconContext = (PPICK_ICON_CONTEXT)lParam;
SetWindowLong(hwndDlg, DWLP_USER, (LONG)pIconContext);
pIconContext->hDlgCtrl = GetDlgItem(hwndDlg, IDC_PICKICON_LIST);
- EnumResourceNamesW(pIconContext->hLibrary, MAKEINTRESOURCEW(RT_ICON), EnumPickIconResourceProc, (LPARAM)pIconContext);
+ EnumResourceNamesW(pIconContext->hLibrary, RT_ICON, EnumPickIconResourceProc, (LPARAM)pIconContext);
if (PathUnExpandEnvStringsW(pIconContext->szName, szText, MAX_PATH))
SendDlgItemMessageW(hwndDlg, IDC_EDIT_PATH, WM_SETTEXT, 0, (LPARAM)szText);
else
@@ -174,7 +174,7 @@ INT_PTR CALLBACK PickIconProc(HWND hwndDlg,
FreeLibrary(pIconContext->hLibrary);
pIconContext->hLibrary = hLibrary;
wcscpy(pIconContext->szName, szText);
- EnumResourceNamesW(pIconContext->hLibrary, MAKEINTRESOURCEW(RT_ICON), EnumPickIconResourceProc, (LPARAM)pIconContext);
+ EnumResourceNamesW(pIconContext->hLibrary, RT_ICON, EnumPickIconResourceProc, (LPARAM)pIconContext);
if (PathUnExpandEnvStringsW(pIconContext->szName, szText, MAX_PATH))
SendDlgItemMessageW(hwndDlg, IDC_EDIT_PATH, WM_SETTEXT, 0, (LPARAM)szText);
else
diff --git a/reactos/dll/win32/shell32/drive.c b/reactos/dll/win32/shell32/drive.c
index 63083b2f2bc..3b5146d88e2 100644
--- a/reactos/dll/win32/shell32/drive.c
+++ b/reactos/dll/win32/shell32/drive.c
@@ -296,6 +296,11 @@ GetFreeBytesShare(LARGE_INTEGER TotalNumberOfFreeBytes, LARGE_INTEGER TotalNumbe
{
LARGE_INTEGER Temp, Result, Remainder;
+ if (TotalNumberOfFreeBytes.QuadPart == 0LL)
+ {
+ return ConvertUlongToLargeInteger(0);
+ }
+
Temp = LargeIntegerDivide(TotalNumberOfBytes, ConvertUlongToLargeInteger(100), &Remainder);
if (Temp.QuadPart >= TotalNumberOfFreeBytes.QuadPart)
{
@@ -388,7 +393,7 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive)
}
DriveType = GetDriveTypeW(szDrive);
- if (DriveType == DRIVE_FIXED)
+ if (DriveType == DRIVE_FIXED || DriveType == DRIVE_CDROM)
{
if(GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable, (PULARGE_INTEGER)&TotalNumberOfBytes, (PULARGE_INTEGER)&TotalNumberOfFreeBytes))
diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc
index bc4b3fbee07..11f6fd4fe0e 100644
--- a/reactos/dll/win32/shell32/lang/sk-SK.rc
+++ b/reactos/dll/win32/shell32/lang/sk-SK.rc
@@ -1,7 +1,7 @@
/* TRANSLATOR : Mбrio Kaиmбr /Mario Kacmar/ aka Kario (kario@szm.sk)
* NOTE : partially translated
* TRANSLATED : 26-12-2007
- * LAST CHANGE: 18-09-2008
+ * LAST CHANGE: 26-10-2008
*/
/*
@@ -421,15 +421,15 @@ STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Typy sъborov"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
-LTEXT "Registered file &types:", -1, 7, 10, 70, 10
+LTEXT "Registrovanй &typy sъborov:", -1, 7, 10, 70, 10
CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80
-PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP
-PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP
-GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70
+PUSHBUTTON "&Novэ", 14001, 120, 110, 50, 14, WS_TABSTOP
+PUSHBUTTON "O&dstrбniќ", 14002, 180, 110, 50, 14, WS_TABSTOP
+GROUPBOX "Podrobnosti o prнpone '%s'", 14003, 7, 130, 249, 70 //Details for '%s' extension
LTEXT "Opens with:", -1, 12, 140, 40, 10
//ICON
LTEXT "Appname", 14005, 100, 140, 40, 10
-PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP
+PUSHBUTTON "&Zmeniќ...", 14006, 180, 140, 50, 14, WS_TABSTOP
LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30
PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP
END
@@ -646,7 +646,7 @@ BEGIN
IDS_RESTORE "&Obnoviќ"
IDS_FORMATDRIVE "Formбtovaќ..."
IDS_RENAME "Premenovaќ"
- IDS_INSERT "Insert"
+ IDS_INSERT "Vloћiќ"
IDS_CREATEFOLDER_DENIED "Nie je moћnй vytvoriќ novэ prieиinok: Prнstup zamietnutэ."
IDS_CREATEFOLDER_CAPTION "Chyba poиas vytvбrania novйho prieиinka"
@@ -725,12 +725,12 @@ BEGIN
IDS_OPEN_WITH_FILTER "Spustiteѕnй sъbory\0*.exe\0"
IDS_DIRECTORY "Prieиinok"
IDS_VIRTUAL_DRIVER "Virtual Device Driver"
- IDS_BAT_FILE "ReactOS Batch File"
- IDS_CMD_FILE "ReactOS Command Script"
+ IDS_BAT_FILE "Dбvkovэ sъbor systйmu ReactOS"
+ IDS_CMD_FILE "Prнkazovэ skript systйmu ReactOS"
IDS_COM_FILE "DOS aplikбcia"
IDS_CPL_FILE "Poloћka ovlбdacieho panela"
IDS_CUR_FILE "Kurzor"
- IDS_DLL_FILE "Application Extension"
+ IDS_DLL_FILE "Rozљнrenie aplikбcie"
IDS_DRV_FILE "Ovlбdaи zariadenia"
IDS_EXE_FILE "Aplikбcia"
IDS_FON_FILE "Sъbor pнsma"
diff --git a/reactos/dll/win32/shell32/shell32.rbuild b/reactos/dll/win32/shell32/shell32.rbuild
index d695726a54b..c9b1a32c6a2 100644
--- a/reactos/dll/win32/shell32/shell32.rbuild
+++ b/reactos/dll/win32/shell32/shell32.rbuild
@@ -70,7 +70,6 @@
shv_def_cmenu.c
startmenu.c
ros-systray.c
- shell32.spec
fprop.c
drive.c
she_ocmenu.c
diff --git a/reactos/dll/win32/shell32/shfldr_cpanel.c b/reactos/dll/win32/shell32/shfldr_cpanel.c
index 066c99bdc0e..2f100992443 100644
--- a/reactos/dll/win32/shell32/shfldr_cpanel.c
+++ b/reactos/dll/win32/shell32/shfldr_cpanel.c
@@ -1212,7 +1212,7 @@ static HRESULT WINAPI ICPanel_IContextMenu2_QueryContextMenu(
if (LoadStringW(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
{
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
- _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT);
+ _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_OPEN, MFT_STRING, szBuffer, MFS_DEFAULT); //FIXME identifier
Count++;
}
@@ -1224,7 +1224,7 @@ static HRESULT WINAPI ICPanel_IContextMenu2_QueryContextMenu(
}
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
- _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED);
+ _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_CREATELINK, MFT_STRING, szBuffer, MFS_ENABLED); //FIXME identifier
Count++;
}
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count);
@@ -1251,7 +1251,7 @@ static HRESULT WINAPI ICPanel_IContextMenu2_InvokeCommand(
TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd);
- if (lpcmi->lpVerb == MAKEINTRESOURCEA(1))
+ if (lpcmi->lpVerb == MAKEINTRESOURCEA(IDS_OPEN)) //FIXME
{
ZeroMemory(&sei, sizeof(sei));
sei.cbSize = sizeof(sei);
@@ -1264,7 +1264,7 @@ static HRESULT WINAPI ICPanel_IContextMenu2_InvokeCommand(
if (sei.hInstApp <= (HINSTANCE)32)
return E_FAIL;
}
- else if (lpcmi->lpVerb == MAKEINTRESOURCEA(2))
+ else if (lpcmi->lpVerb == MAKEINTRESOURCEA(IDS_CREATELINK)) //FIXME
{
if (!SHGetSpecialFolderPathW(NULL, szPath, CSIDL_DESKTOPDIRECTORY, FALSE))
return E_FAIL;
diff --git a/reactos/dll/win32/shell32/shlview.c b/reactos/dll/win32/shell32/shlview.c
index 4dc6260672b..4de993a8f7c 100644
--- a/reactos/dll/win32/shell32/shlview.c
+++ b/reactos/dll/win32/shell32/shlview.c
@@ -887,10 +887,12 @@ static HRESULT ShellView_OpenSelectedItems(IShellViewImpl * This)
ici.lpVerb = MAKEINTRESOURCEA( def );
ici.hwnd = This->hWnd;
- IContextMenu_InvokeCommand(cm, (LPCMINVOKECOMMANDINFO) &ici );
- IContextMenu_Release(cm);
- DestroyMenu( hmenu );
- return S_OK;
+ if (IContextMenu_InvokeCommand(cm, (LPCMINVOKECOMMANDINFO) &ici ) == S_OK)
+ {
+ IContextMenu_Release(cm);
+ DestroyMenu( hmenu );
+ return S_OK;
+ }
}
}
diff --git a/reactos/dll/win32/shfolder/shfolder.rbuild b/reactos/dll/win32/shfolder/shfolder.rbuild
index 1a0e0eb0660..7ad1332f8db 100644
--- a/reactos/dll/win32/shfolder/shfolder.rbuild
+++ b/reactos/dll/win32/shfolder/shfolder.rbuild
@@ -7,7 +7,6 @@
include/reactos/wine
version.rc
- shfolder.spec
wine
shell32
kernel32
diff --git a/reactos/dll/win32/shimgvw/shimgvw.rbuild b/reactos/dll/win32/shimgvw/shimgvw.rbuild
index 07ff24d7d27..8d42f9acdff 100644
--- a/reactos/dll/win32/shimgvw/shimgvw.rbuild
+++ b/reactos/dll/win32/shimgvw/shimgvw.rbuild
@@ -11,5 +11,4 @@
gdiplus
shimgvw.c
shimgvw.rc
- shimgvw.spec
diff --git a/reactos/dll/win32/shlwapi/shlwapi.rbuild b/reactos/dll/win32/shlwapi/shlwapi.rbuild
index 297273f3524..018a26d248a 100644
--- a/reactos/dll/win32/shlwapi/shlwapi.rbuild
+++ b/reactos/dll/win32/shlwapi/shlwapi.rbuild
@@ -21,7 +21,6 @@
url.c
wsprintf.c
shlwapi.rc
- shlwapi.spec
wine
uuid
user32
diff --git a/reactos/dll/win32/snmpapi/snmpapi.rbuild b/reactos/dll/win32/snmpapi/snmpapi.rbuild
index ad9960e078a..2066ff617d2 100644
--- a/reactos/dll/win32/snmpapi/snmpapi.rbuild
+++ b/reactos/dll/win32/snmpapi/snmpapi.rbuild
@@ -6,5 +6,4 @@
kernel32
snmpapi.c
snmpapi.rc
- snmpapi.spec
diff --git a/reactos/dll/win32/stdole2.tlb/stdole2.rbuild b/reactos/dll/win32/stdole2.tlb/stdole2.rbuild
index e238a4a6624..c9380ba5ecb 100644
--- a/reactos/dll/win32/stdole2.tlb/stdole2.rbuild
+++ b/reactos/dll/win32/stdole2.tlb/stdole2.rbuild
@@ -13,7 +13,6 @@
std_ole_v2
kernel32
- stdole2.tlb.spec
rsrc.rc
diff --git a/reactos/dll/win32/stdole32.tlb/stdole32.rbuild b/reactos/dll/win32/stdole32.tlb/stdole32.rbuild
index 38f1a9fe884..edd4935c7ee 100644
--- a/reactos/dll/win32/stdole32.tlb/stdole32.rbuild
+++ b/reactos/dll/win32/stdole32.tlb/stdole32.rbuild
@@ -13,7 +13,6 @@
std_ole_v1
kernel32
- stdole32.tlb.spec
rsrc.rc
\ No newline at end of file
diff --git a/reactos/dll/win32/sxs/sxs.rbuild b/reactos/dll/win32/sxs/sxs.rbuild
index 5f551e5cb8e..b21ee66606d 100644
--- a/reactos/dll/win32/sxs/sxs.rbuild
+++ b/reactos/dll/win32/sxs/sxs.rbuild
@@ -7,7 +7,6 @@
include/reactos/wine
sxs.c
- sxs.spec
wine
kernel32
ntdll
diff --git a/reactos/dll/win32/tapi32/tapi32.rbuild b/reactos/dll/win32/tapi32/tapi32.rbuild
index dc4dc2341cf..04b4c67dca0 100644
--- a/reactos/dll/win32/tapi32/tapi32.rbuild
+++ b/reactos/dll/win32/tapi32/tapi32.rbuild
@@ -9,7 +9,6 @@
assisted.c
line.c
phone.c
- tapi32.spec
wine
advapi32
kernel32
diff --git a/reactos/dll/win32/urlmon/urlmon.rbuild b/reactos/dll/win32/urlmon/urlmon.rbuild
index f6257b35514..0699b9ab3a0 100644
--- a/reactos/dll/win32/urlmon/urlmon.rbuild
+++ b/reactos/dll/win32/urlmon/urlmon.rbuild
@@ -25,7 +25,6 @@
umstream.c
urlmon_main.c
rsrc.rc
- urlmon.spec
wine
uuid
ole32
diff --git a/reactos/dll/win32/user32/controls/combo.c b/reactos/dll/win32/user32/controls/combo.c
index e8383d76426..14e358a1371 100644
--- a/reactos/dll/win32/user32/controls/combo.c
+++ b/reactos/dll/win32/user32/controls/combo.c
@@ -783,7 +783,7 @@ static void CBPaintText(
clipRegion=NULL;
}
- if (!IsWindowEnabled(lphc->self) & WS_DISABLED) itemState |= ODS_DISABLED;
+ if (!(IsWindowEnabled(lphc->self) & WS_DISABLED)) itemState |= ODS_DISABLED;
dis.CtlType = ODT_COMBOBOX;
dis.CtlID = ctlid;
diff --git a/reactos/dll/win32/user32/misc/ddeclient.c b/reactos/dll/win32/user32/misc/ddeclient.c
index d9263dc01f8..9d8c989e84f 100644
--- a/reactos/dll/win32/user32/misc/ddeclient.c
+++ b/reactos/dll/win32/user32/misc/ddeclient.c
@@ -811,7 +811,7 @@ static WDML_QUEUE_STATE WDML_HandleTerminateReply(WDML_CONV* pConv, MSG* msg, WD
FIXME("hmmm shouldn't happen\n");
return WDML_QS_PASS;
}
- if (!pConv->instance->CBFflags & CBF_SKIP_DISCONNECTS)
+ if (!(pConv->instance->CBFflags & CBF_SKIP_DISCONNECTS))
{
WDML_InvokeCallback(pConv->instance, XTYP_DISCONNECT, 0, (HCONV)pConv,
0, 0, 0, 0, (pConv->wStatus & ST_ISSELF) ? 1 : 0);
@@ -894,7 +894,7 @@ static WDML_QUEUE_STATE WDML_HandleIncomingTerminate(WDML_CONV* pConv, MSG* msg,
return WDML_QS_PASS;
pConv->wStatus |= ST_TERMINATED;
- if (!pConv->instance->CBFflags & CBF_SKIP_DISCONNECTS)
+ if (!(pConv->instance->CBFflags & CBF_SKIP_DISCONNECTS))
{
WDML_InvokeCallback(pConv->instance, XTYP_DISCONNECT, 0, (HCONV)pConv,
0, 0, 0, 0, (pConv->wStatus & ST_ISSELF) ? 1 : 0);
diff --git a/reactos/dll/win32/user32/misc/stubs.c b/reactos/dll/win32/user32/misc/stubs.c
index daa3b7734f3..49971f62690 100644
--- a/reactos/dll/win32/user32/misc/stubs.c
+++ b/reactos/dll/win32/user32/misc/stubs.c
@@ -62,15 +62,14 @@ GetMouseMovePointsEx(
/*
- * @unimplemented
+ * @implemented
*/
BOOL
STDCALL
LockWindowUpdate(
HWND hWndLock)
{
- UNIMPLEMENTED;
- return FALSE;
+ return NtUserLockWindowUpdate(hWndLock);
}
diff --git a/reactos/dll/win32/user32/user32.spec b/reactos/dll/win32/user32/user32.pspec
similarity index 94%
rename from reactos/dll/win32/user32/user32.spec
rename to reactos/dll/win32/user32/user32.pspec
index 4d136a1327d..422e3e2aef1 100644
--- a/reactos/dll/win32/user32/user32.spec
+++ b/reactos/dll/win32/user32/user32.pspec
@@ -19,9 +19,9 @@
@ stdcall BroadcastSystemMessageExA(long ptr long long long ptr)
@ stdcall BroadcastSystemMessageExW(long ptr long long long ptr)
@ stdcall BroadcastSystemMessageW(long ptr long long long)
-# @ stub BuildReasonArray
+; @ stub BuildReasonArray
@ stdcall CalcChildScroll(long long)
-# @ stub CalcMenuBar
+; @ stub CalcMenuBar
@ stdcall CallMsgFilter(ptr long) CallMsgFilterA
@ stdcall CallMsgFilterA(ptr long)
@ stdcall CallMsgFilterW(ptr long)
@@ -43,11 +43,11 @@
@ stdcall CharLowerW(wstr)
@ stdcall CharNextA(str)
@ stdcall CharNextExA(long str long)
-# @ stdcall CharNextExW(long wstr long)
+; @ stdcall CharNextExW(long wstr long)
@ stdcall CharNextW(wstr)
@ stdcall CharPrevA(str str)
@ stdcall CharPrevExA(long str str long)
-# @ stdcall CharPrevExW(long wstr wstr long)
+; @ stdcall CharPrevExW(long wstr wstr long)
@ stdcall CharPrevW(wstr wstr)
@ stdcall CharToOemA(str ptr)
@ stdcall CharToOemBuffA(str ptr long)
@@ -97,7 +97,7 @@
@ stdcall CreateMDIWindowW(ptr ptr long long long long long long long long)
@ stdcall CreateMenu()
@ stdcall CreatePopupMenu()
-# @ stub CreateSystemThreads
+; @ stub CreateSystemThreads
@ stdcall CreateWindowExA(long str str long long long long long long long long ptr)
@ stdcall CreateWindowExW(long wstr wstr long long long long long long long long ptr)
@ stdcall CreateWindowStationA(str long long ptr)
@@ -154,18 +154,18 @@
@ stdcall DestroyCursor(long)
@ stdcall DestroyIcon(long)
@ stdcall DestroyMenu(long)
-# @ stub DestroyReasons
+; @ stub DestroyReasons
@ stdcall DestroyWindow(long)
-# @ stub DeviceEventWorker
+; @ stub DeviceEventWorker
@ stdcall DialogBoxIndirectParamA(long ptr long ptr long)
@ stdcall DialogBoxIndirectParamAorW(long ptr long ptr long long)
@ stdcall DialogBoxIndirectParamW(long ptr long ptr long)
@ stdcall DialogBoxParamA(long str long ptr long)
@ stdcall DialogBoxParamW(long wstr long ptr long)
-# @ stub DisableProcessWindowsGhosting
+; @ stub DisableProcessWindowsGhosting
@ stdcall DispatchMessageA(ptr)
@ stdcall DispatchMessageW(ptr)
-# @ stub DisplayExitWindowsWarnings
+; @ stub DisplayExitWindowsWarnings
@ stdcall DlgDirListA(long str long long long)
@ stdcall DlgDirListComboBoxA(long ptr long long long)
@ stdcall DlgDirListComboBoxW(long ptr long long long)
@@ -204,14 +204,14 @@
@ stdcall EndMenu()
@ stdcall EndPaint(long ptr)
@ stub EndTask
-# @ stub EnterReaderModeHelper
+; @ stub EnterReaderModeHelper
@ stdcall EnumChildWindows(long ptr long)
@ stdcall EnumClipboardFormats(long)
@ stdcall EnumDesktopWindows(long ptr ptr)
@ stdcall EnumDesktopsA(ptr ptr long)
@ stdcall EnumDesktopsW(ptr ptr long)
-@ stub EnumDisplayDeviceModesA #(str long ptr long)
-@ stub EnumDisplayDeviceModesW #(wstr long ptr long)
+@ stub EnumDisplayDeviceModesA ;(str long ptr long)
+@ stub EnumDisplayDeviceModesW ;(wstr long ptr long)
@ stdcall EnumDisplayDevicesA(ptr long ptr long)
@ stdcall EnumDisplayDevicesW(ptr long ptr long)
@ stdcall EnumDisplayMonitors(long ptr ptr long)
@@ -256,11 +256,10 @@
@ stdcall GetClassInfoW(long wstr ptr)
@ stdcall GetClassLongA(long long)
@ stdcall GetClassLongW(long long)
-
-; FIXME -- Only for Win64
+#ifdef _WIN64
@ stdcall GetClassLongPtrA(ptr long)
@ stdcall GetClassLongPtrW(ptr long)
-
+#endif
@ stdcall GetClassNameA(long ptr long)
@ stdcall GetClassNameW(long ptr long)
@ stdcall GetClassWord(long long)
@@ -274,7 +273,7 @@
@ stdcall GetClipboardViewer()
@ stdcall GetComboBoxInfo(long ptr)
@ stdcall GetCursor()
-# @ stub GetCursorFrameInfo
+; @ stub GetCursorFrameInfo
@ stdcall GetCursorInfo(ptr)
@ stdcall GetCursorPos(ptr)
@ stdcall GetDC(long)
@@ -308,7 +307,7 @@
@ stdcall GetLastActivePopup(long)
@ stdcall GetLastInputInfo(ptr)
@ stdcall GetLayeredWindowAttributes(long ptr ptr ptr) NtUserGetLayeredWindowAttributes
-# @ stub GetListBoxInfo
+; @ stub GetListBoxInfo
@ stdcall GetMenu(long)
@ stdcall GetMenuBarInfo(long long long ptr)
@ stdcall GetMenuCheckMarkDimensions()
@@ -334,7 +333,7 @@
@ stdcall GetMouseMovePointsEx(long ptr ptr long long)
@ stdcall GetNextDlgGroupItem(long long long)
@ stdcall GetNextDlgTabItem(long long long)
-# @ stub GetNextQueueWindow
+; @ stub GetNextQueueWindow
@ stdcall GetOpenClipboardWindow()
@ stdcall GetParent(long)
@ stdcall GetPriorityClipboardFormat(ptr long)
@@ -349,7 +348,7 @@
@ stdcall GetRawInputDeviceInfoA(ptr long ptr ptr)
@ stdcall GetRawInputDeviceInfoW(ptr long ptr ptr)
@ stdcall GetRawInputDeviceList(ptr ptr long)
-# @ stub GetReasonTitleFromReasonCode
+; @ stub GetReasonTitleFromReasonCode
@ stdcall GetRegisteredRawInputDevices(ptr ptr long)
@ stdcall GetScrollBarInfo(long long ptr)
@ stdcall GetScrollInfo(long long ptr)
@@ -372,17 +371,16 @@
@ stdcall GetUserObjectInformationA (long long ptr long ptr)
@ stdcall GetUserObjectInformationW (long long ptr long ptr)
@ stdcall GetUserObjectSecurity (long ptr ptr long ptr)
-# @ stub GetWinStationInfo
+; @ stub GetWinStationInfo
@ stdcall GetWindow(long long)
@ stdcall GetWindowContextHelpId(long)
@ stdcall GetWindowDC(long)
@ stdcall GetWindowInfo(long ptr)
@ stdcall GetWindowLongA(long long)
-
-; FIXME -- Only for Win64
+#ifdef _WIN64
@ stdcall GetWindowLongPtrA(ptr long)
@ stdcall GetWindowLongPtrW(ptr long)
-
+#endif
@ stdcall GetWindowLongW(long long)
@ stdcall GetWindowModuleFileName(long ptr long) GetWindowModuleFileNameA
@ stdcall GetWindowModuleFileNameA(long ptr long)
@@ -399,7 +397,7 @@
@ stdcall GetWindowWord(long long)
@ stdcall GrayStringA(long long ptr long long long long long long)
@ stdcall GrayStringW(long long ptr long long long long long long)
-# @ stub HasSystemSleepStarted
+; @ stub HasSystemSleepStarted
@ stdcall HideCaret(long) NtUserHideCaret
@ stdcall HiliteMenuItem(long long long long)
@ stdcall IMPGetIMEA(long ptr)
@@ -412,10 +410,10 @@
@ stdcall InSendMessage()
@ stdcall InSendMessageEx(ptr)
@ stdcall InflateRect(ptr long long)
-# @ stub InitSharedTable
-# @ stub InitTask
+; @ stub InitSharedTable
+; @ stub InitTask
@ stdcall InitializeLpkHooks(ptr)
-# @ stub InitializeWin32EntryTable
+; @ stub InitializeWin32EntryTable
@ stdcall InsertMenuA(long long long long ptr)
@ stdcall InsertMenuItemA(long long long ptr)
@ stdcall InsertMenuItemW(long long long ptr)
@@ -441,7 +439,7 @@
@ stdcall IsDlgButtonChecked(long long)
@ stdcall IsGUIThread(long)
@ stdcall IsHungAppWindow(long)
-# @ stub IsHungThread
+; @ stub IsHungThread
@ stdcall IsIconic(long)
@ stdcall IsMenu(long)
@ stdcall IsRectEmpty(ptr)
@@ -468,7 +466,7 @@
@ stdcall LoadImageA(long str long long long long)
@ stdcall LoadImageW(long wstr long long long long)
@ stdcall LoadKeyboardLayoutA(str long)
-# @ stub LoadKeyboardLayoutEx
+; @ stub LoadKeyboardLayoutEx
@ stdcall LoadKeyboardLayoutW(wstr long)
@ stdcall LoadLocalFonts()
@ stdcall LoadMenuA(long str)
@@ -501,10 +499,10 @@
@ stdcall MessageBoxExW(long wstr wstr long long)
@ stdcall MessageBoxIndirectA(ptr)
@ stdcall MessageBoxIndirectW(ptr)
-# @ stub MessageBoxTimeoutA
-# @ stub MessageBoxTimeoutW
+; @ stub MessageBoxTimeoutA
+; @ stub MessageBoxTimeoutW
@ stdcall MessageBoxW(long wstr wstr long)
-# @ stub ModifyAccess
+; @ stub ModifyAccess
@ stdcall ModifyMenuA(long long long long ptr)
@ stdcall ModifyMenuW(long long long long ptr)
@ stdcall MonitorFromPoint(double long)
@@ -529,7 +527,7 @@
@ stdcall OpenWindowStationW(wstr long long)
@ stdcall PackDDElParam(long long long)
@ stdcall PaintDesktop(long)
-# @ stub PaintMenuBar
+; @ stub PaintMenuBar
@ stdcall PeekMessageA(ptr long long long long)
@ stdcall PeekMessageW(ptr long long long long)
@ stub PlaySoundEvent
@@ -538,23 +536,23 @@
@ stdcall PostQuitMessage(long)
@ stdcall PostThreadMessageA(long long long long)
@ stdcall PostThreadMessageW(long long long long)
-# @ stub PrintWindow
+; @ stub PrintWindow
@ stdcall PrivateExtractIconExA(str long ptr ptr long)
@ stdcall PrivateExtractIconExW(wstr long ptr ptr long)
@ stdcall PrivateExtractIconsA (str long long long ptr ptr long long)
@ stdcall PrivateExtractIconsW (wstr long long long ptr ptr long long)
-# @ stub PrivateSetDbgTag
-# @ stub PrivateSetRipFlags
+; @ stub PrivateSetDbgTag
+; @ stub PrivateSetRipFlags
@ stdcall PtInRect(ptr double)
@ stub QuerySendMessage
-# @ stub QueryUserCounters
+; @ stub QueryUserCounters
@ stdcall RealChildWindowFromPoint(long double)
@ stdcall RealGetWindowClass(long ptr long) RealGetWindowClassA
@ stdcall RealGetWindowClassA(long ptr long)
@ stdcall RealGetWindowClassW(long ptr long)
-# @ stub ReasonCodeNeedsBugID
-# @ stub ReasonCodeNeedsComment
-# @ stub RecordShutdownReason
+; @ stub ReasonCodeNeedsBugID
+; @ stub ReasonCodeNeedsComment
+; @ stub RecordShutdownReason
@ stdcall RedrawWindow(long ptr long long)
@ stdcall RegisterClassA(ptr)
@ stdcall RegisterClassExA(ptr)
@@ -566,14 +564,14 @@
@ stdcall RegisterDeviceNotificationW(long ptr long)
@ stdcall RegisterHotKey(long long long long)
@ stdcall RegisterLogonProcess(long long)
-# @ stub RegisterMessagePumpHook
+; @ stub RegisterMessagePumpHook
@ stub RegisterNetworkCapabilities
@ stdcall RegisterRawInputDevices(ptr long long)
@ stdcall RegisterServicesProcess(long)
@ stdcall RegisterShellHookWindow (long)
@ stdcall RegisterSystemThread(long long)
@ stdcall RegisterTasklist (long)
-# @ stub RegisterUserApiHook
+; @ stub RegisterUserApiHook
@ stdcall RegisterWindowMessageA(str)
@ stdcall RegisterWindowMessageW(wstr)
@ stdcall ReleaseCapture()
@@ -583,7 +581,7 @@
@ stdcall RemovePropW(long wstr)
@ stdcall ReplyMessage(long)
@ stub ResetDisplay
-# @ stub ResolveDesktopForWOW
+; @ stub ResolveDesktopForWOW
@ stdcall ReuseDDElParam(long long long long long)
@ stdcall ScreenToClient(long ptr)
@ stdcall ScrollChildren(long long long long)
@@ -609,22 +607,21 @@
@ stdcall SetCaretBlinkTime(long)
@ stdcall SetCaretPos(long long)
@ stdcall SetClassLongA(long long long)
-
-; FIXME -- Only for Win64
+#ifdef _WIN64
@ stdcall SetClassLongPtrA(ptr long ptr)
@ stdcall SetClassLongPtrW(ptr long ptr)
-
+#endif
@ stdcall SetClassLongW(long long long)
@ stdcall SetClassWord(long long long)
@ stdcall SetClipboardData(long long)
@ stdcall SetClipboardViewer(long)
-# @ stub SetConsoleReserveKeys
+; @ stub SetConsoleReserveKeys
@ stdcall SetCursor(long)
@ stub SetCursorContents
@ stdcall SetCursorPos(long long)
@ stdcall SetDebugErrorLevel(long)
@ stdcall SetDeskWallpaper(ptr)
-# @ stub SetDesktopBitmap
+; @ stub SetDesktopBitmap
@ stdcall SetDlgItemInt(long long long long)
@ stdcall SetDlgItemTextA(long long str)
@ stdcall SetDlgItemTextW(long long wstr)
@@ -674,11 +671,10 @@
@ stdcall SetWindowContextHelpId(long long)
@ stub SetWindowFullScreenState
@ stdcall SetWindowLongA(long long long)
-
-; FIXME -- Only for Win64
+#ifdef _WIN64
@ stdcall SetWindowLongPtrA(ptr long ptr)
@ stdcall SetWindowLongPtrW(ptr long ptr)
-
+#endif
@ stdcall SetWindowLongW(long long long)
@ stdcall SetWindowPlacement(long ptr)
@ stdcall SetWindowPos(long long long long long long long)
@@ -699,12 +695,12 @@
@ stub ShowStartGlass
@ stdcall ShowWindow(long long)
@ stdcall ShowWindowAsync(long long)
-# @ stub SoftModalMessageBox
+; @ stub SoftModalMessageBox
@ stdcall SubtractRect(ptr ptr ptr)
@ stdcall SwapMouseButton(long)
@ stdcall SwitchDesktop(long)
@ stdcall SwitchToThisWindow(long long)
-# @ stub SysErrorBox
+; @ stub SysErrorBox
@ stdcall SystemParametersInfoA(long long ptr long)
@ stdcall SystemParametersInfoW(long long ptr long)
@ stdcall TabbedTextOutA(long long long str long long ptr long)
@@ -723,7 +719,7 @@
@ stdcall TranslateAcceleratorW(long long ptr)
@ stdcall TranslateMDISysAccel(long ptr)
@ stdcall TranslateMessage(ptr)
-# @ stub TranslateMessageEx
+; @ stub TranslateMessageEx
@ stdcall UnhookWinEvent(long) NtUserUnhookWinEvent
@ stdcall UnhookWindowsHook(long ptr)
@ stdcall UnhookWindowsHookEx(long) NtUserUnhookWindowsHookEx
@@ -735,23 +731,23 @@
@ stdcall UnregisterClassW(wstr long)
@ stdcall UnregisterDeviceNotification(long)
@ stdcall UnregisterHotKey(long long) NtUserUnregisterHotKey
-# @ stub UnregisterMessagePumpHook
-# @ stub UnregisterUserApiHook
+; @ stub UnregisterMessagePumpHook
+; @ stub UnregisterUserApiHook
@ stdcall UpdateLayeredWindow(long long ptr ptr long ptr long ptr long) NtUserUpdateLayeredWindow
@ stdcall UpdatePerUserSystemParameters(long long)
@ stdcall UpdateWindow(long)
@ stdcall User32InitializeImmEntryTable(ptr)
@ stdcall UserClientDllInitialize(long long ptr) DllMain
@ stub UserHandleGrantAccess
-# @ stub UserIsSystemResumeAutomatic
-# @ stub UserLpkPSMTextOut
-# @ stub UserLpkTabbedTextOut
+; @ stub UserIsSystemResumeAutomatic
+; @ stub UserLpkPSMTextOut
+; @ stub UserLpkTabbedTextOut
@ stdcall UserRealizePalette(long)
@ stub UserRegisterWowHandlers
-# @ stub UserSetDeviceHoldState
-# @ stdcall UserSignalProc(long long long long)
-# @ stub VRipOutput
-# @ stub VTagOutput
+; @ stub UserSetDeviceHoldState
+; @ stdcall UserSignalProc(long long long long)
+; @ stub VRipOutput
+; @ stub VTagOutput
@ stdcall ValidateRect(long ptr)
@ stdcall ValidateRgn(long long)
@ stdcall VkKeyScanA(long)
@@ -765,14 +761,14 @@
@ stub WNDPROC_CALLBACK
@ stdcall WaitForInputIdle(long long)
@ stdcall WaitMessage()
-# @ stub Win32PoolAllocationStats
+; @ stub Win32PoolAllocationStats
@ stdcall WinHelpA(long str long long)
@ stdcall WinHelpW(long wstr long long)
-# @ stub WinOldAppHackoMatic
+; @ stub WinOldAppHackoMatic
@ stdcall WindowFromDC(long)
@ stdcall WindowFromPoint(double)
-# @ stub YieldTask
-# @ stub _SetProcessDefaultLayout
+; @ stub YieldTask
+; @ stub _SetProcessDefaultLayout
@ stdcall keybd_event(long long long long)
@ stdcall mouse_event(long long long long long)
@ varargs wsprintfA(str str)
@@ -780,6 +776,7 @@
@ stdcall wvsprintfA(ptr str ptr)
@ stdcall wvsprintfW(ptr wstr ptr)
-# ROS specific exports
+; ROS specific exports
@ stdcall PrivateCsrssManualGuiCheck(long)
@ stdcall PrivateCsrssInitialized()
+
diff --git a/reactos/dll/win32/user32/user32.rbuild b/reactos/dll/win32/user32/user32.rbuild
index b4807927235..d8c535b9584 100644
--- a/reactos/dll/win32/user32/user32.rbuild
+++ b/reactos/dll/win32/user32/user32.rbuild
@@ -1,5 +1,5 @@
-
+
.
include
include/reactos/subsys
@@ -73,5 +73,4 @@
winpos.c
user32.rc
- user32.spec
diff --git a/reactos/dll/win32/user32/windows/font.c b/reactos/dll/win32/user32/windows/font.c
index 941fdfba9d9..906325c15e1 100644
--- a/reactos/dll/win32/user32/windows/font.c
+++ b/reactos/dll/win32/user32/windows/font.c
@@ -34,7 +34,17 @@
/* FUNCTIONS *****************************************************************/
-void _assert(const char *msg, const char *file, int line)
+#ifndef NDEBUG
+
+#ifdef assert
+#undef assert
+#endif
+
+#define assert(e) ((e) ? (void)0 : _font_assert(#e, __FILE__, __LINE__))
+
+#endif
+
+void _font_assert(const char *msg, const char *file, int line)
{
/* Assertion failed at foo.c line 45: xsetup.c
userenv.c
userenv.rc
- userenv.spec
diff --git a/reactos/dll/win32/usp10/usp10.rbuild b/reactos/dll/win32/usp10/usp10.rbuild
index c8b9ec1e94b..f385bf3ca6f 100644
--- a/reactos/dll/win32/usp10/usp10.rbuild
+++ b/reactos/dll/win32/usp10/usp10.rbuild
@@ -7,7 +7,6 @@
include/reactos/wine
usp10.c
- usp10.spec
wine
gdi32
kernel32
diff --git a/reactos/dll/win32/uxtheme/uxtheme.rbuild b/reactos/dll/win32/uxtheme/uxtheme.rbuild
index befa57f355e..13b62128a7a 100644
--- a/reactos/dll/win32/uxtheme/uxtheme.rbuild
+++ b/reactos/dll/win32/uxtheme/uxtheme.rbuild
@@ -15,7 +15,6 @@
system.c
uxini.c
version.rc
- uxtheme.spec
wine
user32
gdi32
diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.rbuild b/reactos/dll/win32/vdmdbg/vdmdbg.rbuild
index 8ccedce0b41..fb48d1b676a 100644
--- a/reactos/dll/win32/vdmdbg/vdmdbg.rbuild
+++ b/reactos/dll/win32/vdmdbg/vdmdbg.rbuild
@@ -4,6 +4,5 @@
ntdll
kernel32
vdmdbg.c
- vdmdbg.spec
vdmdbg.h
diff --git a/reactos/dll/win32/version/version.rbuild b/reactos/dll/win32/version/version.rbuild
index d186317c5d4..d01932da1d1 100644
--- a/reactos/dll/win32/version/version.rbuild
+++ b/reactos/dll/win32/version/version.rbuild
@@ -10,7 +10,6 @@
install.c
resource.c
version.rc
- version.spec
wine
lz32
kernel32
diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild b/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild
index dd285bf5cdf..b2a064081ac 100644
--- a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild
+++ b/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild
@@ -9,5 +9,4 @@
winmm
wdmaud.c
wdmaud.rc
- wdmaud.spec
diff --git a/reactos/dll/win32/winhttp/winhttp.rbuild b/reactos/dll/win32/winhttp/winhttp.rbuild
index c6948924146..687d7524a46 100644
--- a/reactos/dll/win32/winhttp/winhttp.rbuild
+++ b/reactos/dll/win32/winhttp/winhttp.rbuild
@@ -12,7 +12,6 @@
net.c
request.c
session.c
- winhttp.spec
wine
wininet
ws2_32
diff --git a/reactos/dll/win32/wininet/wininet.rbuild b/reactos/dll/win32/wininet/wininet.rbuild
index 5ef18ef2aa8..434373e661c 100644
--- a/reactos/dll/win32/wininet/wininet.rbuild
+++ b/reactos/dll/win32/wininet/wininet.rbuild
@@ -30,6 +30,5 @@
wininet_main.c
rsrc.rc
version.rc
- wininet.spec
diff --git a/reactos/dll/win32/winmm/midimap/midimap.rbuild b/reactos/dll/win32/winmm/midimap/midimap.rbuild
index dd1e0cb65b4..593399998f7 100644
--- a/reactos/dll/win32/winmm/midimap/midimap.rbuild
+++ b/reactos/dll/win32/winmm/midimap/midimap.rbuild
@@ -11,5 +11,4 @@
winmm
midimap.c
midimap.rc
- midimap.spec
diff --git a/reactos/dll/win32/winmm/wavemap/wavemap.rbuild b/reactos/dll/win32/winmm/wavemap/wavemap.rbuild
index f251581aa40..ef2750297ac 100644
--- a/reactos/dll/win32/winmm/wavemap/wavemap.rbuild
+++ b/reactos/dll/win32/winmm/wavemap/wavemap.rbuild
@@ -12,5 +12,4 @@
winmm
wavemap.c
wavemap.rc
- msacm.spec
diff --git a/reactos/dll/win32/winmm/winmm.rbuild b/reactos/dll/win32/winmm/winmm.rbuild
index e0ee10b3e63..fb8023f98a6 100644
--- a/reactos/dll/win32/winmm/winmm.rbuild
+++ b/reactos/dll/win32/winmm/winmm.rbuild
@@ -26,6 +26,5 @@
winmm.c
registry.c
winmm_res.rc
- winmm.spec
diff --git a/reactos/dll/win32/winspool/winspool.rbuild b/reactos/dll/win32/winspool/winspool.rbuild
index 14eeced50da..05f7f59642c 100644
--- a/reactos/dll/win32/winspool/winspool.rbuild
+++ b/reactos/dll/win32/winspool/winspool.rbuild
@@ -9,5 +9,4 @@
info.c
stubs.c
winspool.rc
- winspool.spec
diff --git a/reactos/dll/win32/wintrust/wintrust.rbuild b/reactos/dll/win32/wintrust/wintrust.rbuild
index dfede7f1e22..1cab0d0c545 100644
--- a/reactos/dll/win32/wintrust/wintrust.rbuild
+++ b/reactos/dll/win32/wintrust/wintrust.rbuild
@@ -17,5 +17,4 @@
asn.c
softpub.c
version.rc
- wintrust.spec
diff --git a/reactos/dll/win32/wldap32/wldap32.rbuild b/reactos/dll/win32/wldap32/wldap32.rbuild
index d0376b83c14..ded7bb5e051 100644
--- a/reactos/dll/win32/wldap32/wldap32.rbuild
+++ b/reactos/dll/win32/wldap32/wldap32.rbuild
@@ -27,7 +27,6 @@
search.c
value.c
wldap32.rc
- wldap32.spec
wine
user32
kernel32
diff --git a/reactos/dll/win32/ws2_32/include/ws2_32.h b/reactos/dll/win32/ws2_32/include/ws2_32.h
index f495fa1ef07..169fcc0deb2 100644
--- a/reactos/dll/win32/ws2_32/include/ws2_32.h
+++ b/reactos/dll/win32/ws2_32/include/ws2_32.h
@@ -7,6 +7,8 @@
#ifndef __WS2_32_H
#define __WS2_32_H
+#include
+
#define WIN32_NO_STATUS
#include
#include
@@ -21,10 +23,6 @@
#include
#include // DNS_A_DATA
-/* Exported by ntdll.dll, but where is the prototype? */
-unsigned long strtoul(const char *nptr, char **endptr, int base);
-
-
#define EXPORT STDCALL
extern HINSTANCE g_hInstDll;
diff --git a/reactos/dll/win32/ws2_32/ws2_32.rbuild b/reactos/dll/win32/ws2_32/ws2_32.rbuild
index ec2215d367e..38197cf3d07 100644
--- a/reactos/dll/win32/ws2_32/ws2_32.rbuild
+++ b/reactos/dll/win32/ws2_32/ws2_32.rbuild
@@ -26,6 +26,5 @@
async.c
ws2_32.rc
- ws2_32.spec
diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild b/reactos/dll/win32/wshtcpip/wshtcpip.rbuild
index dd64752960a..84e3cae9a1d 100644
--- a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild
+++ b/reactos/dll/win32/wshtcpip/wshtcpip.rbuild
@@ -8,5 +8,4 @@
ws2_32
wshtcpip.c
wshtcpip.rc
- wshtcpip.spec
diff --git a/reactos/dll/win32/wtsapi32/wtsapi32.rbuild b/reactos/dll/win32/wtsapi32/wtsapi32.rbuild
index d3157408290..247932f449a 100644
--- a/reactos/dll/win32/wtsapi32/wtsapi32.rbuild
+++ b/reactos/dll/win32/wtsapi32/wtsapi32.rbuild
@@ -7,7 +7,6 @@
include/reactos/wine
wtsapi32.c
- wtsapi32.spec
wine
kernel32
ntdll
diff --git a/reactos/drivers/base/bootvid/bootvid.rbuild b/reactos/drivers/base/bootvid/bootvid.rbuild
index bcf54dd0ff5..23b9cab0c9a 100644
--- a/reactos/drivers/base/bootvid/bootvid.rbuild
+++ b/reactos/drivers/base/bootvid/bootvid.rbuild
@@ -20,6 +20,5 @@
bootvid.rc
- bootvid.spec
precomp.h
diff --git a/reactos/drivers/base/kdcom/kdcom.rbuild b/reactos/drivers/base/kdcom/kdcom.rbuild
index 180fc07bfb3..4f4b9987c32 100644
--- a/reactos/drivers/base/kdcom/kdcom.rbuild
+++ b/reactos/drivers/base/kdcom/kdcom.rbuild
@@ -21,5 +21,4 @@
kdbg.c
- kdcom.spec
diff --git a/reactos/drivers/directx/dxapi/dxapi.rbuild b/reactos/drivers/directx/dxapi/dxapi.rbuild
index 8d6d446640e..9282be29106 100644
--- a/reactos/drivers/directx/dxapi/dxapi.rbuild
+++ b/reactos/drivers/directx/dxapi/dxapi.rbuild
@@ -1,6 +1,6 @@
-
.
@@ -11,5 +11,4 @@ installbase="system32/drivers" installname="dxapi.sys">
videoprt
main.c
dxapi.rc
- dxapi.spec
diff --git a/reactos/drivers/directx/dxg/dxg.rbuild b/reactos/drivers/directx/dxg/dxg.rbuild
index 42ae8a699d5..717dfcd2493 100644
--- a/reactos/drivers/directx/dxg/dxg.rbuild
+++ b/reactos/drivers/directx/dxg/dxg.rbuild
@@ -12,5 +12,4 @@
eng.c
historic.c
dxg.rc
- dxg.spec
diff --git a/reactos/drivers/directx/dxgthk/dxgthk.rbuild b/reactos/drivers/directx/dxgthk/dxgthk.rbuild
index a7de8b79655..4fbb8c1918e 100644
--- a/reactos/drivers/directx/dxgthk/dxgthk.rbuild
+++ b/reactos/drivers/directx/dxgthk/dxgthk.rbuild
@@ -1,6 +1,6 @@
-
.
@@ -8,5 +8,4 @@ installbase="system32/drivers" installname="dxgthk.sys">
win32k
main.c
dxgthk.rc
- dxgthk.spec
diff --git a/reactos/drivers/ksfilter/ks/ks.rbuild b/reactos/drivers/ksfilter/ks/ks.rbuild
index e89c090aa31..9c5bc8d8df2 100644
--- a/reactos/drivers/ksfilter/ks/ks.rbuild
+++ b/reactos/drivers/ksfilter/ks/ks.rbuild
@@ -21,5 +21,4 @@
topology.c
worker.c
kcom.c
- ks.spec
diff --git a/reactos/drivers/network/afd/afd/info.c b/reactos/drivers/network/afd/afd/info.c
index f2833af7b0d..12c76aa3599 100644
--- a/reactos/drivers/network/afd/afd/info.c
+++ b/reactos/drivers/network/afd/afd/info.c
@@ -83,11 +83,6 @@ AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
- if( FCB->AddressFile.Object == NULL) {
- return UnlockAndMaybeComplete( FCB, STATUS_INVALID_PARAMETER, Irp, 0,
- NULL );
- }
-
Mdl = IoAllocateMdl
( Irp->UserBuffer,
IrpSp->Parameters.DeviceIoControl.OutputBufferLength,
@@ -105,11 +100,21 @@ AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
if( NT_SUCCESS(Status) ) {
if( Local ) {
+ if( FCB->AddressFile.Object == NULL ) {
+ return UnlockAndMaybeComplete( FCB, STATUS_INVALID_PARAMETER, Irp, 0,
+ NULL );
+ }
+
Status = TdiQueryInformation
( FCB->AddressFile.Object,
TDI_QUERY_ADDRESS_INFO,
Mdl );
} else {
+ if( FCB->Connection.Object == NULL ) {
+ return UnlockAndMaybeComplete( FCB, STATUS_INVALID_PARAMETER, Irp, 0,
+ NULL );
+ }
+
if( NT_SUCCESS
( Status = TdiBuildNullConnectionInfo
( &ConnInfo,
diff --git a/reactos/drivers/network/afd/afd/lock.c b/reactos/drivers/network/afd/afd/lock.c
index cea3d1470d8..136e9bb0d21 100644
--- a/reactos/drivers/network/afd/afd/lock.c
+++ b/reactos/drivers/network/afd/afd/lock.c
@@ -25,7 +25,7 @@ PVOID LockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp ) {
NULL );
if( Irp->MdlAddress ) {
_SEH_TRY {
- MmProbeAndLockPages( Irp->MdlAddress, KernelMode, IoModifyAccess );
+ MmProbeAndLockPages( Irp->MdlAddress, Irp->RequestorMode, IoModifyAccess );
} _SEH_HANDLE {
LockFailed = TRUE;
} _SEH_END;
diff --git a/reactos/drivers/network/afd/afd/read.c b/reactos/drivers/network/afd/afd/read.c
index 365eafcabe8..c5604b2e92f 100644
--- a/reactos/drivers/network/afd/afd/read.c
+++ b/reactos/drivers/network/afd/afd/read.c
@@ -425,7 +425,7 @@ SatisfyPacketRecvRequest( PAFD_FCB FCB, PIRP Irp,
*TotalBytesCopied = BytesToCopy;
- if (!RecvReq->TdiFlags & TDI_RECEIVE_PEEK) {
+ if (!(RecvReq->TdiFlags & TDI_RECEIVE_PEEK)) {
FCB->Recv.BytesUsed = 0;
}
}
diff --git a/reactos/drivers/network/afd/afd/tdi.c b/reactos/drivers/network/afd/afd/tdi.c
index dbe74cee242..c910293bd73 100644
--- a/reactos/drivers/network/afd/afd/tdi.c
+++ b/reactos/drivers/network/afd/afd/tdi.c
@@ -74,7 +74,7 @@ static NTSTATUS TdiCall(
KeWaitForSingleObject(
Event,
Executive,
- UserMode,
+ KernelMode,
FALSE,
NULL);
Status = Iosb->Status;
@@ -853,7 +853,7 @@ NTSTATUS TdiSend
BufferLength, /* Length of buffer */
FALSE, /* Not secondary */
FALSE, /* Don't charge quota */
- *Irp); /* use IRP */
+ *Irp); /* Use IRP */
if (!Mdl) {
AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
IoFreeIrp(*Irp);
@@ -862,7 +862,7 @@ NTSTATUS TdiSend
}
_SEH_TRY {
- MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess);
+ MmProbeAndLockPages(Mdl, (*Irp)->RequestorMode, IoModifyAccess);
} _SEH_HANDLE {
AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n"));
IoFreeMdl(Mdl);
@@ -934,7 +934,7 @@ NTSTATUS TdiReceive(
BufferLength, /* Length of buffer */
FALSE, /* Not secondary */
FALSE, /* Don't charge quota */
- *Irp); /* Don't use IRP */
+ *Irp); /* Use IRP */
if (!Mdl) {
AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
IoFreeIrp(*Irp);
@@ -944,7 +944,7 @@ NTSTATUS TdiReceive(
_SEH_TRY {
AFD_DbgPrint(MIN_TRACE, ("probe and lock\n"));
- MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess);
+ MmProbeAndLockPages(Mdl, (*Irp)->RequestorMode, IoModifyAccess);
AFD_DbgPrint(MIN_TRACE, ("probe and lock done\n"));
} _SEH_HANDLE {
AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n"));
@@ -1034,7 +1034,7 @@ NTSTATUS TdiReceiveDatagram(
BufferLength, /* Length of buffer */
FALSE, /* Not secondary */
FALSE, /* Don't charge quota */
- *Irp); /* Don't use IRP */
+ *Irp); /* Use IRP */
if (!Mdl) {
AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
IoFreeIrp(*Irp);
@@ -1043,7 +1043,7 @@ NTSTATUS TdiReceiveDatagram(
}
_SEH_TRY {
- MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess);
+ MmProbeAndLockPages(Mdl, (*Irp)->RequestorMode, IoModifyAccess);
} _SEH_HANDLE {
AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n"));
IoFreeMdl(Mdl);
@@ -1132,7 +1132,7 @@ NTSTATUS TdiSendDatagram(
BufferLength, /* Length of buffer */
FALSE, /* Not secondary */
FALSE, /* Don't charge quota */
- *Irp); /* Don't use IRP */
+ *Irp); /* Use IRP */
if (!Mdl) {
AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
@@ -1142,7 +1142,7 @@ NTSTATUS TdiSendDatagram(
}
_SEH_TRY {
- MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess);
+ MmProbeAndLockPages(Mdl, (*Irp)->RequestorMode, IoModifyAccess);
} _SEH_HANDLE {
AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n"));
IoFreeMdl(Mdl);
diff --git a/reactos/drivers/network/tcpip/tcpip.rbuild b/reactos/drivers/network/tcpip/tcpip.rbuild
index 3919ba7a436..24fed09bace 100644
--- a/reactos/drivers/network/tcpip/tcpip.rbuild
+++ b/reactos/drivers/network/tcpip/tcpip.rbuild
@@ -39,5 +39,4 @@
wait.c
tcpip.rc
- tcpip.spec
diff --git a/reactos/drivers/network/tcpip/tcpip/fileobjs.c b/reactos/drivers/network/tcpip/tcpip/fileobjs.c
index da337e8d951..414cf5de705 100644
--- a/reactos/drivers/network/tcpip/tcpip/fileobjs.c
+++ b/reactos/drivers/network/tcpip/tcpip/fileobjs.c
@@ -220,7 +220,7 @@ VOID DeleteConnectionEndpoint(
RemoveEntryList(&Connection->ListEntry);
TcpipReleaseSpinLock(&ConnectionEndpointListLock, OldIrql);
- ExFreePool(Connection);
+ TCPFreeConnectionEndpoint(Connection);
TI_DbgPrint(MAX_TRACE, ("Leaving.\n"));
}
@@ -387,8 +387,10 @@ NTSTATUS FileCloseAddress(
switch (AddrFile->Protocol) {
case IPPROTO_TCP:
TCPFreePort( AddrFile->Port );
- if( AddrFile->Listener )
- TCPClose( AddrFile->Listener );
+ if( AddrFile->Listener ) {
+ TCPClose( AddrFile->Listener );
+ ExFreePool( AddrFile->Listener );
+ }
break;
case IPPROTO_UDP:
@@ -488,20 +490,18 @@ NTSTATUS FileCloseConnection(
PTDI_REQUEST Request)
{
PCONNECTION_ENDPOINT Connection;
- NTSTATUS Status = STATUS_SUCCESS;
TI_DbgPrint(MID_TRACE, ("Called.\n"));
Connection = Request->Handle.ConnectionContext;
TcpipRecursiveMutexEnter( &TCPLock, TRUE );
- TCPClose(Connection);
DeleteConnectionEndpoint(Connection);
TcpipRecursiveMutexLeave( &TCPLock );
TI_DbgPrint(MAX_TRACE, ("Leaving.\n"));
- return Status;
+ return STATUS_SUCCESS;
}
diff --git a/reactos/drivers/storage/class/class2/class2.rbuild b/reactos/drivers/storage/class/class2/class2.rbuild
index 48ea7b56920..17636571e0d 100644
--- a/reactos/drivers/storage/class/class2/class2.rbuild
+++ b/reactos/drivers/storage/class/class2/class2.rbuild
@@ -9,5 +9,4 @@
..
class2.c
class2.rc
- class2.spec
diff --git a/reactos/drivers/storage/floppy/floppy.c b/reactos/drivers/storage/floppy/floppy.c
index 75cff27fc18..124ed80cf79 100644
--- a/reactos/drivers/storage/floppy/floppy.c
+++ b/reactos/drivers/storage/floppy/floppy.c
@@ -686,16 +686,16 @@ static NTSTATUS NTAPI InitController(PCONTROLLER_INFO ControllerInfo)
return STATUS_IO_DEVICE_ERROR;
}
-/* Check if floppy drive exists */
+ /* Check if floppy drive exists */
if(HwSenseInterruptStatus(ControllerInfo) != STATUS_SUCCESS)
- {
- WARN_(FLOPPY, "Floppy drive not detected! Returning STATUS_IO_DEVICE_ERROR\n");
- return STATUS_IO_DEVICE_ERROR;
- }
+ {
+ WARN_(FLOPPY, "Floppy drive not detected!\n");
+ return STATUS_NO_SUCH_DEVICE;
+ }
INFO_(FLOPPY, "InitController: resetting the controller after floppy detection\n");
- /* Reset the controller */
+ /* Reset the controller again after drive detection */
if(HwReset(ControllerInfo) != STATUS_SUCCESS)
{
WARN_(FLOPPY, "InitController: unable to reset controller\n");
@@ -984,6 +984,9 @@ static BOOLEAN NTAPI AddControllers(PDRIVER_OBJECT DriverObject)
/* 3i: Now that we're done, set the Initialized flag so we know to free this in Unload */
gControllerInfo[i].DriveInfo[j].Initialized = TRUE;
+
+ /* 3j: Clear the DO_DEVICE_INITIALIZING flag */
+ gControllerInfo[i].DriveInfo[j].DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
}
}
diff --git a/reactos/drivers/storage/floppy/ioctl.c b/reactos/drivers/storage/floppy/ioctl.c
index cb5d220f129..eac9c902c10 100644
--- a/reactos/drivers/storage/floppy/ioctl.c
+++ b/reactos/drivers/storage/floppy/ioctl.c
@@ -250,11 +250,13 @@ VOID NTAPI DeviceIoctlPassive(PDRIVE_INFO DriveInfo,
case IOCTL_DISK_FORMAT_TRACKS:
case IOCTL_DISK_FORMAT_TRACKS_EX:
ERR_(FLOPPY, "Format called; not supported yet\n");
+ Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED;
+ Irp->IoStatus.Information = 0;
break;
case IOCTL_DISK_GET_PARTITION_INFO:
- INFO_(FLOPPY, "IOCTL_DISK_GET_PARTITION_INFO Called; not supported\n");
- Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
+ INFO_(FLOPPY, "IOCTL_DISK_GET_PARTITION_INFO Called; not supported by a floppy driver\n");
+ Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Information = 0;
break;
diff --git a/reactos/drivers/storage/floppy/readwrite.c b/reactos/drivers/storage/floppy/readwrite.c
index c2cd2236770..84378af23ee 100644
--- a/reactos/drivers/storage/floppy/readwrite.c
+++ b/reactos/drivers/storage/floppy/readwrite.c
@@ -705,7 +705,7 @@ VOID NTAPI ReadWritePassive(PDRIVE_INFO DriveInfo,
IoMapTransfer(DriveInfo->ControllerInfo->AdapterObject, Irp->MdlAddress,
DriveInfo->ControllerInfo->MapRegisterBase,
- (PUCHAR)((ULONG_PTR)MmGetMdlVirtualAddress(Irp->MdlAddress) + TransferByteOffset),
+ (PVOID)((ULONG_PTR)MmGetMdlVirtualAddress(Irp->MdlAddress) + TransferByteOffset),
&CurrentTransferBytes, WriteToDevice);
/*
@@ -758,7 +758,7 @@ VOID NTAPI ReadWritePassive(PDRIVE_INFO DriveInfo,
INFO_(FLOPPY, "ReadWritePassive(): success; Completing with STATUS_SUCCESS\n");
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = Length;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ IoCompleteRequest(Irp, IO_DISK_INCREMENT);
StopMotor(DriveInfo->ControllerInfo);
}
diff --git a/reactos/drivers/storage/ide/pciidex/pciidex.rbuild b/reactos/drivers/storage/ide/pciidex/pciidex.rbuild
index 2941d0f52a3..9a4e01aff82 100644
--- a/reactos/drivers/storage/ide/pciidex/pciidex.rbuild
+++ b/reactos/drivers/storage/ide/pciidex/pciidex.rbuild
@@ -9,5 +9,4 @@
pciidex.c
pdo.c
pciidex.rc
- pciidex.spec
diff --git a/reactos/drivers/storage/port/diskdump/diskdump.rbuild b/reactos/drivers/storage/port/diskdump/diskdump.rbuild
index df39c1636b0..89642965e68 100644
--- a/reactos/drivers/storage/port/diskdump/diskdump.rbuild
+++ b/reactos/drivers/storage/port/diskdump/diskdump.rbuild
@@ -11,5 +11,4 @@
diskdump.c
diskdump_helper.S
diskdump.rc
- diskdump.spec
diff --git a/reactos/drivers/storage/scsiport/scsiport.rbuild b/reactos/drivers/storage/scsiport/scsiport.rbuild
index 6686e93c752..556d742680f 100644
--- a/reactos/drivers/storage/scsiport/scsiport.rbuild
+++ b/reactos/drivers/storage/scsiport/scsiport.rbuild
@@ -10,5 +10,4 @@
scsiport.c
stubs.c
scsiport.rc
- scsiport.pspec
diff --git a/reactos/drivers/usb/usbd/usbd.rbuild b/reactos/drivers/usb/usbd/usbd.rbuild
index 1759f89e7a7..c5900b5ff35 100644
--- a/reactos/drivers/usb/usbd/usbd.rbuild
+++ b/reactos/drivers/usb/usbd/usbd.rbuild
@@ -6,5 +6,4 @@
hal
usbd.c
usbd.rc
- usbd.spec
diff --git a/reactos/drivers/video/displays/framebuf/framebuf.rbuild b/reactos/drivers/video/displays/framebuf/framebuf.rbuild
index 8426b162842..5dcb2f06832 100644
--- a/reactos/drivers/video/displays/framebuf/framebuf.rbuild
+++ b/reactos/drivers/video/displays/framebuf/framebuf.rbuild
@@ -1,15 +1,13 @@
-
+
.
win32k
- libcntpr
enable.c
palette.c
pointer.c
screen.c
surface.c
framebuf.rc
- framebuf.spec
diff --git a/reactos/drivers/video/displays/framebufacc/framebufacc.rbuild b/reactos/drivers/video/displays/framebufacc/framebufacc.rbuild
index bfc08f00751..df893367e08 100644
--- a/reactos/drivers/video/displays/framebufacc/framebufacc.rbuild
+++ b/reactos/drivers/video/displays/framebufacc/framebufacc.rbuild
@@ -1,15 +1,13 @@
-
+
.
win32k
- libcntpr
enable.c
palette.c
pointer.c
screen.c
surface.c
framebufacc.rc
- framebufacc.spec
diff --git a/reactos/drivers/video/displays/vga/vgaddi.rbuild b/reactos/drivers/video/displays/vga/vgaddi.rbuild
index 4166883f01d..35479f8657e 100644
--- a/reactos/drivers/video/displays/vga/vgaddi.rbuild
+++ b/reactos/drivers/video/displays/vga/vgaddi.rbuild
@@ -1,9 +1,8 @@
-
+
.
- libcntpr
win32k
enable.c
@@ -22,5 +21,4 @@
vgavideo.c
vgaddi.rc
- vgaddi.spec
diff --git a/reactos/drivers/video/videoprt/videoprt.rbuild b/reactos/drivers/video/videoprt/videoprt.rbuild
index a2e1304098e..049896362c3 100644
--- a/reactos/drivers/video/videoprt/videoprt.rbuild
+++ b/reactos/drivers/video/videoprt/videoprt.rbuild
@@ -22,5 +22,4 @@
timer.c
videoprt.c
videoprt.rc
- videoprt.spec
diff --git a/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild b/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild
index fb4d99c3d9d..45b93f06eb1 100644
--- a/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild
+++ b/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild
@@ -48,5 +48,4 @@
MiniportWavePci.cpp
portcls.rc
- portcls.spec
diff --git a/reactos/drivers/wdm/audio/drm/drmk/drmk.rbuild b/reactos/drivers/wdm/audio/drm/drmk/drmk.rbuild
index ec0bf226283..7e92d0bf01e 100644
--- a/reactos/drivers/wdm/audio/drm/drmk/drmk.rbuild
+++ b/reactos/drivers/wdm/audio/drm/drmk/drmk.rbuild
@@ -9,5 +9,4 @@
stubs.cpp
drmk.rc
- drmk.spec
diff --git a/reactos/drivers/wmi/wmilib.rbuild b/reactos/drivers/wmi/wmilib.rbuild
index edfaa729329..a74a4085e03 100644
--- a/reactos/drivers/wmi/wmilib.rbuild
+++ b/reactos/drivers/wmi/wmilib.rbuild
@@ -5,6 +5,5 @@
.
ntoskrnl
wmilib.c
- wmilib.spec
wmilib.rc
diff --git a/reactos/hal/hal/hal.rbuild b/reactos/hal/hal/hal.rbuild
index b78559a5a3c..3a651fa6158 100644
--- a/reactos/hal/hal/hal.rbuild
+++ b/reactos/hal/hal/hal.rbuild
@@ -9,7 +9,6 @@
hal.c
hal.rc
- hal.pspec
@@ -20,7 +19,6 @@
hal.c
hal.rc
- hal.pspec
diff --git a/reactos/hal/halx86/generic/dma.c b/reactos/hal/halx86/generic/dma.c
index 293a2771bcf..f8f36b842b6 100644
--- a/reactos/hal/halx86/generic/dma.c
+++ b/reactos/hal/halx86/generic/dma.c
@@ -1606,9 +1606,9 @@ IoFlushAdapterBuffers(
{
if (SlaveDma && !AdapterObject->IgnoreCount)
Length -= HalReadDmaCounter(AdapterObject);
+ }
HalpCopyBufferMap(Mdl, RealMapRegisterBase, CurrentVa, Length, FALSE);
}
- }
else
{
MdlPagesPtr = MmGetMdlPfnArray(Mdl);
diff --git a/reactos/include/ddk/ntifs.h b/reactos/include/ddk/ntifs.h
index a0318e6b940..603531358c7 100644
--- a/reactos/include/ddk/ntifs.h
+++ b/reactos/include/ddk/ntifs.h
@@ -1639,6 +1639,65 @@ typedef struct _RTL_GENERIC_TABLE
PVOID TableContext;
} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
+typedef struct _UNICODE_PREFIX_TABLE_ENTRY
+{
+ CSHORT NodeTypeCode;
+ CSHORT NameLength;
+ struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
+ struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
+ RTL_SPLAY_LINKS Links;
+ PUNICODE_STRING Prefix;
+} UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
+
+typedef struct _UNICODE_PREFIX_TABLE
+{
+ CSHORT NodeTypeCode;
+ CSHORT NameLength;
+ PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
+ PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
+} UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeUnicodePrefix (
+ IN PUNICODE_PREFIX_TABLE PrefixTable
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlInsertUnicodePrefix (
+ IN PUNICODE_PREFIX_TABLE PrefixTable,
+ IN PUNICODE_STRING Prefix,
+ IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlRemoveUnicodePrefix (
+ IN PUNICODE_PREFIX_TABLE PrefixTable,
+ IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
+);
+
+NTSYSAPI
+PUNICODE_PREFIX_TABLE_ENTRY
+NTAPI
+RtlFindUnicodePrefix (
+ IN PUNICODE_PREFIX_TABLE PrefixTable,
+ IN PUNICODE_STRING FullName,
+ IN ULONG CaseInsensitiveIndex
+);
+
+NTSYSAPI
+PUNICODE_PREFIX_TABLE_ENTRY
+NTAPI
+RtlNextUnicodePrefix (
+ IN PUNICODE_PREFIX_TABLE PrefixTable,
+ IN BOOLEAN Restart
+);
+
#undef PRTL_GENERIC_COMPARE_ROUTINE
#undef PRTL_GENERIC_ALLOCATE_ROUTINE
#undef PRTL_GENERIC_FREE_ROUTINE
diff --git a/reactos/include/ndk/exfuncs.h b/reactos/include/ndk/exfuncs.h
index b4f54fb8a3b..57d7b08cf62 100644
--- a/reactos/include/ndk/exfuncs.h
+++ b/reactos/include/ndk/exfuncs.h
@@ -113,6 +113,33 @@ ExEnumHandleTable(
OUT PHANDLE Handle OPTIONAL
);
+//
+// Resource Functions
+//
+PVOID
+NTAPI
+ExEnterCriticalRegionAndAcquireResourceExclusive(
+ IN PERESOURCE Resource
+);
+
+PVOID
+NTAPI
+ExEnterCriticalRegionAndAcquireResourceShared(
+ IN PERESOURCE Resource
+);
+
+PVOID
+NTAPI
+ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
+ IN PERESOURCE Resource
+);
+
+VOID
+FASTCALL
+ExReleaseResourceAndLeaveCriticalRegion(
+ IN PERESOURCE Resource
+);
+
#endif
//
diff --git a/reactos/include/ndk/kefuncs.h b/reactos/include/ndk/kefuncs.h
index 3b0fe4e139d..ee9f6779e3d 100644
--- a/reactos/include/ndk/kefuncs.h
+++ b/reactos/include/ndk/kefuncs.h
@@ -205,7 +205,7 @@ BOOLEAN
NTAPI
KiIpiServiceRoutine(
IN PKTRAP_FRAME TrapFrame,
- IN PVOID ExceptionFrame
+ IN PKEXCEPTION_FRAME ExceptionFrame
);
//
diff --git a/reactos/include/psdk/imnxport.idl b/reactos/include/psdk/imnxport.idl
index 50f3e4e08ce..ef4f8ac4019 100644
--- a/reactos/include/psdk/imnxport.idl
+++ b/reactos/include/psdk/imnxport.idl
@@ -21,11 +21,13 @@ import "imnact.idl";
interface IInternetTransport;
interface ISMTPTransport;
interface IPOP3Transport;
+interface IIMAPTransport;
/* CLSIDs */
cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport2, 0xdf2c7eC, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
@@ -433,7 +435,7 @@ interface ISMTPCallback : ITransportCallback
{
[case(SMTP_SEND_STREAM)] SMTPSTREAM rStreamInfo;
[default];
- };
+ } DUMMYUNIONNAME;
} SMTPRESPONSE, *LPSMTPRESPONSE;
HRESULT OnResponse(
@@ -604,7 +606,7 @@ interface IPOP3Callback : ITransportCallback
[case(POP3_RETR)] POP3RETR rRetrInfo;
[case(POP3_TOP)] POP3TOP rTopInfo;
[default];
- };
+ } DUMMYUNIONNAME;
} POP3RESPONSE, *LPPOP3RESPONSE;
HRESULT OnResponse(
@@ -684,16 +686,429 @@ interface IPOP3Transport : IInternetTransport
/* FIXME: INNTPCallback, INNTPTransport */
-/* FIXME: IRangeList */
+[
+ object,
+ uuid(8C438160-4EF6-11d0-874F-00AA00530EE9),
+ local,
+]
+interface IRangeList : IUnknown
+{
+ const ULONG RL_RANGE_ERROR = ((ULONG)-1);
+ const ULONG RL_LAST_MESSAGE = ((ULONG)-1);
-/* FIXME: IIMAPCallback, IIMAPTransport */
+ HRESULT Clear();
+
+ HRESULT IsInRange(
+ [in] const ULONG value);
+
+ HRESULT Min(
+ [out] ULONG *pulMin);
+
+ HRESULT Max(
+ [out] ULONG *pulMax);
+
+ HRESULT Save(
+ [out] byte **ppbDestination,
+ [out] ULONG *pulSizeOfDestination);
+
+ HRESULT Load(
+ [in, size_is(ulSizeOfSource)] byte *pbSource,
+ [in] const ULONG ulSizeOfSource);
+
+ HRESULT AddRange(
+ [in] const ULONG low,
+ [in] const ULONG high);
+
+ HRESULT AddSingleValue(
+ [in] const ULONG value);
+
+ HRESULT AddRangeList(
+ [in] const IRangeList *prl);
+
+ HRESULT DeleteRange(
+ [in] const ULONG low,
+ [in] const ULONG high);
+
+ HRESULT DeleteSingleValue(
+ [in] const ULONG value);
+
+ HRESULT DeleteRangeList(
+ [in] const IRangeList *prl);
+
+ HRESULT MinOfRange(
+ [in] const ULONG value,
+ [out] ULONG *pulMinOfRange);
+
+ HRESULT MaxOfRange(
+ [in] const ULONG value,
+ [out] ULONG *pulMaxOfRange);
+
+ HRESULT RangeToIMAPString(
+ [out] LPSTR *ppszDestination,
+ [out] LPDWORD pdwLengthOfDestination);
+
+ HRESULT Next(
+ [in] const ULONG current,
+ [out] ULONG *pulNext);
+
+ HRESULT Prev(
+ [in] const ULONG current,
+ [out] ULONG *pulPrev);
+
+ HRESULT Cardinality(
+ [out] ULONG *pulCardinality);
+
+ HRESULT CardinalityFrom(
+ [in] const ULONG ulStartPoint,
+ [out] ULONG *pulCardinalityFrom);
+}
+
+[
+ object,
+ uuid(E9E9D8A3-4EDD-11d0-874F-00AA00530EE9),
+ local
+]
+interface IIMAPCallback : ITransportCallback
+{
+ typedef DWORD IMAP_MBOXFLAGS;
+ const IMAP_MBOXFLAGS IMAP_MBOX_NOFLAGS = 0x0;
+ const IMAP_MBOXFLAGS IMAP_MBOX_MARKED = 0x1;
+ const IMAP_MBOXFLAGS IMAP_MBOX_NOINFERIORS = 0x2;
+ const IMAP_MBOXFLAGS IMAP_MBOX_NOSELECT = 0x4;
+ const IMAP_MBOXFLAGS IMAP_MBOX_UNMARKED = 0x8;
+ const IMAP_MBOXFLAGS IMAP_MBOX_ALLFLAGS = 0xf;
+
+ typedef enum tagIMAP_RESPONSE_TYPE
+ {
+ irtERROR_NOTIFICATION,
+ irtCOMMAND_COMPLETION,
+ irtSERVER_ALERT,
+ irtPARSE_ERROR,
+ irtMAILBOX_UPDATE,
+ irtDELETED_MSG,
+ irtFETCH_BODY,
+ irtUPDATE_MSG,
+ irtAPPLICABLE_FLAGS,
+ irtPERMANENT_FLAGS,
+ irtUIDVALIDITY,
+ irtREADWRITE_STATUS,
+ irtTRYCREATE,
+ irtSEARCH,
+ irtMAILBOX_LISTING,
+ irtMAILBOX_STATUS,
+ irtAPPEND_PROGRESS,
+ irtUPDATE_MSG_EX
+ } IMAP_RESPONSE_TYPE;
+
+ typedef struct tagFETCH_BODY_PART
+ {
+ DWORD dwMsgSeqNum;
+ LPSTR pszBodyTag;
+ DWORD dwTotalBytes;
+ DWORD dwSizeOfData;
+ DWORD dwOffset;
+ BOOL fDone;
+ LPSTR pszData;
+ LPARAM lpFetchCookie1;
+ LPARAM lpFetchCookie2;
+ } FETCH_BODY_PART;
+
+ typedef struct tagFETCH_CMD_RESULTS
+ {
+ DWORD dwMsgSeqNum;
+ BOOL bMsgFlags;
+ IMAP_MSGFLAGS mfMsgFlags;
+ BOOL bRFC822Size;
+ DWORD dwRFC822Size;
+ BOOL bUID;
+ DWORD dwUID;
+ BOOL bInternalDate;
+ FILETIME ftInternalDate;
+ LPARAM lpFetchCookie1;
+ LPARAM lpFetchCookie2;
+ } FETCH_CMD_RESULTS;
+
+ typedef struct tagIMAPADDR
+ {
+ LPSTR pszName;
+ LPSTR pszADL;
+ LPSTR pszMailbox;
+ LPSTR pszHost;
+ struct tagIMAPADDR *pNext;
+ } IMAPADDR;
+
+ typedef struct tagFETCH_CMD_RESULTS_EX
+ {
+ DWORD dwMsgSeqNum;
+ BOOL bMsgFlags;
+ IMAP_MSGFLAGS mfMsgFlags;
+ BOOL bRFC822Size;
+ DWORD dwRFC822Size;
+ BOOL bUID;
+ DWORD dwUID;
+ BOOL bInternalDate;
+ FILETIME ftInternalDate;
+ LPARAM lpFetchCookie1;
+ LPARAM lpFetchCookie2;
+ BOOL bEnvelope;
+ FILETIME ftENVDate;
+ LPSTR pszENVSubject;
+ IMAPADDR *piaENVFrom;
+ IMAPADDR *piaENVSender;
+ IMAPADDR *piaENVReplyTo;
+ IMAPADDR *piaENVTo;
+ IMAPADDR *piaENVCc;
+ IMAPADDR *piaENVBcc;
+ LPSTR pszENVInReplyTo;
+ LPSTR pszENVMessageID;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ } FETCH_CMD_RESULTS_EX;
+
+ typedef struct tagMBOX_MSGCOUNT
+ {
+ BOOL bGotExistsResponse;
+ DWORD dwExists;
+ BOOL bGotRecentResponse;
+ DWORD dwRecent;
+ BOOL bGotUnseenResponse;
+ DWORD dwUnseen;
+ } MBOX_MSGCOUNT;
+
+ typedef struct tagIMAP_LISTLSUB_RESPONSE
+ {
+ LPSTR pszMailboxName;
+ IMAP_MBOXFLAGS imfMboxFlags;
+ char cHierarchyChar;
+ } IMAP_LISTLSUB_RESPONSE;
+
+ typedef struct tagIMAP_STATUS_RESPONSE
+ {
+ LPSTR pszMailboxName;
+ BOOL fMessages;
+ DWORD dwMessages;
+ BOOL fRecent;
+ DWORD dwRecent;
+ BOOL fUIDNext;
+ DWORD dwUIDNext;
+ BOOL fUIDValidity;
+ DWORD dwUIDValidity;
+ BOOL fUnseen;
+ DWORD dwUnseen;
+ } IMAP_STATUS_RESPONSE;
+
+ typedef struct tagAPPEND_PROGRESS
+ {
+ DWORD dwUploaded;
+ DWORD dwTotal;
+ } APPEND_PROGRESS;
+
+ typedef [switch_type(IMAP_RESPONSE_TYPE)] union tagIMAP_RESPONSE_DATA
+ {
+ [case (irtMAILBOX_UPDATE)] MBOX_MSGCOUNT *pmcMsgCount;
+ [case (irtDELETED_MSG)] DWORD dwDeletedMsgSeqNum;
+ [case (irtFETCH_BODY)] FETCH_BODY_PART *pFetchBodyPart;
+ [case (irtUPDATE_MSG)] FETCH_CMD_RESULTS *pFetchResults;
+ [case (irtAPPLICABLE_FLAGS, irtPERMANENT_FLAGS)] IMAP_MSGFLAGS imfImapMessageFlags;
+ [case (irtUIDVALIDITY)] DWORD dwUIDValidity;
+ [case (irtREADWRITE_STATUS)] BOOL bReadWrite;
+ [case (irtSEARCH)] IRangeList *prlSearchResults;
+ [case (irtMAILBOX_LISTING)] IMAP_LISTLSUB_RESPONSE illrdMailboxListing;
+ [case (irtMAILBOX_STATUS)] IMAP_STATUS_RESPONSE *pisrStatusResponse;
+ [case (irtAPPEND_PROGRESS)] APPEND_PROGRESS *papAppendProgress;
+ [case (irtUPDATE_MSG_EX)] FETCH_CMD_RESULTS_EX *pFetchResultsEx;
+ } IMAP_RESPONSE_DATA;
+
+ typedef struct tagIMAP_RESPONSE
+ {
+ WPARAM wParam;
+ LPARAM lParam;
+ HRESULT hrResult;
+ LPSTR lpszResponseText;
+ IMAP_RESPONSE_TYPE irtResponseType;
+ [switch_is(irtResponseType)] IMAP_RESPONSE_DATA irdResponseData;
+ } IMAP_RESPONSE;
+
+ HRESULT OnResponse([in] const IMAP_RESPONSE *pirIMAPResponse);
+}
+
+[
+object,
+uuid(E9E9D8A8-4EDD-11d0-874F-00AA00530EE9),
+local,
+]
+interface IIMAPTransport : IInternetTransport
+{
+ const DWORD IMAP_CAPABILITY_IMAP4 = 0x1;
+ const DWORD IMAP_CAPABILITY_IMAP4rev1 = 0x2;
+ const DWORD IMAP_CAPABILITY_IDLE = 0x4;
+ const DWORD IMAP_CAPABILITY_ALLFLAGS = 0x7;
+
+ HRESULT InitNew(
+ [in] LPSTR pszLogFilePath,
+ [in] IIMAPCallback *pCBHandler);
+
+ HRESULT NewIRangeList(
+ [out] IRangeList **pprlNewRangeList);
+
+ HRESULT Capability(
+ [out] DWORD *pdwCapabilityFlags);
+
+ HRESULT Select(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Examine(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Create(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Delete(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Rename(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName,
+ [in] LPSTR lpszNewMailboxName);
+
+ HRESULT Subscribe(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Unsubscribe(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT List(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxNameReference,
+ [in] LPSTR lpszMailboxNamePattern);
+
+ HRESULT Lsub(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxNameReference,
+ [in] LPSTR lpszMailboxNamePattern);
+
+ HRESULT Append(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName,
+ [in] LPSTR lpszMessageFlags,
+ [in] FILETIME ftMessageDateTime,
+ [in] LPSTREAM lpstmMessageToSave);
+
+ HRESULT Close(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler);
+
+ HRESULT Expunge(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler);
+
+ HRESULT Search(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszSearchCriteria,
+ [in] boolean bReturnUIDs,
+ [in] IRangeList *pMsgRange,
+ [in] boolean bUIDRangeList);
+
+ HRESULT Fetch(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] IRangeList *pMsgRange,
+ [in] boolean bUIDMsgRange,
+ [in] LPSTR lpszFetchArgs);
+
+ HRESULT Store(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] IRangeList *pMsgRange,
+ [in] boolean bUIDRangeList,
+ [in] LPSTR lpszStoreArgs);
+
+ HRESULT Copy(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] IRangeList *pMsgRange,
+ [in] boolean bUIDRangeList,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Noop(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler);
+
+ HRESULT ResizeMsgSeqNumTable(
+ [in] DWORD dwSizeOfMbox);
+
+ HRESULT UpdateSeqNumToUID(
+ [in] DWORD dwMsgSeqNum,
+ [in] DWORD dwUID);
+
+ HRESULT RemoveSequenceNum(
+ [in] DWORD dwDeletedMsgSeqNum);
+
+ HRESULT MsgSeqNumToUID(
+ [in] DWORD dwMsgSeqNum,
+ [out] DWORD *pdwUID);
+
+ HRESULT GetMsgSeqNumToUIDArray(
+ [out] DWORD **ppdwMsgSeqNumToUIDArray,
+ [out] DWORD *pdwNumberOfElements);
+
+ HRESULT GetHighestMsgSeqNum(
+ [out] DWORD *pdwHighestMSN);
+
+ HRESULT ResetMsgSeqNumToUID();
+
+ HRESULT SetDefaultCBHandler(
+ [in] IIMAPCallback *pCBHandler);
+
+ HRESULT Status(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR pszMailboxName,
+ [in] LPSTR pszStatusCmdArgs);
+}
#if 0
cpp_quote("HRESULT WINAPI CreateRASTransport(IRASTransport **ppTransport);")
cpp_quote("HRESULT WINAPI CreateNNTPTransport(INNTPTransport **ppTransport);")
-cpp_quote("HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);")
cpp_quote("HRESULT WINAPI CreateIMAPTransport2(IIMAPTransport2 **ppTransport);")
-cpp_quote("HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);")
#endif
+cpp_quote("HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);")
cpp_quote("HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);")
cpp_quote("HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);")
diff --git a/reactos/include/psdk/mimeole.idl b/reactos/include/psdk/mimeole.idl
index 9d4f45bc0cd..d74cdb591fa 100644
--- a/reactos/include/psdk/mimeole.idl
+++ b/reactos/include/psdk/mimeole.idl
@@ -32,6 +32,8 @@ interface IMimeEnumProperties;
cpp_quote("DEFINE_GUID(CLSID_IMimeBody, 0xfd853cdb, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_IMimeAllocator, 0xfd853cdd, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_IMimeMessage, 0xfd853ce3, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IMimeSecurity, 0xfd853cde, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IVirtualStream, 0xfd853cdf, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("#define MIME_E_REG_CREATE_KEY 0x800cce01")
cpp_quote("#define MIME_E_REG_QUERY_INFO 0x800cce02")
@@ -40,9 +42,19 @@ cpp_quote("#define MIME_E_BOUNDARY_MISMATCH 0x800cce04")
cpp_quote("#define MIME_E_NOT_FOUND 0x800cce05")
cpp_quote("#define MIME_E_NO_DATA 0x800cce05")
cpp_quote("#define MIME_E_BUFFER_TOO_SMALL 0x800cce06")
+cpp_quote("#define MIME_E_INVALID_ITEM_FLAGS 0x800cce07")
+cpp_quote("#define MIME_E_ONE_LINE_ITEME 0x800cce08")
+cpp_quote("#define MIME_E_INVALID_HANDLE 0x800cce09")
+cpp_quote("#define MIME_E_CHARSET_TRANSLATE 0x800cce0a")
+cpp_quote("#define MIME_E_NOT_INITIALIZED 0x800cce0b")
+
+cpp_quote("#define MIME_E_INVALID_CHARSET_TYPE 0x800cce31")
cpp_quote("#define MIME_E_INVALID_TEXT_TYPE 0x800cce38")
+cpp_quote("#define MIME_E_SECURITY_NOOP 0x800cceb1")
+cpp_quote("#define MIME_S_SECURITY_NOOP 0x000cceb1")
+
cpp_quote("typedef enum tagMIMEPROPID {")
cpp_quote(" PID_HDR_NEWSGROUP = 2,")
cpp_quote(" PID_HDR_NEWSGROUPS = 3,")
@@ -78,7 +90,14 @@ cpp_quote(" PID_HDR_SENDER = 61,")
cpp_quote(" PID_HDR_INREPLYTO = 77,")
cpp_quote("} MIMEPROPID;")
+cpp_quote("#define TYPEDID_MASK ((ULONG)0xffff)")
+cpp_quote("#define TYPEDID_TYPE(t) ((VARTYPE)((t) & TYPEDID_MASK))")
+
+cpp_quote("#define OID_HIDE_TNEF_ATTACHMENTS (0x000e0000 | VT_BOOL)")
+cpp_quote("#define OID_SECURITY_TYPE (0x00180000 | VT_UI4)")
+cpp_quote("#define OID_SECURITY_HWND_OWNER (0x00320000 | VT_UI4)")
cpp_quote("#define OID_HEADER_RELOAD_TYPE (0x00370000 | VT_UI4)")
+cpp_quote("#define OID_SHOW_MACBINARY (0x00390000 | VT_BOOL)")
[
@@ -235,6 +254,9 @@ library MIMEOLE
HRESULT GetCodePageInfo(
[in] CODEPAGEID cpiCodePage,
[in, out] LPCODEPAGEINFO pCodePageInfo);
+ HRESULT CanConvertCodePages(
+ [in] CODEPAGEID cpiSource,
+ [in] CODEPAGEID cpiDest);
HRESULT DecodeHeader(
[in] HCHARSET hCharset,
[in] LPCSTR pszData,
@@ -256,22 +278,22 @@ library MIMEOLE
[in] CODEPAGEID cpiDest,
[in] LPPROPVARIANT pIn,
[in, out] LPPROPVARIANT pOut);
- HRESULT MLANG_ConvertInetReset();
+ HRESULT MLANG_ConvertInetReset(void);
HRESULT MLANG_ConvertInetString(
[in] CODEPAGEID cpiSource,
[in] CODEPAGEID cpiDest,
[in] LPCSTR pSource,
[in] int *pnSizeOfSource,
- [out] LPSTR pDestination,
+ [in,out,unique] LPSTR pDestination,
[in] int *pnDstSize);
HRESULT Rfc1522Decode(
[in] LPCSTR pszValue,
- [in] LPCSTR pszCharset,
+ [in,ref] LPSTR pszCharset,
[in] ULONG cchmax,
[out] LPSTR *ppszDecoded);
HRESULT Rfc1522Encode(
[in] LPCSTR pszValue,
- [in] HCHARSET hCharset,
+ [in] HCHARSET hCharset,
[out] LPSTR *ppszEncoded);
}
@@ -293,6 +315,19 @@ library MIMEOLE
typedef BLOB THUMBBLOB;
typedef void *HCAPICERTSTORE;
+ cpp_quote("#define MST_NONE 0x00000000")
+ cpp_quote("#define MST_THIS_SIGN 0x00000001")
+ cpp_quote("#define MST_THIS_ENCRYPT 0x00000002")
+ cpp_quote("#define MST_BLOB_FLAG 0x00000004")
+ cpp_quote("#define MST_THIS_BLOBSIGN (MST_BLOB_FLAG | MST_THIS_SIGN)")
+ cpp_quote("#define MST_CHILD_SIGN 0x00000100")
+ cpp_quote("#define MST_CHILD_ENCRYPT 0x00000200")
+ cpp_quote("#define MST_SUBMSG_SIGN 0x00001000")
+ cpp_quote("#define MST_SUBMSG_ENCRYPT 0x00002000")
+ cpp_quote("#define MST_RECEIPT_REQUEST 0x00010000")
+ cpp_quote("#define MST_CLASS_SMIME_V1 0x00000000")
+ cpp_quote("#define MST_CLASS_PGP 0x01000000")
+
typedef enum tagCERTSTATE
{
CERTIFICATE_OK,
@@ -1041,6 +1076,8 @@ cpp_quote("#endif")
]
interface IMimeEnumProperties : IUnknown
{
+ typedef [unique] IMimeEnumProperties *LPMIMEENUMPROPERTIES;
+
typedef struct tagENUMPROPERTY
{
LPSTR pszName;
@@ -1048,7 +1085,22 @@ cpp_quote("#endif")
DWORD dwPropId;
} ENUMPROPERTY, *LPENUMPROPERTY;
- /* FIXME: fill this in */
+ HRESULT Next(
+ [in] ULONG cFetch,
+ [in, out] LPENUMPROPERTY prgProp,
+ [out] ULONG *pcFetched);
+
+ HRESULT Skip(
+ [in] ULONG cItems);
+
+ HRESULT Reset(void);
+
+ HRESULT Clone(
+ [out] IMimeEnumProperties **ppEnum);
+
+ HRESULT Count(
+ [out] ULONG *pcItems);
+
}
[
@@ -1164,6 +1216,31 @@ cpp_quote("#endif")
{
/* FIXME: fill this in */
}
+
+ [
+ uuid(ba715ae0-a740-11d2-8b22-0080c76b34c6),
+ local
+ ]
+ interface IMimeSecurityCallback : IUnknown
+ {
+ /* FIXME: fill this in */
+
+ cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_UNKNOWN 0")
+ cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_KEYTRANS 1")
+ cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_KEYAGREE 2")
+ cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_MAIL_LIST 3")
+
+ cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_CERTIFICATE 0")
+ cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_KEYTRANS 1")
+ cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_PROVIDER 2")
+ cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_EPHEMERAL_KEYAGREE 3")
+ cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_STATIC_KEYAGREE 4")
+
+ cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_CERTIFICATE 0")
+ cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_ISSUERSERIAL 1")
+ cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_KEY_ID 2")
+
+ }
}
cpp_quote("#ifdef __cplusplus")
diff --git a/reactos/include/psdk/rpcdce.h b/reactos/include/psdk/rpcdce.h
index 8c10233d9bd..1fca11bff37 100644
--- a/reactos/include/psdk/rpcdce.h
+++ b/reactos/include/psdk/rpcdce.h
@@ -79,6 +79,12 @@ typedef struct
RPC_IF_ID *IfId[1];
} RPC_IF_ID_VECTOR;
+typedef struct
+{
+ unsigned int Count;
+ unsigned long Stats[1];
+} RPC_STATS_VECTOR;
+
typedef I_RPC_HANDLE *RPC_EP_INQ_HANDLE;
#define RPC_C_EP_ALL_ELTS 0
diff --git a/reactos/include/psdk/rpcndr.h b/reactos/include/psdk/rpcndr.h
index 9bf28407951..15f1cb2a21d 100644
--- a/reactos/include/psdk/rpcndr.h
+++ b/reactos/include/psdk/rpcndr.h
@@ -115,6 +115,12 @@ typedef unsigned char boolean;
#define NdrFcLong(s) (unsigned char)(s & 0xff), (unsigned char)((s & 0x0000ff00) >> 8), \
(unsigned char)((s & 0x00ff0000) >> 16), (unsigned char)(s >> 24)
+#define RPC_BAD_STUB_DATA_EXCEPTION_FILTER \
+ ((RpcExceptionCode() == STATUS_ACCESS_VIOLATION) || \
+ (RpcExceptionCode() == STATUS_DATATYPE_MISALIGNMENT) || \
+ (RpcExceptionCode() == RPC_X_BAD_STUB_DATA) || \
+ (RpcExceptionCode() == RPC_S_INVALID_BOUND))
+
typedef struct
{
void *pad[2];
@@ -189,7 +195,7 @@ typedef struct _MIDL_STUB_MESSAGE
ULONG_PTR MaxCount;
ULONG Offset;
ULONG ActualCount;
- void * (__RPC_API *pfnAllocate)(size_t);
+ void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(size_t);
void (__RPC_API *pfnFree)(void *);
unsigned char *StackTop;
unsigned char *pPresentedType;
@@ -316,7 +322,7 @@ typedef struct _USER_MARSHAL_CB
typedef struct _MALLOC_FREE_STRUCT
{
- void * (__RPC_USER *pfnAllocate)(size_t);
+ void * (__WINE_ALLOC_SIZE(1) __RPC_USER *pfnAllocate)(size_t);
void (__RPC_USER *pfnFree)(void *);
} MALLOC_FREE_STRUCT;
@@ -329,7 +335,7 @@ typedef struct _COMM_FAULT_OFFSETS
typedef struct _MIDL_STUB_DESC
{
void *RpcInterfaceInformation;
- void * (__RPC_API *pfnAllocate)(size_t);
+ void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(size_t);
void (__RPC_API *pfnFree)(void *);
union {
handle_t *pAutoHandle;
@@ -468,7 +474,7 @@ typedef struct _NDR_USER_MARSHAL_INFO_LEVEL1
{
void *Buffer;
ULONG BufferSize;
- void * (__RPC_API *pfnAllocate)(size_t);
+ void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(size_t);
void (__RPC_API *pfnFree)(void *);
struct IRpcChannelBuffer *pRpcChannelBuffer;
ULONG_PTR Reserved[5];
@@ -652,7 +658,7 @@ RPCRTAPI LONG RPC_ENTRY
NdrDcomAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
RPCRTAPI void* RPC_ENTRY
- NdrAllocate( PMIDL_STUB_MESSAGE pStubMsg, size_t Len );
+ NdrAllocate( PMIDL_STUB_MESSAGE pStubMsg, SIZE_T Len ) __WINE_ALLOC_SIZE(2);
RPCRTAPI void RPC_ENTRY
NdrClearOutParameters( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, void *ArgAddr );
@@ -662,7 +668,7 @@ RPCRTAPI RPC_STATUS RPC_ENTRY
ULONG *pFaultStatus, RPC_STATUS Status_ );
RPCRTAPI void* RPC_ENTRY
- NdrOleAllocate( size_t Size );
+ NdrOleAllocate( size_t Size ) __WINE_ALLOC_SIZE(1);
RPCRTAPI void RPC_ENTRY
NdrOleFree( void* NodeToFree );
@@ -723,11 +729,11 @@ RPCRTAPI void RPC_ENTRY
RPCRTAPI void RPC_ENTRY
NdrRpcSmSetClientToOsf( PMIDL_STUB_MESSAGE pMessage );
RPCRTAPI void * RPC_ENTRY
- NdrRpcSmClientAllocate( size_t Size );
+ NdrRpcSmClientAllocate( size_t Size ) __WINE_ALLOC_SIZE(1);
RPCRTAPI void RPC_ENTRY
NdrRpcSmClientFree( void *NodeToFree );
RPCRTAPI void * RPC_ENTRY
- NdrRpcSsDefaultAllocate( size_t Size );
+ NdrRpcSsDefaultAllocate( size_t Size ) __WINE_ALLOC_SIZE(1);
RPCRTAPI void RPC_ENTRY
NdrRpcSsDefaultFree( void *NodeToFree );
diff --git a/reactos/include/psdk/wingdi.h b/reactos/include/psdk/wingdi.h
index 49619b6e5d2..71311d117fc 100644
--- a/reactos/include/psdk/wingdi.h
+++ b/reactos/include/psdk/wingdi.h
@@ -503,6 +503,7 @@ extern "C" {
#define FS_HEBREW 32
#define FS_ARABIC 64
#define FS_BALTIC 128
+#define FS_VIETNAMESE 256
#define FS_THAI 0x10000
#define FS_JISJAPAN 0x20000
#define FS_CHINESESIMP 0x40000
diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h
index 57ac419bfc8..6c5f50904d6 100644
--- a/reactos/include/psdk/winnt.h
+++ b/reactos/include/psdk/winnt.h
@@ -70,6 +70,12 @@ extern "C" {
#endif
#endif
+#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
+#define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
+#else
+#define __WINE_ALLOC_SIZE(x)
+#endif
+
#ifndef FORCEINLINE
#if (_MSC_VER >= 1200)
#define FORCEINLINE __forceinline
diff --git a/reactos/include/psdk/winternl.h b/reactos/include/psdk/winternl.h
index f58fc899dc0..7868b035251 100644
--- a/reactos/include/psdk/winternl.h
+++ b/reactos/include/psdk/winternl.h
@@ -1662,9 +1662,6 @@ typedef enum _SYSDBG_COMMAND {
* Function declarations
*/
-extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
-extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
-
#if defined(__i386__) && defined(__GNUC__)
static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
diff --git a/reactos/include/psdk/winuser.h b/reactos/include/psdk/winuser.h
index 41a292a571c..b67c2959dd6 100644
--- a/reactos/include/psdk/winuser.h
+++ b/reactos/include/psdk/winuser.h
@@ -1988,6 +1988,7 @@ extern "C" {
#define DCX_EXCLUDERGN 64
#define DCX_INTERSECTRGN 128
#define DCX_VALIDATE 0x200000
+#define DCX_USESTYLE 0x00010000
#define DCX_EXCLUDEUPDATE 0x100
#define GMDI_GOINTOPOPUPS 2
#define GMDI_USEDISABLED 1
@@ -3101,14 +3102,14 @@ typedef struct tagICONMETRICSA {
int iVertSpacing;
int iTitleWrap;
LOGFONTA lfFont;
-} ICONMETRICSA,*LPICONMETRICSA;
+} ICONMETRICSA, *PICONMETRICSA, *LPICONMETRICSA;
typedef struct tagICONMETRICSW {
UINT cbSize;
int iHorzSpacing;
int iVertSpacing;
int iTitleWrap;
LOGFONTW lfFont;
-} ICONMETRICSW,*LPICONMETRICSW;
+} ICONMETRICSW, *PICONMETRICSW, *LPICONMETRICSW;
#endif /* NOGDI */
typedef struct tagMINIMIZEDMETRICS {
UINT cbSize;
@@ -4475,8 +4476,8 @@ typedef MONITORINFOEXW MONITORINFOEX, *LPMONITORINFOEX;
#define WinHelp WinHelpW
#define wsprintf wsprintfW
#define wvsprintf wvsprintfW
-#ifndef NOGDI
-typedef ICONMETRICSW ICONMETRICS,*LPICONMETRICS;
+#if defined(_WINGDI_) && !defined(NOGDI)
+typedef ICONMETRICSW ICONMETRICS;
typedef NONCLIENTMETRICSW NONCLIENTMETRICS,*LPNONCLIENTMETRICS;
#define ChangeDisplaySettings ChangeDisplaySettingsW
#define ChangeDisplaySettingsEx ChangeDisplaySettingsExW
@@ -4644,7 +4645,7 @@ typedef MONITORINFOEXA MONITORINFOEX, *LPMONITORINFOEX;
#define wsprintf wsprintfA
#define wvsprintf wvsprintfA
#if defined(_WINGDI_) && !defined(NOGDI)
-typedef ICONMETRICSA ICONMETRICS,*LPICONMETRICS;
+typedef ICONMETRICSA ICONMETRICS;
typedef NONCLIENTMETRICSA NONCLIENTMETRICS,*LPNONCLIENTMETRICS;
#define ChangeDisplaySettings ChangeDisplaySettingsA
#define ChangeDisplaySettingsEx ChangeDisplaySettingsExA
diff --git a/reactos/include/reactos/idl/eventlogrpc.idl b/reactos/include/reactos/idl/eventlogrpc.idl
index e1abda013ad..ae78f89a81e 100644
--- a/reactos/include/reactos/idl/eventlogrpc.idl
+++ b/reactos/include/reactos/idl/eventlogrpc.idl
@@ -17,10 +17,10 @@ typedef struct _RPC_STRING {
[size_is(MaximumLength), length_is(Length)] LPSTR Buffer;
} RPC_STRING, *PRPC_STRING;
-typedef /*[context_handle]*/ unsigned long IELF_HANDLE;
+typedef [context_handle] PVOID IELF_HANDLE;
typedef IELF_HANDLE *PIELF_HANDLE;
-typedef /*[handle, unique]*/ LPWSTR EVENTLOG_HANDLE_W;
-typedef /*[handle, unique]*/ LPSTR EVENTLOG_HANDLE_A;
+typedef [handle, unique] LPWSTR EVENTLOG_HANDLE_W;
+typedef [handle, unique] LPSTR EVENTLOG_HANDLE_A;
typedef struct _RPC_CLIENT_ID {
DWORD UniqueProcess;
@@ -40,65 +40,41 @@ interface eventlog
{
/* Function 0 */
NTSTATUS ElfrClearELFW(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[in, unique] PRPC_UNICODE_STRING BackupFileName);
/* Function 1 */
NTSTATUS ElfrBackupELFW(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[in, unique] PRPC_UNICODE_STRING BackupFileName);
/* Function 2 */
NTSTATUS ElfrCloseEL(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in, out] IELF_HANDLE *LogHandle);
/* Function 3 */
NTSTATUS ElfrDeregisterEventSource(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in, out] IELF_HANDLE *LogHandle);
/* Function 4 */
NTSTATUS ElfrNumberOfRecords(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[out] DWORD *NumberOfRecords);
/* Function 5 */
NTSTATUS ElfrOldestRecord(
-#ifndef __midl
- handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[out] DWORD *OldestRecordNumber);
/* Function 6 */
NTSTATUS ElfrChangeNotify(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE *LogHandle,
[in] RPC_CLIENT_ID ClientId,
[in] DWORD Event);
/* Function 7 */
NTSTATUS ElfrOpenELW(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
- [in] EVENTLOG_HANDLE_W UNCServerName,
+ [in, unique] EVENTLOG_HANDLE_W UNCServerName, /* FIXME */
[in] PRPC_UNICODE_STRING ModuleName,
[in] PRPC_UNICODE_STRING RegModuleName,
[in] DWORD MajorVersion,
@@ -107,10 +83,7 @@ interface eventlog
/* Function 8 */
NTSTATUS ElfrRegisterEventSourceW(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
- [in] EVENTLOG_HANDLE_W UNCServerName,
+ [in, unique] EVENTLOG_HANDLE_W UNCServerName, /* FIXME */
[in] PRPC_UNICODE_STRING ModuleName,
[in] PRPC_UNICODE_STRING RegModuleName,
[in] DWORD MajorVersion,
@@ -119,10 +92,7 @@ interface eventlog
/* Function 9 */
NTSTATUS ElfrOpenBELW(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
- [in] EVENTLOG_HANDLE_W UNCServerName,
+ [in, unique] EVENTLOG_HANDLE_W UNCServerName, /* FIXME */
[in] PRPC_UNICODE_STRING BackupFileName,
[in] DWORD MajorVersion,
[in] DWORD MinorVersion,
@@ -130,9 +100,6 @@ interface eventlog
/* Function 10 */
NTSTATUS ElfrReadELW(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD ReadFlags,
[in] DWORD RecordOffset,
@@ -143,9 +110,6 @@ interface eventlog
/* Function 11 */
NTSTATUS ElfrReportEventW(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD Time,
[in] USHORT EventType,
@@ -163,26 +127,17 @@ interface eventlog
/* Function 12 */
NTSTATUS ElfrClearELFA(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[in, unique] PRPC_STRING BackupFileName);
/* Function 13 */
NTSTATUS ElfrBackupELFA(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[in, unique] PRPC_STRING BackupFileName);
/* Function 14 */
NTSTATUS ElfrOpenELA(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
- [in] EVENTLOG_HANDLE_A UNCServerName,
+ [in, unique] EVENTLOG_HANDLE_A UNCServerName, /* FIXME */
[in] PRPC_STRING ModuleName,
[in] PRPC_STRING RegModuleName,
[in] DWORD MajorVersion,
@@ -191,10 +146,7 @@ interface eventlog
/* Function 15 */
NTSTATUS ElfrRegisterEventSourceA(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
- [in] EVENTLOG_HANDLE_A UNCServerName,
+ [in, unique] EVENTLOG_HANDLE_A UNCServerName, /* FIXME */
[in] PRPC_STRING ModuleName,
[in] PRPC_STRING RegModuleName,
[in] DWORD MajorVersion,
@@ -203,10 +155,7 @@ interface eventlog
/* Function 16 */
NTSTATUS ElfrOpenBELA(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
- [in] EVENTLOG_HANDLE_A UNCServerName,
+ [in, unique] EVENTLOG_HANDLE_A UNCServerName, /* FIXME */
[in] PRPC_STRING BackupFileName,
[in] DWORD MajorVersion,
[in] DWORD MinorVersion,
@@ -214,9 +163,6 @@ interface eventlog
/* Function 17 */
NTSTATUS ElfrReadELA(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD ReadFlags,
[in] DWORD RecordOffset,
@@ -227,9 +173,6 @@ interface eventlog
/* Function 18 */
NTSTATUS ElfrReportEventA(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD Time,
[in] USHORT EventType,
@@ -268,9 +211,6 @@ interface eventlog
/* Function 22 */
NTSTATUS ElfrGetLogInformation(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD InfoLevel,
[out, size_is(cbBufSize)] BYTE *Buffer,
@@ -279,16 +219,10 @@ interface eventlog
/* Function 23 */
NTSTATUS ElfrFlushEL(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle);
/* Function 24 */
NTSTATUS ElfrReportEventAndSourceW(
-#ifndef __midl
- [in] handle_t BindingHandle,
-#endif
[in] IELF_HANDLE LogHandle,
[in] DWORD Time,
[in] USHORT EventType,
diff --git a/reactos/include/reactos/win32k/ntgdihdl.h b/reactos/include/reactos/win32k/ntgdihdl.h
index 259e67be5c8..e6fe3074c2a 100644
--- a/reactos/include/reactos/win32k/ntgdihdl.h
+++ b/reactos/include/reactos/win32k/ntgdihdl.h
@@ -42,7 +42,9 @@
#define GDI_ENTRY_UPPER_SHIFT 16
/* GDI Entry Flags */
-#define GDI_ENTRY_FLAG_NEED_UPDATE 4
+#define GDI_ENTRY_UNDELETABLE 1
+#define GDI_ENTRY_DELETING 2
+#define GDI_ENTRY_VALIDATE_VIS 4
/*! \defgroup GDI object types
*
@@ -230,7 +232,7 @@ typedef struct __GDI_SHARED_HANDLE_TABLE // Must match win32k/include/gdiobj.h
FLONG flDeviceUniq; // Device settings uniqueness.
PVOID pvLangPack; // Lanuage Pack.
CFONT cfPublic[GDI_CFONT_MAX]; // Public Fonts.
- DWORD dwCsbSupported1; // OEM code-page bitfield.
+ DWORD dwCFCount;
} GDI_SHARED_HANDLE_TABLE, *PGDI_SHARED_HANDLE_TABLE;
typedef struct _RGN_ATTR
@@ -328,8 +330,8 @@ typedef struct _BRUSH_ATTR // Used with pen too.
typedef struct _FONT_ATTR
{
- DWORD dwUnknown;
- void *pCharWidthData;
+ BOOL bSlowWidths;
+ PCFONT pCharWidthData;
} FONT_ATTR, *PFONT_ATTR;
diff --git a/reactos/include/reactos/win32k/ntgdityp.h b/reactos/include/reactos/win32k/ntgdityp.h
index 671d435aca0..73b6ad4ec8c 100644
--- a/reactos/include/reactos/win32k/ntgdityp.h
+++ b/reactos/include/reactos/win32k/ntgdityp.h
@@ -231,10 +231,15 @@ typedef struct _UNIVERSAL_FONT_ID
ULONG Index;
} UNIVERSAL_FONT_ID, *PUNIVERSAL_FONT_ID;
-typedef struct _REALIZATION_INFO // Based on LOCALESIGNATURE
+#define RI_TECH_BITMAP 1
+#define RI_TECH_FIXED 2
+#define RI_TECH_SCALABLE 3
+
+typedef struct _REALIZATION_INFO
{
- DWORD dwCsbDefault[2];
- DWORD dwCsbSupported0;
+ DWORD iTechnology;
+ DWORD iUniq;
+ DWORD dwUnknown;
} REALIZATION_INFO, *PREALIZATION_INFO;
typedef struct _WIDTHDATA
@@ -385,6 +390,8 @@ typedef union
ULONG l;
} gxf_long;
+#define CFONT_REALIZATION 0x0080
+
typedef struct _CFONT
{
struct _CFONT *pcfNext;
@@ -402,7 +409,10 @@ typedef struct _CFONT
USHORT sWidth[256]; // Widths in pels.
ULONG ulAveWidth; // bogus average used by USER
TMW_INTERNAL tmw; // cached metrics
- LOCALESIGNATURE lsLocSig; // font signature information
+ DWORD iTechnology;
+ DWORD iUniq;
+ DWORD dwUnknown;
+ DWORD dwCFCount;
} CFONT, *PCFONT;
//
diff --git a/reactos/include/reactos/win32k/ntuser.h b/reactos/include/reactos/win32k/ntuser.h
index b30fbc31fec..7bfe3a4aaee 100644
--- a/reactos/include/reactos/win32k/ntuser.h
+++ b/reactos/include/reactos/win32k/ntuser.h
@@ -1724,12 +1724,12 @@ NtUserImpersonateDdeClientWindow(
HWND hWndClient,
HWND hWndServer);
-DWORD
+NTSTATUS
NTAPI
NtUserInitialize(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3);
+ DWORD dwWinVersion,
+ HANDLE hPowerRequestEvent,
+ HANDLE hMediaRequestEvent);
NTSTATUS
NTAPI
@@ -1805,10 +1805,10 @@ NTAPI
NtUserLockWindowStation(
HWINSTA hWindowStation);
-DWORD
-NTAPI
+BOOL
+STDCALL
NtUserLockWindowUpdate(
- DWORD Unknown0);
+ HWND hWnd);
BOOL
NTAPI
diff --git a/reactos/include/reactos/wine/config.h b/reactos/include/reactos/wine/config.h
index cc9c0777c3b..e4f02e7c2dd 100644
--- a/reactos/include/reactos/wine/config.h
+++ b/reactos/include/reactos/wine/config.h
@@ -797,7 +797,7 @@
#define HAVE_VA_COPY 1
/* Define to 1 if you have the `vsnprintf' function. */
-//#define HAVE_VSNPRINTF 1
+#define HAVE_VSNPRINTF 1
/* Define to 1 if you have the `wait4' function. */
/* #undef HAVE_WAIT4 */
diff --git a/reactos/include/reactos/wine/dcetypes.idl b/reactos/include/reactos/wine/dcetypes.idl
new file mode 100644
index 00000000000..9986fcd1fcd
--- /dev/null
+++ b/reactos/include/reactos/wine/dcetypes.idl
@@ -0,0 +1,88 @@
+/*
+ * Common DCE Types
+ *
+ * Copyright 2006 Robert Shearman (for CodeWeavers)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* pull in GUID type */
+import "wtypes.idl";
+
+typedef unsigned small unsigned8;
+typedef unsigned short unsigned16;
+typedef unsigned long unsigned32;
+typedef small signed8;
+typedef short signed16;
+typedef long signed32;
+typedef unsigned32 boolean32;
+typedef unsigned hyper u_int64;
+typedef unsigned long u_int32;
+typedef unsigned short u_int16;
+typedef unsigned small u_int8;
+
+typedef [ptr] GUID *uuid_p_t;
+
+typedef struct twr_t
+{
+ unsigned32 tower_length;
+ [size_is(tower_length)] byte tower_octet_string[];
+} twr_t;
+typedef [ptr] twr_t *twr_p_t;
+
+typedef struct ndr_context_handle
+{
+ unsigned32 context_handle_attributes;
+ GUID context_handle_uuid;
+} ndr_context_handle;
+
+const long ndr_c_int_big_endian = 0;
+const long ndr_c_int_little_endian = 1;
+const long ndr_c_float_ieee = 0;
+const long ndr_c_float_vax = 1;
+const long ndr_c_float_cray = 2;
+const long ndr_c_float_ibm = 3;
+const long ndr_c_char_ascii = 0;
+const long ndr_c_char_ebcdic = 1;
+
+typedef struct
+{
+ unsigned8 int_rep;
+ unsigned8 char_rep;
+ unsigned8 float_rep;
+ byte reserved;
+} ndr_format_t, *ndr_format_p_t;
+
+typedef struct
+{
+ GUID uuid;
+ unsigned16 vers_major;
+ unsigned16 vers_minor;
+} rpc_if_id_t;
+typedef [unique] rpc_if_id_t *rpc_if_id_p_t;
+
+typedef struct
+{
+ unsigned32 count;
+ [size_is(count)]
+ rpc_if_id_p_t if_id[*];
+} rpc_if_id_vector_t;
+typedef [unique] rpc_if_id_vector_t *rpc_if_id_vector_p_t;
+
+typedef struct
+{
+ unsigned32 count;
+ unsigned32 stats[1]; /* length_is (count) */
+} rpc_stats_vector_t, *rpc_stats_vector_p_t;
diff --git a/reactos/include/reactos/wine/epm.idl b/reactos/include/reactos/wine/epm.idl
new file mode 100644
index 00000000000..6b92313d9cc
--- /dev/null
+++ b/reactos/include/reactos/wine/epm.idl
@@ -0,0 +1,122 @@
+/*
+ * Endpoint Mapper
+ *
+ * Copyright 2006 Robert Shearman (for CodeWeavers)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* FIXME: should be import */
+#include "dcetypes.idl"
+
+cpp_quote("RPC_STATUS WINAPI TowerExplode(")
+cpp_quote(" const twr_t *tower, PRPC_SYNTAX_IDENTIFIER object, PRPC_SYNTAX_IDENTIFIER syntax,")
+cpp_quote(" char **protseq, char **endpoint, char **address);")
+cpp_quote("RPC_STATUS WINAPI TowerConstruct(")
+cpp_quote(" const RPC_SYNTAX_IDENTIFIER *object, const RPC_SYNTAX_IDENTIFIER *syntax,")
+cpp_quote(" const char *protseq, const char *endpoint, const char *address,")
+cpp_quote(" twr_t **tower);")
+
+[
+ uuid(e1af8308-5d1f-11c9-91a4-08002b14a0fa),
+ version(3.0),
+ pointer_default(ref)
+]
+interface epm
+{
+ const long ept_max_annotation_size = 64;
+
+ typedef struct
+ {
+ GUID object;
+ twr_t *tower;
+ [string] char annotation[ept_max_annotation_size];
+ } ept_entry_t, *ept_entry_p_t;
+
+ typedef [context_handle] void *ept_lookup_handle_t;
+
+ /* Adds entries to an endpoint map */
+ void ept_insert(
+ [in] handle_t h,
+ [in] unsigned32 num_ents,
+ [in, size_is(num_ents)]
+ ept_entry_t entries[],
+ [in] boolean32 replace,
+ [out] error_status_t *status
+ );
+
+ /* Removes entries from an endpoint map */
+ void ept_delete(
+ [in] handle_t h,
+ [in] unsigned32 num_ents,
+ [in, size_is(num_ents)]
+ ept_entry_t entries[],
+ [out] error_status_t *status
+ );
+
+ /* Lookup entries in an endpoint map */
+ [idempotent]
+ void ept_lookup(
+ [in] handle_t h,
+ [in] unsigned32 inquiry_type,
+ [in] uuid_p_t object,
+ [in] rpc_if_id_p_t interface_id,
+ [in] unsigned32 vers_option,
+ [in, out] ept_lookup_handle_t *entry_handle,
+ [in] unsigned32 max_ents,
+ [out] unsigned32 *num_ents,
+ [out, length_is(*num_ents), size_is(max_ents)]
+ ept_entry_t entries[],
+ [out] error_status_t *status
+ );
+
+ /* Lookup entries in an endpoint map using the given input pattern */
+ [idempotent]
+ void ept_map(
+ [in] handle_t h,
+ [in] uuid_p_t object,
+ [in] twr_p_t map_tower,
+ [in, out] ept_lookup_handle_t *entry_handle,
+ [in] unsigned32 max_towers,
+ [out] unsigned32 *num_towers,
+ [out, length_is(*num_towers), size_is(max_towers)]
+ twr_p_t *towers,
+ [out] error_status_t *status
+ );
+
+ /* Free the context handle returned by ept_lookup or ept_map */
+ void ept_lookup_handle_free(
+ [in] handle_t h,
+ [in, out] ept_lookup_handle_t *entry_handle,
+ [out] error_status_t *status
+ );
+
+ /* Inquires as to the endpoint map's object identifier */
+ [idempotent]
+ void ept_inq_object(
+ [in] handle_t h,
+ [out] GUID *ept_object,
+ [out] error_status_t *status
+ );
+
+ /* Deletes matching entries in the endpoint map */
+ void ept_mgmt_delete(
+ [in] handle_t h,
+ [in] boolean32 object_speced,
+ [in] uuid_p_t object,
+ [in] twr_p_t tower,
+ [out] error_status_t *status
+ );
+}
diff --git a/reactos/include/reactos/wine/unicode.h b/reactos/include/reactos/wine/unicode.h
index dea64cd477a..44f09885305 100644
--- a/reactos/include/reactos/wine/unicode.h
+++ b/reactos/include/reactos/wine/unicode.h
@@ -2,6 +2,8 @@
#define _WINE_UNICODE_H
#include
+#include
+#include
#include
#include
@@ -53,12 +55,6 @@
#endif
#endif /* defined __VALIST */
-int __cdecl _wtoi (const wchar_t *);
-long __cdecl _wtol (const wchar_t *);
-int __cdecl swprintf (wchar_t*, const wchar_t*, ...);
-int __cdecl _snwprintf (wchar_t*, size_t, const wchar_t*, ...);
-int __cdecl _vsnwprintf (wchar_t*, size_t, const wchar_t*, __VALIST);
-
static __inline WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept )
{
for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)str;
diff --git a/reactos/lib/3rdparty/adns/adns.rbuild b/reactos/lib/3rdparty/adns/adns.rbuild
index 7a0ce2d4c14..700cf8ae1e1 100644
--- a/reactos/lib/3rdparty/adns/adns.rbuild
+++ b/reactos/lib/3rdparty/adns/adns.rbuild
@@ -1,6 +1,6 @@
-
+
src
adns_win32
diff --git a/reactos/lib/3rdparty/bzip2/bzip2.rbuild b/reactos/lib/3rdparty/bzip2/bzip2.rbuild
index e5e172cd2a6..6619537a2ad 100644
--- a/reactos/lib/3rdparty/bzip2/bzip2.rbuild
+++ b/reactos/lib/3rdparty/bzip2/bzip2.rbuild
@@ -1,7 +1,7 @@
-
+
ntoskrnl
diff --git a/reactos/lib/3rdparty/bzip2/unbzip2.def b/reactos/lib/3rdparty/bzip2/unbzip2.def
deleted file mode 100644
index 181a120518a..00000000000
--- a/reactos/lib/3rdparty/bzip2/unbzip2.def
+++ /dev/null
@@ -1,4 +0,0 @@
-LIBRARY unbzip2.dll
-
-EXPORTS
-BZ2_bzBuffToBuffDecompress@24
diff --git a/reactos/lib/3rdparty/bzip2/unbzip2.spec b/reactos/lib/3rdparty/bzip2/unbzip2.spec
new file mode 100644
index 00000000000..68d5d870a4b
--- /dev/null
+++ b/reactos/lib/3rdparty/bzip2/unbzip2.spec
@@ -0,0 +1 @@
+ @ stdcall BZ2_bzBuffToBuffDecompress(str ptr str long long long)
diff --git a/reactos/lib/3rdparty/libxml2/libxml2.rbuild b/reactos/lib/3rdparty/libxml2/libxml2.rbuild
index 327c3e6acc3..75649a6f306 100644
--- a/reactos/lib/3rdparty/libxml2/libxml2.rbuild
+++ b/reactos/lib/3rdparty/libxml2/libxml2.rbuild
@@ -1,6 +1,6 @@
-
+
diff --git a/reactos/lib/3rdparty/mingw/crtexe.c b/reactos/lib/3rdparty/mingw/crtexe.c
index 6b56ff322b8..79eaf40c416 100644
--- a/reactos/lib/3rdparty/mingw/crtexe.c
+++ b/reactos/lib/3rdparty/mingw/crtexe.c
@@ -136,7 +136,7 @@ int WinMainCRTStartup (void)
#endif
{
mingw_app_type = 1;
- __security_init_cookie ();
+ //__security_init_cookie ();
return __mingw_CRTStartup ();
}
@@ -147,7 +147,7 @@ int mainCRTStartup (void)
#endif
{
mingw_app_type = 0;
- __security_init_cookie ();
+ //__security_init_cookie ();
return __mingw_CRTStartup ();
}
diff --git a/reactos/lib/3rdparty/mingw/gccmain.c b/reactos/lib/3rdparty/mingw/gccmain.c
index d46e99de72a..a7c8df24d3c 100644
--- a/reactos/lib/3rdparty/mingw/gccmain.c
+++ b/reactos/lib/3rdparty/mingw/gccmain.c
@@ -6,7 +6,7 @@ typedef void (*func_ptr) (void);
extern func_ptr __CTOR_LIST__[];
extern func_ptr __DTOR_LIST__[];
-static HMODULE hMsvcrt = NULL;
+//static HMODULE hMsvcrt = NULL;
typedef void __cdecl flongjmp(jmp_buf _Buf,int _Value);
@@ -22,11 +22,11 @@ __do_global_dtors (void)
(*(p)) ();
p++;
}
- if (hMsvcrt)
- {
- FreeLibrary (hMsvcrt);
- hMsvcrt = NULL;
- }
+ //if (hMsvcrt)
+ // {
+ // FreeLibrary (hMsvcrt);
+ // hMsvcrt = NULL;
+ // }
}
void
@@ -35,10 +35,10 @@ __do_global_ctors (void)
unsigned long nptrs = (unsigned long) (ptrdiff_t) __CTOR_LIST__[0];
unsigned long i;
- if (!hMsvcrt) {
- hMsvcrt = LoadLibrary ("msvcrt.dll");
- fctMsvcrtLongJmp = (flongjmp *) GetProcAddress( hMsvcrt, "longjmp");
- }
+ //if (!hMsvcrt) {
+ // hMsvcrt = LoadLibrary ("msvcrt.dll");
+ // fctMsvcrtLongJmp = (flongjmp *) GetProcAddress( hMsvcrt, "longjmp");
+ //}
if (nptrs == (unsigned long) -1)
{
diff --git a/reactos/lib/3rdparty/mingw/mingw.rbuild b/reactos/lib/3rdparty/mingw/mingw.rbuild
index 1ae99126f67..ae38d109b96 100644
--- a/reactos/lib/3rdparty/mingw/mingw.rbuild
+++ b/reactos/lib/3rdparty/mingw/mingw.rbuild
@@ -1,7 +1,7 @@
-
+
include
_newmode.c
@@ -17,7 +17,7 @@
dllmain.c
gccmain.c
getopt.c
- gs_support.c
+
merr.c
mingw_helpers.c
natstart.c
@@ -29,19 +29,18 @@
xthdloc.c
xtxtmode.c
-
+
include
crt0_c.c
crtexe.c
-
+
include
crt0_w.c
crtexe.c
-
-
+
include
dllentry.c
dllmain.c
diff --git a/reactos/lib/drivers/chew/workqueue.c b/reactos/lib/drivers/chew/workqueue.c
index e25ce324c51..c0d5870dc7c 100644
--- a/reactos/lib/drivers/chew/workqueue.c
+++ b/reactos/lib/drivers/chew/workqueue.c
@@ -101,6 +101,7 @@ BOOLEAN ChewCreate
VOID ChewRemove( PVOID Item ) {
PWORK_ITEM WorkItem = Item;
+ RemoveEntryList( &WorkItem->Entry );
IoFreeWorkItem( WorkItem->WorkItem );
ExFreePool( WorkItem );
}
diff --git a/reactos/lib/drivers/ip/ip.rbuild b/reactos/lib/drivers/ip/ip.rbuild
index ac51d806498..d6ee690692a 100644
--- a/reactos/lib/drivers/ip/ip.rbuild
+++ b/reactos/lib/drivers/ip/ip.rbuild
@@ -1,6 +1,6 @@
-
+
include
include
diff --git a/reactos/lib/drivers/ip/network/icmp.c b/reactos/lib/drivers/ip/network/icmp.c
index 3eeb98cb0b1..eda6ccb6a93 100644
--- a/reactos/lib/drivers/ip/network/icmp.c
+++ b/reactos/lib/drivers/ip/network/icmp.c
@@ -181,6 +181,7 @@ VOID ICMPTransmit(
*/
{
PNEIGHBOR_CACHE_ENTRY NCE;
+ NTSTATUS Status;
TI_DbgPrint(DEBUG_ICMP, ("Called.\n"));
@@ -191,7 +192,11 @@ VOID ICMPTransmit(
/* Get a route to the destination address */
if ((NCE = RouteGetRouteToDestination(&IPPacket->DstAddr))) {
/* Send the packet */
- IPSendDatagram(IPPacket, NCE, Complete, Context);
+ Status = IPSendDatagram(IPPacket, NCE, Complete, Context);
+ if (!NT_SUCCESS(Status))
+ {
+ Complete(Context, IPPacket->NdisPacket, Status);
+ }
} else {
/* No route to destination (or no free resources) */
TI_DbgPrint(DEBUG_ICMP, ("No route to destination address 0x%X.\n",
diff --git a/reactos/lib/drivers/ip/network/ip.c b/reactos/lib/drivers/ip/network/ip.c
index d49f15da0a6..2ea6796becc 100644
--- a/reactos/lib/drivers/ip/network/ip.c
+++ b/reactos/lib/drivers/ip/network/ip.c
@@ -150,12 +150,17 @@ VOID IPDispatchProtocol(
Protocol = 0;
}
- /* Call the appropriate protocol handler */
- (*ProtocolTable[Protocol])(Interface, IPPacket);
- /* Special case for ICMP -- ICMP can be caught by a SOCK_RAW but also
- * must be handled here. */
- if( Protocol == IPPROTO_ICMP )
- ICMPReceive( Interface, IPPacket );
+ if (Protocol < IP_PROTOCOL_TABLE_SIZE &&
+ Protocol >= 0)
+ {
+ /* Call the appropriate protocol handler */
+ (*ProtocolTable[Protocol])(Interface, IPPacket);
+
+ /* Special case for ICMP -- ICMP can be caught by a SOCK_RAW but also
+ * must be handled here. */
+ if( Protocol == IPPROTO_ICMP )
+ ICMPReceive( Interface, IPPacket );
+ }
}
diff --git a/reactos/lib/drivers/ip/network/loopback.c b/reactos/lib/drivers/ip/network/loopback.c
index cd142b12a74..acb227ddef5 100644
--- a/reactos/lib/drivers/ip/network/loopback.c
+++ b/reactos/lib/drivers/ip/network/loopback.c
@@ -196,6 +196,7 @@ NDIS_STATUS LoopRegisterAdapter(
AddrInitIPv4(&Loopback->Unicast, LOOPBACK_ADDRESS_IPv4);
AddrInitIPv4(&Loopback->Netmask, LOOPBACK_ADDRMASK_IPv4);
+ AddrInitIPv4(&Loopback->Broadcast, LOOPBACK_BCASTADDR_IPv4);
IPRegisterInterface(Loopback);
diff --git a/reactos/lib/drivers/ip/network/neighbor.c b/reactos/lib/drivers/ip/network/neighbor.c
index e9f13ffc41f..3e87ee55698 100644
--- a/reactos/lib/drivers/ip/network/neighbor.c
+++ b/reactos/lib/drivers/ip/network/neighbor.c
@@ -28,13 +28,20 @@ VOID NBCompleteSend( PVOID Context,
VOID NBSendPackets( PNEIGHBOR_CACHE_ENTRY NCE ) {
PLIST_ENTRY PacketEntry;
PNEIGHBOR_PACKET Packet;
+ UINT HashValue;
if(!(NCE->State & NUD_CONNECTED))
return;
+ HashValue = *(PULONG)(&NCE->Address.Address);
+ HashValue ^= HashValue >> 16;
+ HashValue ^= HashValue >> 8;
+ HashValue ^= HashValue >> 4;
+ HashValue &= NB_HASHMASK;
+
/* Send any waiting packets */
PacketEntry = ExInterlockedRemoveHeadList(&NCE->PacketQueue,
- &NCE->Table->Lock);
+ &NeighborCache[HashValue].Lock);
if( PacketEntry != NULL ) {
Packet = CONTAINING_RECORD( PacketEntry, NEIGHBOR_PACKET, Next );
@@ -333,15 +340,22 @@ VOID NBUpdateNeighbor(
*/
{
KIRQL OldIrql;
+ UINT HashValue;
TI_DbgPrint(DEBUG_NCACHE, ("Called. NCE (0x%X) LinkAddress (0x%X) State (0x%X).\n", NCE, LinkAddress, State));
- TcpipAcquireSpinLock(&NCE->Table->Lock, &OldIrql);
+ HashValue = *(PULONG)(&NCE->Address.Address);
+ HashValue ^= HashValue >> 16;
+ HashValue ^= HashValue >> 8;
+ HashValue ^= HashValue >> 4;
+ HashValue &= NB_HASHMASK;
+
+ TcpipAcquireSpinLock(&NeighborCache[HashValue].Lock, &OldIrql);
RtlCopyMemory(NCE->LinkAddress, LinkAddress, NCE->LinkAddressLength);
NCE->State = State;
- TcpipReleaseSpinLock(&NCE->Table->Lock, OldIrql);
+ TcpipReleaseSpinLock(&NeighborCache[HashValue].Lock, OldIrql);
if( NCE->State & NUD_CONNECTED )
NBSendPackets( NCE );
@@ -444,9 +458,9 @@ BOOLEAN NBQueuePacket(
* TRUE if the packet was successfully queued, FALSE if not
*/
{
- PKSPIN_LOCK Lock;
KIRQL OldIrql;
PNEIGHBOR_PACKET Packet;
+ UINT HashValue;
TI_DbgPrint
(DEBUG_NCACHE,
@@ -457,16 +471,20 @@ BOOLEAN NBQueuePacket(
/* FIXME: Should we limit the number of queued packets? */
- Lock = &NCE->Table->Lock;
+ HashValue = *(PULONG)(&NCE->Address.Address);
+ HashValue ^= HashValue >> 16;
+ HashValue ^= HashValue >> 8;
+ HashValue ^= HashValue >> 4;
+ HashValue &= NB_HASHMASK;
- TcpipAcquireSpinLock(Lock, &OldIrql);
+ TcpipAcquireSpinLock(&NeighborCache[HashValue].Lock, &OldIrql);
Packet->Complete = PacketComplete;
Packet->Context = PacketContext;
Packet->Packet = NdisPacket;
InsertTailList( &NCE->PacketQueue, &Packet->Next );
- TcpipReleaseSpinLock(Lock, OldIrql);
+ TcpipReleaseSpinLock(&NeighborCache[HashValue].Lock, OldIrql);
if( NCE->State & NUD_CONNECTED )
NBSendPackets( NCE );
diff --git a/reactos/lib/drivers/ip/transport/tcp/accept.c b/reactos/lib/drivers/ip/transport/tcp/accept.c
index 2132b17f6a1..b588b7db1df 100644
--- a/reactos/lib/drivers/ip/transport/tcp/accept.c
+++ b/reactos/lib/drivers/ip/transport/tcp/accept.c
@@ -112,13 +112,14 @@ VOID TCPAbortListenForSocket( PCONNECTION_ENDPOINT Listener,
ListEntry = Listener->ListenRequest.Flink;
while ( ListEntry != &Listener->ListenRequest ) {
Bucket = CONTAINING_RECORD(ListEntry, TDI_BUCKET, Entry);
- ListEntry = ListEntry->Flink;
if( Bucket->AssociatedEndpoint == Connection ) {
- RemoveEntryList( ListEntry->Blink );
+ RemoveEntryList( &Bucket->Entry );
ExFreePool( Bucket );
break;
}
+
+ ListEntry = ListEntry->Flink;
}
TcpipRecursiveMutexLeave( &TCPLock );
diff --git a/reactos/lib/drivers/ip/transport/tcp/tcp.c b/reactos/lib/drivers/ip/transport/tcp/tcp.c
index bdf7fd53a0a..5579813ba21 100644
--- a/reactos/lib/drivers/ip/transport/tcp/tcp.c
+++ b/reactos/lib/drivers/ip/transport/tcp/tcp.c
@@ -36,7 +36,6 @@ static VOID HandleSignalledConnection( PCONNECTION_ENDPOINT Connection,
/* Things that can happen when we try the initial connection */
if( NewState & SEL_CONNECT ) {
while( !IsListEmpty( &Connection->ConnectRequest ) ) {
- Connection->State |= NewState;
Entry = RemoveHeadList( &Connection->ConnectRequest );
TI_DbgPrint(DEBUG_TCP, ("Connect Event\n"));
@@ -283,8 +282,7 @@ PCONNECTION_ENDPOINT TCPAllocateConnectionEndpoint( PVOID ClientContext ) {
}
VOID TCPFreeConnectionEndpoint( PCONNECTION_ENDPOINT Connection ) {
- TI_DbgPrint(MAX_TRACE,("FIXME: Cancel all pending requests\n"));
- /* XXX Cancel all pending requests */
+ TCPClose( Connection );
ExFreePool( Connection );
}
@@ -839,7 +837,7 @@ VOID TCPRemoveIRP( PCONNECTION_ENDPOINT Endpoint, PIRP Irp ) {
TcpipAcquireSpinLock( &Endpoint->Lock, &OldIrql );
- for( i = 0; i < sizeof( ListHead ) / sizeof( ListHead[0] ); i++ ) {
+ for( i = 0; i < 4; i++ ) {
for( Entry = ListHead[i]->Flink;
Entry != ListHead[i];
Entry = Entry->Flink ) {
diff --git a/reactos/lib/rtl/i386/except.c b/reactos/lib/rtl/i386/except.c
index dc56aed3ec0..0b5d151929e 100644
--- a/reactos/lib/rtl/i386/except.c
+++ b/reactos/lib/rtl/i386/except.c
@@ -74,6 +74,17 @@ RtlDispatchException(IN PEXCEPTION_RECORD ExceptionRecord,
ULONG_PTR StackLow, StackHigh;
ULONG_PTR RegistrationFrameEnd;
+ /* Perform vectored exception handling if we are in user mode */
+ if (RtlpGetMode() != KernelMode)
+ {
+ /* Call any registered vectored handlers */
+ if (RtlCallVectoredExceptionHandlers(ExceptionRecord, Context))
+ {
+ /* Exception handled, continue execution */
+ return TRUE;
+ }
+ }
+
/* Get the current stack limits and registration frame */
RtlpGetStackLimits(&StackLow, &StackHigh);
RegistrationFrame = RtlpGetExceptionList();
diff --git a/reactos/lib/rtl/nls.c b/reactos/lib/rtl/nls.c
index 078745bc83e..6bed84863ee 100644
--- a/reactos/lib/rtl/nls.c
+++ b/reactos/lib/rtl/nls.c
@@ -366,7 +366,7 @@ RtlOemToUnicodeN (PWCHAR UnicodeString,
for (i = 0; i < Size; i++)
{
- *UnicodeString = NlsOemToUnicodeTable[(INT)*OemString];
+ *UnicodeString = NlsOemToUnicodeTable[(UCHAR)*OemString];
UnicodeString++;
OemString++;
}
diff --git a/reactos/lib/rtl/rtlp.h b/reactos/lib/rtl/rtlp.h
index 8ca48e890c3..36902564a3c 100644
--- a/reactos/lib/rtl/rtlp.h
+++ b/reactos/lib/rtl/rtlp.h
@@ -39,6 +39,13 @@ VOID
NTAPI
RtlpSetExceptionList(PEXCEPTION_REGISTRATION_RECORD NewExceptionList);
+BOOLEAN
+NTAPI
+RtlCallVectoredExceptionHandlers(
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT Context
+);
+
typedef struct _DISPATCHER_CONTEXT
{
PEXCEPTION_REGISTRATION_RECORD RegistrationPointer;
diff --git a/reactos/lib/rtl/vectoreh.c b/reactos/lib/rtl/vectoreh.c
index d1a39138622..52d6667cce6 100644
--- a/reactos/lib/rtl/vectoreh.c
+++ b/reactos/lib/rtl/vectoreh.c
@@ -28,9 +28,10 @@ typedef struct _RTL_VECTORED_EXCEPTION_HANDLER
/* FUNCTIONS ***************************************************************/
-EXCEPTION_DISPOSITION NTAPI
-RtlpExecuteVectoredExceptionHandlers(IN PEXCEPTION_RECORD ExceptionRecord,
- IN PCONTEXT Context)
+BOOLEAN
+NTAPI
+RtlCallVectoredExceptionHandlers(IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT Context)
{
PLIST_ENTRY CurrentEntry;
PRTL_VECTORED_EXCEPTION_HANDLER veh;
@@ -55,7 +56,7 @@ RtlpExecuteVectoredExceptionHandlers(IN PEXCEPTION_RECORD ExceptionRecord,
if(VectoredHandler(&ExceptionInfo) == EXCEPTION_CONTINUE_EXECUTION)
{
- return ExceptionContinueSearch;
+ return TRUE;
}
RtlEnterCriticalSection(&RtlpVectoredExceptionLock);
@@ -63,7 +64,7 @@ RtlpExecuteVectoredExceptionHandlers(IN PEXCEPTION_RECORD ExceptionRecord,
RtlLeaveCriticalSection(&RtlpVectoredExceptionLock);
}
- return ExceptionContinueExecution;
+ return FALSE;
}
VOID
diff --git a/reactos/lib/sdk/crt/conio/cprintf.c b/reactos/lib/sdk/crt/conio/cprintf.c
index b32485db7f6..5c6295c15a1 100644
--- a/reactos/lib/sdk/crt/conio/cprintf.c
+++ b/reactos/lib/sdk/crt/conio/cprintf.c
@@ -18,6 +18,8 @@ _cprintf(const char *fmt, ...)
int written, resize = sizeof(buf), retval;
va_list valist;
+ va_start( valist, fmt );
+
while ((written = _vsnprintf( mem, resize, fmt, valist )) == -1 ||
written > resize)
{
@@ -26,9 +28,11 @@ _cprintf(const char *fmt, ...)
free (mem);
if (!(mem = (char *)malloc(resize)))
return EOF;
+
+ va_end ( valist );
va_start( valist, fmt );
}
- va_end(valist);
+ va_end ( valist );
retval = _cputs( mem );
if (mem != buf)
free (mem);
diff --git a/reactos/lib/sdk/crt/include/internal/file.h b/reactos/lib/sdk/crt/include/internal/file.h
index 9a5c2440f3f..86915b5f149 100644
--- a/reactos/lib/sdk/crt/include/internal/file.h
+++ b/reactos/lib/sdk/crt/include/internal/file.h
@@ -127,10 +127,10 @@ int access_dirW(const wchar_t *_path);
#define MB_CUR_MAX __mb_cur_max
-int _isnanl(long double x);
-int _isinfl(long double x);
-int _isnan(double x);
-int _isinf(double x);
+//int _isnanl(long double x);
+//int _isinfl(long double x);
+//int _isnan(double x);
+//int _isinf(double x);
/* Flags for the iobuf structure (for reference) */
#if 0
@@ -172,10 +172,9 @@ int _isinf(double x);
wint_t _filwbuf(FILE *f);
-#if __MINGW32_MAJOR_VERSION < 3 || __MINGW32_MINOR_VERSION < 2
- int __cdecl _filbuf (FILE*);
- int __cdecl _flsbuf (int, FILE*);
-#endif
+//#if __MINGW32_MAJOR_VERSION < 3 || __MINGW32_MINOR_VERSION < 2
+// int __cdecl _filbuf (FILE*);
+// int __cdecl _flsbuf (int, FILE*);
+//#endif
#endif /* __dj_include_libc_file_h__ */
-
diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c
index 7367acb9627..4f3d036c70d 100644
--- a/reactos/lib/sdk/crt/stdio/file.c
+++ b/reactos/lib/sdk/crt/stdio/file.c
@@ -116,20 +116,20 @@ static CRITICAL_SECTION FILE_cs;
#define LOCK_FILES() do { EnterCriticalSection(&FILE_cs); } while (0)
#define UNLOCK_FILES() do { LeaveCriticalSection(&FILE_cs); } while (0)
-void stat64_to_stati64(const struct __stat64 *buf64, struct _stati64 *buf)
-{
- buf->st_dev = buf64->st_dev;
- buf->st_ino = buf64->st_ino;
- buf->st_mode = buf64->st_mode;
- buf->st_nlink = buf64->st_nlink;
- buf->st_uid = buf64->st_uid;
- buf->st_gid = buf64->st_gid;
- buf->st_rdev = buf64->st_rdev;
- buf->st_size = buf64->st_size;
- buf->st_atime = buf64->st_atime;
- buf->st_mtime = buf64->st_mtime;
- buf->st_ctime = buf64->st_ctime;
-}
+//void stat64_to_stati64(const struct __stat64 *buf64, struct _stati64 *buf)
+//{
+// buf->st_dev = buf64->st_dev;
+// buf->st_ino = buf64->st_ino;
+// buf->st_mode = buf64->st_mode;
+// buf->st_nlink = buf64->st_nlink;
+// buf->st_uid = buf64->st_uid;
+// buf->st_gid = buf64->st_gid;
+// buf->st_rdev = buf64->st_rdev;
+// buf->st_size = buf64->st_size;
+// buf->st_atime = buf64->st_atime;
+// buf->st_mtime = buf64->st_mtime;
+// buf->st_ctime = buf64->st_ctime;
+//}
static inline BOOL is_valid_fd(int fd)
{
diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE
index 9f2f26e04d3..5d8d89d338e 100644
--- a/reactos/media/doc/README.WINE
+++ b/reactos/media/doc/README.WINE
@@ -21,12 +21,12 @@ When porting a new DLL from Wine to ReactOS, please do the following steps
The following build tools are shared with Wine.
-reactos/tools/unicode # Synced to Wine-0_9_5
-reactos/tools/wpp # Synced to Wine-0_9_5
-reactos/tools/winebuild # Synced to Wine-20071217
-reactos/tools/wmc # Synced to Wine-20071201
-reactos/tools/wrc # Synced to Wine-0_9_53
-reactos/tools/widl # Synced to Wine-0_9_59
+reactos/tools/unicode # Synced to Wine-20081105 (~Wine-1.1.7)
+reactos/tools/wpp # Synced to Wine-20081105 (~Wine-1.1.7)
+reactos/tools/winebuild # Synced to Wine-20081105 (~Wine-1.1.7)
+reactos/tools/wmc # Synced to Wine-20081105 (~Wine-1.1.7)
+reactos/tools/wrc # Synced to Wine-20081105 (~Wine-1.1.7)
+reactos/tools/widl # Synced to Wine-0_9_60
The following libraries are shared with Wine.
diff --git a/reactos/media/graphics/dialog-question.svg b/reactos/media/graphics/dialog-question.svg
new file mode 100644
index 00000000000..133dfe123cf
--- /dev/null
+++ b/reactos/media/graphics/dialog-question.svg
@@ -0,0 +1,402 @@
+
+
+
diff --git a/reactos/media/graphics/system-shutdown.svg b/reactos/media/graphics/system-shutdown.svg
new file mode 100644
index 00000000000..5f5b7e0bfb3
--- /dev/null
+++ b/reactos/media/graphics/system-shutdown.svg
@@ -0,0 +1,335 @@
+
+
+
diff --git a/reactos/ntoskrnl/amd64stubs.c b/reactos/ntoskrnl/amd64stubs.c
index b4a6d7de516..22e735d6fee 100644
--- a/reactos/ntoskrnl/amd64stubs.c
+++ b/reactos/ntoskrnl/amd64stubs.c
@@ -82,8 +82,6 @@ STUB(ExAcquireRundownProtectionCacheAware)
STUB(ExAcquireRundownProtectionCacheAwareEx)
STUB(ExAcquireRundownProtectionEx)
STUB(ExAllocateFromPagedLookasideList)
-STUB(ExEnterCriticalRegionAndAcquireResourceShared)
-STUB(ExEnterCriticalRegionAndAcquireSharedWaitForExclusive)
STUB(ExFreeToPagedLookasideList)
STUB(ExInitializeRundownProtection)
STUB(ExInterlockedAddLargeInteger)
@@ -124,7 +122,6 @@ STUB(InitializeSListHead)
STUB(IoFileObjectType)
STUB(IoForwardAndCatchIrp)
STUB(IoIs32bitProcess)
-STUB(IoTranslateBusAddress)
STUB(IoWMIDeviceObjectToProviderId)
STUB(KdDebuggerEnabled)
STUB(KdDebuggerNotPresent)
@@ -167,11 +164,6 @@ STUB(PfxFindPrefix)
STUB(PfxInitialize)
STUB(PfxInsertPrefix)
STUB(PfxRemovePrefix)
-STUB(PoCancelDeviceNotify)
-STUB(PoRegisterDeviceNotify)
-STUB(PoRequestShutdownEvent)
-STUB(PoSetHiberRange)
-STUB(PoShutdownBugCheck)
STUB(PsGetCurrentProcess)
STUB(PsGetCurrentProcessWow64Process)
STUB(PsGetCurrentThread)
diff --git a/reactos/ntoskrnl/ex/resource.c b/reactos/ntoskrnl/ex/resource.c
index fe054e56ec2..3f47ad0d7eb 100644
--- a/reactos/ntoskrnl/ex/resource.c
+++ b/reactos/ntoskrnl/ex/resource.c
@@ -2198,6 +2198,66 @@ ExEnterCriticalRegionAndAcquireResourceExclusive(IN PERESOURCE Resource)
return KeGetCurrentThread()->Win32Thread;
}
+/*++
+ * @name ExEnterCriticalRegionAndAcquireResourceShared
+ * @implemented NT5.2
+ *
+ * The ExEnterCriticalRegionAndAcquireResourceShared routine
+ * enters a critical region and then acquires a resource shared.
+ *
+ * @param Resource
+ * Pointer to the resource to acquire.
+ *
+ * @return Pointer to the Win32K thread pointer of the current thread.
+ *
+ * @remarks See ExAcquireResourceSharedLite.
+ *
+ *--*/
+PVOID
+NTAPI
+ExEnterCriticalRegionAndAcquireResourceShared(IN PERESOURCE Resource)
+{
+ /* Enter critical region */
+ KeEnterCriticalRegion();
+
+ /* Acquire the resource */
+ ExAcquireResourceSharedLite(Resource, TRUE);
+
+ /* Return the Win32 Thread */
+ return KeGetCurrentThread()->Win32Thread;
+}
+
+/*++
+ * @name ExEnterCriticalRegionAndAcquireSharedWaitForExclusive
+ * @implemented NT5.2
+ *
+ * The ExEnterCriticalRegionAndAcquireSharedWaitForExclusive routine
+ * enters a critical region and then acquires a resource shared if
+ * shared access can be granted and there are no exclusive waiters.
+ * It then acquires the resource exclusively.
+ *
+ * @param Resource
+ * Pointer to the resource to acquire.
+ *
+ * @return Pointer to the Win32K thread pointer of the current thread.
+ *
+ * @remarks See ExAcquireSharedWaitForExclusive.
+ *
+ *--*/
+PVOID
+NTAPI
+ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(IN PERESOURCE Resource)
+{
+ /* Enter critical region */
+ KeEnterCriticalRegion();
+
+ /* Acquire the resource */
+ ExAcquireSharedWaitForExclusive(Resource, TRUE);
+
+ /* Return the Win32 Thread */
+ return KeGetCurrentThread()->Win32Thread;
+}
+
/*++
* @name ExReleaseResourceAndLeaveCriticalRegion
* @implemented NT5.1
@@ -2223,6 +2283,3 @@ ExReleaseResourceAndLeaveCriticalRegion(IN PERESOURCE Resource)
/* Leave critical region */
KeLeaveCriticalRegion();
}
-
-/* EOF */
-
diff --git a/reactos/ntoskrnl/ex/shutdown.c b/reactos/ntoskrnl/ex/shutdown.c
index db8a92da48b..65dfed1039a 100644
--- a/reactos/ntoskrnl/ex/shutdown.c
+++ b/reactos/ntoskrnl/ex/shutdown.c
@@ -190,7 +190,7 @@ ShutdownThreadMain(PVOID Context)
KeInitializeDpc(Dpc, KiHaltProcessorDpcRoutine, (PVOID)Dpc);
KeSetTargetProcessorDpc(Dpc, i);
KeInsertQueueDpc(Dpc, NULL, NULL);
- KiIpiSendRequest(1 << i, IPI_DPC);
+ KiIpiSend(1 << i, IPI_DPC);
}
}
KeLowerIrql(OldIrql);
diff --git a/reactos/ntoskrnl/include/internal/io.h b/reactos/ntoskrnl/include/internal/io.h
index 3f18138a968..a4d355d2cd0 100644
--- a/reactos/ntoskrnl/include/internal/io.h
+++ b/reactos/ntoskrnl/include/internal/io.h
@@ -80,12 +80,6 @@
//
#define RD_SYMLINK_CREATE_FAILED 5
-//
-// Packet Types when piggybacking on the IRP Overlay
-//
-#define IrpCompletionPacket 0x1
-#define IrpMiniCompletionPacket 0x2
-
//
// We can call the Ob Inlined API, it's the same thing
//
@@ -248,11 +242,21 @@ typedef enum _IOP_TRANSFER_TYPE
IopOtherTransfer
} IOP_TRANSFER_TYPE, *PIOP_TRANSFER_TYPE;
+//
+// Packet Types when piggybacking on the IRP Overlay
+//
+typedef enum _COMPLETION_PACKET_TYPE
+ {
+ IopCompletionPacketIrp,
+ IopCompletionPacketMini,
+ IopCompletionPacketQuota
+} COMPLETION_PACKET_TYPE, *PCOMPLETION_PACKET_TYPE;
+
//
// Special version of the IRP Overlay used to optimize I/O completion
// by not using up a separate structure.
//
-typedef struct _IO_COMPLETION_PACKET
+typedef struct _IOP_MINI_COMPLETION_PACKET
{
struct
{
@@ -263,10 +267,11 @@ typedef struct _IO_COMPLETION_PACKET
ULONG PacketType;
};
};
- PVOID Key;
- PVOID Context;
- IO_STATUS_BLOCK IoStatus;
-} IO_COMPLETION_PACKET, *PIO_COMPLETION_PACKET;
+ PVOID KeyContext;
+ PVOID ApcContext;
+ NTSTATUS IoStatus;
+ ULONG_PTR IoStatusInformation;
+} IOP_MINI_COMPLETION_PACKET, *PIOP_MINI_COMPLETION_PACKET;
//
// I/O Completion Context for IoSetIoCompletionRoutineEx
@@ -1036,7 +1041,7 @@ IopStartRamdisk(
extern POBJECT_TYPE IoCompletionType;
extern PDEVICE_NODE IopRootDeviceNode;
extern ULONG IopTraceLevel;
-extern NPAGED_LOOKASIDE_LIST IopMdlLookasideList;
+extern GENERAL_LOOKASIDE IopMdlLookasideList;
extern GENERIC_MAPPING IopCompletionMapping;
extern GENERIC_MAPPING IopFileMapping;
extern POBJECT_TYPE _IoFileObjectType;
diff --git a/reactos/ntoskrnl/include/internal/ke.h b/reactos/ntoskrnl/include/internal/ke.h
index 642dcbf12a2..49f754b212d 100644
--- a/reactos/ntoskrnl/include/internal/ke.h
+++ b/reactos/ntoskrnl/include/internal/ke.h
@@ -286,6 +286,13 @@ KiInsertTimerTable(
IN ULONG Hand
);
+VOID
+FASTCALL
+KiTimerListExpire(
+ IN PLIST_ENTRY ExpiredListHead,
+ IN KIRQL OldIrql
+);
+
BOOLEAN
FASTCALL
KiInsertTreeTimer(
@@ -327,12 +334,35 @@ KeWaitForGate(
/* ipi.c ********************************************************************/
VOID
-NTAPI
-KiIpiSendRequest(
+FASTCALL
+KiIpiSend(
KAFFINITY TargetSet,
ULONG IpiRequest
);
+VOID
+NTAPI
+KiIpiSendPacket(
+ IN KAFFINITY TargetProcessors,
+ IN PKIPI_WORKER WorkerFunction,
+ IN PKIPI_BROADCAST_WORKER BroadcastFunction,
+ IN ULONG_PTR Context,
+ IN PULONG Count
+);
+
+VOID
+FASTCALL
+KiIpiSignalPacketDone(
+ IN PKIPI_CONTEXT PacketContext
+);
+
+VOID
+FASTCALL
+KiIpiSignalPacketDoneAndStall(
+ IN PKIPI_CONTEXT PacketContext,
+ IN volatile PULONG ReverseStall
+);
+
/* next file ***************************************************************/
UCHAR
diff --git a/reactos/ntoskrnl/include/internal/ke_x.h b/reactos/ntoskrnl/include/internal/ke_x.h
index c28b1a795bc..a021c2d8d06 100644
--- a/reactos/ntoskrnl/include/internal/ke_x.h
+++ b/reactos/ntoskrnl/include/internal/ke_x.h
@@ -596,7 +596,7 @@ KiRescheduleThread(IN BOOLEAN NewThread,
if ((NewThread) && !(KeGetPcr()->Number == Cpu))
{
/* Send an IPI to request delivery */
- KiIpiSendRequest(AFFINITY_MASK(Cpu), IPI_DPC);
+ KiIpiSend(AFFINITY_MASK(Cpu), IPI_DPC);
}
}
@@ -753,7 +753,7 @@ KiRequestApcInterrupt(IN BOOLEAN NeedApc,
if (KeGetPcr()->Number != Processor)
{
/* Send an IPI to request delivery */
- KiIpiSendRequest(AFFINITY_MASK(Processor), IPI_APC);
+ KiIpiSend(AFFINITY_MASK(Processor), IPI_APC);
}
else
{
@@ -1101,6 +1101,37 @@ KiCheckAlertability(IN PKTHREAD Thread,
return STATUS_WAIT_0;
}
+//
+// Called from KiCompleteTimer, KiInsertTreeTimer, KeSetSystemTime
+// to remove timer entries
+// See Windows HPI blog for more information.
+VOID
+FORCEINLINE
+KiRemoveEntryTimer(IN PKTIMER Timer)
+{
+ ULONG Hand;
+ PKTIMER_TABLE_ENTRY TableEntry;
+
+ /* Remove the timer from the timer list and check if it's empty */
+ Hand = Timer->Header.Hand;
+ if (RemoveEntryList(&Timer->TimerListEntry))
+ {
+ /* Get the respective timer table entry */
+ TableEntry = &KiTimerTableListHead[Hand];
+ if (&TableEntry->Entry == TableEntry->Entry.Flink)
+ {
+ /* Set the entry to an infinite absolute time */
+ TableEntry->Time.HighPart = 0xFFFFFFFF;
+ }
+ }
+
+ /* Clear the list entries on dbg builds so we can tell the timer is gone */
+#if DBG
+ Timer->TimerListEntry.Flink = NULL;
+ Timer->TimerListEntry.Blink = NULL;
+#endif
+}
+
//
// Called by Wait and Queue code to insert a timer for dispatching.
// Also called by KeSetTimerEx to insert a timer from the caller.
@@ -1129,6 +1160,57 @@ KxInsertTimer(IN PKTIMER Timer,
}
}
+//
+// Called by KeSetTimerEx and KiInsertTreeTimer to calculate Due Time
+// See the Windows HPI Blog for more information
+//
+BOOLEAN
+FORCEINLINE
+KiComputeDueTime(IN PKTIMER Timer,
+ IN LARGE_INTEGER DueTime,
+ OUT PULONG Hand)
+{
+ LARGE_INTEGER InterruptTime, SystemTime, DifferenceTime;
+
+ /* Convert to relative time if needed */
+ Timer->Header.Absolute = FALSE;
+ if (DueTime.HighPart >= 0)
+ {
+ /* Get System Time */
+ KeQuerySystemTime(&SystemTime);
+
+ /* Do the conversion */
+ DifferenceTime.QuadPart = SystemTime.QuadPart - DueTime.QuadPart;
+
+ /* Make sure it hasn't already expired */
+ Timer->Header.Absolute = TRUE;
+ if (DifferenceTime.HighPart >= 0)
+ {
+ /* Cancel everything */
+ Timer->Header.SignalState = TRUE;
+ Timer->Header.Hand = 0;
+ Timer->DueTime.QuadPart = 0;
+ *Hand = 0;
+ return FALSE;
+ }
+
+ /* Set the time as Absolute */
+ DueTime = DifferenceTime;
+ }
+
+ /* Get the Interrupt Time */
+ InterruptTime.QuadPart = KeQueryInterruptTime();
+
+ /* Recalculate due time */
+ Timer->DueTime.QuadPart = InterruptTime.QuadPart - DueTime.QuadPart;
+
+ /* Get the handle */
+ *Hand = KiComputeTimerTableIndex(Timer->DueTime.QuadPart);
+ Timer->Header.Hand = (UCHAR)*Hand;
+ Timer->Header.Inserted = TRUE;
+ return TRUE;
+}
+
//
// Called from Unlink and Queue Insert Code.
// Also called by timer code when canceling an inserted timer.
diff --git a/reactos/ntoskrnl/io/iomgr/iocomp.c b/reactos/ntoskrnl/io/iomgr/iocomp.c
index e2cee39ee14..6c762a090b7 100644
--- a/reactos/ntoskrnl/io/iomgr/iocomp.c
+++ b/reactos/ntoskrnl/io/iomgr/iocomp.c
@@ -15,7 +15,7 @@
POBJECT_TYPE IoCompletionType;
-NPAGED_LOOKASIDE_LIST IoCompletionPacketLookaside;
+GENERAL_LOOKASIDE IoCompletionPacketLookaside;
GENERIC_MAPPING IopCompletionMapping =
{
@@ -40,8 +40,7 @@ IopUnloadSafeCompletion(IN PDEVICE_OBJECT DeviceObject,
IN PVOID Context)
{
NTSTATUS Status;
- PIO_UNLOAD_SAFE_COMPLETION_CONTEXT UnsafeContext =
- (PIO_UNLOAD_SAFE_COMPLETION_CONTEXT)Context;
+ PIO_UNLOAD_SAFE_COMPLETION_CONTEXT UnsafeContext = Context;
/* Reference the device object */
ObReferenceObject(UnsafeContext->DeviceObject);
@@ -61,7 +60,7 @@ IopUnloadSafeCompletion(IN PDEVICE_OBJECT DeviceObject,
VOID
NTAPI
-IopFreeIoCompletionPacket(PIO_COMPLETION_PACKET Packet)
+IopFreeMiniPacket(PIOP_MINI_COMPLETION_PACKET Packet)
{
PKPRCB Prcb = KeGetCurrentPrcb();
PNPAGED_LOOKASIDE_LIST List;
@@ -104,7 +103,7 @@ IopDeleteIoCompletion(PVOID ObjectBody)
PLIST_ENTRY FirstEntry;
PLIST_ENTRY CurrentEntry;
PIRP Irp;
- PIO_COMPLETION_PACKET Packet;
+ PIOP_MINI_COMPLETION_PACKET Packet;
/* Rundown the Queue */
FirstEntry = KeRundownQueue(Queue);
@@ -116,14 +115,14 @@ IopDeleteIoCompletion(PVOID ObjectBody)
{
/* Get the Packet */
Packet = CONTAINING_RECORD(CurrentEntry,
- IO_COMPLETION_PACKET,
+ IOP_MINI_COMPLETION_PACKET,
ListEntry);
/* Go to next Entry */
CurrentEntry = CurrentEntry->Flink;
/* Check if it's part of an IRP, or a separate packet */
- if (Packet->PacketType == IrpCompletionPacket)
+ if (Packet->PacketType == IopCompletionPacketIrp)
{
/* Get the IRP and free it */
Irp = CONTAINING_RECORD(Packet, IRP, Tail.Overlay.ListEntry);
@@ -132,7 +131,7 @@ IopDeleteIoCompletion(PVOID ObjectBody)
else
{
/* Use common routine */
- IopFreeIoCompletionPacket(Packet);
+ IopFreeMiniPacket(Packet);
}
} while (FirstEntry != CurrentEntry);
}
@@ -155,7 +154,7 @@ IoSetIoCompletion(IN PVOID IoCompletion,
PKQUEUE Queue = (PKQUEUE)IoCompletion;
PNPAGED_LOOKASIDE_LIST List;
PKPRCB Prcb = KeGetCurrentPrcb();
- PIO_COMPLETION_PACKET Packet;
+ PIOP_MINI_COMPLETION_PACKET Packet;
/* Get the P List */
List = (PNPAGED_LOOKASIDE_LIST)Prcb->
@@ -194,11 +193,11 @@ IoSetIoCompletion(IN PVOID IoCompletion,
if (Packet)
{
/* Set up the Packet */
- Packet->PacketType = IrpMiniCompletionPacket;
- Packet->Key = KeyContext;
- Packet->Context = ApcContext;
- Packet->IoStatus.Status = IoStatus;
- Packet->IoStatus.Information = IoStatusInformation;
+ Packet->PacketType = IopCompletionPacketMini;
+ Packet->KeyContext = KeyContext;
+ Packet->ApcContext = ApcContext;
+ Packet->IoStatus = IoStatus;
+ Packet->IoStatusInformation = IoStatusInformation;
/* Insert the Queue */
KeInsertQueue(Queue, &Packet->ListEntry);
@@ -424,9 +423,6 @@ NtQueryIoCompletion(IN HANDLE IoCompletionHandle,
((PIO_COMPLETION_BASIC_INFORMATION)IoCompletionInformation)->
Depth = KeReadStateQueue(Queue);
- /* Dereference the queue */
- ObDereferenceObject(Queue);
-
/* Return Result Length if needed */
if (ResultLength)
{
@@ -439,6 +435,9 @@ NtQueryIoCompletion(IN HANDLE IoCompletionHandle,
Status = _SEH_GetExceptionCode();
}
_SEH_END;
+
+ /* Dereference the queue */
+ ObDereferenceObject(Queue);
}
/* Return Status */
@@ -455,7 +454,7 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
{
LARGE_INTEGER SafeTimeout;
PKQUEUE Queue;
- PIO_COMPLETION_PACKET Packet;
+ PIOP_MINI_COMPLETION_PACKET Packet;
PLIST_ENTRY ListEntry;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status = STATUS_SUCCESS;
@@ -517,11 +516,11 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
{
/* Get the Packet Data */
Packet = CONTAINING_RECORD(ListEntry,
- IO_COMPLETION_PACKET,
+ IOP_MINI_COMPLETION_PACKET,
ListEntry);
/* Check if this is piggybacked on an IRP */
- if (Packet->PacketType == IrpCompletionPacket)
+ if (Packet->PacketType == IopCompletionPacketIrp)
{
/* Get the IRP */
Irp = CONTAINING_RECORD(ListEntry,
@@ -539,12 +538,13 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
else
{
/* Save values */
- Key = Packet->Key;
- Apc = Packet->Context;
- IoStatus = Packet->IoStatus;
+ Key = Packet->KeyContext;
+ Apc = Packet->ApcContext;
+ IoStatus.Status = Packet->IoStatus;
+ IoStatus.Information = Packet->IoStatusInformation;
/* Free the packet */
- IopFreeIoCompletionPacket(Packet);
+ IopFreeMiniPacket(Packet);
}
/* Enter SEH to write back the values */
diff --git a/reactos/ntoskrnl/io/iomgr/iofunc.c b/reactos/ntoskrnl/io/iomgr/iofunc.c
index 6c2f1b5d147..5ec01d05bfd 100644
--- a/reactos/ntoskrnl/io/iomgr/iofunc.c
+++ b/reactos/ntoskrnl/io/iomgr/iofunc.c
@@ -2070,7 +2070,7 @@ NtReadFile(IN HANDLE FileHandle,
/* Set the IRP */
Irp->Tail.Overlay.OriginalFileObject = FileObject;
Irp->Tail.Overlay.Thread = PsGetCurrentThread();
- Irp->RequestorMode = KernelMode;
+ Irp->RequestorMode = PreviousMode;
Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext;
Irp->UserIosb = IoStatusBlock;
@@ -2929,7 +2929,7 @@ NtWriteFile(IN HANDLE FileHandle,
/* Set the IRP */
Irp->Tail.Overlay.OriginalFileObject = FileObject;
Irp->Tail.Overlay.Thread = PsGetCurrentThread();
- Irp->RequestorMode = KernelMode;
+ Irp->RequestorMode = PreviousMode;
Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext;
Irp->UserIosb = IoStatusBlock;
diff --git a/reactos/ntoskrnl/io/iomgr/iomgr.c b/reactos/ntoskrnl/io/iomgr/iomgr.c
index 11c223b2a3a..0c481f5b569 100644
--- a/reactos/ntoskrnl/io/iomgr/iomgr.c
+++ b/reactos/ntoskrnl/io/iomgr/iomgr.c
@@ -49,7 +49,6 @@ GENERIC_MAPPING IopFileMapping = {
extern LIST_ENTRY ShutdownListHead;
extern LIST_ENTRY LastChanceShutdownListHead;
extern KSPIN_LOCK ShutdownListLock;
-extern NPAGED_LOOKASIDE_LIST IoCompletionPacketLookaside;
extern POBJECT_TYPE IoAdapterObjectType;
ERESOURCE IopDatabaseResource;
extern ERESOURCE FileSystemListLock;
@@ -76,9 +75,10 @@ extern KSPIN_LOCK IopTimerLock;
extern PDEVICE_OBJECT IopErrorLogObject;
-NPAGED_LOOKASIDE_LIST IoLargeIrpLookaside;
-NPAGED_LOOKASIDE_LIST IoSmallIrpLookaside;
-NPAGED_LOOKASIDE_LIST IopMdlLookasideList;
+GENERAL_LOOKASIDE IoLargeIrpLookaside;
+GENERAL_LOOKASIDE IoSmallIrpLookaside;
+GENERAL_LOOKASIDE IopMdlLookasideList;
+extern GENERAL_LOOKASIDE IoCompletionPacketLookaside;
#if defined (ALLOC_PRAGMA)
#pragma alloc_text(INIT, IoInitSystem)
@@ -94,143 +94,142 @@ IopInitLookasideLists(VOID)
ULONG LargeIrpSize, SmallIrpSize, MdlSize;
LONG i;
PKPRCB Prcb;
- PNPAGED_LOOKASIDE_LIST CurrentList = NULL;
+ PGENERAL_LOOKASIDE CurrentList = NULL;
/* Calculate the sizes */
LargeIrpSize = sizeof(IRP) + (8 * sizeof(IO_STACK_LOCATION));
SmallIrpSize = sizeof(IRP) + sizeof(IO_STACK_LOCATION);
MdlSize = sizeof(MDL) + (23 * sizeof(PFN_NUMBER));
+ /* Initialize the Lookaside List for I\O Completion */
+ ExInitializeSystemLookasideList(&IoCompletionPacketLookaside,
+ NonPagedPool,
+ sizeof(IOP_MINI_COMPLETION_PACKET),
+ IOC_TAG1,
+ 32,
+ &ExSystemLookasideListHead);
+
/* Initialize the Lookaside List for Large IRPs */
- ExInitializeNPagedLookasideList(&IoLargeIrpLookaside,
- NULL,
- NULL,
- 0,
+ ExInitializeSystemLookasideList(&IoLargeIrpLookaside,
+ NonPagedPool,
LargeIrpSize,
IO_LARGEIRP,
- 64);
+ 64,
+ &ExSystemLookasideListHead);
+
/* Initialize the Lookaside List for Small IRPs */
- ExInitializeNPagedLookasideList(&IoSmallIrpLookaside,
- NULL,
- NULL,
- 0,
+ ExInitializeSystemLookasideList(&IoSmallIrpLookaside,
+ NonPagedPool,
SmallIrpSize,
IO_SMALLIRP,
- 32);
-
- /* Initialize the Lookaside List for I\O Completion */
- ExInitializeNPagedLookasideList(&IoCompletionPacketLookaside,
- NULL,
- NULL,
- 0,
- sizeof(IO_COMPLETION_PACKET),
- IOC_TAG1,
- 32);
+ 32,
+ &ExSystemLookasideListHead);
/* Initialize the Lookaside List for MDLs */
- ExInitializeNPagedLookasideList(&IopMdlLookasideList,
- NULL,
- NULL,
- 0,
+ ExInitializeSystemLookasideList(&IopMdlLookasideList,
+ NonPagedPool,
MdlSize,
TAG_MDL,
- 128);
+ 128,
+ &ExSystemLookasideListHead);
- /* Now allocate the per-processor lists */
+ /* Allocate the global lookaside list buffer */
+ CurrentList = ExAllocatePoolWithTag(NonPagedPool,
+ 4 * KeNumberProcessors *
+ sizeof(GENERAL_LOOKASIDE),
+ TAG_IO);
+
+ /* Loop all processors */
for (i = 0; i < KeNumberProcessors; i++)
{
/* Get the PRCB for this CPU */
Prcb = KiProcessorBlock[i];
DPRINT("Setting up lookaside for CPU: %x, PRCB: %p\n", i, Prcb);
- /* Set the Large IRP List */
- Prcb->PPLookasideList[LookasideLargeIrpList].L = &IoLargeIrpLookaside.L;
- CurrentList = ExAllocatePoolWithTag(NonPagedPool,
- sizeof(NPAGED_LOOKASIDE_LIST),
- IO_LARGEIRP_CPU);
+ /* Write IRP credit limit */
+ Prcb->LookasideIrpFloat = 512 / KeNumberProcessors;
+
+ /* Set the I/O Completion List */
+ Prcb->PPLookasideList[LookasideCompletionList].L = &IoCompletionPacketLookaside;
if (CurrentList)
{
- /* Initialize the Lookaside List for Large IRPs */
- ExInitializeNPagedLookasideList(CurrentList,
- NULL,
- NULL,
- 0,
- LargeIrpSize,
- IO_LARGEIRP_CPU,
- 64);
+ /* Initialize the Lookaside List for mini-packets */
+ ExInitializeSystemLookasideList(CurrentList,
+ NonPagedPool,
+ sizeof(IOP_MINI_COMPLETION_PACKET),
+ IO_SMALLIRP_CPU,
+ 32,
+ &ExSystemLookasideListHead);
+ Prcb->PPLookasideList[LookasideCompletionList].P = CurrentList;
+ CurrentList++;
+
}
else
{
- CurrentList = &IoLargeIrpLookaside;
+ Prcb->PPLookasideList[LookasideCompletionList].P = &IoCompletionPacketLookaside;
+ }
+
+ /* Set the Large IRP List */
+ Prcb->PPLookasideList[LookasideLargeIrpList].L = &IoLargeIrpLookaside;
+ if (CurrentList)
+ {
+ /* Initialize the Lookaside List for Large IRPs */
+ ExInitializeSystemLookasideList(CurrentList,
+ NonPagedPool,
+ LargeIrpSize,
+ IO_LARGEIRP_CPU,
+ 64,
+ &ExSystemLookasideListHead);
+ Prcb->PPLookasideList[LookasideLargeIrpList].P = CurrentList;
+ CurrentList++;
+
+ }
+ else
+ {
+ Prcb->PPLookasideList[LookasideLargeIrpList].P = &IoLargeIrpLookaside;
}
- Prcb->PPLookasideList[LookasideLargeIrpList].P = &CurrentList->L;
/* Set the Small IRP List */
- Prcb->PPLookasideList[LookasideSmallIrpList].L = &IoSmallIrpLookaside.L;
- CurrentList = ExAllocatePoolWithTag(NonPagedPool,
- sizeof(NPAGED_LOOKASIDE_LIST),
- IO_SMALLIRP_CPU);
+ Prcb->PPLookasideList[LookasideSmallIrpList].L = &IoSmallIrpLookaside;
if (CurrentList)
{
/* Initialize the Lookaside List for Small IRPs */
- ExInitializeNPagedLookasideList(CurrentList,
- NULL,
- NULL,
- 0,
+ ExInitializeSystemLookasideList(CurrentList,
+ NonPagedPool,
SmallIrpSize,
IO_SMALLIRP_CPU,
- 32);
+ 32,
+ &ExSystemLookasideListHead);
+ Prcb->PPLookasideList[LookasideSmallIrpList].P = CurrentList;
+ CurrentList++;
+
}
else
{
- CurrentList = &IoSmallIrpLookaside;
+ Prcb->PPLookasideList[LookasideSmallIrpList].P = &IoSmallIrpLookaside;
}
- Prcb->PPLookasideList[LookasideSmallIrpList].P = &CurrentList->L;
-
- /* Set the I/O Completion List */
- Prcb->PPLookasideList[LookasideCompletionList].L = &IoCompletionPacketLookaside.L;
- CurrentList = ExAllocatePoolWithTag(NonPagedPool,
- sizeof(NPAGED_LOOKASIDE_LIST),
- IO_SMALLIRP_CPU);
- if (CurrentList)
- {
- /* Initialize the Lookaside List for Large IRPs */
- ExInitializeNPagedLookasideList(CurrentList,
- NULL,
- NULL,
- 0,
- sizeof(IO_COMPLETION_PACKET),
- IO_SMALLIRP_CPU,
- 32);
- }
- else
- {
- CurrentList = &IoCompletionPacketLookaside;
- }
- Prcb->PPLookasideList[LookasideCompletionList].P = &CurrentList->L;
/* Set the MDL Completion List */
- Prcb->PPLookasideList[LookasideMdlList].L = &IopMdlLookasideList.L;
- CurrentList = ExAllocatePoolWithTag(NonPagedPool,
- sizeof(NPAGED_LOOKASIDE_LIST),
- TAG_MDL);
+ Prcb->PPLookasideList[LookasideMdlList].L = &IopMdlLookasideList;
if (CurrentList)
{
/* Initialize the Lookaside List for MDLs */
- ExInitializeNPagedLookasideList(CurrentList,
- NULL,
- NULL,
- 0,
+ ExInitializeSystemLookasideList(CurrentList,
+ NonPagedPool,
SmallIrpSize,
TAG_MDL,
- 128);
+ 128,
+ &ExSystemLookasideListHead);
+
+ Prcb->PPLookasideList[LookasideMdlList].P = CurrentList;
+ CurrentList++;
+
}
else
{
- CurrentList = &IopMdlLookasideList;
+ Prcb->PPLookasideList[LookasideMdlList].P = &IopMdlLookasideList;
}
- Prcb->PPLookasideList[LookasideMdlList].P = &CurrentList->L;
}
}
diff --git a/reactos/ntoskrnl/io/iomgr/irp.c b/reactos/ntoskrnl/io/iomgr/irp.c
index e8854befb61..146175f3a92 100644
--- a/reactos/ntoskrnl/io/iomgr/irp.c
+++ b/reactos/ntoskrnl/io/iomgr/irp.c
@@ -286,7 +286,7 @@ IopCompleteRequest(IN PKAPC Apc,
if (Irp->Flags & IRP_DEALLOCATE_BUFFER)
{
/* Deallocate it */
- ExFreePoolWithTag(Irp->AssociatedIrp.SystemBuffer, TAG_SYS_BUF);
+ ExFreePool(Irp->AssociatedIrp.SystemBuffer);
}
}
@@ -419,7 +419,7 @@ IopCompleteRequest(IN PKAPC Apc,
{
/* We have an I/O Completion setup... create the special Overlay */
Irp->Tail.CompletionKey = Key;
- Irp->Tail.Overlay.PacketType = IrpCompletionPacket;
+ Irp->Tail.Overlay.PacketType = IopCompletionPacketIrp;
KeInsertQueue(Port, &Irp->Tail.Overlay.ListEntry);
}
else
@@ -976,7 +976,7 @@ IoCancelIrp(IN PIRP Irp)
Irp->Cancel = TRUE;
/* Clear the cancel routine and get the old one */
- CancelRoutine = IoSetCancelRoutine(Irp, NULL);
+ CancelRoutine = (PVOID)IoSetCancelRoutine(Irp, NULL);
if (CancelRoutine)
{
/* We had a routine, make sure the IRP isn't completed */
diff --git a/reactos/ntoskrnl/io/pnpmgr/plugplay.c b/reactos/ntoskrnl/io/pnpmgr/plugplay.c
index 15239bab02c..0d7dca9075f 100644
--- a/reactos/ntoskrnl/io/pnpmgr/plugplay.c
+++ b/reactos/ntoskrnl/io/pnpmgr/plugplay.c
@@ -529,10 +529,6 @@ IopGetDeviceDepth(PPLUGPLAY_CONTROL_DEPTH_DATA DepthData)
DeviceNode = IopGetDeviceNode(DeviceObject);
- DepthData->Depth = DeviceNode->Level;
-
- ObDereferenceObject(DeviceObject);
-
_SEH_TRY
{
DepthData->Depth = DeviceNode->Level;
@@ -543,6 +539,8 @@ IopGetDeviceDepth(PPLUGPLAY_CONTROL_DEPTH_DATA DepthData)
}
_SEH_END;
+ ObDereferenceObject(DeviceObject);
+
return Status;
}
diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c b/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
index c3ac77721d4..2d508c29fec 100644
--- a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
+++ b/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
@@ -3489,3 +3489,18 @@ IoSynchronousInvalidateDeviceRelations(
return STATUS_NOT_SUPPORTED;
}
}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+NTAPI
+IoTranslateBusAddress(IN INTERFACE_TYPE InterfaceType,
+ IN ULONG BusNumber,
+ IN PHYSICAL_ADDRESS BusAddress,
+ IN OUT PULONG AddressSpace,
+ OUT PPHYSICAL_ADDRESS TranslatedAddress)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpnotify.c b/reactos/ntoskrnl/io/pnpmgr/pnpnotify.c
index 3c125e52ea7..91ffd138204 100644
--- a/reactos/ntoskrnl/io/pnpmgr/pnpnotify.c
+++ b/reactos/ntoskrnl/io/pnpmgr/pnpnotify.c
@@ -96,6 +96,7 @@ IopNotifyPlugPlayNotification(
default:
{
DPRINT1("IopNotifyPlugPlayNotification(): unknown EventCategory 0x%x UNIMPLEMENTED\n", EventCategory);
+ KeReleaseGuardedMutex(&PnpNotifyListLock);
return;
}
}
diff --git a/reactos/ntoskrnl/io/pnpmgr/pnproot.c b/reactos/ntoskrnl/io/pnpmgr/pnproot.c
index 01d003667dc..8951ed2371c 100644
--- a/reactos/ntoskrnl/io/pnpmgr/pnproot.c
+++ b/reactos/ntoskrnl/io/pnpmgr/pnproot.c
@@ -162,7 +162,7 @@ PnpRootCreateDevice(
if (Status == STATUS_NO_SUCH_DEVICE)
break;
}
- if (i > 9999)
+ if (i == 9999)
{
DPRINT1("Too much legacy devices reported for service '%wZ'\n", &LocalServiceName);
Status = STATUS_INSUFFICIENT_RESOURCES;
diff --git a/reactos/ntoskrnl/kdbg/kdb.c b/reactos/ntoskrnl/kdbg/kdb.c
index fcfa954d50b..b7acafca4ec 100644
--- a/reactos/ntoskrnl/kdbg/kdb.c
+++ b/reactos/ntoskrnl/kdbg/kdb.c
@@ -51,6 +51,7 @@ PKDB_KTRAP_FRAME KdbCurrentTrapFrame = NULL; /* Pointer to the current trapframe
STATIC KDB_KTRAP_FRAME KdbTrapFrame = { { 0 } }; /* The trapframe which was passed to KdbEnterDebuggerException */
STATIC KDB_KTRAP_FRAME KdbThreadTrapFrame = { { 0 } }; /* The trapframe of the current thread (KdbCurrentThread) */
STATIC KAPC_STATE KdbApcState;
+extern BOOLEAN KdbpBugCheckRequested;
/* Array of conditions when to enter KDB */
STATIC KDB_ENTER_CONDITION KdbEnterConditions[][2] =
@@ -1603,6 +1604,13 @@ KdbEnterDebuggerException(
/* Leave critical section */
Ke386RestoreFlags(OldEflags);
+ /* Check if user requested a bugcheck */
+ if (KdbpBugCheckRequested)
+ {
+ /* Bugcheck the system */
+ KeBugCheck(MANUALLY_INITIATED_CRASH);
+ }
+
continue_execution:
/* Clear debug status */
if (ExceptionCode == STATUS_BREAKPOINT) /* FIXME: Why clear DR6 on INT3? */
diff --git a/reactos/ntoskrnl/kdbg/kdb_cli.c b/reactos/ntoskrnl/kdbg/kdb_cli.c
index 9344839cd0f..dac9a135f4c 100644
--- a/reactos/ntoskrnl/kdbg/kdb_cli.c
+++ b/reactos/ntoskrnl/kdbg/kdb_cli.c
@@ -99,6 +99,7 @@ STATIC LONG KdbNumberOfRowsTerminal = -1;
STATIC LONG KdbNumberOfColsTerminal = -1;
PCHAR KdbInitFileBuffer = NULL; /* Buffer where KDBinit file is loaded into during initialization */
+BOOLEAN KdbpBugCheckRequested = FALSE;
STATIC CONST struct
{
@@ -1689,8 +1690,9 @@ KdbpCmdTss(ULONG Argc, PCHAR Argv[])
STATIC BOOLEAN
KdbpCmdBugCheck(ULONG Argc, PCHAR Argv[])
{
- KeBugCheck(0xDEADDEAD);
- return TRUE;
+ /* Set the flag and quit looping */
+ KdbpBugCheckRequested = TRUE;
+ return FALSE;
}
/*!\brief Sets or displays a config variables value.
diff --git a/reactos/ntoskrnl/ke/bug.c b/reactos/ntoskrnl/ke/bug.c
index c1d6e2d90cc..a29261b5d87 100644
--- a/reactos/ntoskrnl/ke/bug.c
+++ b/reactos/ntoskrnl/ke/bug.c
@@ -1131,7 +1131,7 @@ KeBugCheckWithTf(IN ULONG BugCheckCode,
if (i != (LONG)KeGetCurrentProcessorNumber())
{
/* Send the IPI and give them one second to catch up */
- KiIpiSendRequest(1 << i, IPI_FREEZE);
+ KiIpiSend(1 << i, IPI_FREEZE);
KeStallExecutionProcessor(1000000);
}
}
diff --git a/reactos/ntoskrnl/ke/clock.c b/reactos/ntoskrnl/ke/clock.c
index ce50d4c8293..4a72c978064 100644
--- a/reactos/ntoskrnl/ke/clock.c
+++ b/reactos/ntoskrnl/ke/clock.c
@@ -40,7 +40,6 @@ KeSetSystemTime(IN PLARGE_INTEGER NewTime,
PKSPIN_LOCK_QUEUE LockQueue;
LIST_ENTRY TempList, TempList2;
ULONG Hand, i;
- PKTIMER_TABLE_ENTRY TimerEntry;
/* Sanity checks */
ASSERT((NewTime->HighPart & 0xF0000000) == 0);
@@ -57,10 +56,10 @@ KeSetSystemTime(IN PLARGE_INTEGER NewTime,
/* Query the system time now */
KeQuerySystemTime(OldTime);
- /* Set the new system time */
+ /* Set the new system time (ordering of these operations is critical) */
+ SharedUserData->SystemTime.High2Time = NewTime->HighPart;
SharedUserData->SystemTime.LowPart = NewTime->LowPart;
SharedUserData->SystemTime.High1Time = NewTime->HighPart;
- SharedUserData->SystemTime.High2Time = NewTime->HighPart;
/* Check if this was for the HAL and set the RTC time */
if (HalTime) ExCmosClockIsSane = HalSetRealTimeClock(&TimeFields);
@@ -98,16 +97,7 @@ KeSetSystemTime(IN PLARGE_INTEGER NewTime,
if (Timer->Header.Absolute)
{
/* Remove it from the timer list */
- if (RemoveEntryList(&Timer->TimerListEntry))
- {
- /* Get the entry and check if it's empty */
- TimerEntry = &KiTimerTableListHead[Timer->Header.Hand];
- if (IsListEmpty(&TimerEntry->Entry))
- {
- /* Clear the time then */
- TimerEntry->Time.HighPart = 0xFFFFFFFF;
- }
- }
+ KiRemoveEntryTimer(Timer);
/* Insert it into our temporary list */
InsertTailList(&TempList, &Timer->TimerListEntry);
@@ -138,16 +128,7 @@ KeSetSystemTime(IN PLARGE_INTEGER NewTime,
if (KiInsertTimerTable(Timer, Hand))
{
/* Remove it from the timer list */
- if (RemoveEntryList(&Timer->TimerListEntry))
- {
- /* Get the entry and check if it's empty */
- TimerEntry = &KiTimerTableListHead[Timer->Header.Hand];
- if (IsListEmpty(&TimerEntry->Entry))
- {
- /* Clear the time then */
- TimerEntry->Time.HighPart = 0xFFFFFFFF;
- }
- }
+ KiRemoveEntryTimer(Timer);
/* Insert it into our temporary list */
InsertTailList(&TempList2, &Timer->TimerListEntry);
@@ -157,8 +138,8 @@ KeSetSystemTime(IN PLARGE_INTEGER NewTime,
KiReleaseTimerLock(LockQueue);
}
- /* FIXME: Process expired timers! */
- KiReleaseDispatcherLock(OldIrql);
+ /* Process expired timers. This releases the dispatcher lock. */
+ KiTimerListExpire(&TempList2, OldIrql);
/* Revert affinity */
KeRevertToUserAffinityThread();
diff --git a/reactos/ntoskrnl/ke/dpc.c b/reactos/ntoskrnl/ke/dpc.c
index 0646ffd4209..549c79d62ae 100644
--- a/reactos/ntoskrnl/ke/dpc.c
+++ b/reactos/ntoskrnl/ke/dpc.c
@@ -86,13 +86,15 @@ KiTimerExpiration(IN PKDPC Dpc,
LONG Limit, Index, i;
ULONG Timers, ActiveTimers, DpcCalls;
PLIST_ENTRY ListHead, NextEntry;
- PKTIMER_TABLE_ENTRY TimerEntry;
KIRQL OldIrql;
PKTIMER Timer;
PKDPC TimerDpc;
ULONG Period;
DPC_QUEUE_ENTRY DpcEntry[MAX_TIMER_DPCS];
PKSPIN_LOCK_QUEUE LockQueue;
+#ifdef CONFIG_SMP
+ PKPRCB Prcb = KeGetCurrentPrcb();
+#endif
/* Disable interrupts */
_disable();
@@ -147,16 +149,7 @@ KiTimerExpiration(IN PKDPC Dpc,
{
/* It's expired, remove it */
ActiveTimers--;
- if (RemoveEntryList(&Timer->TimerListEntry))
- {
- /* Get the entry and check if it's empty */
- TimerEntry = &KiTimerTableListHead[Timer->Header.Hand];
- if (IsListEmpty(&TimerEntry->Entry))
- {
- /* Clear the time then */
- TimerEntry->Time.HighPart = 0xFFFFFFFF;
- }
- }
+ KiRemoveEntryTimer(Timer);
/* Make it non-inserted, unlock it, and signal it */
Timer->Header.Inserted = FALSE;
@@ -194,11 +187,35 @@ KiTimerExpiration(IN PKDPC Dpc,
/* Check if we have a DPC */
if (TimerDpc)
{
- /* Setup the DPC Entry */
- DpcEntry[DpcCalls].Dpc = TimerDpc;
- DpcEntry[DpcCalls].Routine = TimerDpc->DeferredRoutine;
- DpcEntry[DpcCalls].Context = TimerDpc->DeferredContext;
- DpcCalls++;
+#ifdef CONFIG_SMP
+ /*
+ * If the DPC is targeted to another processor,
+ * then insert it into that processor's DPC queue
+ * instead of delivering it now.
+ * If the DPC is a threaded DPC, and the current CPU
+ * has threaded DPCs enabled (KiExecuteDpc is actively parsing DPCs),
+ * then also insert it into the DPC queue for threaded delivery,
+ * instead of doing it here.
+ */
+ if (((TimerDpc->Number >= MAXIMUM_PROCESSORS) &&
+ ((TimerDpc->Number - MAXIMUM_PROCESSORS) != Prcb->Number)) ||
+ ((TimerDpc->Type == ThreadedDpcObject) && (Prcb->ThreadDpcEnable)))
+ {
+ /* Queue it */
+ KeInsertQueueDpc(TimerDpc,
+ UlongToPtr(SystemTime.LowPart),
+ UlongToPtr(SystemTime.HighPart));
+ }
+ else
+#endif
+ {
+ /* Setup the DPC Entry */
+ DpcEntry[DpcCalls].Dpc = TimerDpc;
+ DpcEntry[DpcCalls].Routine = TimerDpc->DeferredRoutine;
+ DpcEntry[DpcCalls].Context = TimerDpc->DeferredContext;
+ DpcCalls++;
+ ASSERT(DpcCalls < MAX_TIMER_DPCS);
+ }
}
/* Check if we're done processing */
@@ -303,6 +320,130 @@ KiTimerExpiration(IN PKDPC Dpc,
}
}
+VOID
+FASTCALL
+KiTimerListExpire(IN PLIST_ENTRY ExpiredListHead,
+ IN KIRQL OldIrql)
+{
+ ULARGE_INTEGER SystemTime;
+ LARGE_INTEGER Interval;
+ LONG i;
+ ULONG DpcCalls = 0;
+ PKTIMER Timer;
+ PKDPC TimerDpc;
+ ULONG Period;
+ DPC_QUEUE_ENTRY DpcEntry[MAX_TIMER_DPCS];
+#ifdef CONFIG_SMP
+ PKPRCB Prcb = KeGetCurrentPrcb();
+#endif
+
+ /* Query system */
+ KeQuerySystemTime((PLARGE_INTEGER)&SystemTime);
+
+ /* Loop expired list */
+ while (ExpiredListHead->Flink != ExpiredListHead)
+ {
+ /* Get the current timer */
+ Timer = CONTAINING_RECORD(ExpiredListHead->Flink, KTIMER, TimerListEntry);
+
+ /* Remove it */
+ RemoveEntryList(&Timer->TimerListEntry);
+
+ /* Not inserted */
+ Timer->Header.Inserted = FALSE;
+
+ /* Signal it */
+ Timer->Header.SignalState = 1;
+
+ /* Get the DPC and period */
+ TimerDpc = Timer->Dpc;
+ Period = Timer->Period;
+
+ /* Check if there's any waiters */
+ if (!IsListEmpty(&Timer->Header.WaitListHead))
+ {
+ /* Check the type of event */
+ if (Timer->Header.Type == TimerNotificationObject)
+ {
+ /* Unwait the thread */
+ KxUnwaitThread(&Timer->Header, IO_NO_INCREMENT);
+ }
+ else
+ {
+ /* Otherwise unwait the thread and signal the timer */
+ KxUnwaitThreadForEvent((PKEVENT)Timer, IO_NO_INCREMENT);
+ }
+ }
+
+ /* Check if we have a period */
+ if (Period)
+ {
+ /* Calculate the interval and insert the timer */
+ Interval.QuadPart = Int32x32To64(Period, -10000);
+ while (!KiInsertTreeTimer(Timer, Interval));
+ }
+
+ /* Check if we have a DPC */
+ if (TimerDpc)
+ {
+#ifdef CONFIG_SMP
+ /*
+ * If the DPC is targeted to another processor,
+ * then insert it into that processor's DPC queue
+ * instead of delivering it now.
+ * If the DPC is a threaded DPC, and the current CPU
+ * has threaded DPCs enabled (KiExecuteDpc is actively parsing DPCs),
+ * then also insert it into the DPC queue for threaded delivery,
+ * instead of doing it here.
+ */
+ if (((TimerDpc->Number >= MAXIMUM_PROCESSORS) &&
+ ((TimerDpc->Number - MAXIMUM_PROCESSORS) != Prcb->Number)) ||
+ ((TimerDpc->Type == ThreadedDpcObject) && (Prcb->ThreadDpcEnable)))
+ {
+ /* Queue it */
+ KeInsertQueueDpc(TimerDpc,
+ UlongToPtr(SystemTime.LowPart),
+ UlongToPtr(SystemTime.HighPart));
+ }
+ else
+#endif
+ {
+ /* Setup the DPC Entry */
+ DpcEntry[DpcCalls].Dpc = TimerDpc;
+ DpcEntry[DpcCalls].Routine = TimerDpc->DeferredRoutine;
+ DpcEntry[DpcCalls].Context = TimerDpc->DeferredContext;
+ DpcCalls++;
+ ASSERT(DpcCalls < MAX_TIMER_DPCS);
+ }
+ }
+ }
+
+ /* Check if we still have DPC entries */
+ if (DpcCalls)
+ {
+ /* Release the dispatcher while doing DPCs */
+ KiReleaseDispatcherLock(DISPATCH_LEVEL);
+
+ /* Start looping all DPC Entries */
+ for (i = 0; DpcCalls; DpcCalls--, i++)
+ {
+ /* Call the DPC */
+ DpcEntry[i].Routine(DpcEntry[i].Dpc,
+ DpcEntry[i].Context,
+ UlongToPtr(SystemTime.LowPart),
+ UlongToPtr(SystemTime.HighPart));
+ }
+
+ /* Lower IRQL */
+ KeLowerIrql(OldIrql);
+ }
+ else
+ {
+ /* Unlock the dispatcher */
+ KiReleaseDispatcherLock(OldIrql);
+ }
+}
+
VOID
NTAPI
KiQuantumEnd(VOID)
@@ -683,7 +824,7 @@ KeInsertQueueDpc(IN PKDPC Dpc,
if (Prcb != CurrentPrcb)
{
/* It was, request and IPI */
- KiIpiSendRequest(AFFINITY_MASK(Cpu), IPI_DPC);
+ KiIpiSend(AFFINITY_MASK(Cpu), IPI_DPC);
}
else
{
diff --git a/reactos/ntoskrnl/ke/i386/cpu.c b/reactos/ntoskrnl/ke/i386/cpu.c
index 948e037ec81..674d12dd5e1 100644
--- a/reactos/ntoskrnl/ke/i386/cpu.c
+++ b/reactos/ntoskrnl/ke/i386/cpu.c
@@ -994,6 +994,20 @@ KeGetRecommendedSharedDataAlignment(VOID)
return KeLargestCacheLine;
}
+VOID
+NTAPI
+KiFlushTargetEntireTb(IN PKIPI_CONTEXT PacketContext,
+ IN PVOID Ignored1,
+ IN PVOID Ignored2,
+ IN PVOID Ignored3)
+{
+ /* Signal this packet as done */
+ KiIpiSignalPacketDone(PacketContext);
+
+ /* Flush the TB for the Current CPU */
+ KeFlushCurrentTb();
+}
+
/*
* @implemented
*/
@@ -1003,19 +1017,50 @@ KeFlushEntireTb(IN BOOLEAN Invalid,
IN BOOLEAN AllProcessors)
{
KIRQL OldIrql;
+#ifdef CONFIG_SMP
+ KAFFINITY TargetAffinity;
+ PKPRCB Prcb = KeGetCurrentPrcb();
+#endif
/* Raise the IRQL for the TB Flush */
OldIrql = KeRaiseIrqlToSynchLevel();
#ifdef CONFIG_SMP
- /* FIXME: Support IPI Flush */
-#error Not yet implemented!
+ /* FIXME: Use KiTbFlushTimeStamp to synchronize TB flush */
+
+ /* Get the current processor affinity, and exclude ourselves */
+ TargetAffinity = KeActiveProcessors;
+ TargetAffinity &= ~Prcb->SetMember;
+
+ /* Make sure this is MP */
+ if (TargetAffinity)
+ {
+ /* Send an IPI TB flush to the other processors */
+ KiIpiSendPacket(TargetAffinity,
+ KiFlushTargetEntireTb,
+ NULL,
+ 0,
+ NULL);
+ }
#endif
- /* Flush the TB for the Current CPU */
+ /* Flush the TB for the Current CPU, and update the flush stamp */
KeFlushCurrentTb();
- /* Return to Original IRQL */
+#ifdef CONFIG_SMP
+ /* If this is MP, wait for the other processors to finish */
+ if (TargetAffinity)
+ {
+ /* Sanity check */
+ ASSERT(Prcb == (volatile PKPRCB)KeGetCurrentPrcb());
+
+ /* FIXME: TODO */
+ ASSERTMSG("Not yet implemented\n", FALSE);
+ }
+#endif
+
+ /* Update the flush stamp and return to original IRQL */
+ InterlockedExchangeAdd(&KiTbFlushTimeStamp, 1);
KeLowerIrql(OldIrql);
}
diff --git a/reactos/ntoskrnl/ke/i386/v86vdm.c b/reactos/ntoskrnl/ke/i386/v86vdm.c
index 0a9a1da5e95..efb8a0c7721 100644
--- a/reactos/ntoskrnl/ke/i386/v86vdm.c
+++ b/reactos/ntoskrnl/ke/i386/v86vdm.c
@@ -120,4 +120,38 @@ Ke386CallBios(IN ULONG Int,
return STATUS_SUCCESS;
}
-/* EOF */
+/*
+ * @unimplemented
+ */
+BOOLEAN
+NTAPI
+Ke386IoSetAccessProcess(IN PKPROCESS Process,
+ IN ULONG Flag)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+NTAPI
+Ke386SetIoAccessMap(IN ULONG Flag,
+ IN PVOID IopmBuffer)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+NTAPI
+Ke386QueryIoAccessMap(IN ULONG Flag,
+ IN PVOID IopmBuffer)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
diff --git a/reactos/ntoskrnl/ke/ipi.c b/reactos/ntoskrnl/ke/ipi.c
index 92308baeb8a..1b9bb0c8b69 100644
--- a/reactos/ntoskrnl/ke/ipi.c
+++ b/reactos/ntoskrnl/ke/ipi.c
@@ -14,10 +14,60 @@
/* GLOBALS *******************************************************************/
-KSPIN_LOCK KiIpiLock;
+extern KSPIN_LOCK KiReverseStallIpiLock;
/* PRIVATE FUNCTIONS *********************************************************/
+VOID
+NTAPI
+KiIpiGenericCallTarget(IN PKIPI_CONTEXT PacketContext,
+ IN PVOID BroadcastFunction,
+ IN PVOID Argument,
+ IN PVOID Count)
+{
+ /* FIXME: TODO */
+ ASSERTMSG("Not yet implemented\n", FALSE);
+}
+
+VOID
+FASTCALL
+KiIpiSend(IN KAFFINITY TargetProcessors,
+ IN ULONG IpiRequest)
+{
+ /* FIXME: TODO */
+ ASSERTMSG("Not yet implemented\n", FALSE);
+}
+
+VOID
+NTAPI
+KiIpiSendPacket(IN KAFFINITY TargetProcessors,
+ IN PKIPI_WORKER WorkerFunction,
+ IN PKIPI_BROADCAST_WORKER BroadcastFunction,
+ IN ULONG_PTR Context,
+ IN PULONG Count)
+{
+ /* FIXME: TODO */
+ ASSERTMSG("Not yet implemented\n", FALSE);
+}
+
+VOID
+FASTCALL
+KiIpiSignalPacketDone(IN PKIPI_CONTEXT PacketContext)
+{
+ /* FIXME: TODO */
+ ASSERTMSG("Not yet implemented\n", FALSE);
+}
+
+VOID
+FASTCALL
+KiIpiSignalPacketDoneAndStall(IN PKIPI_CONTEXT PacketContext,
+ IN volatile PULONG ReverseStall)
+{
+ /* FIXME: TODO */
+ ASSERTMSG("Not yet implemented\n", FALSE);
+}
+
+#if 0
VOID
NTAPI
KiIpiSendRequest(IN KAFFINITY TargetSet,
@@ -86,6 +136,7 @@ KiIpiSendPacket(IN KAFFINITY TargetSet,
}
#endif
}
+#endif
/* PUBLIC FUNCTIONS **********************************************************/
@@ -95,7 +146,7 @@ KiIpiSendPacket(IN KAFFINITY TargetSet,
BOOLEAN
NTAPI
KiIpiServiceRoutine(IN PKTRAP_FRAME TrapFrame,
- IN PVOID ExceptionFrame)
+ IN PKEXCEPTION_FRAME ExceptionFrame)
{
#ifdef CONFIG_SMP
PKPRCB Prcb;
@@ -141,32 +192,73 @@ NTAPI
KeIpiGenericCall(IN PKIPI_BROADCAST_WORKER Function,
IN ULONG_PTR Argument)
{
-#ifdef CONFIG_SMP
-#error Not yet implemented!
-#else
ULONG_PTR Status;
KIRQL OldIrql, OldIrql2;
+#ifdef CONFIG_SMP
+ KAFFINITY Affinity;
+ ULONG Count;
+ PKPRCB Prcb = KeGetCurrentPrcb();
+#endif
/* Raise to DPC level if required */
OldIrql = KeGetCurrentIrql();
if (OldIrql < DISPATCH_LEVEL) KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
+#ifdef CONFIG_SMP
+ /* Get current processor count and affinity */
+ Count = KeNumberProcessors;
+ Affinity = KeActiveProcessors;
+
+ /* Exclude ourselves */
+ Affinity &= ~Prcb->SetMember;
+#endif
+
/* Acquire the IPI lock */
- KeAcquireSpinLockAtDpcLevel(&KiIpiLock);
+ KeAcquireSpinLockAtDpcLevel(&KiReverseStallIpiLock);
+
+#ifdef CONFIG_SMP
+ /* Make sure this is MP */
+ if (Affinity)
+ {
+ /* Send an IPI */
+ KiIpiSendPacket(Affinity,
+ KiIpiGenericCallTarget,
+ Function,
+ Argument,
+ &Count);
+
+ /* Spin until the other processors are ready */
+ while ((volatile ULONG)Count != 1) YieldProcessor();
+ }
+#endif
/* Raise to IPI level */
KeRaiseIrql(IPI_LEVEL, &OldIrql2);
+#ifdef CONFIG_SMP
+ /* Let the other processors know it is time */
+ Count = 0;
+#endif
+
/* Call the function */
Status = Function(Argument);
+#ifdef CONFIG_SMP
+ /* If this is MP, wait for the other processors to finish */
+ if (Affinity)
+ {
+ /* Sanity check */
+ ASSERT(Prcb == (volatile PKPRCB)KeGetCurrentPrcb());
+
+ /* FIXME: TODO */
+ ASSERTMSG("Not yet implemented\n", FALSE);
+ }
+#endif
+
/* Release the lock */
- KeReleaseSpinLockFromDpcLevel(&KiIpiLock);
+ KeReleaseSpinLockFromDpcLevel(&KiReverseStallIpiLock);
/* Lower IRQL back */
KeLowerIrql(OldIrql);
return Status;
-#endif
}
-
-/* EOF */
diff --git a/reactos/ntoskrnl/ke/queue.c b/reactos/ntoskrnl/ke/queue.c
index 917b7ee0d61..49aa99c2941 100644
--- a/reactos/ntoskrnl/ke/queue.c
+++ b/reactos/ntoskrnl/ke/queue.c
@@ -436,8 +436,7 @@ PLIST_ENTRY
NTAPI
KeRundownQueue(IN PKQUEUE Queue)
{
- PLIST_ENTRY ListHead, NextEntry;
- PLIST_ENTRY FirstEntry = NULL;
+ PLIST_ENTRY FirstEntry, NextEntry;
PKTHREAD Thread;
KIRQL OldIrql;
ASSERT_QUEUE(Queue);
@@ -446,34 +445,41 @@ KeRundownQueue(IN PKQUEUE Queue)
/* Get the Dispatcher Lock */
OldIrql = KiAcquireDispatcherLock();
-
- /* Make sure the list is not empty */
- if (!IsListEmpty(&Queue->EntryListHead))
+
+ /* Check if the list is empty */
+ FirstEntry = Queue->EntryListHead.Flink;
+ if (FirstEntry == &Queue->EntryListHead)
{
- /* Remove it */
- FirstEntry = RemoveHeadList(&Queue->EntryListHead);
+ /* We won't return anything */
+ FirstEntry = NULL;
}
-
- /* Unlink threads and clear their Thread->Queue */
- ListHead = &Queue->ThreadListHead;
- NextEntry = ListHead->Flink;
- while (ListHead != NextEntry)
+ else
{
- /* Get the Entry's Thread */
+ /* Remove this entry */
+ RemoveEntryList(&Queue->EntryListHead);
+ }
+
+ /* Loop the list */
+ while (!IsListEmpty(&Queue->ThreadListHead))
+ {
+ /* Get the next entry */
+ NextEntry = Queue->ThreadListHead.Flink;
+
+ /* Get the associated thread */
Thread = CONTAINING_RECORD(NextEntry, KTHREAD, QueueListEntry);
- /* Kill its Queue */
+ /* Clear its queue */
Thread->Queue = NULL;
/* Remove this entry */
RemoveEntryList(NextEntry);
-
- /* Get the next entry */
- NextEntry = NextEntry->Flink;
}
- /* Release the lock and return */
- KiReleaseDispatcherLock(OldIrql);
+ /* Release the dispatcher lock */
+ KiReleaseDispatcherLockFromDpcLevel();
+
+ /* Exit the dispatcher and return the first entry (if any) */
+ KiExitDispatcher(OldIrql);
return FirstEntry;
}
diff --git a/reactos/ntoskrnl/ke/thrdschd.c b/reactos/ntoskrnl/ke/thrdschd.c
index d6a7b57f11d..d174a3cfa01 100644
--- a/reactos/ntoskrnl/ke/thrdschd.c
+++ b/reactos/ntoskrnl/ke/thrdschd.c
@@ -253,7 +253,7 @@ KiDeferredReadyThread(IN PKTHREAD Thread)
if (KeGetCurrentProcessorNumber() != Thread->NextProcessor)
{
/* We are, send an IPI */
- KiIpiSendRequest(AFFINITY_MASK(Thread->NextProcessor), IPI_DPC);
+ KiIpiSend(AFFINITY_MASK(Thread->NextProcessor), IPI_DPC);
}
return;
}
@@ -612,7 +612,7 @@ KiSetPriorityThread(IN PKTHREAD Thread,
if (KeGetCurrentProcessorNumber() != Processor)
{
/* We are, send an IPI */
- KiIpiSendRequest(AFFINITY_MASK(Processor), IPI_DPC);
+ KiIpiSend(AFFINITY_MASK(Processor), IPI_DPC);
}
}
}
diff --git a/reactos/ntoskrnl/ke/timerobj.c b/reactos/ntoskrnl/ke/timerobj.c
index 5f6aeb94aa0..c599b3046b8 100644
--- a/reactos/ntoskrnl/ke/timerobj.c
+++ b/reactos/ntoskrnl/ke/timerobj.c
@@ -29,71 +29,29 @@ KiInsertTreeTimer(IN PKTIMER Timer,
BOOLEAN Inserted = FALSE;
ULONG Hand = 0;
PKSPIN_LOCK_QUEUE LockQueue;
- LONGLONG DueTime;
- LARGE_INTEGER InterruptTime, SystemTime, DifferenceTime;
- PKTIMER_TABLE_ENTRY TimerEntry;
-
DPRINT("KiInsertTreeTimer(): Timer %p, Interval: %I64d\n", Timer, Interval.QuadPart);
- /* Convert to relative time if needed */
- Timer->Header.Absolute = FALSE;
- if (Interval.HighPart >= 0)
+ /* Setup the timer's due time */
+ if (KiComputeDueTime(Timer, Interval, &Hand))
{
- /* Get System Time */
- KeQuerySystemTime(&SystemTime);
+ /* Acquire the lock */
+ LockQueue = KiAcquireTimerLock(Hand);
- /* Do the conversion */
- DifferenceTime.QuadPart = SystemTime.QuadPart - Interval.QuadPart;
-
- /* Make sure it hasn't already expired */
- Timer->Header.Absolute = TRUE;
- if (DifferenceTime.HighPart >= 0)
+ /* Insert the timer */
+ if (KiInsertTimerTable(Timer, Hand))
{
- /* Cancel everything */
- Timer->Header.SignalState = TRUE;
- Timer->Header.Hand = 0;
- Timer->DueTime.QuadPart = 0;
- return FALSE;
+ /* It was already there, remove it */
+ KiRemoveEntryTimer(Timer);
+ Timer->Header.Inserted = FALSE;
}
-
- /* Set the time as Absolute */
- Interval = DifferenceTime;
- }
-
- /* Get the Interrupt Time */
- InterruptTime.QuadPart = KeQueryInterruptTime();
-
- /* Recalculate due time */
- DueTime = InterruptTime.QuadPart - Interval.QuadPart;
- Timer->DueTime.QuadPart = DueTime;
-
- /* Get the handle */
- Hand = KiComputeTimerTableIndex(DueTime);
- Timer->Header.Hand = (UCHAR)Hand;
- Timer->Header.Inserted = TRUE;
-
- /* Acquire the lock */
- LockQueue = KiAcquireTimerLock(Hand);
-
- /* Insert the timer */
- if (KiInsertTimerTable(Timer, Hand))
- {
- /* It was already there, remove it */
- if (RemoveEntryList(&Timer->TimerListEntry))
+ else
{
- /* Get the entry and check if it's empty */
- TimerEntry = &KiTimerTableListHead[Hand];
- if (IsListEmpty(&TimerEntry->Entry))
- {
- /* Clear the time then */
- TimerEntry->Time.HighPart = 0xFFFFFFFF;
- }
+ /* Otherwise, we're now inserted */
+ Inserted = TRUE;
}
- }
- else
- {
- /* Otherwise, we're now inserted */
- Inserted = TRUE;
+
+ /* Release the lock */
+ KiReleaseTimerLock(LockQueue);
}
/* Release the lock and return insert status */
@@ -110,7 +68,6 @@ KiInsertTimerTable(IN PKTIMER Timer,
BOOLEAN Expired = FALSE;
PLIST_ENTRY ListHead, NextEntry;
PKTIMER CurrentTimer;
-
DPRINT("KiInsertTimerTable(): Timer %p, Hand: %d\n", Timer, Hand);
/* Check if the period is zero */
@@ -160,7 +117,6 @@ KiSignalTimer(IN PKTIMER Timer)
PKDPC Dpc = Timer->Dpc;
ULONG Period = Timer->Period;
LARGE_INTEGER Interval, SystemTime;
-
DPRINT("KiSignalTimer(): Timer %p\n", Timer);
/* Set default values */
@@ -212,22 +168,11 @@ KiCompleteTimer(IN PKTIMER Timer,
IN PKSPIN_LOCK_QUEUE LockQueue)
{
LIST_ENTRY ListHead;
- PKTIMER_TABLE_ENTRY TimerEntry;
BOOLEAN RequestInterrupt = FALSE;
-
DPRINT("KiCompleteTimer(): Timer %p, LockQueue: %p\n", Timer, LockQueue);
/* Remove it from the timer list */
- if (RemoveEntryList(&Timer->TimerListEntry))
- {
- /* Get the entry and check if it's empty */
- TimerEntry = &KiTimerTableListHead[Timer->Header.Hand];
- if (IsListEmpty(&TimerEntry->Entry))
- {
- /* Clear the time then */
- TimerEntry->Time.HighPart = 0xFFFFFFFF;
- }
- }
+ KiRemoveEntryTimer(Timer);
/* Link the timer list to our stack */
ListHead.Flink = &Timer->TimerListEntry;
@@ -264,7 +209,6 @@ KeCancelTimer(IN OUT PKTIMER Timer)
BOOLEAN Inserted;
ASSERT_TIMER(Timer);
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
-
DPRINT("KeCancelTimer(): Timer %p\n", Timer);
/* Lock the Database and Raise IRQL */
@@ -301,7 +245,8 @@ KeInitializeTimerEx(OUT PKTIMER Timer,
IN TIMER_TYPE Type)
{
DPRINT("KeInitializeTimerEx(): Timer %p, Type %s\n",
- Timer, (Type == NotificationTimer) ? "NotificationTimer" : "SynchronizationTimer");
+ Timer, (Type == NotificationTimer) ?
+ "NotificationTimer" : "SynchronizationTimer");
/* Initialize the Dispatch Header */
KeInitializeDispatcherHeader(&Timer->Header,
@@ -352,13 +297,11 @@ KeSetTimerEx(IN OUT PKTIMER Timer,
KIRQL OldIrql;
BOOLEAN Inserted;
ULONG Hand = 0;
- LARGE_INTEGER InterruptTime, SystemTime, DifferenceTime;
BOOLEAN RequestInterrupt = FALSE;
ASSERT_TIMER(Timer);
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
-
DPRINT("KeSetTimerEx(): Timer %p, DueTime %I64d, Period %d, Dpc %p\n",
- Timer, DueTime.QuadPart, Period, Dpc);
+ Timer, DueTime.QuadPart, Period, Dpc);
/* Lock the Database and Raise IRQL */
OldIrql = KiAcquireDispatcherLock();
@@ -370,59 +313,24 @@ KeSetTimerEx(IN OUT PKTIMER Timer,
/* Set Default Timer Data */
Timer->Dpc = Dpc;
Timer->Period = Period;
-
- /* Convert to relative time if needed */
- Timer->Header.Absolute = FALSE;
- if (DueTime.HighPart >= 0)
+ if (!KiComputeDueTime(Timer, DueTime, &Hand))
{
- /* Get System Time */
- KeQuerySystemTime(&SystemTime);
-
- /* Do the conversion */
- DifferenceTime.QuadPart = SystemTime.QuadPart - DueTime.QuadPart;
-
- /* Make sure it hasn't already expired */
- Timer->Header.Absolute = TRUE;
- if (DifferenceTime.HighPart >= 0)
- {
- /* Cancel everything */
- Timer->Header.SignalState = TRUE;
- Timer->Header.Hand = 0;
- Timer->DueTime.QuadPart = 0;
-
- /* Signal the timer */
- RequestInterrupt = KiSignalTimer(Timer);
-
- /* Release the dispatcher lock */
- KiReleaseDispatcherLockFromDpcLevel();
-
- /* Check if we need to do an interrupt */
- if (RequestInterrupt) HalRequestSoftwareInterrupt(DISPATCH_LEVEL);
-
- /* Exit the dispatcher and return the old state */
- KiExitDispatcher(OldIrql);
- return Inserted;
- }
-
- /* Set the time as Absolute */
- DueTime = DifferenceTime;
+ /* Signal the timer */
+ RequestInterrupt = KiSignalTimer(Timer);
+
+ /* Release the dispatcher lock */
+ KiReleaseDispatcherLockFromDpcLevel();
+
+ /* Check if we need to do an interrupt */
+ if (RequestInterrupt) HalRequestSoftwareInterrupt(DISPATCH_LEVEL);
}
-
- /* Get the Interrupt Time */
- InterruptTime.QuadPart = KeQueryInterruptTime();
-
- /* Recalculate due time */
- Timer->DueTime.QuadPart = InterruptTime.QuadPart - DueTime.QuadPart;
-
- /* Get the handle */
- Hand = KiComputeTimerTableIndex(Timer->DueTime.QuadPart);
- Timer->Header.Hand = (UCHAR)Hand;
- Timer->Header.Inserted = TRUE;
-
- /* Insert the timer */
- Timer->Header.SignalState = FALSE;
- KxInsertTimer(Timer, Hand);
-
+ else
+ {
+ /* Insert the timer */
+ Timer->Header.SignalState = FALSE;
+ KxInsertTimer(Timer, Hand);
+ }
+
/* Exit the dispatcher */
KiExitDispatcher(OldIrql);
diff --git a/reactos/ntoskrnl/mm/verifier.c b/reactos/ntoskrnl/mm/verifier.c
index f2682991609..11d3ac2685d 100644
--- a/reactos/ntoskrnl/mm/verifier.c
+++ b/reactos/ntoskrnl/mm/verifier.c
@@ -146,7 +146,7 @@ Cleanup:
KeLeaveCriticalRegion();
/* Free the table if we failed and return status */
- ExFreePool(ThunkTable);
+ if (ThunkTable) ExFreePool(ThunkTable);
return Status;
}
diff --git a/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild b/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild
index 1e39788ea0d..2d7d68eb73e 100644
--- a/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild
+++ b/reactos/ntoskrnl/ntoskrnl-amd64hack.rbuild
@@ -483,7 +483,6 @@
wmi.c
ntoskrnl.rc
- ntoskrnl.pspec
ntoskrnl_$(ARCH).lnk
diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/reactos/ntoskrnl/ntoskrnl-generic.rbuild
index 99f6c8f8242..817e99a1aa8 100644
--- a/reactos/ntoskrnl/ntoskrnl-generic.rbuild
+++ b/reactos/ntoskrnl/ntoskrnl-generic.rbuild
@@ -466,6 +466,5 @@
wmi.c
ntoskrnl.rc
- ntoskrnl.pspec
ntoskrnl_$(ARCH).lnk
diff --git a/reactos/ntoskrnl/ntoskrnl.pspec b/reactos/ntoskrnl/ntoskrnl.pspec
index 9fb2550a30c..d78174bf2f4 100644
--- a/reactos/ntoskrnl/ntoskrnl.pspec
+++ b/reactos/ntoskrnl/ntoskrnl.pspec
@@ -1,4 +1,4 @@
-#include "include/reactos/msvctarget.h"
+#include
@ stdcall CcCanIWrite(ptr long long long)
@ stdcall CcCopyRead(ptr ptr long long ptr ptr)
@@ -83,8 +83,8 @@
@ stdcall ExDisableResourceBoostLite(ptr)
@ fastcall ExEnterCriticalRegionAndAcquireFastMutexUnsafe(ptr)
@ stdcall ExEnterCriticalRegionAndAcquireResourceExclusive(ptr)
-;ExEnterCriticalRegionAndAcquireResourceShared
-;ExEnterCriticalRegionAndAcquireSharedWaitForExclusive
+@ stdcall ExEnterCriticalRegionAndAcquireResourceShared(ptr)
+@ stdcall ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(ptr)
@ stdcall ExEnumHandleTable(ptr ptr ptr ptr)
@ extern ExEventObjectType _ExEventObjectType
@ stdcall ExExtendZone(ptr ptr long)
@@ -522,7 +522,7 @@
@ stdcall IoSynchronousInvalidateDeviceRelations(ptr long)
@ stdcall IoSynchronousPageWrite(ptr ptr ptr ptr ptr)
@ stdcall IoThreadToProcess(ptr)
-;IoTranslateBusAddress
+@ stdcall IoTranslateBusAddress(long long long long ptr ptr)
@ stdcall IoUnregisterFileSystem(ptr)
@ stdcall IoUnregisterFsRegistrationChange(ptr ptr)
@ stdcall IoUnregisterPlugPlayNotification(ptr)
@@ -566,9 +566,9 @@
@ stdcall KdSystemDebugControl(long ptr long ptr long ptr long)
#ifdef _M_IX86
@ stdcall Ke386CallBios(long ptr)
-;Ke386IoSetAccessProcess
-;Ke386QueryIoAccessMap
-;Ke386SetIoAccessMap
+@ stdcall Ke386IoSetAccessProcess(ptr long)
+@ stdcall Ke386QueryIoAccessMap(long ptr)
+@ stdcall Ke386SetIoAccessMap(long ptr)
#endif
@ fastcall KeAcquireGuardedMutex(ptr)
@ fastcall KeAcquireGuardedMutexUnsafe(ptr)
@@ -745,6 +745,7 @@
@ fastcall KiAcquireSpinLock(ptr)
@ extern KiBugCheckData
@ stdcall KiCheckForKernelApcDelivery()
+;KiCheckForSListAddress
#ifdef _M_IX86
@ stdcall KiCoprocessorError()
#endif
@@ -955,17 +956,17 @@
;PfxInsertPrefix
;PfxRemovePrefix
@ stdcall PoCallDriver(ptr ptr)
-;PoCancelDeviceNotify
+@ stdcall PoCancelDeviceNotify(ptr)
@ stdcall PoQueueShutdownWorkItem(ptr)
@ stdcall PoRegisterDeviceForIdleDetection(ptr long long long)
-;PoRegisterDeviceNotify
+@ stdcall PoRegisterDeviceNotify(ptr long long long ptr ptr)
@ stdcall PoRegisterSystemState(ptr long)
@ stdcall PoRequestPowerIrp(ptr long long ptr ptr ptr)
-;PoRequestShutdownEvent
-;PoSetHiberRange
+@ stdcall PoRequestShutdownEvent(ptr)
+@ stdcall PoSetHiberRange(ptr long ptr long long)
@ stdcall PoSetPowerState(ptr long long)
@ stdcall PoSetSystemState(long)
-;PoShutdownBugCheck
+@ stdcall PoShutdownBugCheck(long long ptr ptr ptr ptr)
@ stdcall PoStartNextPowerIrp(ptr)
@ stdcall PoUnregisterSystemState(ptr)
@ stdcall ProbeForRead(ptr long long)
diff --git a/reactos/ntoskrnl/ob/obref.c b/reactos/ntoskrnl/ob/obref.c
index eaa45237217..4f8cf4256ad 100644
--- a/reactos/ntoskrnl/ob/obref.c
+++ b/reactos/ntoskrnl/ob/obref.c
@@ -299,11 +299,7 @@ ObfDereferenceObject(IN PVOID Object)
if (!OldCount)
{
/* Sanity check */
- if (Header->HandleCount)
- {
- DPRINT1("Misbehaving object: %wZ\n", &Header->Type->Name);
- return Header->PointerCount;
- }
+ ASSERT(Header->HandleCount == 0);
/* Check if APCs are still active */
if (!KeAreAllApcsDisabled())
diff --git a/reactos/ntoskrnl/po/power.c b/reactos/ntoskrnl/po/power.c
index 21fe70624b1..98768e34a52 100644
--- a/reactos/ntoskrnl/po/power.c
+++ b/reactos/ntoskrnl/po/power.c
@@ -216,6 +216,84 @@ PoInitializePrcb(IN PKPRCB Prcb)
/* PUBLIC FUNCTIONS **********************************************************/
+/*
+ * @unimplemented
+ */
+NTSTATUS
+NTAPI
+PoCancelDeviceNotify(IN PVOID NotifyBlock)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+NTSTATUS
+NTAPI
+PoRegisterDeviceNotify(OUT PVOID Unknown0,
+ IN ULONG Unknown1,
+ IN ULONG Unknown2,
+ IN ULONG Unknown3,
+ IN PVOID Unknown4,
+ IN PVOID Unknown5)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+NTAPI
+PoShutdownBugCheck(IN BOOLEAN LogError,
+ IN ULONG BugCheckCode,
+ IN ULONG_PTR BugCheckParameter1,
+ IN ULONG_PTR BugCheckParameter2,
+ IN ULONG_PTR BugCheckParameter3,
+ IN ULONG_PTR BugCheckParameter4)
+{
+ DPRINT1("PoShutdownBugCheck called\n");
+
+ /* FIXME: Log error if requested */
+ /* FIXME: Initiate a shutdown */
+
+ /* Bugcheck the system */
+ KeBugCheckEx(BugCheckCode,
+ BugCheckParameter1,
+ BugCheckParameter2,
+ BugCheckParameter3,
+ BugCheckParameter4);
+}
+
+/*
+ * @unimplemented
+ */
+NTSTATUS
+NTAPI
+PoRequestShutdownEvent(OUT PVOID *Event)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+NTAPI
+PoSetHiberRange(IN PVOID HiberContext,
+ IN ULONG Flags,
+ IN OUT PVOID StartPage,
+ IN ULONG Length,
+ IN ULONG PageTag)
+{
+ UNIMPLEMENTED;
+ return;
+}
+
/*
* @implemented
*/
diff --git a/reactos/subsystems/win32/csrss/win32csr/dllmain.c b/reactos/subsystems/win32/csrss/win32csr/dllmain.c
index 554c7a75afb..1006de6141e 100644
--- a/reactos/subsystems/win32/csrss/win32csr/dllmain.c
+++ b/reactos/subsystems/win32/csrss/win32csr/dllmain.c
@@ -586,9 +586,12 @@ Win32CsrInitialization(PCSRSS_API_DEFINITION *ApiDefinitions,
PCSRSS_EXPORTED_FUNCS Exports,
HANDLE CsrssApiHeap)
{
+ NTSTATUS Status;
CsrExports = *Exports;
Win32CsrApiHeap = CsrssApiHeap;
+ Status = NtUserInitialize(0 ,NULL, NULL);
+
PrivateCsrssManualGuiCheck(0);
CsrInitConsoleSupport();
diff --git a/reactos/subsystems/win32/csrss/win32csr/w32csr.h b/reactos/subsystems/win32/csrss/win32csr/w32csr.h
index f7b9aaada52..f6f0f4e649c 100644
--- a/reactos/subsystems/win32/csrss/win32csr/w32csr.h
+++ b/reactos/subsystems/win32/csrss/win32csr/w32csr.h
@@ -22,6 +22,11 @@
#include "tuiconsole.h"
#include
+/* Public Win32K Headers */
+#include
+#include
+#include
+
#include
#include
#include
diff --git a/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild b/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild
index 5fdc9a68f48..ba304e447d4 100644
--- a/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild
+++ b/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild
@@ -13,7 +13,7 @@
user32
gdi32
advapi32
- psapi
+ win32ksys
psapi
shell32
w32csr.h
diff --git a/reactos/subsystems/win32/win32k/dib/dib.c b/reactos/subsystems/win32/win32k/dib/dib.c
index fc02587c382..036dc764f5d 100644
--- a/reactos/subsystems/win32/win32k/dib/dib.c
+++ b/reactos/subsystems/win32/win32k/dib/dib.c
@@ -173,7 +173,7 @@ DIB_DoRop(ULONG Rop, ULONG Dest, ULONG Source, ULONG Pattern)
case ROP3_TO_ROP4(PATINVERT): return(Dest ^ Pattern);
case ROP3_TO_ROP4(SRCINVERT): return(Dest ^ Source);
case ROP3_TO_ROP4(SRCAND): return(Dest & Source);
- case ROP3_TO_ROP4(MERGEPAINT): return(Dest & (~Source));
+ case ROP3_TO_ROP4(MERGEPAINT): return(Dest | (~Source));
case ROP3_TO_ROP4(SRCPAINT): return(Dest | Source);
case ROP3_TO_ROP4(MERGECOPY): return(Source & Pattern);
case ROP3_TO_ROP4(SRCCOPY): return(Source);
diff --git a/reactos/subsystems/win32/win32k/dib/dib16bpp.c b/reactos/subsystems/win32/win32k/dib/dib16bpp.c
index 0be2e3e0e3f..09329eb9a5a 100644
--- a/reactos/subsystems/win32/win32k/dib/dib16bpp.c
+++ b/reactos/subsystems/win32/win32k/dib/dib16bpp.c
@@ -788,12 +788,12 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
/* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
/* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesYtop; DesYbottom; DesY++)
{
sx = SourceRect->left;
sx_dec = 0;
- for (DesX=0; DesXleft; DesXright; DesX++)
{
color = XLATEOBJ_iXlate(ColorTranslation,
DIB_1BPP_GetPixel(SourceSurf, sx, sy));
@@ -823,12 +823,12 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
/* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
/* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesYtop; DesYbottom; DesY++)
{
sx = SourceRect->left;
sx_dec = 0;
- for (DesX=0; DesXleft; DesXright; DesX++)
{
color = XLATEOBJ_iXlate(ColorTranslation,
DIB_4BPP_GetPixel(SourceSurf, sx, sy));
@@ -858,12 +858,12 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
/* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
/* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesYtop; DesYbottom; DesY++)
{
sx = SourceRect->left;
sx_dec = 0;
- for (DesX=0; DesXleft; DesXright; DesX++)
{
color = XLATEOBJ_iXlate(ColorTranslation,
DIB_8BPP_GetPixel(SourceSurf, sx, sy));
@@ -894,12 +894,12 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
/* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
/* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesYtop; DesYbottom; DesY++)
{
sx = SourceRect->left;
sx_dec = 0;
- for (DesX=0; DesXleft; DesXright; DesX++)
{
color = XLATEOBJ_iXlate(ColorTranslation,
DIB_24BPP_GetPixel(SourceSurf, sx, sy));
@@ -929,12 +929,12 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
/* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
/* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesYtop; DesYbottom; DesY++)
{
sx = SourceRect->left;
sx_dec = 0;
- for (DesX=0; DesXleft; DesXright; DesX++)
{
color = XLATEOBJ_iXlate(ColorTranslation,
DIB_32BPP_GetPixel(SourceSurf, sx, sy));
diff --git a/reactos/subsystems/win32/win32k/dib/dib24bpp.c b/reactos/subsystems/win32/win32k/dib/dib24bpp.c
index a079d75d6f0..acfc460946d 100644
--- a/reactos/subsystems/win32/win32k/dib/dib24bpp.c
+++ b/reactos/subsystems/win32/win32k/dib/dib24bpp.c
@@ -414,20 +414,50 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
LONG SrcSizeX;
LONG DesSizeY;
LONG DesSizeX;
- LONG sx;
- LONG sy;
+ LONG sx = 0;
+ LONG sy = 0;
LONG DesX;
LONG DesY;
- LONG color;
+
+ LONG SrcZoomXHight;
+ LONG SrcZoomXLow;
+ LONG SrcZoomYHight;
+ LONG SrcZoomYLow;
+
+ LONG sy_dec = 0;
+ LONG sy_max;
+
+ LONG sx_dec = 0;
+ LONG sx_max;
+ ULONG color;
DPRINT("DIB_24BPP_StretchBlt: Source BPP: %u, srcRect: (%d,%d)-(%d,%d), dstRect: (%d,%d)-(%d,%d)\n",
BitsPerFormat(SourceSurf->iBitmapFormat), SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom,
DestRect->left, DestRect->top, DestRect->right, DestRect->bottom);
- SrcSizeY = SourceRect->bottom - SourceRect->top;
- SrcSizeX = SourceRect->right - SourceRect->left;
+
+ /* Calc the Zoom height of Source */
+ SrcSizeY = SourceRect->bottom - SourceRect->top;
- DesSizeY = DestRect->bottom - DestRect->top;
- DesSizeX = DestRect->right - DestRect->left;
+ /* Calc the Zoom Width of Source */
+ SrcSizeX = SourceRect->right - SourceRect->left;
+
+ /* Calc the Zoom height of Destinations */
+ DesSizeY = DestRect->bottom - DestRect->top;
+
+ /* Calc the Zoom width of Destinations */
+ DesSizeX = DestRect->right - DestRect->left;
+
+ /* Calc the zoom factor of source height */
+ SrcZoomYHight = SrcSizeY / DesSizeY;
+ SrcZoomYLow = SrcSizeY - (SrcZoomYHight * DesSizeY);
+
+ /* Calc the zoom factor of source width */
+ SrcZoomXHight = SrcSizeX / DesSizeX;
+ SrcZoomXLow = SrcSizeX - (SrcZoomXHight * DesSizeX);
+
+ sx_max = DesSizeX;
+ sy_max = DesSizeY;
+ sy = SourceRect->top;
switch(SourceSurf->iBitmapFormat)
{
@@ -437,20 +467,31 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
for (DesY=DestRect->top; DesYbottom; DesY++)
{
- sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top;
+ sx = SourceRect->left;
+ sx_dec = 0;
for (DesX=DestRect->left; DesXright; DesX++)
{
- sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left;
+ color = XLATEOBJ_iXlate(ColorTranslation,
+ DIB_1BPP_GetPixel(SourceSurf, sx, sy));
- if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0)
- {
- DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
- }
- else
- {
- DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
- }
+ DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color);
+
+ sx += SrcZoomXHight;
+ sx_dec += SrcZoomXLow;
+ if (sx_dec >= sx_max)
+ {
+ sx++;
+ sx_dec -= sx_max;
+ }
+ }
+
+ sy += SrcZoomYHight;
+ sy_dec += SrcZoomYLow;
+ if (sy_dec >= sy_max)
+ {
+ sy++;
+ sy_dec -= sy_max;
}
}
@@ -462,13 +503,31 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
for (DesY=DestRect->top; DesYbottom; DesY++)
{
- sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top;
+ sx = SourceRect->left;
+ sx_dec = 0;
for (DesX=DestRect->left; DesXright; DesX++)
{
- sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left;
- color = DIB_4BPP_GetPixel(SourceSurf, sx, sy);
- DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+ color = XLATEOBJ_iXlate(ColorTranslation,
+ DIB_4BPP_GetPixel(SourceSurf, sx, sy));
+
+ DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color);
+
+ sx += SrcZoomXHight;
+ sx_dec += SrcZoomXLow;
+ if (sx_dec >= sx_max)
+ {
+ sx++;
+ sx_dec -= sx_max;
+ }
+ }
+
+ sy += SrcZoomYHight;
+ sy_dec += SrcZoomYLow;
+ if (sy_dec >= sy_max)
+ {
+ sy++;
+ sy_dec -= sy_max;
}
}
break;
@@ -479,13 +538,31 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
for (DesY=DestRect->top; DesYbottom; DesY++)
{
- sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top;
+ sx = SourceRect->left;
+ sx_dec = 0;
for (DesX=DestRect->left; DesXright; DesX++)
{
- sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left;
- color = DIB_8BPP_GetPixel(SourceSurf, sx, sy);
- DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+ color = XLATEOBJ_iXlate(ColorTranslation,
+ DIB_8BPP_GetPixel(SourceSurf, sx, sy));
+
+ DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color);
+
+ sx += SrcZoomXHight;
+ sx_dec += SrcZoomXLow;
+ if (sx_dec >= sx_max)
+ {
+ sx++;
+ sx_dec -= sx_max;
+ }
+ }
+
+ sy += SrcZoomYHight;
+ sy_dec += SrcZoomYLow;
+ if (sy_dec >= sy_max)
+ {
+ sy++;
+ sy_dec -= sy_max;
}
}
break;
@@ -496,13 +573,31 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
for (DesY=DestRect->top; DesYbottom; DesY++)
{
- sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top;
+ sx = SourceRect->left;
+ sx_dec = 0;
for (DesX=DestRect->left; DesXright; DesX++)
{
- sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left;
- color = DIB_16BPP_GetPixel(SourceSurf, sx, sy);
- DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+ color = XLATEOBJ_iXlate(ColorTranslation,
+ DIB_16BPP_GetPixel(SourceSurf, sx, sy));
+
+ DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color);
+
+ sx += SrcZoomXHight;
+ sx_dec += SrcZoomXLow;
+ if (sx_dec >= sx_max)
+ {
+ sx++;
+ sx_dec -= sx_max;
+ }
+ }
+
+ sy += SrcZoomYHight;
+ sy_dec += SrcZoomYLow;
+ if (sy_dec >= sy_max)
+ {
+ sy++;
+ sy_dec -= sy_max;
}
}
break;
@@ -513,13 +608,31 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
for (DesY=DestRect->top; DesYbottom; DesY++)
{
- sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top;
+ sx = SourceRect->left;
+ sx_dec = 0;
for (DesX=DestRect->left; DesXright; DesX++)
{
- sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left;
- color = DIB_24BPP_GetPixel(SourceSurf, sx, sy);
- DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+ color = XLATEOBJ_iXlate(ColorTranslation,
+ DIB_24BPP_GetPixel(SourceSurf, sx, sy));
+
+ DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color);
+
+ sx += SrcZoomXHight;
+ sx_dec += SrcZoomXLow;
+ if (sx_dec >= sx_max)
+ {
+ sx++;
+ sx_dec -= sx_max;
+ }
+ }
+
+ sy += SrcZoomYHight;
+ sy_dec += SrcZoomYLow;
+ if (sy_dec >= sy_max)
+ {
+ sy++;
+ sy_dec -= sy_max;
}
}
break;
@@ -530,13 +643,31 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
for (DesY=DestRect->top; DesYbottom; DesY++)
{
- sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top;
+ sx = SourceRect->left;
+ sx_dec = 0;
for (DesX=DestRect->left; DesXright; DesX++)
{
- sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left;
- color = DIB_32BPP_GetPixel(SourceSurf, sx, sy);
- DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+ color = XLATEOBJ_iXlate(ColorTranslation,
+ DIB_32BPP_GetPixel(SourceSurf, sx, sy));
+
+ DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color);
+
+ sx += SrcZoomXHight;
+ sx_dec += SrcZoomXLow;
+ if (sx_dec >= sx_max)
+ {
+ sx++;
+ sx_dec -= sx_max;
+ }
+ }
+
+ sy += SrcZoomYHight;
+ sy_dec += SrcZoomYLow;
+ if (sy_dec >= sy_max)
+ {
+ sy++;
+ sy_dec -= sy_max;
}
}
break;
@@ -559,9 +690,9 @@ DIB_24BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
SourceY = SourcePoint->y;
DestBits = (BYTE*)((PBYTE)DestSurf->pvScan0 +
- (DestRect->left << 2) +
+ (DestRect->left * 3) +
DestRect->top * DestSurf->lDelta);
- wd = DestSurf->lDelta - ((DestRect->right - DestRect->left) << 2);
+ wd = DestSurf->lDelta - ((DestRect->right - DestRect->left) * 3);
for(Y = DestRect->top; Y < DestRect->bottom; Y++)
{
diff --git a/reactos/subsystems/win32/win32k/dib/dib4bpp.c b/reactos/subsystems/win32/win32k/dib/dib4bpp.c
index 6118eb6f821..0f5ac60fdc7 100644
--- a/reactos/subsystems/win32/win32k/dib/dib4bpp.c
+++ b/reactos/subsystems/win32/win32k/dib/dib4bpp.c
@@ -510,7 +510,7 @@ BOOLEAN DIB_4BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
break;
default:
- //DPRINT1("DIB_4BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat));
+ DPRINT1("DIB_4BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat));
return FALSE;
}
diff --git a/reactos/subsystems/win32/win32k/dib/dib8bpp.c b/reactos/subsystems/win32/win32k/dib/dib8bpp.c
index 0d71e2a949c..66ba47e26bf 100644
--- a/reactos/subsystems/win32/win32k/dib/dib8bpp.c
+++ b/reactos/subsystems/win32/win32k/dib/dib8bpp.c
@@ -522,11 +522,11 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
case BMF_1BPP:
/* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
/* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesYtop; DesYbottom; DesY++)
{
sx = SourceRect->left;
sx_dec = 0;
- for (DesX=0; DesXleft; DesXright; DesX++)
{
color = XLATEOBJ_iXlate(ColorTranslation,
DIB_1BPP_GetPixel(SourceSurf, sx, sy));
@@ -555,11 +555,11 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
case BMF_4BPP:
/* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
/* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesYtop; DesYbottom; DesY++)
{
sx = SourceRect->left;
sx_dec = 0;
- for (DesX=0; DesXleft; DesXright; DesX++)
{
color = XLATEOBJ_iXlate(ColorTranslation,
DIB_4BPP_GetPixel(SourceSurf, sx, sy));
@@ -593,11 +593,11 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
case BMF_16BPP:
/* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
/* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesYtop; DesYbottom; DesY++)
{
sx = SourceRect->left;
sx_dec = 0;
- for (DesX=0; DesXleft; DesXright; DesX++)
{
color = XLATEOBJ_iXlate(ColorTranslation,
DIB_16BPP_GetPixel(SourceSurf, sx, sy));
@@ -624,11 +624,11 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
break;
case BMF_24BPP:
- for (DesY=0; DesYtop; DesYbottom; DesY++)
{
sx = SourceRect->left;
sx_dec = 0;
- for (DesX=0; DesXleft; DesXright; DesX++)
{
color = XLATEOBJ_iXlate(ColorTranslation,
DIB_24BPP_GetPixel(SourceSurf, sx, sy));
@@ -657,11 +657,11 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
case BMF_32BPP:
/* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
/* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesYtop; DesYbottom; DesY++)
{
sx = SourceRect->left;
sx_dec = 0;
- for (DesX=0; DesXleft; DesXright; DesX++)
{
color = XLATEOBJ_iXlate(ColorTranslation,
DIB_32BPP_GetPixel(SourceSurf, sx, sy));
diff --git a/reactos/subsystems/win32/win32k/eng/clip.c b/reactos/subsystems/win32/win32k/eng/clip.c
index bd0cddedf7f..1fa7dac1ea0 100644
--- a/reactos/subsystems/win32/win32k/eng/clip.c
+++ b/reactos/subsystems/win32/win32k/eng/clip.c
@@ -425,7 +425,6 @@ ClipobjToSpans(
(*Spans)[i].Width = Boundary->right - Boundary->left;
}
}
-
return TRUE;
}
@@ -447,7 +446,7 @@ ClipobjToSpans(
{
if (NULL != *Spans)
{
- ExFreePool(*Spans);
+ ExFreePoolWithTag(*Spans, TAG_CLIP);
*Spans = NULL;
}
*Count = 0;
@@ -461,7 +460,7 @@ ClipobjToSpans(
{
*dest++ = *src++;
}
- ExFreePool(*Spans);
+ ExFreePoolWithTag(*Spans, TAG_CLIP);
}
*Spans = NewSpans;
}
diff --git a/reactos/subsystems/win32/win32k/eng/event.c b/reactos/subsystems/win32/win32k/eng/event.c
index 09e1450c3f3..73342da320f 100644
--- a/reactos/subsystems/win32/win32k/eng/event.c
+++ b/reactos/subsystems/win32/win32k/eng/event.c
@@ -30,7 +30,7 @@ BOOL
STDCALL
EngDeleteEvent ( IN PEVENT Event)
{
- ExFreePool(Event);
+ ExFreePoolWithTag(Event, TAG_DFSM);
return TRUE;
}
@@ -56,7 +56,7 @@ EngMapEvent(IN HDEV Dev,
NULL);
if (!NT_SUCCESS(Status))
{
- ExFreePool(Event);
+ ExFreePoolWithTag(Event, TAG_DFSM);
return NULL;
}
else
@@ -79,7 +79,7 @@ STDCALL
EngUnmapEvent ( IN PEVENT Event )
{
ObDereferenceObject((PVOID)Event);
- ExFreePool(Event);
+ ExFreePoolWithTag(Event, TAG_DFSM);
return TRUE;
}
@@ -97,7 +97,7 @@ EngWaitForSingleObject (IN PEVENT Event,
KernelMode,
FALSE,
TimeOut);
- if (Status != STATUS_SUCCESS)
+ if (!NT_SUCCESS(Status))
{
return FALSE;
}
diff --git a/reactos/subsystems/win32/win32k/eng/float.c b/reactos/subsystems/win32/win32k/eng/float.c
index aa080ab9896..a603e852bc5 100644
--- a/reactos/subsystems/win32/win32k/eng/float.c
+++ b/reactos/subsystems/win32/win32k/eng/float.c
@@ -41,7 +41,7 @@ EngRestoreFloatingPointState ( IN VOID *Buffer )
{
NTSTATUS Status;
Status = KeRestoreFloatingPointState((PKFLOATING_SAVE)Buffer);
- if (Status != STATUS_SUCCESS)
+ if (!NT_SUCCESS(Status))
{
return FALSE;
}
diff --git a/reactos/subsystems/win32/win32k/eng/objects.h b/reactos/subsystems/win32/win32k/eng/objects.h
index 37fec8251c6..f2a93d9c0b2 100644
--- a/reactos/subsystems/win32/win32k/eng/objects.h
+++ b/reactos/subsystems/win32/win32k/eng/objects.h
@@ -67,12 +67,27 @@ typedef struct _FLOATGDI {
ULONG Dummy;
} FLOATGDI;
-typedef struct _FONTGDI {
- FONTOBJ FontObj;
- LPWSTR Filename;
- FT_Face face;
+#define FDM_TYPE_TEXT_METRIC 0x80000000
+
+typedef struct _FONTGDI {
+ FONTOBJ FontObj;
+ ULONG iUnique;
+ FLONG flType;
+ union{
+ DHPDEV dhpdev;
+ FT_Face face;
+ };
+ FLONG flRealizedType;
+
+ LONG lMaxNegA;
+ LONG lMaxNegC;
+ LONG lMinWidthD;
+
TEXTMETRICW TextMetric;
+ LPWSTR Filename;
+ BYTE Underline;
+ BYTE StrikeOut;
} FONTGDI, *PFONTGDI;
typedef struct _PATHGDI {
diff --git a/reactos/subsystems/win32/win32k/eng/semaphor.c b/reactos/subsystems/win32/win32k/eng/semaphor.c
index 50d20841cd1..b16d86abf3b 100644
--- a/reactos/subsystems/win32/win32k/eng/semaphor.c
+++ b/reactos/subsystems/win32/win32k/eng/semaphor.c
@@ -16,7 +16,7 @@ EngCreateSemaphore ( VOID )
return NULL;
if ( !NT_SUCCESS(ExInitializeResourceLite ( psem )) )
{
- ExFreePool ( psem );
+ ExFreePoolWithTag ( psem, TAG_GSEM );
return NULL;
}
return (HSEMAPHORE)psem;
@@ -81,7 +81,7 @@ EngDeleteSemaphore ( IN HSEMAPHORE hsem )
ExDeleteResourceLite((PERESOURCE)hsem);
- ExFreePool ( (PVOID)hsem );
+ ExFreePoolWithTag( (PVOID)hsem, TAG_GSEM);
}
/*
diff --git a/reactos/subsystems/win32/win32k/eng/xlate.c b/reactos/subsystems/win32/win32k/eng/xlate.c
index 1b1265490c9..0095315b00c 100644
--- a/reactos/subsystems/win32/win32k/eng/xlate.c
+++ b/reactos/subsystems/win32/win32k/eng/xlate.c
@@ -518,6 +518,8 @@ EngDeleteXlate(XLATEOBJ *XlateObj)
XlateGDI = ObjToGDI(XlateObj, XLATE);
+ if (!XlateGDI) return;
+
if ((XlateObj->flXlate & XO_TABLE) &&
XlateObj->pulXlate != NULL)
{
diff --git a/reactos/subsystems/win32/win32k/include/gdiobj.h b/reactos/subsystems/win32/win32k/include/gdiobj.h
index a31df8f2cbe..5843aceee83 100644
--- a/reactos/subsystems/win32/win32k/include/gdiobj.h
+++ b/reactos/subsystems/win32/win32k/include/gdiobj.h
@@ -21,7 +21,7 @@ typedef struct _GDI_HANDLE_TABLE
FLONG flDeviceUniq; // Device settings uniqueness.
PVOID pvLangPack; // Language Pack.
CFONT cfPublic[GDI_CFONT_MAX]; // Public Fonts.
- DWORD dwCsbSupported1; // OEM code-page bitfield.
+ DWORD dwCFCount;
//////////////////////////////////////////////////////////////////////////////
PPAGED_LOOKASIDE_LIST LookasideLists;
diff --git a/reactos/subsystems/win32/win32k/include/misc.h b/reactos/subsystems/win32/win32k/include/misc.h
index 39d00cbd069..2007e8b9b95 100644
--- a/reactos/subsystems/win32/win32k/include/misc.h
+++ b/reactos/subsystems/win32/win32k/include/misc.h
@@ -31,6 +31,9 @@
#define W32PF_CREATEDWINORDC (0x04000000)
+extern SHORT gusLanguageID;
+
+SHORT FASTCALL IntGdiGetLanguageID();
ULONG FASTCALL IntSystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni);
DWORD STDCALL IntGetQueueStatus(BOOL ClearChanges);
VOID FASTCALL IntUserManualGuiCheck(LONG Check);
diff --git a/reactos/subsystems/win32/win32k/include/text.h b/reactos/subsystems/win32/win32k/include/text.h
index 1c9e7759912..e940eb2fab4 100644
--- a/reactos/subsystems/win32/win32k/include/text.h
+++ b/reactos/subsystems/win32/win32k/include/text.h
@@ -54,16 +54,23 @@ typedef struct _STRGDI
ULONG acFaceNameGlyphs[8];
} STRGDI, *PSTRGDI;
+#define TEXTOBJECT_INIT 0x00010000
+
/* GDI logical font object */
typedef struct
{
/* Header for all gdi objects in the handle table.
Do not (re)move this. */
BASEOBJECT BaseObject;
-
- ENUMLOGFONTEXDVW logfont; //LOGFONTW logfont;
- FONTOBJ *Font;
- BOOLEAN Initialized; /* Don't reinitialize for each DC */
+ LFTYPE lft;
+ FLONG fl;
+ FONTOBJ *Font;
+ WCHAR FullName[LF_FULLFACESIZE];
+ WCHAR Style[LF_FACESIZE];
+ WCHAR FaceName[LF_FACESIZE];
+ DWORD dwOffsetEndArray;
+// Fixed:
+ ENUMLOGFONTEXDVW logfont;
} TEXTOBJ, *PTEXTOBJ;
/* Internal interface */
@@ -75,7 +82,8 @@ typedef struct
#define TEXTOBJ_LockText(hBMObj) ((PTEXTOBJ) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_FONT))
#define TEXTOBJ_UnlockText(pBMObj) GDIOBJ_UnlockObjByPtr ((POBJ)pBMObj)
-NTSTATUS FASTCALL TextIntRealizeFont(HFONT FontHandle);
+PTEXTOBJ FASTCALL RealizeFontInit(HFONT);
+NTSTATUS FASTCALL TextIntRealizeFont(HFONT,PTEXTOBJ);
NTSTATUS FASTCALL TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont);
BOOL FASTCALL InitFontSupport(VOID);
BOOL FASTCALL IntIsFontRenderingEnabled(VOID);
@@ -84,6 +92,18 @@ VOID FASTCALL IntEnableFontRendering(BOOL Enable);
INT FASTCALL FontGetObject(PTEXTOBJ TextObj, INT Count, PVOID Buffer);
VOID FASTCALL IntLoadSystemFonts(VOID);
INT FASTCALL IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics);
+ULONG FASTCALL ftGdiGetGlyphOutline(PDC,WCHAR,UINT,LPGLYPHMETRICS,ULONG,PVOID,LPMAT2,BOOL);
+INT FASTCALL IntGetOutlineTextMetrics(PFONTGDI,UINT,OUTLINETEXTMETRICW *);
+BOOL FASTCALL ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS);
+BOOL FASTCALL TextIntGetTextExtentPoint(PDC,PTEXTOBJ,LPCWSTR,int,int,LPINT,LPINT,LPSIZE);
+BOOL FASTCALL ftGdiGetTextMetricsW(HDC,PTMW_INTERNAL);
+DWORD FASTCALL IntGetFontLanguageInfo(PDC);
+INT FASTCALL ftGdiGetTextCharsetInfo(PDC,PFONTSIGNATURE,DWORD);
+DWORD FASTCALL ftGetFontUnicodeRanges(PFONTGDI, PGLYPHSET);
+DWORD FASTCALL ftGdiGetFontData(PFONTGDI,DWORD,DWORD,PVOID,DWORD);
+BOOL FASTCALL IntGdiGetFontResourceInfo(PUNICODE_STRING,PVOID,DWORD*,DWORD);
+BOOL FASTCALL ftGdiRealizationInfo(PFONTGDI,PREALIZATION_INFO);
+DWORD FASTCALL ftGdiGetKerningPairs(PFONTGDI,DWORD,LPKERNINGPAIR);
#define IntLockProcessPrivateFonts(W32Process) \
ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&W32Process->PrivateFontListLock)
diff --git a/reactos/subsystems/win32/win32k/main/dllmain.c b/reactos/subsystems/win32/win32k/main/dllmain.c
index 2a907a85ef7..3dcbdd7e7d0 100644
--- a/reactos/subsystems/win32/win32k/main/dllmain.c
+++ b/reactos/subsystems/win32/win32k/main/dllmain.c
@@ -42,6 +42,8 @@ PSERVERINFO gpsi = NULL; // Global User Server Information.
HSEMAPHORE hsemDriverMgmt = NULL;
+SHORT gusLanguageID;
+
extern ULONG_PTR Win32kSSDT[];
extern UCHAR Win32kSSPT[];
extern ULONG Win32kNumberOfSysCalls;
@@ -420,6 +422,13 @@ DriverEntry (
if(!hsemDriverMgmt) hsemDriverMgmt = EngCreateSemaphore();
+ GdiHandleTable = GDIOBJ_iAllocHandleTable(&GdiTableSection);
+ if (GdiHandleTable == NULL)
+ {
+ DPRINT1("Failed to initialize the GDI handle table.\n");
+ return STATUS_UNSUCCESSFUL;
+ }
+
Status = InitUserImpl();
if (!NT_SUCCESS(Status))
{
@@ -511,13 +520,6 @@ DriverEntry (
return(Status);
}
- GdiHandleTable = GDIOBJ_iAllocHandleTable(&GdiTableSection);
- if (GdiHandleTable == NULL)
- {
- DPRINT1("Failed to initialize the GDI handle table.\n");
- return STATUS_UNSUCCESSFUL;
- }
-
Status = InitDcImpl();
if (!NT_SUCCESS(Status))
{
@@ -537,6 +539,8 @@ DriverEntry (
CreateStockObjects();
CreateSysColorObjects();
+ gusLanguageID = IntGdiGetLanguageID();
+
return STATUS_SUCCESS;
}
diff --git a/reactos/subsystems/win32/win32k/misc/driver.c b/reactos/subsystems/win32/win32k/misc/driver.c
index 197142ab565..01c9c680301 100644
--- a/reactos/subsystems/win32/win32k/misc/driver.c
+++ b/reactos/subsystems/win32/win32k/misc/driver.c
@@ -41,12 +41,19 @@ typedef struct _GRAPHICS_DRIVER
} GRAPHICS_DRIVER, *PGRAPHICS_DRIVER;
static PGRAPHICS_DRIVER DriverList;
-static PGRAPHICS_DRIVER GenericDriver = 0;
+static PGRAPHICS_DRIVER GenericDriver = NULL;
BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver)
{
- PGRAPHICS_DRIVER Driver = ExAllocatePoolWithTag(PagedPool, sizeof(*Driver), TAG_DRIVER);
+ PGRAPHICS_DRIVER Driver;
+
DPRINT( "DRIVER_RegisterDriver( Name: %S )\n", Name );
+
+ if (GenericDriver != NULL)
+ {
+ return FALSE;
+ }
+ Driver = ExAllocatePoolWithTag(PagedPool, sizeof(*Driver), TAG_DRIVER);
if (!Driver) return FALSE;
Driver->ReferenceCount = 0;
Driver->EnableDriver = EnableDriver;
@@ -58,7 +65,7 @@ BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver)
if (Driver->Name == NULL)
{
DPRINT1("Out of memory\n");
- ExFreePool(Driver);
+ ExFreePoolWithTag(Driver, TAG_DRIVER);
return FALSE;
}
@@ -68,12 +75,6 @@ BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver)
return TRUE;
}
- if (GenericDriver != NULL)
- {
- ExFreePool(Driver);
- return FALSE;
- }
-
GenericDriver = Driver;
return TRUE;
}
@@ -156,7 +157,7 @@ PGD_ENABLEDRIVER DRIVER_FindDDIDriver(LPCWSTR Name)
ExistingDriver = DRIVER_FindExistingDDIDriver(FullName);
if (ExistingDriver)
{
- ExFreePool(FullName);
+ ExFreePoolWithTag(FullName, TAG_DRIVER);
return ExistingDriver;
}
@@ -172,7 +173,7 @@ PGD_ENABLEDRIVER DRIVER_FindDDIDriver(LPCWSTR Name)
DRIVER_RegisterDriver( L"DISPLAY", GdiDriverInfo.EntryPoint);
DRIVER_RegisterDriver( FullName, GdiDriverInfo.EntryPoint);
- ExFreePool(FullName);
+ ExFreePoolWithTag(FullName, TAG_DRIVER);
return (PGD_ENABLEDRIVER)GdiDriverInfo.EntryPoint;
}
diff --git a/reactos/subsystems/win32/win32k/ntddraw/d3d.c b/reactos/subsystems/win32/win32k/ntddraw/d3d.c
index 5ac35bc190e..769478d3a1a 100644
--- a/reactos/subsystems/win32/win32k/ntddraw/d3d.c
+++ b/reactos/subsystems/win32/win32k/ntddraw/d3d.c
@@ -123,11 +123,11 @@ NtGdiD3dContextCreate(HANDLE hDirectDrawLocal,
if (pfnD3dContextCreate == NULL)
{
- DPRINT1("Warring no pfnD3dContextCreate");
+ DPRINT1("Warning: no pfnD3dContextCreate");
return FALSE;
}
- DPRINT1("Calling on dxg.sys D3dContextCreate");
+ DPRINT1("Calling dxg.sys D3dContextCreate");
return pfnD3dContextCreate(hDirectDrawLocal, hSurfColor, hSurfZ, pdcci);
}
@@ -158,11 +158,11 @@ NtGdiD3dContextDestroy(LPD3DNTHAL_CONTEXTDESTROYDATA pContextDestroyData)
if ( pfnD3dContextDestroy == NULL)
{
- DPRINT1("Warring no pfnD3dContextDestroy");
+ DPRINT1("Warning: no pfnD3dContextDestroy");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys D3dContextDestroy");
+ DPRINT1("Calling dxg.sys D3dContextDestroy");
return pfnD3dContextDestroy(pContextDestroyData);
}
@@ -196,11 +196,11 @@ NtGdiD3dContextDestroyAll(LPD3DNTHAL_CONTEXTDESTROYALLDATA pdcad)
if (pfnD3dContextDestroyAll == NULL)
{
- DPRINT1("Warring no pfnD3dContextDestroyAll");
+ DPRINT1("Warning: no pfnD3dContextDestroyAll");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys D3dContextDestroyAll");
+ DPRINT1("Calling dxg.sys D3dContextDestroyAll");
return pfnD3dContextDestroyAll(pdcad);
}
@@ -271,11 +271,11 @@ NtGdiDdCreateD3DBuffer(HANDLE hDirectDraw,
if (pfnDdCreateD3DBuffer == NULL)
{
- DPRINT1("Warring no pfnDdCreateD3DBuffer");
+ DPRINT1("Warning no pfnDdCreateD3DBuffer");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys DdCreateD3DBuffer");
+ DPRINT1("Calling dxg.sys DdCreateD3DBuffer");
return pfnDdCreateD3DBuffer(hDirectDraw, hSurface,
puSurfaceDescription, puSurfaceGlobalData,
puSurfaceLocalData, puSurfaceMoreData,
@@ -293,11 +293,11 @@ NtGdiDdDestroyD3DBuffer(HANDLE hSurface)
if (pfnDdDestroyD3DBuffer == NULL)
{
- DPRINT1("Warring no pfnDdDestroyD3DBuffer");
+ DPRINT1("Warning no pfnDdDestroyD3DBuffer");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdDestroyD3DBuffer");
+ DPRINT1("Calling dxg.sys pfnDdDestroyD3DBuffer");
return pfnDdDestroyD3DBuffer(hSurface);
}
@@ -318,11 +318,11 @@ NtGdiD3dDrawPrimitives2(HANDLE hCmdBuf,
if (pfnD3dDrawPrimitives2 == NULL)
{
- DPRINT1("Warring no pfnD3dDrawPrimitives2");
+ DPRINT1("Warning: no pfnD3dDrawPrimitives2");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys D3dDrawPrimitives2");
+ DPRINT1("Calling dxg.sys D3dDrawPrimitives2");
return pfnD3dDrawPrimitives2(hCmdBuf,hVBuf,pded,pfpVidMemCmd,pdwSizeCmd,pfpVidMemVtx,pdwSizeVtx);
}
@@ -339,11 +339,11 @@ NtGdiDdLockD3D(HANDLE hSurface,
if (pfnDdLockD3D == NULL)
{
- DPRINT1("Warring no pfnDdLockD3D");
+ DPRINT1("Warning: no pfnDdLockD3D");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdLockD3D");
+ DPRINT1("Calling dxg.sys pfnDdLockD3D");
return pfnDdLockD3D(hSurface, puLockData);
}
@@ -358,11 +358,11 @@ NtGdiD3dValidateTextureStageState(LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA pData
if (pfnD3dValidateTextureStageState == NULL)
{
- DPRINT1("Warring no pfnD3dValidateTextureStageState");
+ DPRINT1("Warning: no pfnD3dValidateTextureStageState");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys D3dValidateTextureStageState");
+ DPRINT1("Calling dxg.sys D3dValidateTextureStageState");
return pfnD3dValidateTextureStageState(pData);
}
@@ -378,11 +378,11 @@ NtGdiDdUnlockD3D(HANDLE hSurface,
if (pfnDdUnlockD3D == NULL)
{
- DPRINT1("Warring no pfnDdUnlockD3D");
+ DPRINT1("Warning: no pfnDdUnlockD3D");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdUnlockD3D");
+ DPRINT1("Calling dxg.sys pfnDdUnlockD3D");
return pfnDdUnlockD3D(hSurface, puUnlockData);
}
diff --git a/reactos/subsystems/win32/win32k/ntddraw/dd.c b/reactos/subsystems/win32/win32k/ntddraw/dd.c
index 2b6df794d0f..03940af895e 100644
--- a/reactos/subsystems/win32/win32k/ntddraw/dd.c
+++ b/reactos/subsystems/win32/win32k/ntddraw/dd.c
@@ -29,11 +29,11 @@ NtGdiDdCreateSurface(HANDLE hDirectDrawLocal,
if (pfnDdCreateSurface == NULL)
{
- DPRINT1("Warring no pfnDdCreateSurface\n");
+ DPRINT1("Warning: no pfnDdCreateSurface\n");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdCreateSurface\n");
+ DPRINT1("Calling dxg.sys pfnDdCreateSurface\n");
return pfnDdCreateSurface(hDirectDrawLocal,hSurface,puSurfaceDescription,puSurfaceGlobalData,
puSurfaceLocalData,puSurfaceMoreData,puCreateSurfaceData,puhSurface);
}
@@ -50,11 +50,11 @@ NtGdiDdWaitForVerticalBlank(HANDLE hDirectDraw,
if (pfnDdWaitForVerticalBlank == NULL)
{
- DPRINT1("Warring no pfnDdWaitForVerticalBlank\n");
+ DPRINT1("Warning: no pfnDdWaitForVerticalBlank\n");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdWaitForVerticalBlank\n");
+ DPRINT1("Calling dxg.sys pfnDdWaitForVerticalBlank\n");
return pfnDdWaitForVerticalBlank(hDirectDraw, puWaitForVerticalBlankData);
}
@@ -70,11 +70,11 @@ NtGdiDdCanCreateSurface(HANDLE hDirectDrawLocal,
if (pfnDdCanCreateSurface == NULL)
{
- DPRINT1("Warring no pfnDdCanCreateSurface\n");
+ DPRINT1("Warning: no pfnDdCanCreateSurface\n");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys DdCanCreateSurface\n");
+ DPRINT1("Calling dxg.sys DdCanCreateSurface\n");
return pfnDdCanCreateSurface(hDirectDrawLocal,puCanCreateSurfaceData);
}
@@ -91,11 +91,11 @@ NtGdiDdGetScanLine(HANDLE hDirectDrawLocal,
if (pfnDdGetScanLine == NULL)
{
- DPRINT1("Warring no pfnDdGetScanLine\n");
+ DPRINT1("Warning: no pfnDdGetScanLine\n");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdGetScanLine\n");
+ DPRINT1("Calling dxg.sys pfnDdGetScanLine\n");
return pfnDdGetScanLine(hDirectDrawLocal,puGetScanLineData);
}
@@ -119,11 +119,11 @@ NtGdiDdCreateSurfaceEx(HANDLE hDirectDraw,
if (pfnDdCreateSurfaceEx == NULL)
{
- DPRINT1("Warring no pfnDdCreateSurfaceEx\n");
+ DPRINT1("Warning: no pfnDdCreateSurfaceEx\n");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdCreateSurfaceEx\n");
+ DPRINT1("Calling dxg.sys pfnDdCreateSurfaceEx\n");
return pfnDdCreateSurfaceEx(hDirectDraw,hSurface,dwSurfaceHandle);
}
diff --git a/reactos/subsystems/win32/win32k/ntddraw/ddraw.c b/reactos/subsystems/win32/win32k/ntddraw/ddraw.c
index 69f14ee0c2b..788cbcb695d 100644
--- a/reactos/subsystems/win32/win32k/ntddraw/ddraw.c
+++ b/reactos/subsystems/win32/win32k/ntddraw/ddraw.c
@@ -94,7 +94,7 @@ intEnableReactXDriver(HDC hdc)
}
else
{
- DPRINT1(" The dxg.sys and graphic card driver interface is enable \n ");
+ DPRINT1(" The dxg.sys and graphic card driver interface is enabled \n ");
success = TRUE;
}
}
diff --git a/reactos/subsystems/win32/win32k/ntddraw/dvp.c b/reactos/subsystems/win32/win32k/ntddraw/dvp.c
index 701423d3907..7d0e6c00784 100644
--- a/reactos/subsystems/win32/win32k/ntddraw/dvp.c
+++ b/reactos/subsystems/win32/win32k/ntddraw/dvp.c
@@ -24,11 +24,11 @@ NtGdiDvpCanCreateVideoPort(HANDLE hDirectDraw,
if (pfnDvpCanCreateVideoPort == NULL)
{
- DPRINT1("Warring no pfnDvpCanCreateVideoPort");
+ DPRINT1("Warning: no pfnDvpCanCreateVideoPort");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpCanCreateVideoPort");
+ DPRINT1("Calling dxg.sys pfnDvpCanCreateVideoPort");
return pfnDvpCanCreateVideoPort(hDirectDraw, puCanCreateVPortData);
}
@@ -44,11 +44,11 @@ NtGdiDvpColorControl(HANDLE hVideoPort,
if (pfnDvpColorControl == NULL)
{
- DPRINT1("Warring no pfnDvpColorControl");
+ DPRINT1("Warning: no pfnDvpColorControl");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpColorControl");
+ DPRINT1("Calling dxg.sys pfnDvpColorControl");
return pfnDvpColorControl(hVideoPort, puVPortColorData);
}
@@ -64,11 +64,11 @@ NtGdiDvpCreateVideoPort(HANDLE hDirectDraw,
if (pfnDvpCreateVideoPort == NULL)
{
- DPRINT1("Warring no pfnDvpCreateVideoPort");
+ DPRINT1("Warning: no pfnDvpCreateVideoPort");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpCreateVideoPort");
+ DPRINT1("Calling dxg.sys pfnDvpCreateVideoPort");
return pfnDvpCreateVideoPort(hDirectDraw, puCreateVPortData);
}
@@ -84,11 +84,11 @@ NtGdiDvpDestroyVideoPort(HANDLE hVideoPort,
if (pfnDvpDestroyVideoPort == NULL)
{
- DPRINT1("Warring no pfnDvpDestroyVideoPort");
+ DPRINT1("Warning: no pfnDvpDestroyVideoPort");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpDestroyVideoPort");
+ DPRINT1("Calling dxg.sys pfnDvpDestroyVideoPort");
return pfnDvpDestroyVideoPort(hVideoPort, puDestroyVPortData);
}
@@ -106,11 +106,11 @@ NtGdiDvpFlipVideoPort(HANDLE hVideoPort,
if (pfnDvpFlipVideoPort == NULL)
{
- DPRINT1("Warring no pfnDvpFlipVideoPort");
+ DPRINT1("Warning: no pfnDvpFlipVideoPort");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpFlipVideoPort");
+ DPRINT1("Calling dxg.sys pfnDvpFlipVideoPort");
return pfnDvpFlipVideoPort(hVideoPort, hDDSurfaceCurrent, hDDSurfaceTarget, puFlipVPortData);
}
@@ -127,11 +127,11 @@ NtGdiDvpGetVideoPortBandwidth(HANDLE hVideoPort,
if (pfnDvpGetVideoPortBandwidth == NULL)
{
- DPRINT1("Warring no pfnDvpGetVideoPortBandwidth");
+ DPRINT1("Warning: no pfnDvpGetVideoPortBandwidth");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpGetVideoPortBandwidth");
+ DPRINT1("Calling dxg.sys pfnDvpGetVideoPortBandwidth");
return pfnDvpGetVideoPortBandwidth(hVideoPort, puGetVPortBandwidthData);
}
@@ -148,11 +148,11 @@ NtGdiDvpGetVideoPortFlipStatus(HANDLE hDirectDraw,
if (pfnDvpGetVideoPortFlipStatus == NULL)
{
- DPRINT1("Warring no pfnDvpGetVideoPortFlipStatus");
+ DPRINT1("Warning: no pfnDvpGetVideoPortFlipStatus");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpGetVideoPortFlipStatus");
+ DPRINT1("Calling dxg.sys pfnDvpGetVideoPortFlipStatus");
return pfnDvpGetVideoPortFlipStatus(hDirectDraw, puGetVPortFlipStatusData);
}
@@ -169,11 +169,11 @@ NtGdiDvpGetVideoPortInputFormats(HANDLE hVideoPort,
if (pfnDvpGetVideoPortInputFormats == NULL)
{
- DPRINT1("Warring no pfnDvpGetVideoPortInputFormats");
+ DPRINT1("Warning: no pfnDvpGetVideoPortInputFormats");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpGetVideoPortInputFormats");
+ DPRINT1("Calling dxg.sys pfnDvpGetVideoPortInputFormats");
return pfnDvpGetVideoPortInputFormats(hVideoPort, puGetVPortInputFormatData);
}
@@ -190,11 +190,11 @@ NtGdiDvpGetVideoPortLine(HANDLE hVideoPort,
if (pfnDvpGetVideoPortLine == NULL)
{
- DPRINT1("Warring no pfnDvpGetVideoPortLine");
+ DPRINT1("Warning: no pfnDvpGetVideoPortLine");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpGetVideoPortLine");
+ DPRINT1("Calling dxg.sys pfnDvpGetVideoPortLine");
return pfnDvpGetVideoPortLine(hVideoPort, puGetVPortLineData);
}
@@ -211,11 +211,11 @@ NtGdiDvpGetVideoPortOutputFormats(HANDLE hVideoPort,
if (pfnDvpGetVideoPortOutputFormats == NULL)
{
- DPRINT1("Warring no pfnDvpGetVideoPortOutputFormats");
+ DPRINT1("Warning: no pfnDvpGetVideoPortOutputFormats");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpGetVideoPortOutputFormats");
+ DPRINT1("Calling dxg.sys pfnDvpGetVideoPortOutputFormats");
return pfnDvpGetVideoPortOutputFormats(hVideoPort, puGetVPortOutputFormatData);
}
@@ -233,11 +233,11 @@ NtGdiDvpGetVideoPortConnectInfo(HANDLE hDirectDraw,
if (pfnDvpGetVideoPortConnectInfo == NULL)
{
- DPRINT1("Warring no pfnDvpGetVideoPortConnectInfo");
+ DPRINT1("Warning: no pfnDvpGetVideoPortConnectInfo");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpGetVideoPortConnectInfo");
+ DPRINT1("Calling dxg.sys pfnDvpGetVideoPortConnectInfo");
return pfnDvpGetVideoPortConnectInfo(hDirectDraw, puGetVPortConnectData);
}
@@ -254,11 +254,11 @@ NtGdiDvpGetVideoSignalStatus(HANDLE hVideoPort,
if (pfnDvpGetVideoSignalStatus == NULL)
{
- DPRINT1("Warring no pfnDvpGetVideoSignalStatus");
+ DPRINT1("Warning: no pfnDvpGetVideoSignalStatus");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpGetVideoSignalStatus");
+ DPRINT1("Calling dxg.sys pfnDvpGetVideoSignalStatus");
return pfnDvpGetVideoSignalStatus(hVideoPort, puGetVPortSignalData);
}
@@ -278,11 +278,11 @@ NtGdiDvpUpdateVideoPort(HANDLE hVideoPort,
if (pfnDvpUpdateVideoPort == NULL)
{
- DPRINT1("Warring no pfnDvpUpdateVideoPort");
+ DPRINT1("Warning: no pfnDvpUpdateVideoPort");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpUpdateVideoPort");
+ DPRINT1("Calling dxg.sys pfnDvpUpdateVideoPort");
return pfnDvpUpdateVideoPort(hVideoPort, phSurfaceVideo, phSurfaceVbi, puUpdateVPortData);
}
@@ -300,11 +300,11 @@ NtGdiDvpWaitForVideoPortSync(HANDLE hVideoPort,
if (pfnDvpWaitForVideoPortSync == NULL)
{
- DPRINT1("Warring no pfnDvpWaitForVideoPortSync");
+ DPRINT1("Warning: no pfnDvpWaitForVideoPortSync");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpWaitForVideoPortSync");
+ DPRINT1("Calling dxg.sys pfnDvpWaitForVideoPortSync");
return pfnDvpWaitForVideoPortSync(hVideoPort, puWaitForVPortSyncData);
}
@@ -322,11 +322,11 @@ NtGdiDvpAcquireNotification(HANDLE hVideoPort,
if (pfnDvpAcquireNotification == NULL)
{
- DPRINT1("Warring no pfnDvpAcquireNotification");
+ DPRINT1("Warning: no pfnDvpAcquireNotification");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpAcquireNotification");
+ DPRINT1("Calling dxg.sys pfnDvpAcquireNotification");
return pfnDvpAcquireNotification(hVideoPort, hEvent, pNotify);
}
@@ -343,11 +343,11 @@ NtGdiDvpReleaseNotification(HANDLE hVideoPort,
if (pfnDvpReleaseNotification == NULL)
{
- DPRINT1("Warring no pfnDvpReleaseNotification");
+ DPRINT1("Warning: no pfnDvpReleaseNotification");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpReleaseNotification");
+ DPRINT1("Calling dxg.sys pfnDvpReleaseNotification");
return pfnDvpReleaseNotification(hVideoPort, hEvent);
}
@@ -365,11 +365,11 @@ NtGdiDvpGetVideoPortField(HANDLE hVideoPort,
if (pfnDvpGetVideoPortField == NULL)
{
- DPRINT1("Warring no pfnDvpGetVideoPortField");
+ DPRINT1("Warning: no pfnDvpGetVideoPortField");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDvpGetVideoPortField");
+ DPRINT1("Calling dxg.sys pfnDvpGetVideoPortField");
return pfnDvpGetVideoPortField(hVideoPort, puGetVPortFieldData);
}
diff --git a/reactos/subsystems/win32/win32k/ntddraw/mocomp.c b/reactos/subsystems/win32/win32k/ntddraw/mocomp.c
index 92fe0d46d28..156ef8574b6 100644
--- a/reactos/subsystems/win32/win32k/ntddraw/mocomp.c
+++ b/reactos/subsystems/win32/win32k/ntddraw/mocomp.c
@@ -24,11 +24,11 @@ NtGdiDdBeginMoCompFrame(HANDLE hMoComp,
if (pfnDdBeginMoCompFrame == NULL)
{
- DPRINT1("Warring no pfnDdBeginMoCompFrame");
+ DPRINT1("Warning: no pfnDdBeginMoCompFrame");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys DdBeginMoCompFrame");
+ DPRINT1("Calling dxg.sys DdBeginMoCompFrame");
return pfnDdBeginMoCompFrame(hMoComp,puBeginFrameData);
}
@@ -43,11 +43,11 @@ NtGdiDdCreateMoComp(HANDLE hDirectDraw, PDD_CREATEMOCOMPDATA puCreateMoCompData)
if (pfnDdCreateMoComp == NULL)
{
- DPRINT1("Warring no pfnDdCreateMoComp");
+ DPRINT1("Warning: no pfnDdCreateMoComp");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys DdCreateMoComp");
+ DPRINT1("Calling dxg.sys DdCreateMoComp");
return pfnDdCreateMoComp(hDirectDraw, puCreateMoCompData);
}
@@ -63,11 +63,11 @@ NtGdiDdDestroyMoComp(HANDLE hMoComp,
if (pfnDxDdDestroyMoComp == NULL)
{
- DPRINT1("Warring no pfnDxDdDestroyMoComp");
+ DPRINT1("Warning: no pfnDxDdDestroyMoComp");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys DxDdDestroyMoComp");
+ DPRINT1("Calling dxg.sys DxDdDestroyMoComp");
return pfnDxDdDestroyMoComp(hMoComp, puBeginFrameData);
}
@@ -83,11 +83,11 @@ NtGdiDdEndMoCompFrame(HANDLE hMoComp,
if (pfnDdEndMoCompFrame == NULL)
{
- DPRINT1("Warring no pfnDdEndMoCompFrame");
+ DPRINT1("Warning: no pfnDdEndMoCompFrame");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdEndMoCompFrame");
+ DPRINT1("Calling dxg.sys pfnDdEndMoCompFrame");
return pfnDdEndMoCompFrame(hMoComp, puEndFrameData);
}
@@ -103,11 +103,11 @@ NtGdiDdGetInternalMoCompInfo(HANDLE hDirectDraw,
if (pfnDdGetInternalMoCompInfo == NULL)
{
- DPRINT1("Warring no pfnDdGetInternalMoCompInfo");
+ DPRINT1("Warning: no pfnDdGetInternalMoCompInfo");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdGetInternalMoCompInfo");
+ DPRINT1("Calling dxg.sys pfnDdGetInternalMoCompInfo");
return pfnDdGetInternalMoCompInfo(hDirectDraw, puGetInternalData);
}
@@ -124,11 +124,11 @@ NtGdiDdGetMoCompBuffInfo(HANDLE hDirectDraw,
if (pfnDdGetMoCompBuffInfo == NULL)
{
- DPRINT1("Warring no pfnDdGetMoCompBuffInfo");
+ DPRINT1("Warning: no pfnDdGetMoCompBuffInfo");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdGetMoCompBuffInfo");
+ DPRINT1("Calling dxg.sys pfnDdGetMoCompBuffInfo");
return pfnDdGetMoCompBuffInfo(hDirectDraw, puGetBuffData);
}
@@ -144,11 +144,11 @@ NtGdiDdGetMoCompFormats(HANDLE hDirectDraw,
if (pfnDdGetMoCompFormats == NULL)
{
- DPRINT1("Warring no pfnDdGetMoCompFormats");
+ DPRINT1("Warning: no pfnDdGetMoCompFormats");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdGetMoCompFormats");
+ DPRINT1("Calling dxg.sys pfnDdGetMoCompFormats");
return pfnDdGetMoCompFormats(hDirectDraw, puGetMoCompFormatsData);
}
@@ -165,11 +165,11 @@ NtGdiDdGetMoCompGuids(HANDLE hDirectDraw,
if (pfnDdGetMoCompGuids == NULL)
{
- DPRINT1("Warring no pfnDdGetMoCompGuids");
+ DPRINT1("Warning: no pfnDdGetMoCompGuids");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdGetMoCompGuids");
+ DPRINT1("Calling dxg.sys pfnDdGetMoCompGuids");
return pfnDdGetMoCompGuids(hDirectDraw, puGetMoCompGuidsData);
}
@@ -187,11 +187,11 @@ NtGdiDdQueryMoCompStatus(HANDLE hMoComp,
if (pfnDdQueryMoCompStatus == NULL)
{
- DPRINT1("Warring no pfnDdQueryMoCompStatus");
+ DPRINT1("Warning: no pfnDdQueryMoCompStatus");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdQueryMoCompStatus");
+ DPRINT1("Calling dxg.sys pfnDdQueryMoCompStatus");
return pfnDdQueryMoCompStatus(hMoComp, puQueryMoCompStatusData);
}
@@ -208,11 +208,11 @@ NtGdiDdRenderMoComp(HANDLE hMoComp,
if (pfnDdRenderMoComp == NULL)
{
- DPRINT1("Warring no pfnDdRenderMoComp");
+ DPRINT1("Warning: no pfnDdRenderMoComp");
return DDHAL_DRIVER_NOTHANDLED;
}
- DPRINT1("Calling on dxg.sys pfnDdRenderMoComp");
+ DPRINT1("Calling dxg.sys pfnDdRenderMoComp");
return pfnDdRenderMoComp(hMoComp, puRenderMoCompData);
}
diff --git a/reactos/subsystems/win32/win32k/ntuser/accelerator.c b/reactos/subsystems/win32/win32k/ntuser/accelerator.c
index 9fcb1ac7fda..dd1b99d0443 100644
--- a/reactos/subsystems/win32/win32k/ntuser/accelerator.c
+++ b/reactos/subsystems/win32/win32k/ntuser/accelerator.c
@@ -371,7 +371,7 @@ NtUserCreateAcceleratorTable(
Status = MmCopyFromCaller(Accel->Table, Entries, EntriesCount * sizeof(ACCEL));
if (!NT_SUCCESS(Status))
{
- ExFreePool(Accel->Table);
+ ExFreePoolWithTag(Accel->Table, TAG_ACCEL);
UserDereferenceObject(Accel);
UserDeleteObject(hAccel, otAccel);
SetLastNtError(Status);
diff --git a/reactos/subsystems/win32/win32k/ntuser/callback.c b/reactos/subsystems/win32/win32k/ntuser/callback.c
index b47599cb18a..39051c3d0f7 100644
--- a/reactos/subsystems/win32/win32k/ntuser/callback.c
+++ b/reactos/subsystems/win32/win32k/ntuser/callback.c
@@ -86,7 +86,7 @@ IntCbFreeMemory(PVOID Data)
RemoveEntryList(&Mem->ListEntry);
/* free memory */
- ExFreePool(Mem);
+ ExFreePoolWithTag(Mem, TAG_CALLBACK);
}
VOID FASTCALL
diff --git a/reactos/subsystems/win32/win32k/ntuser/caret.c b/reactos/subsystems/win32/win32k/ntuser/caret.c
index 23eb04f85c7..05aa0e88b0d 100644
--- a/reactos/subsystems/win32/win32k/ntuser/caret.c
+++ b/reactos/subsystems/win32/win32k/ntuser/caret.c
@@ -123,7 +123,7 @@ IntQueryCaretBlinkRate(VOID)
if(!NT_SUCCESS(Status) || (KeyValuePartialInfo->Type != REG_SZ))
{
NtClose(KeyHandle);
- ExFreePool(KeyValuePartialInfo);
+ ExFreePoolWithTag(KeyValuePartialInfo, TAG_STRING);
return 0;
}
@@ -137,7 +137,7 @@ IntQueryCaretBlinkRate(VOID)
Val = 0;
}
- ExFreePool(KeyValuePartialInfo);
+ ExFreePoolWithTag(KeyValuePartialInfo, TAG_STRING);
NtClose(KeyHandle);
return (UINT)Val;
diff --git a/reactos/subsystems/win32/win32k/ntuser/event.c b/reactos/subsystems/win32/win32k/ntuser/event.c
index 20a9b975f48..bfad44ebf26 100644
--- a/reactos/subsystems/win32/win32k/ntuser/event.c
+++ b/reactos/subsystems/win32/win32k/ntuser/event.c
@@ -263,6 +263,11 @@ NtUserSetWinEventHook(
if ( !GlobalEvents )
{
GlobalEvents = ExAllocatePoolWithTag(PagedPool, sizeof(EVENTTABLE), TAG_HOOK);
+ if (GlobalEvents == NULL)
+ {
+ SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+ goto SetEventExit;
+ }
GlobalEvents->Counts = 0;
InitializeListHead(&GlobalEvents->Events);
}
@@ -348,7 +353,7 @@ NtUserSetWinEventHook(
if (! NT_SUCCESS(Status))
{
- ExFreePool(pEH->ModuleName.Buffer);
+ ExFreePoolWithTag(pEH->ModuleName.Buffer, TAG_HOOK);
UserDereferenceObject(pEH);
IntRemoveEvent(pEH);
SetLastNtError(Status);
diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c
index 9a7c6070446..e0631620a95 100644
--- a/reactos/subsystems/win32/win32k/ntuser/hook.c
+++ b/reactos/subsystems/win32/win32k/ntuser/hook.c
@@ -553,7 +553,7 @@ IntCallDebugHook(
if (HooklParam) Debug.lParam = (LPARAM)HooklParam;
lResult = co_HOOK_CallHookNext(Hook, Code, wParam, (LPARAM)&Debug);
- if (HooklParam) ExFreePool(HooklParam);
+ if (HooklParam) ExFreePoolWithTag(HooklParam, TAG_HOOK);
return lResult;
}
@@ -1131,7 +1131,7 @@ NtUserSetWindowsHookEx(
ModuleName.MaximumLength);
if (! NT_SUCCESS(Status))
{
- ExFreePool(Hook->ModuleName.Buffer);
+ ExFreePoolWithTag(Hook->ModuleName.Buffer, TAG_HOOK);
UserDereferenceObject(Hook);
IntRemoveHook(Hook, WinStaObj, FALSE);
if (NULL != Thread)
diff --git a/reactos/subsystems/win32/win32k/ntuser/input.c b/reactos/subsystems/win32/win32k/ntuser/input.c
index 1d2163ca2b9..e13ddf4213c 100644
--- a/reactos/subsystems/win32/win32k/ntuser/input.c
+++ b/reactos/subsystems/win32/win32k/ntuser/input.c
@@ -366,7 +366,7 @@ IntKeyboardGetIndicatorTrans(HANDLE KeyboardDeviceHandle,
if (Status != STATUS_BUFFER_TOO_SMALL)
break;
- ExFreePool(Ret);
+ ExFreePoolWithTag(Ret, TAG_KEYBOARD);
Size += sizeof(KEYBOARD_INDICATOR_TRANSLATION);
@@ -380,7 +380,7 @@ IntKeyboardGetIndicatorTrans(HANDLE KeyboardDeviceHandle,
if (Status != STATUS_SUCCESS)
{
- ExFreePool(Ret);
+ ExFreePoolWithTag(Ret, TAG_KEYBOARD);
return Status;
}
diff --git a/reactos/subsystems/win32/win32k/ntuser/keyboard.c b/reactos/subsystems/win32/win32k/ntuser/keyboard.c
index 1e1bad40df1..66849968fff 100644
--- a/reactos/subsystems/win32/win32k/ntuser/keyboard.c
+++ b/reactos/subsystems/win32/win32k/ntuser/keyboard.c
@@ -737,7 +737,7 @@ NtUserToUnicodeEx(
pti ? pti->KeyboardLayout->KBTables : 0 );
MmCopyToCaller(pwszBuff,OutPwszBuff,sizeof(WCHAR)*cchBuff);
- ExFreePool(OutPwszBuff);
+ ExFreePoolWithTag(OutPwszBuff, TAG_STRING);
}
else
ret = 0;
diff --git a/reactos/subsystems/win32/win32k/ntuser/menu.c b/reactos/subsystems/win32/win32k/ntuser/menu.c
index 6c902ef8a33..b10e5c6b170 100644
--- a/reactos/subsystems/win32/win32k/ntuser/menu.c
+++ b/reactos/subsystems/win32/win32k/ntuser/menu.c
@@ -387,7 +387,7 @@ IntCloneMenuItems(PMENU_OBJECT Destination, PMENU_OBJECT Source)
NewMenuItem->Text.Buffer = (PWSTR)ExAllocatePoolWithTag(PagedPool, MenuItem->Text.MaximumLength, TAG_STRING);
if(!NewMenuItem->Text.Buffer)
{
- ExFreePool(NewMenuItem);
+ ExFreePoolWithTag(NewMenuItem, TAG_MENUITEM);
break;
}
RtlCopyUnicodeString(&NewMenuItem->Text, &MenuItem->Text);
@@ -938,7 +938,7 @@ IntInsertMenuItem(PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
if(!IntSetMenuItemInfo(SubMenu, MenuItem, ItemInfo))
{
- ExFreePool(MenuItem);
+ ExFreePoolWithTag(MenuItem, TAG_MENUITEM);
return FALSE;
}
diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c
index befedc2e1a3..bcff2791512 100644
--- a/reactos/subsystems/win32/win32k/ntuser/message.c
+++ b/reactos/subsystems/win32/win32k/ntuser/message.c
@@ -1235,7 +1235,7 @@ CopyMsgToKernelMem(MSG *KernelModeMsg, MSG *UserModeMsg, PMSGMEMORY MsgMemoryEnt
if (! NT_SUCCESS(Status))
{
DPRINT1("Failed to copy message to kernel: invalid usermode buffer\n");
- ExFreePool(KernelMem);
+ ExFreePoolWithTag(KernelMem, TAG_MSG);
return Status;
}
}
diff --git a/reactos/subsystems/win32/win32k/ntuser/misc.c b/reactos/subsystems/win32/win32k/ntuser/misc.c
index 6a6a833a969..107fb0e29c4 100644
--- a/reactos/subsystems/win32/win32k/ntuser/misc.c
+++ b/reactos/subsystems/win32/win32k/ntuser/misc.c
@@ -14,6 +14,52 @@
#include
+SHORT
+FASTCALL
+IntGdiGetLanguageID()
+{
+ HANDLE KeyHandle;
+ ULONG Size = sizeof(WCHAR) * (MAX_PATH + 12);
+ OBJECT_ATTRIBUTES ObAttr;
+// http://support.microsoft.com/kb/324097
+ ULONG Ret = 0x409; // English
+ PVOID KeyInfo;
+ UNICODE_STRING Language;
+
+ RtlInitUnicodeString( &Language,
+ L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Nls\\Language");
+
+ InitializeObjectAttributes( &ObAttr,
+ &Language,
+ OBJ_CASE_INSENSITIVE,
+ NULL,
+ NULL);
+
+ if ( NT_SUCCESS(ZwOpenKey(&KeyHandle, KEY_READ, &ObAttr)))
+ {
+ KeyInfo = ExAllocatePoolWithTag(PagedPool, Size, TAG_STRING);
+ if ( KeyInfo )
+ {
+ RtlInitUnicodeString(&Language, L"Default");
+
+ if ( NT_SUCCESS(ZwQueryValueKey( KeyHandle,
+ &Language,
+ KeyValuePartialInformation,
+ KeyInfo,
+ Size,
+ &Size)) )
+ {
+ RtlInitUnicodeString(&Language, (PVOID)((char *)KeyInfo + 12));
+ RtlUnicodeStringToInteger(&Language, 16, &Ret);
+ }
+ ExFreePoolWithTag(KeyInfo, TAG_STRING);
+ }
+ ZwClose(KeyHandle);
+ }
+ DPRINT1("Language ID = %x\n",Ret);
+ return (SHORT) Ret;
+}
+
/*
* @unimplemented
*/
@@ -298,7 +344,7 @@ IntSafeCopyUnicodeString(PUNICODE_STRING Dest,
Status = MmCopyFromCaller(Dest->Buffer, Src, Dest->Length);
if(!NT_SUCCESS(Status))
{
- ExFreePool(Dest->Buffer);
+ ExFreePoolWithTag(Dest->Buffer, TAG_STRING);
Dest->Buffer = NULL;
return Status;
}
@@ -345,7 +391,7 @@ IntSafeCopyUnicodeStringTerminateNULL(PUNICODE_STRING Dest,
Status = MmCopyFromCaller(Dest->Buffer, Src, Dest->Length);
if(!NT_SUCCESS(Status))
{
- ExFreePool(Dest->Buffer);
+ ExFreePoolWithTag(Dest->Buffer, TAG_STRING);
Dest->Buffer = NULL;
return Status;
}
diff --git a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c
index 1b3b5778a60..f79c19315fe 100644
--- a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c
+++ b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c
@@ -16,12 +16,11 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id$
- *
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* PURPOSE: Message queues
- * FILE: subsys/win32k/ntuser/msgqueue.c
+ * FILE: subsystems/win32/win32k/ntuser/msgqueue.c
* PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
* REVISION HISTORY:
* 06-06-2001 CSH Created
diff --git a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c
index 50d84e36e12..46186618473 100644
--- a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c
+++ b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c
@@ -805,15 +805,42 @@ NtUserHardErrorControl(
return 0;
}
-DWORD
+/*
+ Called from win32csr.
+ */
+NTSTATUS
NTAPI
NtUserInitialize(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3)
+ DWORD dwWinVersion,
+ HANDLE hPowerRequestEvent,
+ HANDLE hMediaRequestEvent)
{
+ UserEnterExclusive();
UNIMPLEMENTED;
- return 0;
+// Check to see we have the right version.
+// Initialize Power Request List.
+// Initialize Media Change.
+// Initialize CSRSS
+// {
+// Startup DxGraphics.
+// calls ** IntGdiGetLanguageID() and sets it **.
+// Enables Fonts drivers, Initialize Font table & Stock Fonts.
+// }
+// Set W32PF_Flags |= (W32PF_READSCREENACCESSGRANTED | W32PF_IOWINSTA)
+// Create Object Directory,,, Looks like create workstation. "\\Windows\\WindowStations"
+// Create Event for Diconnect Desktop.
+// Initialize Video.
+// {
+// DrvInitConsole.
+// DrvChangeDisplaySettings.
+// Update Shared Device Caps.
+// Initialize User Screen.
+// }
+// Create ThreadInfo for this Thread!
+// Set Global SERVERINFO Error flags.
+// Load Resources.
+ UserLeave();
+ return STATUS_SUCCESS;
}
DWORD
diff --git a/reactos/subsystems/win32/win32k/ntuser/sysparams.c b/reactos/subsystems/win32/win32k/ntuser/sysparams.c
index cc32ad5e40f..f067761fc7f 100644
--- a/reactos/subsystems/win32/win32k/ntuser/sysparams.c
+++ b/reactos/subsystems/win32/win32k/ntuser/sysparams.c
@@ -383,7 +383,7 @@ IntSystemParametersInfo(
if(!NT_SUCCESS(Status) || (KeyValuePartialInfo->Type != REG_SZ))
{
ZwClose(KeyHandle);
- ExFreePool(KeyValuePartialInfo);
+ ExFreePoolWithTag(KeyValuePartialInfo, TAG_STRING);
return FALSE;
}
@@ -396,7 +396,7 @@ IntSystemParametersInfo(
{
TileNum = 0;
}
- ExFreePool(KeyValuePartialInfo);
+ ExFreePoolWithTag(KeyValuePartialInfo, TAG_STRING);
/* start over again and look for the style*/
ResLength = 0;
@@ -418,7 +418,7 @@ IntSystemParametersInfo(
if(!NT_SUCCESS(Status) || (KeyValuePartialInfo->Type != REG_SZ))
{
ZwClose(KeyHandle);
- ExFreePool(KeyValuePartialInfo);
+ ExFreePoolWithTag(KeyValuePartialInfo, TAG_STRING);
return FALSE;
}
@@ -431,7 +431,7 @@ IntSystemParametersInfo(
{
StyleNum = 0;
}
- ExFreePool(KeyValuePartialInfo);
+ ExFreePoolWithTag(KeyValuePartialInfo, TAG_STRING);
/* Check the values we found in the registry */
if(TileNum && !StyleNum)
diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c
index 2fc3504d2f3..e6cfadba72b 100644
--- a/reactos/subsystems/win32/win32k/ntuser/window.c
+++ b/reactos/subsystems/win32/win32k/ntuser/window.c
@@ -3882,8 +3882,8 @@ CLEANUP:
/*
* @unimplemented
*/
-DWORD STDCALL
-NtUserLockWindowUpdate(DWORD Unknown0)
+BOOL STDCALL
+NtUserLockWindowUpdate(HWND hWnd)
{
UNIMPLEMENTED
diff --git a/reactos/subsystems/win32/win32k/ntuser/winsta.c b/reactos/subsystems/win32/win32k/ntuser/winsta.c
index 781c2e41fb1..816f4527907 100644
--- a/reactos/subsystems/win32/win32k/ntuser/winsta.c
+++ b/reactos/subsystems/win32/win32k/ntuser/winsta.c
@@ -1259,7 +1259,7 @@ BuildWindowStationNameList(
FALSE, &Context, NULL))
{
/* Something went wrong, maybe someone added a directory entry? Just give up. */
- ExFreePool(Buffer);
+ ExFreePoolWithTag(Buffer, TAG_WINSTA);
ObDereferenceObject(DirectoryHandle);
return NT_SUCCESS(Status) ? STATUS_INTERNAL_ERROR : Status;
}
@@ -1287,7 +1287,7 @@ BuildWindowStationNameList(
{
if (Buffer != InitialBuffer)
{
- ExFreePool(Buffer);
+ ExFreePoolWithTag(Buffer, TAG_WINSTA);
}
return STATUS_BUFFER_TOO_SMALL;
}
@@ -1300,7 +1300,7 @@ BuildWindowStationNameList(
{
if (Buffer != InitialBuffer)
{
- ExFreePool(Buffer);
+ ExFreePoolWithTag(Buffer, TAG_WINSTA);
}
return STATUS_BUFFER_TOO_SMALL;
}
diff --git a/reactos/subsystems/win32/win32k/objects/bitblt.c b/reactos/subsystems/win32/win32k/objects/bitblt.c
index b57beb755b9..f0598e131bc 100644
--- a/reactos/subsystems/win32/win32k/objects/bitblt.c
+++ b/reactos/subsystems/win32/win32k/objects/bitblt.c
@@ -1143,7 +1143,7 @@ NtGdiPolyPatBlt(
if (!NT_SUCCESS(Status))
{
- ExFreePool(rb);
+ ExFreePoolWithTag(rb, TAG_PATBLT);
SetLastNtError(Status);
return FALSE;
}
@@ -1152,7 +1152,7 @@ NtGdiPolyPatBlt(
Ret = IntGdiPolyPatBlt(hDC, dwRop, rb, cRects, Mode);
if (cRects > 0)
- ExFreePool(rb);
+ ExFreePoolWithTag(rb, TAG_PATBLT);
return Ret;
}
diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c
index f7d9b2c2b33..7c676fe0830 100644
--- a/reactos/subsystems/win32/win32k/objects/bitmaps.c
+++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c
@@ -704,7 +704,7 @@ BITMAPOBJ_CopyBitmap(HBITMAP hBitmap)
}
IntGetBitmapBits (Bitmap, bm.bmWidthBytes * abs(bm.bmHeight), buf);
IntSetBitmapBits (resBitmap, bm.bmWidthBytes * abs(bm.bmHeight), buf);
- ExFreePool (buf);
+ ExFreePoolWithTag (buf,TAG_BITMAP);
resBitmap->flFlags = Bitmap->flFlags;
GDIOBJ_UnlockObjByPtr((POBJ)resBitmap);
}
diff --git a/reactos/subsystems/win32/win32k/objects/brush.c b/reactos/subsystems/win32/win32k/objects/brush.c
index 08e4a099908..8455a329c31 100644
--- a/reactos/subsystems/win32/win32k/objects/brush.c
+++ b/reactos/subsystems/win32/win32k/objects/brush.c
@@ -62,12 +62,12 @@ BRUSH_GetObject (PGDIBRUSHOBJ BrushObject, INT Count, LPLOGBRUSH Buffer)
if (Count == 0) return 0;
/* Set colour */
- Buffer->lbColor = BrushObject->BrushAttr.lbColor;
+ Buffer->lbColor = BrushObject->BrushAttr.lbColor;
/* set Hatch */
if ((BrushObject->flAttrs & GDIBRUSH_IS_HATCH)!=0)
{
- /* FIXME : is this right value */
+ /* FIXME : this is not the right value */
Buffer->lbHatch = (LONG)BrushObject->hbmPattern;
}
else
@@ -153,7 +153,7 @@ IntGdiCreateBrushXlate(PDC Dc, GDIBRUSHOBJ *BrushObj, BOOLEAN *Failed)
if (!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
if (Dc->w.bitsPerPixel != 1)
- Result = IntEngCreateSrcMonoXlate(hPalette, Dc_Attr->crForegroundClr, Dc_Attr->crBackgroundClr);
+ Result = IntEngCreateSrcMonoXlate(hPalette, BrushObj->BrushAttr.lbColor, Dc_Attr->crBackgroundClr);
}
else if (BrushObj->flAttrs & GDIBRUSH_IS_DIB)
{
diff --git a/reactos/subsystems/win32/win32k/objects/color.c b/reactos/subsystems/win32/win32k/objects/color.c
index 680047985b2..7ab65c5844b 100644
--- a/reactos/subsystems/win32/win32k/objects/color.c
+++ b/reactos/subsystems/win32/win32k/objects/color.c
@@ -685,52 +685,27 @@ NtGdiSetSystemPaletteUse(HDC hDC, UINT Usage)
return old;
}
-/*
- Win 2k Graphics API, Black Book. by coriolis.com
- Page 62, Note that Steps 3, 5, and 6 are not required for Windows NT(tm)
- and Windows 2000(tm).
-
- Step 5. UnrealizeObject(hTrackBrush);
- */
-BOOL STDCALL
+BOOL
+STDCALL
NtGdiUnrealizeObject(HGDIOBJ hgdiobj)
{
-
- POBJ pObject;
- DWORD objectType;
BOOL Ret = FALSE;
+ PPALGDI palGDI;
- /* From Wine: UnrealizeObject does not SetLastError() on a null object */
- if(!hgdiobj)
- return Ret;
-
- pObject = GDIOBJ_LockObj(hgdiobj, GDI_OBJECT_TYPE_DONTCARE);
- if (pObject == NULL)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
+ if ( !hgdiobj ||
+ ((UINT)hgdiobj & GDI_HANDLE_STOCK_MASK) ||
+ !GDI_HANDLE_IS_TYPE(hgdiobj, GDI_OBJECT_TYPE_PALETTE) )
return Ret;
- }
- objectType = GDIOBJ_GetObjectType(hgdiobj);
- switch(objectType)
- {
-/*
- msdn.microsoft.com,
- "Windows 2000/XP: If hgdiobj is a brush, UnrealizeObject does nothing,
- and the function returns TRUE. Use SetBrushOrgEx to set the origin of
- a brush."
- */
- case GDI_OBJECT_TYPE_BRUSH:
- {
- DPRINT("GDI_OBJECT_TYPE_BRUSH\n");
- Ret = TRUE;
- break;
- }
- default:
- DPRINT1("Magic 0x%08x not implemented\n", objectType);
- break;
- }
- GDIOBJ_UnlockObjByPtr(pObject);
+ palGDI = PALETTE_LockPalette(hgdiobj);
+ if (!palGDI) return FALSE;
+
+ // FIXME!!
+ // Need to do something!!!
+ // Zero out Current and Old Translated pointers?
+ //
+ Ret = TRUE;
+ PALETTE_UnlockPalette(palGDI);
return Ret;
}
diff --git a/reactos/subsystems/win32/win32k/objects/coord.c b/reactos/subsystems/win32/win32k/objects/coord.c
index cf7ed1e9e83..ce0b9360a9e 100644
--- a/reactos/subsystems/win32/win32k/objects/coord.c
+++ b/reactos/subsystems/win32/win32k/objects/coord.c
@@ -285,7 +285,7 @@ NtGdiTransformPoints( HDC hDC,
if(!NT_SUCCESS(Status))
{
DC_UnlockDc(dc);
- ExFreePool(Points);
+ ExFreePoolWithTag(Points, TAG_COORD);
SetLastNtError(Status);
return FALSE;
}
@@ -302,7 +302,7 @@ NtGdiTransformPoints( HDC hDC,
default:
{
DC_UnlockDc(dc);
- ExFreePool(Points);
+ ExFreePoolWithTag(Points, TAG_COORD);
SetLastWin32Error(ERROR_INVALID_PARAMETER);
return FALSE;
}
@@ -324,7 +324,7 @@ NtGdiTransformPoints( HDC hDC,
if(!NT_SUCCESS(Status))
{
DC_UnlockDc(dc);
- ExFreePool(Points);
+ ExFreePoolWithTag(Points, TAG_COORD);
SetLastNtError(Status);
return FALSE;
}
@@ -332,7 +332,7 @@ NtGdiTransformPoints( HDC hDC,
// If we are getting called that means User XForms is a mess!
//
DC_UnlockDc(dc);
- ExFreePool(Points);
+ ExFreePoolWithTag(Points, TAG_COORD);
return TRUE;
}
diff --git a/reactos/subsystems/win32/win32k/objects/dc.c b/reactos/subsystems/win32/win32k/objects/dc.c
index 81096bd59a3..c0ecbfb4161 100644
--- a/reactos/subsystems/win32/win32k/objects/dc.c
+++ b/reactos/subsystems/win32/win32k/objects/dc.c
@@ -144,6 +144,7 @@ NtGdiCreateCompatibleDC(HDC hDC)
if (oDc_Attr->dwLayout & LAYOUT_ORIENTATIONMASK) Layout = oDc_Attr->dwLayout;
NewDC->DcLevel.flPath = OrigDC->DcLevel.flPath;
nDc_Attr->ulDirty_ = oDc_Attr->ulDirty_;
+ nDc_Attr->iCS_CP = oDc_Attr->iCS_CP;
DC_UnlockDc(NewDC);
DC_UnlockDc(OrigDC);
@@ -848,6 +849,8 @@ IntGdiCreateDC(PUNICODE_STRING Driver,
NewDC->erclWindow.bottom = ((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulVertRes;
NewDC->DcLevel.flPath &= ~DCPATH_CLOCKWISE; // Default is CCW.
+ nDc_Attr->iCS_CP = ftGdiGetTextCharsetInfo(NewDC,NULL,0);
+
DC_UnlockDc( NewDC );
hVisRgn = NtGdiCreateRectRgn(0, 0, ((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulHorzRes,
@@ -2216,7 +2219,7 @@ NtGdiSelectFont(
if(!pDc_Attr) pDc_Attr = &pDC->Dc_Attr;
/* FIXME: what if not successful? */
- if(NT_SUCCESS(TextIntRealizeFont((HFONT)hFont)))
+ if(NT_SUCCESS(TextIntRealizeFont((HFONT)hFont,NULL)))
{
hOrgFont = pDc_Attr->hlfntNew;
pDc_Attr->hlfntNew = hFont;
@@ -2411,6 +2414,7 @@ NtGdiGetDCDword(
case GdiGetEMFRestorDc:
break;
case GdiGetFontLanguageInfo:
+ SafeResult = IntGetFontLanguageInfo(dc);
break;
case GdiGetIsMemDc:
SafeResult = dc->DC_Type;
@@ -2644,6 +2648,7 @@ DC_AllocDC(PUNICODE_STRING Driver)
Dc_Attr->iMapMode = MM_TEXT;
Dc_Attr->iGraphicsMode = GM_COMPATIBLE;
+ Dc_Attr->jFillMode = ALTERNATE;
Dc_Attr->szlWindowExt.cx = 1; // Float to Int,,, WRONG!
Dc_Attr->szlWindowExt.cy = 1;
@@ -2667,7 +2672,7 @@ DC_AllocDC(PUNICODE_STRING Driver)
Dc_Attr->hpen = NtGdiGetStockObject( BLACK_PEN );
////
Dc_Attr->hlfntNew = NtGdiGetStockObject(SYSTEM_FONT);
- TextIntRealizeFont(Dc_Attr->hlfntNew);
+ TextIntRealizeFont(Dc_Attr->hlfntNew,NULL);
NewDC->DcLevel.hpal = NtGdiGetStockObject(DEFAULT_PALETTE);
NewDC->DcLevel.laPath.eMiterLimit = 10.0;
diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c
index 6969ea71e19..ecee3c0e87e 100644
--- a/reactos/subsystems/win32/win32k/objects/dibobj.c
+++ b/reactos/subsystems/win32/win32k/objects/dibobj.c
@@ -860,7 +860,6 @@ NtGdiStretchDIBitsInternal(
* if it negitve we getting to many scanline for scanline is UINT not
* a INT, so we need make the negtive value to positve and that make the
* count correct for negtive bitmap, TODO : we need testcase for this api */
-
IntSetDIBits(pDC, hBitmap, 0, abs(BitsInfo->bmiHeader.biHeight), Bits,
BitsInfo, Usage);
@@ -1187,7 +1186,7 @@ DIB_CreateDIBSection(
{
if (lpRGB != bmi->bmiColors)
{
- ExFreePool(lpRGB);
+ ExFreePoolWithTag(lpRGB, TAG_COLORMAP);
}
SetLastWin32Error(ERROR_NO_SYSTEM_RESOURCES);
return NULL;
@@ -1197,7 +1196,7 @@ DIB_CreateDIBSection(
{
if (lpRGB != bmi->bmiColors)
{
- ExFreePool(lpRGB);
+ ExFreePoolWithTag(lpRGB, TAG_COLORMAP);
}
SetLastWin32Error(ERROR_INVALID_HANDLE);
NtGdiDeleteObject(bmp);
@@ -1238,14 +1237,14 @@ DIB_CreateDIBSection(
VirtualFree(bm.bmBits, 0L, MEM_RELEASE), bm.bmBits = NULL;
} */
- if (dib) { ExFreePool(dib); dib = NULL; }
+ if (dib) { ExFreePoolWithTag(dib, TAG_DIB); dib = NULL; }
if (bmp) { bmp = NULL; }
if (res) { BITMAPOBJ_FreeBitmapByHandle(res); res = 0; }
}
if (lpRGB != bmi->bmiColors)
{
- ExFreePool(lpRGB);
+ ExFreePoolWithTag(lpRGB, TAG_COLORMAP);
}
if (bmp)
diff --git a/reactos/subsystems/win32/win32k/objects/fillshap.c b/reactos/subsystems/win32/win32k/objects/fillshap.c
index 52ab9260410..6bf346339d1 100644
--- a/reactos/subsystems/win32/win32k/objects/fillshap.c
+++ b/reactos/subsystems/win32/win32k/objects/fillshap.c
@@ -425,7 +425,7 @@ NtGdiPolyPolyDraw( IN HDC hDC,
if (!NT_SUCCESS(Status))
{
- ExFreePool(pTemp);
+ ExFreePoolWithTag(pTemp, TAG_SHAPE);
return FALSE;
}
@@ -434,7 +434,7 @@ NtGdiPolyPolyDraw( IN HDC hDC,
{
HRGN hRgn;
hRgn = IntCreatePolyPolygonRgn(SafePoints, SafeCounts, Count, (INT_PTR)hDC);
- ExFreePool(pTemp);
+ ExFreePoolWithTag(pTemp, TAG_SHAPE);
return (ULONG_PTR)hRgn;
}
@@ -506,20 +506,23 @@ IntRectangle(PDC dc,
Dc_Attr = dc->pDc_Attr;
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
- if ( PATH_IsPathOpen(dc->DcLevel) )
- {
- return PATH_Rectangle ( dc, LeftRect, TopRect, RightRect, BottomRect );
- }
-
/* Do we rotate or shear? */
if (!(dc->DcLevel.mxWorldToDevice.flAccel & MX_SCALE))
{
+
POINTL DestCoords[4];
+ ULONG PolyCounts = 4;
DestCoords[0].x = DestCoords[3].x = LeftRect;
DestCoords[0].y = DestCoords[1].y = TopRect;
DestCoords[1].x = DestCoords[2].x = RightRect;
DestCoords[2].y = DestCoords[3].y = BottomRect;
- return IntGdiPolygon(dc, DestCoords, 4);
+ // Use IntGdiPolyPolygon so to support PATH.
+ return IntGdiPolyPolygon(dc, DestCoords, &PolyCounts, 1);
+ }
+ // Rectangle Path only.
+ if ( PATH_IsPathOpen(dc->DcLevel) )
+ {
+ return PATH_Rectangle ( dc, LeftRect, TopRect, RightRect, BottomRect );
}
DestRect.left = LeftRect;
@@ -1001,7 +1004,7 @@ NtGdiGradientFill(
if (!NT_SUCCESS(Status))
{
DC_UnlockDc(dc);
- ExFreePool(SafeVertex);
+ ExFreePoolWithTag(SafeVertex, TAG_SHAPE);
SetLastNtError(Status);
return FALSE;
}
diff --git a/reactos/subsystems/win32/win32k/objects/font.c b/reactos/subsystems/win32/win32k/objects/font.c
index 1a838e8a51f..8ed89645af4 100644
--- a/reactos/subsystems/win32/win32k/objects/font.c
+++ b/reactos/subsystems/win32/win32k/objects/font.c
@@ -13,33 +13,304 @@
#define NDEBUG
#include
-//
-// FIXME PLEASE!!!!
-// Why are these here? Well there is a problem with drivers/directx.
-// 1st: It does not belong there.
-// 2nd: Due to being placed outside Win32k build environment, it creates
-// compiling issues.
-// Until svn mv drivers/directx subsystem/win32/win32k/drivers/directx,
-// it will not get fixed.
-//
-ULONG
-FASTCALL
-ftGdiGetGlyphOutline(
- IN PDC pdc,
- IN WCHAR wch,
- IN UINT iFormat,
- OUT LPGLYPHMETRICS pgm,
- IN ULONG cjBuf,
- OUT OPTIONAL PVOID UnsafeBuf,
- IN LPMAT2 pmat2,
- IN BOOL bIgnoreRotation);
+/** Internal ******************************************************************/
INT
FASTCALL
-IntGetOutlineTextMetrics(PFONTGDI FontGDI, UINT Size, OUTLINETEXTMETRICW *Otm);
+FontGetObject(PTEXTOBJ TFont, INT Count, PVOID Buffer)
+{
+ if( Buffer == NULL ) return sizeof(LOGFONTW);
+
+ switch (Count)
+ {
+ case sizeof(ENUMLOGFONTEXDVW):
+ RtlCopyMemory( (LPENUMLOGFONTEXDVW) Buffer,
+ &TFont->logfont,
+ sizeof(ENUMLOGFONTEXDVW));
+ break;
+ case sizeof(ENUMLOGFONTEXW):
+ RtlCopyMemory( (LPENUMLOGFONTEXW) Buffer,
+ &TFont->logfont.elfEnumLogfontEx,
+ sizeof(ENUMLOGFONTEXW));
+ break;
+
+ case sizeof(EXTLOGFONTW):
+ case sizeof(ENUMLOGFONTW):
+ RtlCopyMemory((LPENUMLOGFONTW) Buffer,
+ &TFont->logfont.elfEnumLogfontEx.elfLogFont,
+ sizeof(ENUMLOGFONTW));
+ break;
+
+ case sizeof(LOGFONTW):
+ RtlCopyMemory((LPLOGFONTW) Buffer,
+ &TFont->logfont.elfEnumLogfontEx.elfLogFont,
+ sizeof(LOGFONTW));
+ break;
+
+ default:
+ SetLastWin32Error(ERROR_BUFFER_OVERFLOW);
+ return 0;
+ }
+ return Count;
+}
+
+DWORD
+FASTCALL
+IntGetFontLanguageInfo(PDC Dc)
+{
+ PDC_ATTR Dc_Attr;
+ FONTSIGNATURE fontsig;
+ static const DWORD GCP_DBCS_MASK=0x003F0000,
+ GCP_DIACRITIC_MASK=0x00000000,
+ FLI_GLYPHS_MASK=0x00000000,
+ GCP_GLYPHSHAPE_MASK=0x00000040,
+ GCP_KASHIDA_MASK=0x00000000,
+ GCP_LIGATE_MASK=0x00000000,
+ GCP_USEKERNING_MASK=0x00000000,
+ GCP_REORDER_MASK=0x00000060;
+
+ DWORD result=0;
+
+ ftGdiGetTextCharsetInfo( Dc, &fontsig, 0 );
+
+ /* We detect each flag we return using a bitmask on the Codepage Bitfields */
+ if( (fontsig.fsCsb[0]&GCP_DBCS_MASK)!=0 )
+ result|=GCP_DBCS;
+
+ if( (fontsig.fsCsb[0]&GCP_DIACRITIC_MASK)!=0 )
+ result|=GCP_DIACRITIC;
+
+ if( (fontsig.fsCsb[0]&FLI_GLYPHS_MASK)!=0 )
+ result|=FLI_GLYPHS;
+
+ if( (fontsig.fsCsb[0]&GCP_GLYPHSHAPE_MASK)!=0 )
+ result|=GCP_GLYPHSHAPE;
+
+ if( (fontsig.fsCsb[0]&GCP_KASHIDA_MASK)!=0 )
+ result|=GCP_KASHIDA;
+
+ if( (fontsig.fsCsb[0]&GCP_LIGATE_MASK)!=0 )
+ result|=GCP_LIGATE;
+
+ if( (fontsig.fsCsb[0]&GCP_USEKERNING_MASK)!=0 )
+ result|=GCP_USEKERNING;
+
+ Dc_Attr = Dc->pDc_Attr;
+ if(!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
+
+ /* this might need a test for a HEBREW- or ARABIC_CHARSET as well */
+ if ( Dc_Attr->lTextAlign & TA_RTLREADING )
+ if( (fontsig.fsCsb[0]&GCP_REORDER_MASK)!=0 )
+ result|=GCP_REORDER;
+
+ return result;
+}
+
+PTEXTOBJ
+FASTCALL
+RealizeFontInit(HFONT hFont)
+{
+ NTSTATUS Status = STATUS_SUCCESS;
+ PTEXTOBJ pTextObj;
+
+ pTextObj = TEXTOBJ_LockText(hFont);
+
+ if ( pTextObj && !(pTextObj->fl & TEXTOBJECT_INIT))
+ {
+ Status = TextIntRealizeFont(hFont, pTextObj);
+ if (!NT_SUCCESS(Status))
+ {
+ TEXTOBJ_UnlockText(pTextObj);
+ return NULL;
+ }
+ }
+ return pTextObj;
+}
/** Functions ******************************************************************/
+INT
+APIENTRY
+NtGdiAddFontResourceW(
+ IN WCHAR *pwszFiles,
+ IN ULONG cwc,
+ IN ULONG cFiles,
+ IN FLONG fl,
+ IN DWORD dwPidTid,
+ IN OPTIONAL DESIGNVECTOR *pdv)
+{
+ UNICODE_STRING SafeFileName;
+ PWSTR src;
+ NTSTATUS Status;
+ int Ret;
+
+ /* FIXME - Protect with SEH? */
+ RtlInitUnicodeString(&SafeFileName, pwszFiles);
+
+ /* Reserve for prepending '\??\' */
+ SafeFileName.Length += 4 * sizeof(WCHAR);
+ SafeFileName.MaximumLength += 4 * sizeof(WCHAR);
+
+ src = SafeFileName.Buffer;
+ SafeFileName.Buffer = (PWSTR)ExAllocatePoolWithTag(PagedPool, SafeFileName.MaximumLength, TAG_STRING);
+ if(!SafeFileName.Buffer)
+ {
+ SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+ return 0;
+ }
+
+ /* Prepend '\??\' */
+ RtlCopyMemory(SafeFileName.Buffer, L"\\??\\", 4 * sizeof(WCHAR));
+
+ Status = MmCopyFromCaller(SafeFileName.Buffer + 4, src, SafeFileName.MaximumLength - (4 * sizeof(WCHAR)));
+ if(!NT_SUCCESS(Status))
+ {
+ ExFreePoolWithTag(SafeFileName.Buffer, TAG_STRING);
+ SetLastNtError(Status);
+ return 0;
+ }
+
+ Ret = IntGdiAddFontResource(&SafeFileName, (DWORD)fl);
+
+ ExFreePoolWithTag(SafeFileName.Buffer, TAG_STRING);
+ return Ret;
+}
+
+DWORD
+STDCALL
+NtGdiGetFontData(
+ HDC hDC,
+ DWORD Table,
+ DWORD Offset,
+ LPVOID Buffer,
+ DWORD Size)
+{
+ PDC Dc;
+ PDC_ATTR Dc_Attr;
+ HFONT hFont;
+ PTEXTOBJ TextObj;
+ PFONTGDI FontGdi;
+ DWORD Result = GDI_ERROR;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ if (Buffer && Size)
+ {
+ _SEH_TRY
+ {
+ ProbeForRead(Buffer, Size, 1);
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+ }
+
+ if (!NT_SUCCESS(Status)) return Result;
+
+ Dc = DC_LockDc(hDC);
+ if (Dc == NULL)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return GDI_ERROR;
+ }
+ Dc_Attr = Dc->pDc_Attr;
+ if(!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
+
+ hFont = Dc_Attr->hlfntNew;
+ TextObj = RealizeFontInit(hFont);
+ DC_UnlockDc(Dc);
+
+ if (TextObj == NULL)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return GDI_ERROR;
+ }
+
+ FontGdi = ObjToGDI(TextObj->Font, FONT);
+
+ Result = ftGdiGetFontData(FontGdi, Table, Offset, Buffer, Size);
+
+ TEXTOBJ_UnlockText(TextObj);
+
+ return Result;
+}
+
+ /*
+ * @implemented
+ */
+DWORD
+APIENTRY
+NtGdiGetFontUnicodeRanges(
+ IN HDC hdc,
+ OUT OPTIONAL LPGLYPHSET pgs)
+{
+ PDC pDc;
+ PDC_ATTR Dc_Attr;
+ HFONT hFont;
+ PTEXTOBJ TextObj;
+ PFONTGDI FontGdi;
+ DWORD Size = 0;
+ PGLYPHSET pgsSafe;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ pDc = DC_LockDc(hdc);
+ if (!pDc)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return 0;
+ }
+
+ Dc_Attr = pDc->pDc_Attr;
+ if(!Dc_Attr) Dc_Attr = &pDc->Dc_Attr;
+
+ hFont = Dc_Attr->hlfntNew;
+ TextObj = RealizeFontInit(hFont);
+
+ if ( TextObj == NULL)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ goto Exit;
+ }
+ FontGdi = ObjToGDI(TextObj->Font, FONT);
+
+ Size = ftGetFontUnicodeRanges( FontGdi, NULL);
+
+ if (Size && pgs)
+ {
+ pgsSafe = ExAllocatePoolWithTag(PagedPool, Size, TAG_GDITEXT);
+ if (!pgsSafe)
+ {
+ SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+ Size = 0;
+ goto Exit;
+ }
+
+ Size = ftGetFontUnicodeRanges( FontGdi, pgsSafe);
+
+ if (Size)
+ {
+ _SEH_TRY
+ {
+ ProbeForWrite(pgsSafe, Size, 1);
+ RtlCopyMemory(pgs, pgsSafe, Size);
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+
+ if (!NT_SUCCESS(Status)) Size = 0;
+ }
+ ExFreePoolWithTag(pgsSafe, TAG_GDITEXT);
+ }
+Exit:
+ TEXTOBJ_UnlockText(TextObj);
+ DC_UnlockDc(pDc);
+ return Size;
+}
+
ULONG
APIENTRY
NtGdiGetGlyphOutline(
@@ -52,22 +323,75 @@ NtGdiGetGlyphOutline(
IN LPMAT2 pmat2,
IN BOOL bIgnoreRotation)
{
- ULONG Ret;
+ ULONG Ret = GDI_ERROR;
PDC dc;
+ PVOID pvBuf = NULL;
+ GLYPHMETRICS gm;
+ NTSTATUS Status = STATUS_SUCCESS;
+
dc = DC_LockDc(hdc);
if (!dc)
{
SetLastWin32Error(ERROR_INVALID_HANDLE);
return GDI_ERROR;
}
+
+ if (UnsafeBuf && cjBuf)
+ {
+ pvBuf = ExAllocatePoolWithTag(PagedPool, cjBuf, TAG_GDITEXT);
+ if (!pvBuf)
+ {
+ SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+ goto Exit;
+ }
+ }
+
Ret = ftGdiGetGlyphOutline( dc,
wch,
iFormat,
- pgm,
+ pgm ? &gm : NULL,
cjBuf,
- UnsafeBuf,
+ pvBuf,
pmat2,
bIgnoreRotation);
+
+ if (pvBuf)
+ {
+ _SEH_TRY
+ {
+ ProbeForWrite(UnsafeBuf, cjBuf, 1);
+ RtlCopyMemory(UnsafeBuf, pvBuf, cjBuf);
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+
+ ExFreePoolWithTag(pvBuf, TAG_GDITEXT);
+ }
+
+ if (pgm)
+ {
+ _SEH_TRY
+ {
+ ProbeForWrite(pgm, sizeof(GLYPHMETRICS), 1);
+ RtlCopyMemory(pgm, &gm, sizeof(GLYPHMETRICS));
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+ }
+
+ if (! NT_SUCCESS(Status))
+ {
+ SetLastWin32Error(ERROR_INVALID_PARAMETER);
+ Ret = GDI_ERROR;
+ }
+
+Exit:
DC_UnlockDc(dc);
return Ret;
}
@@ -78,8 +402,69 @@ NtGdiGetKerningPairs(HDC hDC,
ULONG NumPairs,
LPKERNINGPAIR krnpair)
{
- UNIMPLEMENTED;
- return 0;
+ PDC dc;
+ PDC_ATTR Dc_Attr;
+ PTEXTOBJ TextObj;
+ PFONTGDI FontGDI;
+ DWORD Count;
+ KERNINGPAIR *pKP;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ dc = DC_LockDc(hDC);
+ if (!dc)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return 0;
+ }
+
+ Dc_Attr = dc->pDc_Attr;
+ if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
+ TextObj = RealizeFontInit(Dc_Attr->hlfntNew);
+ DC_UnlockDc(dc);
+
+ if (!TextObj)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return 0;
+ }
+
+ FontGDI = ObjToGDI(TextObj->Font, FONT);
+ TEXTOBJ_UnlockText(TextObj);
+
+ Count = ftGdiGetKerningPairs(FontGDI,0,NULL);
+
+ if ( Count && krnpair )
+ {
+ if (Count > NumPairs)
+ {
+ SetLastWin32Error(ERROR_INSUFFICIENT_BUFFER);
+ return 0;
+ }
+ pKP = ExAllocatePoolWithTag(PagedPool, Count * sizeof(KERNINGPAIR), TAG_GDITEXT);
+ if (!pKP)
+ {
+ SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+ return 0;
+ }
+ ftGdiGetKerningPairs(FontGDI,Count,pKP);
+ _SEH_TRY
+ {
+ ProbeForWrite(krnpair, Count * sizeof(KERNINGPAIR), 1);
+ RtlCopyMemory(krnpair, pKP, Count * sizeof(KERNINGPAIR));
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastWin32Error(ERROR_INVALID_PARAMETER);
+ Count = 0;
+ }
+ ExFreePoolWithTag(pKP,TAG_GDITEXT);
+ }
+ return Count;
}
/*
@@ -100,52 +485,292 @@ NtGdiGetOutlineTextMetricsInternalW (HDC hDC,
HFONT hFont = 0;
ULONG Size;
OUTLINETEXTMETRICW *potm;
- NTSTATUS Status;
+ NTSTATUS Status = STATUS_SUCCESS;
dc = DC_LockDc(hDC);
- if (dc == NULL)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- return 0;
- }
+ if (!dc)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return 0;
+ }
Dc_Attr = dc->pDc_Attr;
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
hFont = Dc_Attr->hlfntNew;
- TextObj = TEXTOBJ_LockText(hFont);
+ TextObj = RealizeFontInit(hFont);
DC_UnlockDc(dc);
- if (TextObj == NULL)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- return 0;
- }
+ if (!TextObj)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return 0;
+ }
FontGDI = ObjToGDI(TextObj->Font, FONT);
TEXTOBJ_UnlockText(TextObj);
Size = IntGetOutlineTextMetrics(FontGDI, 0, NULL);
if (!otm) return Size;
if (Size > Data)
- {
+ {
SetLastWin32Error(ERROR_INSUFFICIENT_BUFFER);
return 0;
- }
+ }
potm = ExAllocatePoolWithTag(PagedPool, Size, TAG_GDITEXT);
- if (NULL == potm)
- {
+ if (!potm)
+ {
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
return 0;
- }
+ }
IntGetOutlineTextMetrics(FontGDI, Size, potm);
if (otm)
- {
- Status = MmCopyToCaller(otm, potm, Size);
- if (! NT_SUCCESS(Status))
- {
- SetLastWin32Error(ERROR_INVALID_PARAMETER);
- ExFreePool(potm);
- return 0;
- }
- }
- ExFreePool(potm);
+ {
+ _SEH_TRY
+ {
+ ProbeForWrite(otm, Size, 1);
+ RtlCopyMemory(otm, potm, Size);
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastWin32Error(ERROR_INVALID_PARAMETER);
+ Size = 0;
+ }
+ }
+ ExFreePoolWithTag(potm,TAG_GDITEXT);
return Size;
}
+W32KAPI
+BOOL
+APIENTRY
+NtGdiGetFontResourceInfoInternalW(
+ IN LPWSTR pwszFiles,
+ IN ULONG cwc,
+ IN ULONG cFiles,
+ IN UINT cjIn,
+ OUT LPDWORD pdwBytes,
+ OUT LPVOID pvBuf,
+ IN DWORD dwType)
+{
+ NTSTATUS Status = STATUS_SUCCESS;
+ DWORD dwBytes;
+ UNICODE_STRING SafeFileNames;
+ BOOL bRet = FALSE;
+ ULONG cbStringSize;
+
+ union
+ {
+ LOGFONTW logfontw;
+ WCHAR FullName[LF_FULLFACESIZE];
+ } Buffer;
+
+ /* FIXME: handle cFiles > 0 */
+
+ /* Check for valid dwType values
+ dwType == 4 seems to be handled by gdi32 only */
+ if (dwType == 4 || dwType > 5)
+ {
+ SetLastWin32Error(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ /* Allocate a safe unicode string buffer */
+ cbStringSize = cwc * sizeof(WCHAR);
+ SafeFileNames.MaximumLength = SafeFileNames.Length = cbStringSize - sizeof(WCHAR);
+ SafeFileNames.Buffer = ExAllocatePoolWithTag(PagedPool,
+ cbStringSize,
+ TAG('R','T','S','U'));
+ if (!SafeFileNames.Buffer)
+ {
+ SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
+
+ /* Check buffers and copy pwszFiles to safe unicode string */
+ _SEH_TRY
+ {
+ ProbeForRead(pwszFiles, cbStringSize, 1);
+ ProbeForWrite(pdwBytes, sizeof(DWORD), 1);
+ ProbeForWrite(pvBuf, cjIn, 1);
+
+ RtlCopyMemory(SafeFileNames.Buffer, pwszFiles, cbStringSize);
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+
+ if(!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ /* Free the string buffer for the safe filename */
+ ExFreePoolWithTag(SafeFileNames.Buffer,TAG('R','T','S','U'));
+ return FALSE;
+ }
+
+ /* Do the actual call */
+ bRet = IntGdiGetFontResourceInfo(&SafeFileNames, &Buffer, &dwBytes, dwType);
+
+ /* Check if succeeded and the buffer is big enough */
+ if (bRet && cjIn >= dwBytes)
+ {
+ /* Copy the data back to caller */
+ _SEH_TRY
+ {
+ /* Buffers are already probed */
+ RtlCopyMemory(pvBuf, &Buffer, dwBytes);
+ *pdwBytes = dwBytes;
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+
+ if(!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ bRet = FALSE;
+ }
+ }
+
+ /* Free the string for the safe filenames */
+ ExFreePoolWithTag(SafeFileNames.Buffer,TAG('R','T','S','U'));
+
+ return bRet;
+}
+
+ /*
+ * @unimplemented
+ */
+BOOL
+APIENTRY
+NtGdiGetRealizationInfo(
+ IN HDC hdc,
+ OUT PREALIZATION_INFO pri,
+ IN HFONT hf)
+{
+ PDC pDc;
+ PTEXTOBJ pTextObj;
+ PFONTGDI pFontGdi;
+ PDC_ATTR Dc_Attr;
+ BOOL Ret = FALSE;
+ INT i = 0;
+ REALIZATION_INFO ri;
+
+ pDc = DC_LockDc(hdc);
+ if (!pDc)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return 0;
+ }
+ Dc_Attr = pDc->pDc_Attr;
+ if(!Dc_Attr) Dc_Attr = &pDc->Dc_Attr;
+ pTextObj = RealizeFontInit(Dc_Attr->hlfntNew);
+ pFontGdi = ObjToGDI(pTextObj->Font, FONT);
+ TEXTOBJ_UnlockText(pTextObj);
+ DC_UnlockDc(pDc);
+
+ Ret = ftGdiRealizationInfo(pFontGdi, &ri);
+ if (Ret)
+ {
+ if (pri)
+ {
+ NTSTATUS Status = STATUS_SUCCESS;
+ _SEH_TRY
+ {
+ ProbeForWrite(pri, sizeof(REALIZATION_INFO), 1);
+ RtlCopyMemory(pri, &ri, sizeof(REALIZATION_INFO));
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+
+ if(!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ return FALSE;
+ }
+ }
+ do
+ {
+ if (GdiHandleTable->cfPublic[i].hf == hf)
+ {
+ GdiHandleTable->cfPublic[i].iTechnology = ri.iTechnology;
+ GdiHandleTable->cfPublic[i].iUniq = ri.iUniq;
+ GdiHandleTable->cfPublic[i].dwUnknown = ri.dwUnknown;
+ GdiHandleTable->cfPublic[i].dwCFCount = GdiHandleTable->dwCFCount;
+ GdiHandleTable->cfPublic[i].fl |= CFONT_REALIZATION;
+ }
+ i++;
+ }
+ while ( i < GDI_CFONT_MAX );
+ }
+ return Ret;
+}
+
+HFONT
+STDCALL
+NtGdiHfontCreate(
+ IN PENUMLOGFONTEXDVW pelfw,
+ IN ULONG cjElfw,
+ IN LFTYPE lft,
+ IN FLONG fl,
+ IN PVOID pvCliData )
+{
+ ENUMLOGFONTEXDVW SafeLogfont;
+ HFONT hNewFont;
+ PTEXTOBJ TextObj;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ if (!pelfw)
+ {
+ return NULL;
+ }
+
+ _SEH_TRY
+ {
+ ProbeForRead(pelfw, sizeof(ENUMLOGFONTEXDVW), 1);
+ RtlCopyMemory(&SafeLogfont, pelfw, sizeof(ENUMLOGFONTEXDVW));
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+
+ if (!NT_SUCCESS(Status))
+ {
+ return NULL;
+ }
+
+ TextObj = TEXTOBJ_AllocTextWithHandle();
+ if (!TextObj)
+ {
+ return NULL;
+ }
+ hNewFont = TextObj->BaseObject.hHmgr;
+
+ TextObj->lft = lft;
+ TextObj->fl = fl;
+ RtlCopyMemory (&TextObj->logfont, &SafeLogfont, sizeof(ENUMLOGFONTEXDVW));
+
+ if (SafeLogfont.elfEnumLogfontEx.elfLogFont.lfEscapement !=
+ SafeLogfont.elfEnumLogfontEx.elfLogFont.lfOrientation)
+ {
+ /* this should really depend on whether GM_ADVANCED is set */
+ TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfOrientation =
+ TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfEscapement;
+ }
+ TEXTOBJ_UnlockText(TextObj);
+
+ return hNewFont;
+}
+
+
/* EOF */
diff --git a/reactos/subsystems/win32/win32k/objects/freetype.c b/reactos/subsystems/win32/win32k/objects/freetype.c
index f3861691013..cb8686c89c2 100644
--- a/reactos/subsystems/win32/win32k/objects/freetype.c
+++ b/reactos/subsystems/win32/win32k/objects/freetype.c
@@ -1,3 +1,30 @@
+/*
+ * FreeType font engine interface
+ *
+ * Copyright 2001 Huw D M Davies for CodeWeavers.
+ * Copyright 2006 Dmitry Timoshkov for CodeWeavers.
+ *
+ * This file contains the WineEng* functions.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+/*
+ *
+ * Addaped for the use in ReactOS.
+ *
+ */
/*
* PROJECT: ReactOS win32 kernel mode subsystem
* LICENSE: GPL - See COPYING in the top level directory
@@ -13,6 +40,7 @@
#include
#include FT_FREETYPE_H
#include FT_GLYPH_H
+#include FT_TYPE1_TABLES_H
#include
#include
#include
@@ -22,6 +50,11 @@
#define NDEBUG
#include
+#ifndef FT_MAKE_TAG
+#define FT_MAKE_TAG( ch0, ch1, ch2, ch3 ) \
+ ( ((DWORD)(BYTE)(ch0) << 24) | ((DWORD)(BYTE)(ch1) << 16) | \
+ ((DWORD)(BYTE)(ch2) << 8) | (DWORD)(BYTE)(ch3) )
+#endif
FT_Library library;
@@ -44,8 +77,6 @@ static BOOL RenderingEnabled = TRUE;
UINT Hits;
UINT Misses;
-SHORT ftLanguageID = 0;
-
typedef struct _FONT_CACHE_ENTRY {
LIST_ENTRY ListEntry;
int GlyphIndex;
@@ -79,48 +110,48 @@ static PWCHAR ElfScripts[32] = { /* these are in the order of the fsCsb[0] bits
};
/*
- * For NtGdiTranslateCharsetInfo
+ * For TranslateCharsetInfo
*/
-#define FS(x) {{0,0,0,0},{0x1<<(x),0}}
+#define CP_SYMBOL 42
#define MAXTCIINDEX 32
-static CHARSETINFO FontTci[MAXTCIINDEX] = {
+static const CHARSETINFO FontTci[MAXTCIINDEX] = {
/* ANSI */
- { ANSI_CHARSET, 1252, FS(0)},
- { EASTEUROPE_CHARSET, 1250, FS(1)},
- { RUSSIAN_CHARSET, 1251, FS(2)},
- { GREEK_CHARSET, 1253, FS(3)},
- { TURKISH_CHARSET, 1254, FS(4)},
- { HEBREW_CHARSET, 1255, FS(5)},
- { ARABIC_CHARSET, 1256, FS(6)},
- { BALTIC_CHARSET, 1257, FS(7)},
- { VIETNAMESE_CHARSET, 1258, FS(8)},
+ { ANSI_CHARSET, 1252, {{0,0,0,0},{FS_LATIN1,0}} },
+ { EASTEUROPE_CHARSET, 1250, {{0,0,0,0},{FS_LATIN2,0}} },
+ { RUSSIAN_CHARSET, 1251, {{0,0,0,0},{FS_CYRILLIC,0}} },
+ { GREEK_CHARSET, 1253, {{0,0,0,0},{FS_GREEK,0}} },
+ { TURKISH_CHARSET, 1254, {{0,0,0,0},{FS_TURKISH,0}} },
+ { HEBREW_CHARSET, 1255, {{0,0,0,0},{FS_HEBREW,0}} },
+ { ARABIC_CHARSET, 1256, {{0,0,0,0},{FS_ARABIC,0}} },
+ { BALTIC_CHARSET, 1257, {{0,0,0,0},{FS_BALTIC,0}} },
+ { VIETNAMESE_CHARSET, 1258, {{0,0,0,0},{FS_VIETNAMESE,0}} },
/* reserved by ANSI */
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
/* ANSI and OEM */
- { THAI_CHARSET, 874, FS(16)},
- { SHIFTJIS_CHARSET, 932, FS(17)},
- { GB2312_CHARSET, 936, FS(18)},
- { HANGEUL_CHARSET, 949, FS(19)},
- { CHINESEBIG5_CHARSET, 950, FS(20)},
- { JOHAB_CHARSET, 1361, FS(21)},
+ { THAI_CHARSET, 874, {{0,0,0,0},{FS_THAI,0}} },
+ { SHIFTJIS_CHARSET, 932, {{0,0,0,0},{FS_JISJAPAN,0}} },
+ { GB2312_CHARSET, 936, {{0,0,0,0},{FS_CHINESESIMP,0}} },
+ { HANGEUL_CHARSET, 949, {{0,0,0,0},{FS_WANSUNG,0}} },
+ { CHINESEBIG5_CHARSET, 950, {{0,0,0,0},{FS_CHINESETRAD,0}} },
+ { JOHAB_CHARSET, 1361, {{0,0,0,0},{FS_JOHAB,0}} },
/* reserved for alternate ANSI and OEM */
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
- { DEFAULT_CHARSET, 0, FS(0)},
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
/* reserved for system */
- { DEFAULT_CHARSET, 0, FS(0)},
- { SYMBOL_CHARSET, 42 /* CP_SYMBOL */, FS(31)},
+ { DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
+ { SYMBOL_CHARSET, CP_SYMBOL, {{0,0,0,0},{FS_SYMBOL,0}} }
};
BOOL FASTCALL
@@ -244,6 +275,7 @@ IntLoadSystemFonts(VOID)
}
}
+
/*
* IntGdiAddFontResource
*
@@ -339,7 +371,7 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics)
{
FT_Done_Face(Face);
ObDereferenceObject(SectionObject);
- ExFreePool(Entry);
+ ExFreePoolWithTag(Entry, TAG_FONT);
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
return 0;
}
@@ -350,11 +382,11 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics)
EngFreeMem(FontGDI);
FT_Done_Face(Face);
ObDereferenceObject(SectionObject);
- ExFreePool(Entry);
+ ExFreePoolWithTag(Entry, TAG_FONT);
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
return 0;
}
- memcpy(FontGDI->Filename, FileName->Buffer, FileName->Length);
+ RtlCopyMemory(FontGDI->Filename, FileName->Buffer, FileName->Length);
FontGDI->Filename[FileName->Length / sizeof(WCHAR)] = L'\0';
FontGDI->face = Face;
@@ -446,52 +478,6 @@ IntGetFontRenderMode(LOGFONTW *logfont)
return FT_RENDER_MODE_NORMAL;
}
-INT
-APIENTRY
-NtGdiAddFontResourceW(
- IN WCHAR *pwszFiles,
- IN ULONG cwc,
- IN ULONG cFiles,
- IN FLONG fl,
- IN DWORD dwPidTid,
- IN OPTIONAL DESIGNVECTOR *pdv)
-{
- UNICODE_STRING SafeFileName;
- PWSTR src;
- NTSTATUS Status;
- int Ret;
-
- /* FIXME - Protect with SEH? */
- RtlInitUnicodeString(&SafeFileName, pwszFiles);
-
- /* Reserve for prepending '\??\' */
- SafeFileName.Length += 4 * sizeof(WCHAR);
- SafeFileName.MaximumLength += 4 * sizeof(WCHAR);
-
- src = SafeFileName.Buffer;
- SafeFileName.Buffer = (PWSTR)ExAllocatePoolWithTag(PagedPool, SafeFileName.MaximumLength, TAG_STRING);
- if(!SafeFileName.Buffer)
- {
- SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
- return 0;
- }
-
- /* Prepend '\??\' */
- RtlCopyMemory(SafeFileName.Buffer, L"\\??\\", 4 * sizeof(WCHAR));
-
- Status = MmCopyFromCaller(SafeFileName.Buffer + 4, src, SafeFileName.MaximumLength - (4 * sizeof(WCHAR)));
- if(!NT_SUCCESS(Status))
- {
- ExFreePool(SafeFileName.Buffer);
- SetLastNtError(Status);
- return 0;
- }
-
- Ret = IntGdiAddFontResource(&SafeFileName, (DWORD)fl);
-
- ExFreePool(SafeFileName.Buffer);
- return Ret;
-}
NTSTATUS FASTCALL
TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont)
@@ -505,7 +491,7 @@ TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont)
}
*NewFont = TextObj->BaseObject.hHmgr;
- memcpy(&TextObj->logfont.elfEnumLogfontEx.elfLogFont, lf, sizeof(LOGFONTW));
+ RtlCopyMemory(&TextObj->logfont.elfEnumLogfontEx.elfLogFont, lf, sizeof(LOGFONTW));
if (lf->lfEscapement != lf->lfOrientation)
{
/* this should really depend on whether GM_ADVANCED is set */
@@ -517,63 +503,6 @@ TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont)
return STATUS_SUCCESS;
}
-HFONT
-STDCALL
-NtGdiHfontCreate(
- IN PENUMLOGFONTEXDVW pelfw,
- IN ULONG cjElfw,
- IN LFTYPE lft,
- IN FLONG fl,
- IN PVOID pvCliData )
-{
- ENUMLOGFONTEXDVW SafeLogfont;
- HFONT hNewFont;
- PTEXTOBJ TextObj;
- NTSTATUS Status = STATUS_SUCCESS;
-
- if (!pelfw)
- {
- return NULL;
- }
-
- _SEH_TRY
- {
- ProbeForRead(pelfw, sizeof(ENUMLOGFONTEXDVW), 1);
- RtlCopyMemory(&SafeLogfont, pelfw, sizeof(ENUMLOGFONTEXDVW));
- }
- _SEH_HANDLE
- {
- Status = _SEH_GetExceptionCode();
- }
- _SEH_END
-
- if (!NT_SUCCESS(Status))
- {
- return NULL;
- }
-
- TextObj = TEXTOBJ_AllocTextWithHandle();
- if (!TextObj)
- {
- return NULL;
- }
- hNewFont = TextObj->BaseObject.hHmgr;
-
- RtlCopyMemory (&TextObj->logfont, &SafeLogfont, sizeof(ENUMLOGFONTEXDVW));
-
- if (SafeLogfont.elfEnumLogfontEx.elfLogFont.lfEscapement !=
- SafeLogfont.elfEnumLogfontEx.elfLogFont.lfOrientation)
- {
- /* this should really depend on whether GM_ADVANCED is set */
- TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfOrientation =
- TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfEscapement;
- }
- TEXTOBJ_UnlockText(TextObj);
-
- return hNewFont;
-
-}
-
/*************************************************************************
* TranslateCharsetInfo
*
@@ -608,13 +537,13 @@ IntTranslateCharsetInfo(PDWORD Src, /* [in]
}
break;
case TCI_SRCCODEPAGE:
- while ((UINT) (Src) != FontTci[Index].ciACP && Index < MAXTCIINDEX)
+ while ( *Src != FontTci[Index].ciACP && Index < MAXTCIINDEX)
{
Index++;
}
break;
case TCI_SRCCHARSET:
- while ((UINT) (Src) != FontTci[Index].ciCharset && Index < MAXTCIINDEX)
+ while ( *Src != FontTci[Index].ciCharset && Index < MAXTCIINDEX)
{
Index++;
}
@@ -623,27 +552,53 @@ IntTranslateCharsetInfo(PDWORD Src, /* [in]
return FALSE;
}
- if (MAXTCIINDEX <= Index || DEFAULT_CHARSET == FontTci[Index].ciCharset)
- {
- return FALSE;
- }
+ if (Index >= MAXTCIINDEX || DEFAULT_CHARSET == FontTci[Index].ciCharset)
+ {
+ return FALSE;
+ }
- memcpy(Cs, &FontTci[Index], sizeof(CHARSETINFO));
+ RtlCopyMemory(Cs, &FontTci[Index], sizeof(CHARSETINFO));
return TRUE;
}
static void FASTCALL
-FillTM(TEXTMETRICW *TM, FT_Face Face, TT_OS2 *pOS2, TT_HoriHeader *pHori)
+FillTM(TEXTMETRICW *TM, PFONTGDI FontGDI, TT_OS2 *pOS2, TT_HoriHeader *pHori, FT_WinFNT_HeaderRec *pWin)
{
FT_Fixed XScale, YScale;
int Ascent, Descent;
+ FT_Face Face = FontGDI->face;
XScale = Face->size->metrics.x_scale;
YScale = Face->size->metrics.y_scale;
- if (0 == pOS2->usWinAscent + pOS2->usWinDescent)
+ if (pWin)
+ {
+ TM->tmHeight = pWin->pixel_height;
+ TM->tmAscent = pWin->ascent;
+ TM->tmDescent = TM->tmHeight - TM->tmAscent;
+ TM->tmInternalLeading = pWin->internal_leading;
+ TM->tmExternalLeading = pWin->external_leading;
+ TM->tmAveCharWidth = pWin->avg_width;
+ TM->tmMaxCharWidth = pWin->max_width;
+ TM->tmWeight = pWin->weight;
+ TM->tmOverhang = 0;
+ TM->tmDigitizedAspectX = pWin->horizontal_resolution;
+ TM->tmDigitizedAspectY = pWin->vertical_resolution;
+ TM->tmFirstChar = pWin->first_char;
+ TM->tmLastChar = pWin->last_char;
+ TM->tmDefaultChar = pWin->default_char + pWin->first_char;
+ TM->tmBreakChar = pWin->break_char + pWin->first_char;
+ TM->tmItalic = pWin->italic;
+ TM->tmUnderlined = FontGDI->Underline;
+ TM->tmStruckOut = FontGDI->StrikeOut;
+ TM->tmPitchAndFamily = pWin->pitch_and_family;
+ TM->tmCharSet = pWin->charset;
+ return;
+ }
+
+ if (0 == pOS2->usWinAscent + pOS2->usWinDescent)
{
Ascent = pHori->Ascender;
Descent = -pHori->Descender;
@@ -691,8 +646,8 @@ FillTM(TEXTMETRICW *TM, FT_Face Face, TT_OS2 *pOS2, TT_HoriHeader *pHori)
TM->tmDefaultChar = pOS2->usDefaultChar;
TM->tmBreakChar = L'\0' != pOS2->usBreakChar ? pOS2->usBreakChar : ' ';
TM->tmItalic = (Face->style_flags & FT_STYLE_FLAG_ITALIC) ? 255 : 0;
- TM->tmUnderlined = 0; /* entry in OS2 table */
- TM->tmStruckOut = 0; /* entry in OS2 table */
+ TM->tmUnderlined = FontGDI->Underline;
+ TM->tmStruckOut = FontGDI->StrikeOut;
/* Yes TPMF_FIXED_PITCH is correct; braindead api */
if (! FT_IS_FIXED_WIDTH(Face))
@@ -754,7 +709,8 @@ FillTM(TEXTMETRICW *TM, FT_Face Face, TT_OS2 *pOS2, TT_HoriHeader *pHori)
*
*/
INT FASTCALL
-IntGetOutlineTextMetrics(PFONTGDI FontGDI, UINT Size,
+IntGetOutlineTextMetrics(PFONTGDI FontGDI,
+ UINT Size,
OUTLINETEXTMETRICW *Otm)
{
unsigned Needed;
@@ -764,6 +720,8 @@ IntGetOutlineTextMetrics(PFONTGDI FontGDI, UINT Size,
FT_Fixed XScale, YScale;
ANSI_STRING FamilyNameA, StyleNameA;
UNICODE_STRING FamilyNameW, StyleNameW, Regular;
+ FT_WinFNT_HeaderRec Win;
+ FT_Error Error;
char *Cp;
Needed = sizeof(OUTLINETEXTMETRICW);
@@ -829,12 +787,21 @@ IntGetOutlineTextMetrics(PFONTGDI FontGDI, UINT Size,
pPost = FT_Get_Sfnt_Table(FontGDI->face, ft_sfnt_post); /* we can live with this failing */
+ Error = FT_Get_WinFNT_Header(FontGDI->face , &Win);
+
Otm->otmSize = Needed;
- FillTM(&Otm->otmTextMetrics, FontGDI->face, pOS2, pHori);
+// FillTM(&Otm->otmTextMetrics, FontGDI, pOS2, pHori, !Error ? &Win : 0);
+ if (!(FontGDI->flRealizedType & FDM_TYPE_TEXT_METRIC))
+ {
+ FillTM(&FontGDI->TextMetric, FontGDI, pOS2, pHori, !Error ? &Win : 0);
+ FontGDI->flRealizedType |= FDM_TYPE_TEXT_METRIC;
+ }
+
+ RtlCopyMemory(&Otm->otmTextMetrics, &FontGDI->TextMetric, sizeof(TEXTMETRICW));
Otm->otmFiller = 0;
- memcpy(&Otm->otmPanoseNumber, pOS2->panose, PANOSE_COUNT);
+ RtlCopyMemory(&Otm->otmPanoseNumber, pOS2->panose, PANOSE_COUNT);
Otm->otmfsSelection = pOS2->fsSelection;
Otm->otmfsType = pOS2->fsType;
Otm->otmsCharSlopeRise = pHori->caret_Slope_Rise;
@@ -977,21 +944,21 @@ FontFamilyFillInfo(PFONTFAMILYINFO Info, PCWSTR FaceName, PFONTGDI FontGDI)
UNICODE_STRING StyleW;
TT_OS2 *pOS2;
FONTSIGNATURE fs;
- DWORD fs_fsCsb0;
CHARSETINFO CharSetInfo;
unsigned i, Size;
OUTLINETEXTMETRICW *Otm;
LOGFONTW *Lf;
TEXTMETRICW *TM;
NEWTEXTMETRICW *Ntm;
+ DWORD fs0;
RtlZeroMemory(Info, sizeof(FONTFAMILYINFO));
Size = IntGetOutlineTextMetrics(FontGDI, 0, NULL);
Otm = ExAllocatePoolWithTag(PagedPool, Size, TAG_GDITEXT);
- if (NULL == Otm)
- {
- return;
- }
+ if (!Otm)
+ {
+ return;
+ }
IntGetOutlineTextMetrics(FontGDI, Size, Otm);
Lf = &Info->EnumLogFontEx.elfLogFont;
@@ -1029,14 +996,10 @@ FontFamilyFillInfo(PFONTFAMILYINFO Info, PCWSTR FaceName, PFONTGDI FontGDI)
Ntm->tmPitchAndFamily = TM->tmPitchAndFamily;
Ntm->tmCharSet = TM->tmCharSet;
Ntm->ntmFlags = TM->tmItalic ? NTM_ITALIC : 0;
- if (550 < TM->tmWeight)
- {
- Ntm->ntmFlags |= NTM_BOLD;
- }
- if (0 == Ntm->ntmFlags)
- {
- Ntm->ntmFlags = NTM_REGULAR;
- }
+
+ if (550 < TM->tmWeight) Ntm->ntmFlags |= NTM_BOLD;
+
+ if (0 == Ntm->ntmFlags) Ntm->ntmFlags = NTM_REGULAR;
Ntm->ntmSizeEM = Otm->otmEMSquare;
Ntm->ntmCellHeight = 0;
@@ -1044,12 +1007,11 @@ FontFamilyFillInfo(PFONTFAMILYINFO Info, PCWSTR FaceName, PFONTGDI FontGDI)
Info->FontType = (0 != (TM->tmPitchAndFamily & TMPF_TRUETYPE)
? TRUETYPE_FONTTYPE : 0);
- if (0 == (TM->tmPitchAndFamily & TMPF_VECTOR))
- {
- Info->FontType |= RASTER_FONTTYPE;
- }
- ExFreePool(Otm);
+ if (0 == (TM->tmPitchAndFamily & TMPF_VECTOR))
+ Info->FontType |= RASTER_FONTTYPE;
+
+ ExFreePoolWithTag(Otm, TAG_GDITEXT);
wcsncpy(Info->EnumLogFontEx.elfLogFont.lfFaceName, FaceName, LF_FACESIZE);
wcsncpy(Info->EnumLogFontEx.elfFullName, FaceName, LF_FULLFACESIZE);
@@ -1064,76 +1026,64 @@ FontFamilyFillInfo(PFONTFAMILYINFO Info, PCWSTR FaceName, PFONTGDI FontGDI)
pOS2 = FT_Get_Sfnt_Table(FontGDI->face, ft_sfnt_os2);
IntUnLockFreeType;
if (NULL != pOS2)
- {
- Info->NewTextMetricEx.ntmFontSig.fsCsb[0] = pOS2->ulCodePageRange1;
- Info->NewTextMetricEx.ntmFontSig.fsCsb[1] = pOS2->ulCodePageRange2;
- Info->NewTextMetricEx.ntmFontSig.fsUsb[0] = pOS2->ulUnicodeRange1;
- Info->NewTextMetricEx.ntmFontSig.fsUsb[1] = pOS2->ulUnicodeRange2;
- Info->NewTextMetricEx.ntmFontSig.fsUsb[2] = pOS2->ulUnicodeRange3;
- Info->NewTextMetricEx.ntmFontSig.fsUsb[3] = pOS2->ulUnicodeRange4;
+ {
+ fs.fsCsb[0] = pOS2->ulCodePageRange1;
+ fs.fsCsb[1] = pOS2->ulCodePageRange2;
+ fs.fsUsb[0] = pOS2->ulUnicodeRange1;
+ fs.fsUsb[1] = pOS2->ulUnicodeRange2;
+ fs.fsUsb[2] = pOS2->ulUnicodeRange3;
+ fs.fsUsb[3] = pOS2->ulUnicodeRange4;
- fs_fsCsb0 = pOS2->ulCodePageRange1;
- if (0 == pOS2->version)
+ if (0 == pOS2->version)
+ {
+ FT_UInt Dummy;
+
+ if (FT_Get_First_Char(FontGDI->face, &Dummy) < 0x100)
+ fs.fsCsb[0] |= FS_LATIN1;
+ else
+ fs.fsCsb[0] |= FS_SYMBOL;
+ }
+ if (fs.fsCsb[0] == 0)
+ { /* let's see if we can find any interesting cmaps */
+ for (i = 0; i < FontGDI->face->num_charmaps; i++)
{
- FT_UInt Dummy;
-
- if (FT_Get_First_Char(FontGDI->face, &Dummy) < 0x100)
- {
- fs_fsCsb0 |= 1;
- }
- else
- {
- fs_fsCsb0 |= 1L << 31;
- }
+ switch (FontGDI->face->charmaps[i]->encoding)
+ {
+ case FT_ENCODING_UNICODE:
+ case FT_ENCODING_APPLE_ROMAN:
+ fs.fsCsb[0] |= FS_LATIN1;
+ break;
+ case FT_ENCODING_MS_SYMBOL:
+ fs.fsCsb[0] |= FS_SYMBOL;
+ break;
+ default:
+ break;
+ }
}
- if (0 == fs_fsCsb0)
- { /* let's see if we can find any interesting cmaps */
- for (i = 0; i < FontGDI->face->num_charmaps; i++)
- {
- switch (FontGDI->face->charmaps[i]->encoding)
- {
- case ft_encoding_unicode:
- case ft_encoding_apple_roman:
- fs_fsCsb0 |= 1;
- break;
- case ft_encoding_symbol:
- fs_fsCsb0 |= 1L << 31;
- break;
- default:
- break;
- }
- }
- }
-
- for(i = 0; i < 32; i++)
+ }
+ for (i = 0; i < MAXTCIINDEX; i++)
+ {
+ fs0 = 1L << i;
+ if (fs.fsCsb[0] & fs0)
{
- if (0 != (fs_fsCsb0 & (1L << i)))
- {
- fs.fsCsb[0] = 1L << i;
- fs.fsCsb[1] = 0;
- if (! IntTranslateCharsetInfo(fs.fsCsb, &CharSetInfo, TCI_SRCFONTSIG))
- {
- CharSetInfo.ciCharset = DEFAULT_CHARSET;
- }
- if (31 == i)
- {
- CharSetInfo.ciCharset = SYMBOL_CHARSET;
- }
- if (DEFAULT_CHARSET != CharSetInfo.ciCharset)
- {
- Info->EnumLogFontEx.elfLogFont.lfCharSet = CharSetInfo.ciCharset;
- if (NULL != ElfScripts[i])
- {
- wcscpy(Info->EnumLogFontEx.elfScript, ElfScripts[i]);
- }
- else
- {
- DPRINT1("Unknown elfscript for bit %d\n", i);
- }
- }
- }
+ if (!IntTranslateCharsetInfo(&fs0, &CharSetInfo, TCI_SRCFONTSIG))
+ {
+ CharSetInfo.ciCharset = DEFAULT_CHARSET;
+ }
+ if (DEFAULT_CHARSET != CharSetInfo.ciCharset)
+ {
+ Info->EnumLogFontEx.elfLogFont.lfCharSet = CharSetInfo.ciCharset;
+ if (NULL != ElfScripts[i])
+ wcscpy(Info->EnumLogFontEx.elfScript, ElfScripts[i]);
+ else
+ {
+ DPRINT1("Unknown elfscript for bit %d\n", i);
+ }
+ }
}
- }
+ }
+ Info->NewTextMetricEx.ntmFontSig = fs;
+ }
}
static int FASTCALL
@@ -1329,13 +1279,1720 @@ ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS lprs)
{
lprs->nSize = sizeof(RASTERIZER_STATUS);
lprs->wFlags = TT_AVAILABLE | TT_ENABLED;
- lprs->nLanguageID = ftLanguageID;
+ lprs->nLanguageID = gusLanguageID;
return TRUE;
}
SetLastWin32Error(ERROR_INVALID_PARAMETER);
return FALSE;
}
+
+FT_Glyph STDCALL
+ftGdiGlyphCacheGet(
+ FT_Face Face,
+ INT GlyphIndex,
+ INT Height)
+{
+ PLIST_ENTRY CurrentEntry;
+ PFONT_CACHE_ENTRY FontEntry;
+
+// DbgPrint("CacheGet\n");
+
+ CurrentEntry = FontCacheListHead.Flink;
+ while (CurrentEntry != &FontCacheListHead)
+ {
+ FontEntry = (PFONT_CACHE_ENTRY)CurrentEntry;
+ if (FontEntry->Face == Face &&
+ FontEntry->GlyphIndex == GlyphIndex &&
+ FontEntry->Height == Height)
+ break;
+ CurrentEntry = CurrentEntry->Flink;
+ }
+
+ if (CurrentEntry == &FontCacheListHead) {
+// DbgPrint("Miss! %x\n", FontEntry->Glyph);
+/*
+ Misses++;
+ if (Misses>100) {
+ DbgPrint ("Hits: %d Misses: %d\n", Hits, Misses);
+ Hits = Misses = 0;
+ }
+*/
+ return NULL;
+ }
+
+ RemoveEntryList(CurrentEntry);
+ InsertHeadList(&FontCacheListHead, CurrentEntry);
+
+// DbgPrint("Hit! %x\n", FontEntry->Glyph);
+/*
+ Hits++;
+
+ if (Hits>100) {
+ DbgPrint ("Hits: %d Misses: %d\n", Hits, Misses);
+ Hits = Misses = 0;
+ }
+*/
+ return FontEntry->Glyph;
+}
+
+FT_Glyph STDCALL
+ftGdiGlyphCacheSet(
+ FT_Face Face,
+ INT GlyphIndex,
+ INT Height,
+ FT_GlyphSlot GlyphSlot,
+ FT_Render_Mode RenderMode)
+{
+ FT_Glyph GlyphCopy;
+ INT error;
+ PFONT_CACHE_ENTRY NewEntry;
+
+// DbgPrint("CacheSet.\n");
+
+ error = FT_Get_Glyph(GlyphSlot, &GlyphCopy);
+ if (error)
+ {
+ DbgPrint("Failure caching glyph.\n");
+ return NULL;
+ };
+ error = FT_Glyph_To_Bitmap(&GlyphCopy, RenderMode, 0, 1);
+ if (error)
+ {
+ DbgPrint("Failure rendering glyph.\n");
+ return NULL;
+ };
+
+ NewEntry = ExAllocatePoolWithTag(PagedPool, sizeof(FONT_CACHE_ENTRY), TAG_FONT);
+ if (!NewEntry)
+ {
+ DbgPrint("Alloc failure caching glyph.\n");
+ FT_Done_Glyph(GlyphCopy);
+ return NULL;
+ }
+
+ NewEntry->GlyphIndex = GlyphIndex;
+ NewEntry->Face = Face;
+ NewEntry->Glyph = GlyphCopy;
+ NewEntry->Height = Height;
+
+ InsertHeadList(&FontCacheListHead, &NewEntry->ListEntry);
+ if (FontCacheNumEntries++ > MAX_FONT_CACHE) {
+ NewEntry = (PFONT_CACHE_ENTRY)FontCacheListHead.Blink;
+ FT_Done_Glyph(NewEntry->Glyph);
+ RemoveTailList(&FontCacheListHead);
+ ExFreePool(NewEntry);
+ FontCacheNumEntries--;
+ }
+
+// DbgPrint("Returning the glyphcopy: %x\n", GlyphCopy);
+
+ return GlyphCopy;
+}
+
+
+static
+void
+FTVectorToPOINTFX(FT_Vector *vec, POINTFX *pt)
+{
+ pt->x.value = vec->x >> 6;
+ pt->x.fract = (vec->x & 0x3f) << 10;
+ pt->x.fract |= ((pt->x.fract >> 6) | (pt->x.fract >> 12));
+ pt->y.value = vec->y >> 6;
+ pt->y.fract = (vec->y & 0x3f) << 10;
+ pt->y.fract |= ((pt->y.fract >> 6) | (pt->y.fract >> 12));
+ return;
+}
+
+/*
+ This function builds an FT_Fixed from a float. It puts the integer part
+ in the highest 16 bits and the decimal part in the lowest 16 bits of the FT_Fixed.
+ It fails if the integer part of the float number is greater than SHORT_MAX.
+*/
+static __inline FT_Fixed FT_FixedFromFloat(float f)
+{
+ short value = f;
+ unsigned short fract = (f - value) * 0xFFFF;
+ return (FT_Fixed)((long)value << 16 | (unsigned long)fract);
+}
+
+/*
+ This function builds an FT_Fixed from a FIXED. It simply put f.value
+ in the highest 16 bits and f.fract in the lowest 16 bits of the FT_Fixed.
+*/
+static __inline FT_Fixed FT_FixedFromFIXED(FIXED f)
+{
+ return (FT_Fixed)((long)f.value << 16 | (unsigned long)f.fract);
+}
+
+/*
+ * Based on WineEngGetGlyphOutline
+ *
+ */
+ULONG
+FASTCALL
+ftGdiGetGlyphOutline(
+ PDC dc,
+ WCHAR wch,
+ UINT iFormat,
+ LPGLYPHMETRICS pgm,
+ ULONG cjBuf,
+ PVOID pvBuf,
+ LPMAT2 pmat2,
+ BOOL bIgnoreRotation)
+{
+ static const FT_Matrix identityMat = {(1 << 16), 0, 0, (1 << 16)};
+ PDC_ATTR Dc_Attr;
+ PTEXTOBJ TextObj;
+ PFONTGDI FontGDI;
+ HFONT hFont = 0;
+ GLYPHMETRICS gm;
+ ULONG Size;
+ FT_Face ft_face;
+ FT_UInt glyph_index;
+ DWORD width, height, pitch, needed = 0;
+ FT_Bitmap ft_bitmap;
+ FT_Error error;
+ INT left, right, top = 0, bottom = 0;
+ FT_Angle angle = 0;
+ FT_Int load_flags = FT_LOAD_DEFAULT | FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH;
+ FLOAT eM11, widthRatio = 1.0;
+ FT_Matrix transMat = identityMat;
+ BOOL needsTransform = FALSE;
+ INT orientation;
+ LONG aveWidth;
+ INT adv, lsb, bbx; /* These three hold to widths of the unrotated chars */
+ OUTLINETEXTMETRICW *potm;
+ int n = 0;
+ FT_CharMap found = 0, charmap;
+ XFORM xForm;
+
+ DPRINT("%d, %08x, %p, %08lx, %p, %p\n", wch, iFormat, pgm,
+ cjBuf, pvBuf, pmat2);
+
+ Dc_Attr = dc->pDc_Attr;
+ if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
+
+ MatrixS2XForm(&xForm, &dc->DcLevel.mxWorldToDevice);
+ eM11 = xForm.eM11;
+
+ hFont = Dc_Attr->hlfntNew;
+ TextObj = RealizeFontInit(hFont);
+
+ if (!TextObj)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return GDI_ERROR;
+ }
+ FontGDI = ObjToGDI(TextObj->Font, FONT);
+ ft_face = FontGDI->face;
+
+ aveWidth = FT_IS_SCALABLE(ft_face) ? TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfWidth: 0;
+ orientation = FT_IS_SCALABLE(ft_face) ? TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfOrientation: 0;
+
+ Size = IntGetOutlineTextMetrics(FontGDI, 0, NULL);
+ potm = ExAllocatePoolWithTag(PagedPool, Size, TAG_GDITEXT);
+ if (!potm)
+ {
+ SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+ TEXTOBJ_UnlockText(TextObj);
+ return GDI_ERROR;
+ }
+ IntGetOutlineTextMetrics(FontGDI, Size, potm);
+
+ IntLockFreeType;
+
+ /* During testing, I never saw this used. In here just incase.*/
+ if (ft_face->charmap == NULL)
+ {
+ DPRINT("WARNING: No charmap selected!\n");
+ DPRINT("This font face has %d charmaps\n", ft_face->num_charmaps);
+
+ for (n = 0; n < ft_face->num_charmaps; n++)
+ {
+ charmap = ft_face->charmaps[n];
+ DPRINT("found charmap encoding: %u\n", charmap->encoding);
+ if (charmap->encoding != 0)
+ {
+ found = charmap;
+ break;
+ }
+ }
+ if (!found)
+ {
+ DPRINT1("WARNING: Could not find desired charmap!\n");
+ }
+ error = FT_Set_Charmap(ft_face, found);
+ if (error)
+ {
+ DPRINT1("WARNING: Could not set the charmap!\n");
+ }
+ }
+
+// FT_Set_Pixel_Sizes(ft_face,
+// TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfWidth,
+ /* FIXME should set character height if neg */
+// (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight < 0 ? - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight :
+// TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight == 0 ? 11 : TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight));
+
+ TEXTOBJ_UnlockText(TextObj);
+
+ if (iFormat & GGO_GLYPH_INDEX)
+ {
+ glyph_index = wch;
+ iFormat &= ~GGO_GLYPH_INDEX;
+ }
+ else glyph_index = FT_Get_Char_Index(ft_face, wch);
+
+ if (orientation || (iFormat != GGO_METRICS && iFormat != GGO_BITMAP) || aveWidth || pmat2)
+ load_flags |= FT_LOAD_NO_BITMAP;
+
+ if (iFormat & GGO_UNHINTED)
+ {
+ load_flags |= FT_LOAD_NO_HINTING;
+ iFormat &= ~GGO_UNHINTED;
+ }
+
+ error = FT_Load_Glyph(ft_face, glyph_index, load_flags);
+ if (error)
+ {
+ DPRINT1("WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
+ IntUnLockFreeType;
+ if (potm) ExFreePoolWithTag(potm, TAG_GDITEXT);
+ return GDI_ERROR;
+ }
+ IntUnLockFreeType;
+
+ if (aveWidth && potm)
+ {
+ widthRatio = (FLOAT)aveWidth * eM11 /
+ (FLOAT) potm->otmTextMetrics.tmAveCharWidth;
+ }
+
+ left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64;
+ right = (INT)((ft_face->glyph->metrics.horiBearingX +
+ ft_face->glyph->metrics.width) * widthRatio + 63) & -64;
+
+ adv = (INT)((ft_face->glyph->metrics.horiAdvance * widthRatio) + 63) >> 6;
+ lsb = left >> 6;
+ bbx = (right - left) >> 6;
+
+ DPRINT("Advance = %d, lsb = %d, bbx = %d\n",adv, lsb, bbx);
+
+ IntLockFreeType;
+
+ /* Scaling transform */
+ if (aveWidth)
+ {
+ FT_Matrix scaleMat;
+ DPRINT("Scaling Trans!\n");
+ scaleMat.xx = FT_FixedFromFloat(widthRatio);
+ scaleMat.xy = 0;
+ scaleMat.yx = 0;
+ scaleMat.yy = (1 << 16);
+ FT_Matrix_Multiply(&scaleMat, &transMat);
+ needsTransform = TRUE;
+ }
+
+ /* Slant transform */
+ if (potm->otmTextMetrics.tmItalic)
+ {
+ FT_Matrix slantMat;
+ DPRINT("Slant Trans!\n");
+ slantMat.xx = (1 << 16);
+ slantMat.xy = ((1 << 16) >> 2);
+ slantMat.yx = 0;
+ slantMat.yy = (1 << 16);
+ FT_Matrix_Multiply(&slantMat, &transMat);
+ needsTransform = TRUE;
+ }
+
+ /* Rotation transform */
+ if (orientation)
+ {
+ FT_Matrix rotationMat;
+ FT_Vector vecAngle;
+ DPRINT("Rotation Trans!\n");
+ angle = FT_FixedFromFloat((float)orientation / 10.0);
+ FT_Vector_Unit(&vecAngle, angle);
+ rotationMat.xx = vecAngle.x;
+ rotationMat.xy = -vecAngle.y;
+ rotationMat.yx = -rotationMat.xy;
+ rotationMat.yy = rotationMat.xx;
+ FT_Matrix_Multiply(&rotationMat, &transMat);
+ needsTransform = TRUE;
+ }
+
+ /* Extra transformation specified by caller */
+ if (pmat2)
+ {
+ FT_Matrix extraMat;
+ DPRINT("MAT2 Matrix Trans!\n");
+ extraMat.xx = FT_FixedFromFIXED(pmat2->eM11);
+ extraMat.xy = FT_FixedFromFIXED(pmat2->eM21);
+ extraMat.yx = FT_FixedFromFIXED(pmat2->eM12);
+ extraMat.yy = FT_FixedFromFIXED(pmat2->eM22);
+ FT_Matrix_Multiply(&extraMat, &transMat);
+ needsTransform = TRUE;
+ }
+
+ if (potm) ExFreePoolWithTag(potm, TAG_GDITEXT); /* It looks like we are finished with potm ATM.*/
+
+ if (!needsTransform)
+ {
+ DPRINT("No Need to be Transformed!\n");
+ top = (ft_face->glyph->metrics.horiBearingY + 63) & -64;
+ bottom = (ft_face->glyph->metrics.horiBearingY -
+ ft_face->glyph->metrics.height) & -64;
+ gm.gmCellIncX = adv;
+ gm.gmCellIncY = 0;
+ }
+ else
+ {
+ INT xc, yc;
+ FT_Vector vec;
+ for(xc = 0; xc < 2; xc++)
+ {
+ for(yc = 0; yc < 2; yc++)
+ {
+ vec.x = (ft_face->glyph->metrics.horiBearingX +
+ xc * ft_face->glyph->metrics.width);
+ vec.y = ft_face->glyph->metrics.horiBearingY -
+ yc * ft_face->glyph->metrics.height;
+ DPRINT("Vec %ld,%ld\n", vec.x, vec.y);
+ FT_Vector_Transform(&vec, &transMat);
+ if(xc == 0 && yc == 0)
+ {
+ left = right = vec.x;
+ top = bottom = vec.y;
+ }
+ else
+ {
+ if(vec.x < left) left = vec.x;
+ else if(vec.x > right) right = vec.x;
+ if(vec.y < bottom) bottom = vec.y;
+ else if(vec.y > top) top = vec.y;
+ }
+ }
+ }
+ left = left & -64;
+ right = (right + 63) & -64;
+ bottom = bottom & -64;
+ top = (top + 63) & -64;
+
+ DPRINT("transformed box: (%d,%d - %d,%d)\n", left, top, right, bottom);
+ vec.x = ft_face->glyph->metrics.horiAdvance;
+ vec.y = 0;
+ FT_Vector_Transform(&vec, &transMat);
+ gm.gmCellIncX = (vec.x+63) >> 6;
+ gm.gmCellIncY = -((vec.y+63) >> 6);
+ }
+ gm.gmBlackBoxX = (right - left) >> 6;
+ gm.gmBlackBoxY = (top - bottom) >> 6;
+ gm.gmptGlyphOrigin.x = left >> 6;
+ gm.gmptGlyphOrigin.y = top >> 6;
+
+ DPRINT("CX %d CY %d BBX %d BBY %d GOX %d GOY %d\n",
+ gm.gmCellIncX, gm.gmCellIncY,
+ gm.gmBlackBoxX, gm.gmBlackBoxY,
+ gm.gmptGlyphOrigin.x, gm.gmptGlyphOrigin.y);
+
+ IntUnLockFreeType;
+
+ if (pgm) RtlCopyMemory(pgm, &gm, sizeof(GLYPHMETRICS));
+
+ if (iFormat == GGO_METRICS)
+ {
+ DPRINT("GGO_METRICS Exit!\n");
+ return 1; /* FIXME */
+ }
+
+ if (ft_face->glyph->format != ft_glyph_format_outline && iFormat != GGO_BITMAP)
+ {
+ DPRINT1("loaded a bitmap\n");
+ return GDI_ERROR;
+ }
+
+ switch(iFormat)
+ {
+ case GGO_BITMAP:
+ width = gm.gmBlackBoxX;
+ height = gm.gmBlackBoxY;
+ pitch = ((width + 31) >> 5) << 2;
+ needed = pitch * height;
+
+ if(!pvBuf || !cjBuf) break;
+
+ switch(ft_face->glyph->format)
+ {
+ case ft_glyph_format_bitmap:
+ {
+ BYTE *src = ft_face->glyph->bitmap.buffer, *dst = pvBuf;
+ INT w = (ft_face->glyph->bitmap.width + 7) >> 3;
+ INT h = ft_face->glyph->bitmap.rows;
+ while(h--)
+ {
+ RtlCopyMemory(dst, src, w);
+ src += ft_face->glyph->bitmap.pitch;
+ dst += pitch;
+ }
+ break;
+ }
+
+ case ft_glyph_format_outline:
+ ft_bitmap.width = width;
+ ft_bitmap.rows = height;
+ ft_bitmap.pitch = pitch;
+ ft_bitmap.pixel_mode = ft_pixel_mode_mono;
+ ft_bitmap.buffer = pvBuf;
+
+ IntLockFreeType;
+ if(needsTransform)
+ {
+ FT_Outline_Transform(&ft_face->glyph->outline, &transMat);
+ }
+ FT_Outline_Translate(&ft_face->glyph->outline, -left, -bottom );
+ /* Note: FreeType will only set 'black' bits for us. */
+ RtlZeroMemory(pvBuf, needed);
+ FT_Outline_Get_Bitmap(library, &ft_face->glyph->outline, &ft_bitmap);
+ IntUnLockFreeType;
+ break;
+
+ default:
+ DPRINT1("loaded glyph format %x\n", ft_face->glyph->format);
+ return GDI_ERROR;
+ }
+ break;
+
+ case GGO_GRAY2_BITMAP:
+ case GGO_GRAY4_BITMAP:
+ case GGO_GRAY8_BITMAP:
+ {
+ unsigned int mult, row, col;
+ BYTE *start, *ptr;
+
+ width = gm.gmBlackBoxX;
+ height = gm.gmBlackBoxY;
+ pitch = (width + 3) / 4 * 4;
+ needed = pitch * height;
+
+ if(!pvBuf || !cjBuf) break;
+
+ switch(ft_face->glyph->format)
+ {
+ case ft_glyph_format_bitmap:
+ {
+ BYTE *src = ft_face->glyph->bitmap.buffer, *dst = pvBuf;
+ INT h = ft_face->glyph->bitmap.rows;
+ INT x;
+ while(h--)
+ {
+ for(x = 0; x < pitch; x++)
+ {
+ if(x < ft_face->glyph->bitmap.width)
+ dst[x] = (src[x / 8] & (1 << ( (7 - (x % 8))))) ? 0xff : 0;
+ else
+ dst[x] = 0;
+ }
+ src += ft_face->glyph->bitmap.pitch;
+ dst += pitch;
+ }
+ return needed;
+ }
+ case ft_glyph_format_outline:
+ {
+ ft_bitmap.width = width;
+ ft_bitmap.rows = height;
+ ft_bitmap.pitch = pitch;
+ ft_bitmap.pixel_mode = ft_pixel_mode_grays;
+ ft_bitmap.buffer = pvBuf;
+
+ IntLockFreeType;
+ if (needsTransform)
+ {
+ FT_Outline_Transform(&ft_face->glyph->outline, &transMat);
+ }
+ FT_Outline_Translate(&ft_face->glyph->outline, -left, -bottom );
+ RtlZeroMemory(ft_bitmap.buffer, cjBuf);
+ FT_Outline_Get_Bitmap(library, &ft_face->glyph->outline, &ft_bitmap);
+ IntUnLockFreeType;
+
+ if (iFormat == GGO_GRAY2_BITMAP)
+ mult = 4;
+ else if (iFormat == GGO_GRAY4_BITMAP)
+ mult = 16;
+ else if (iFormat == GGO_GRAY8_BITMAP)
+ mult = 64;
+ else
+ {
+ return GDI_ERROR;
+ }
+ }
+ default:
+ DPRINT1("loaded glyph format %x\n", ft_face->glyph->format);
+ return GDI_ERROR;
+ }
+ start = pvBuf;
+ for(row = 0; row < height; row++)
+ {
+ ptr = start;
+ for(col = 0; col < width; col++, ptr++)
+ {
+ *ptr = (((int)*ptr) * mult + 128) / 256;
+ }
+ start += pitch;
+ }
+ break;
+ }
+
+ case GGO_NATIVE:
+ {
+ int contour, point = 0, first_pt;
+ FT_Outline *outline = &ft_face->glyph->outline;
+ TTPOLYGONHEADER *pph;
+ TTPOLYCURVE *ppc;
+ DWORD pph_start, cpfx, type;
+
+ if(cjBuf == 0) pvBuf = NULL; /* This is okay, need cjBuf to allocate. */
+
+ IntLockFreeType;
+ if (needsTransform && pvBuf) FT_Outline_Transform(outline, &transMat);
+
+ for(contour = 0; contour < outline->n_contours; contour++)
+ {
+ pph_start = needed;
+ pph = (TTPOLYGONHEADER *)((char *)pvBuf + needed);
+ first_pt = point;
+ if(pvBuf)
+ {
+ pph->dwType = TT_POLYGON_TYPE;
+ FTVectorToPOINTFX(&outline->points[point], &pph->pfxStart);
+ }
+ needed += sizeof(*pph);
+ point++;
+ while(point <= outline->contours[contour])
+ {
+ ppc = (TTPOLYCURVE *)((char *)pvBuf + needed);
+ type = (outline->tags[point] & FT_Curve_Tag_On) ?
+ TT_PRIM_LINE : TT_PRIM_QSPLINE;
+ cpfx = 0;
+ do
+ {
+ if(pvBuf)
+ FTVectorToPOINTFX(&outline->points[point], &ppc->apfx[cpfx]);
+ cpfx++;
+ point++;
+ } while(point <= outline->contours[contour] &&
+ (outline->tags[point] & FT_Curve_Tag_On) ==
+ (outline->tags[point-1] & FT_Curve_Tag_On));
+
+ /* At the end of a contour Windows adds the start point, but
+ only for Beziers */
+ if(point > outline->contours[contour] &&
+ !(outline->tags[point-1] & FT_Curve_Tag_On))
+ {
+ if(pvBuf)
+ FTVectorToPOINTFX(&outline->points[first_pt], &ppc->apfx[cpfx]);
+ cpfx++;
+ }
+ else if(point <= outline->contours[contour] &&
+ outline->tags[point] & FT_Curve_Tag_On)
+ {
+ /* add closing pt for bezier */
+ if(pvBuf)
+ FTVectorToPOINTFX(&outline->points[point], &ppc->apfx[cpfx]);
+ cpfx++;
+ point++;
+ }
+ if(pvBuf)
+ {
+ ppc->wType = type;
+ ppc->cpfx = cpfx;
+ }
+ needed += sizeof(*ppc) + (cpfx - 1) * sizeof(POINTFX);
+ }
+ if(pvBuf) pph->cb = needed - pph_start;
+ }
+ IntUnLockFreeType;
+ break;
+ }
+ case GGO_BEZIER:
+ {
+ /* Convert the quadratic Beziers to cubic Beziers.
+ The parametric eqn for a cubic Bezier is, from PLRM:
+ r(t) = at^3 + bt^2 + ct + r0
+ with the control points:
+ r1 = r0 + c/3
+ r2 = r1 + (c + b)/3
+ r3 = r0 + c + b + a
+
+ A quadratic Beizer has the form:
+ p(t) = (1-t)^2 p0 + 2(1-t)t p1 + t^2 p2
+
+ So equating powers of t leads to:
+ r1 = 2/3 p1 + 1/3 p0
+ r2 = 2/3 p1 + 1/3 p2
+ and of course r0 = p0, r3 = p2
+ */
+
+ int contour, point = 0, first_pt;
+ FT_Outline *outline = &ft_face->glyph->outline;
+ TTPOLYGONHEADER *pph;
+ TTPOLYCURVE *ppc;
+ DWORD pph_start, cpfx, type;
+ FT_Vector cubic_control[4];
+ if(cjBuf == 0) pvBuf = NULL;
+
+ if (needsTransform && pvBuf)
+ {
+ IntLockFreeType;
+ FT_Outline_Transform(outline, &transMat);
+ IntUnLockFreeType;
+ }
+
+ for(contour = 0; contour < outline->n_contours; contour++)
+ {
+ pph_start = needed;
+ pph = (TTPOLYGONHEADER *)((char *)pvBuf + needed);
+ first_pt = point;
+ if(pvBuf)
+ {
+ pph->dwType = TT_POLYGON_TYPE;
+ FTVectorToPOINTFX(&outline->points[point], &pph->pfxStart);
+ }
+ needed += sizeof(*pph);
+ point++;
+ while(point <= outline->contours[contour])
+ {
+ ppc = (TTPOLYCURVE *)((char *)pvBuf + needed);
+ type = (outline->tags[point] & FT_Curve_Tag_On) ?
+ TT_PRIM_LINE : TT_PRIM_CSPLINE;
+ cpfx = 0;
+ do
+ {
+ if(type == TT_PRIM_LINE)
+ {
+ if(pvBuf)
+ FTVectorToPOINTFX(&outline->points[point], &ppc->apfx[cpfx]);
+ cpfx++;
+ point++;
+ }
+ else
+ {
+ /* Unlike QSPLINEs, CSPLINEs always have their endpoint
+ so cpfx = 3n */
+
+ /* FIXME: Possible optimization in endpoint calculation
+ if there are two consecutive curves */
+ cubic_control[0] = outline->points[point-1];
+ if(!(outline->tags[point-1] & FT_Curve_Tag_On))
+ {
+ cubic_control[0].x += outline->points[point].x + 1;
+ cubic_control[0].y += outline->points[point].y + 1;
+ cubic_control[0].x >>= 1;
+ cubic_control[0].y >>= 1;
+ }
+ if(point+1 > outline->contours[contour])
+ cubic_control[3] = outline->points[first_pt];
+ else
+ {
+ cubic_control[3] = outline->points[point+1];
+ if(!(outline->tags[point+1] & FT_Curve_Tag_On))
+ {
+ cubic_control[3].x += outline->points[point].x + 1;
+ cubic_control[3].y += outline->points[point].y + 1;
+ cubic_control[3].x >>= 1;
+ cubic_control[3].y >>= 1;
+ }
+ }
+ /* r1 = 1/3 p0 + 2/3 p1
+ r2 = 1/3 p2 + 2/3 p1 */
+ cubic_control[1].x = (2 * outline->points[point].x + 1) / 3;
+ cubic_control[1].y = (2 * outline->points[point].y + 1) / 3;
+ cubic_control[2] = cubic_control[1];
+ cubic_control[1].x += (cubic_control[0].x + 1) / 3;
+ cubic_control[1].y += (cubic_control[0].y + 1) / 3;
+ cubic_control[2].x += (cubic_control[3].x + 1) / 3;
+ cubic_control[2].y += (cubic_control[3].y + 1) / 3;
+ if(pvBuf)
+ {
+ FTVectorToPOINTFX(&cubic_control[1], &ppc->apfx[cpfx]);
+ FTVectorToPOINTFX(&cubic_control[2], &ppc->apfx[cpfx+1]);
+ FTVectorToPOINTFX(&cubic_control[3], &ppc->apfx[cpfx+2]);
+ }
+ cpfx += 3;
+ point++;
+ }
+ }
+ while(point <= outline->contours[contour] &&
+ (outline->tags[point] & FT_Curve_Tag_On) ==
+ (outline->tags[point-1] & FT_Curve_Tag_On));
+ /* At the end of a contour Windows adds the start point,
+ but only for Beziers and we've already done that.
+ */
+ if(point <= outline->contours[contour] &&
+ outline->tags[point] & FT_Curve_Tag_On)
+ {
+ /* This is the closing pt of a bezier, but we've already
+ added it, so just inc point and carry on */
+ point++;
+ }
+ if(pvBuf)
+ {
+ ppc->wType = type;
+ ppc->cpfx = cpfx;
+ }
+ needed += sizeof(*ppc) + (cpfx - 1) * sizeof(POINTFX);
+ }
+ if(pvBuf) pph->cb = needed - pph_start;
+ }
+ break;
+ }
+
+ default:
+ DPRINT1("Unsupported format %d\n", iFormat);
+ return GDI_ERROR;
+ }
+
+ DPRINT("ftGdiGetGlyphOutline END and needed %d\n", needed);
+ return needed;
+}
+
+BOOL
+FASTCALL
+TextIntGetTextExtentPoint(PDC dc,
+ PTEXTOBJ TextObj,
+ LPCWSTR String,
+ int Count,
+ int MaxExtent,
+ LPINT Fit,
+ LPINT Dx,
+ LPSIZE Size)
+{
+ PFONTGDI FontGDI;
+ FT_Face face;
+ FT_GlyphSlot glyph;
+ FT_Glyph realglyph;
+ INT error, n, glyph_index, i, previous;
+ ULONGLONG TotalWidth = 0;
+ FT_CharMap charmap, found = NULL;
+ BOOL use_kerning;
+ FT_Render_Mode RenderMode;
+ BOOLEAN Render;
+
+ FontGDI = ObjToGDI(TextObj->Font, FONT);
+
+ face = FontGDI->face;
+ if (NULL != Fit)
+ {
+ *Fit = 0;
+ }
+
+ IntLockFreeType;
+ if (face->charmap == NULL)
+ {
+ DPRINT("WARNING: No charmap selected!\n");
+ DPRINT("This font face has %d charmaps\n", face->num_charmaps);
+
+ for (n = 0; n < face->num_charmaps; n++)
+ {
+ charmap = face->charmaps[n];
+ DPRINT("found charmap encoding: %u\n", charmap->encoding);
+ if (charmap->encoding != 0)
+ {
+ found = charmap;
+ break;
+ }
+ }
+
+ if (! found)
+ {
+ DPRINT1("WARNING: Could not find desired charmap!\n");
+ }
+
+ error = FT_Set_Charmap(face, found);
+ if (error)
+ {
+ DPRINT1("WARNING: Could not set the charmap!\n");
+ }
+ }
+
+ Render = IntIsFontRenderingEnabled();
+ if (Render)
+ RenderMode = IntGetFontRenderMode(&TextObj->logfont.elfEnumLogfontEx.elfLogFont);
+ else
+ RenderMode = FT_RENDER_MODE_MONO;
+
+ error = FT_Set_Pixel_Sizes(face,
+ TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfWidth,
+ /* FIXME should set character height if neg */
+ (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight < 0 ?
+ - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight :
+ TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight == 0 ? 11 : TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight));
+ if (error)
+ {
+ DPRINT1("Error in setting pixel sizes: %u\n", error);
+ }
+
+ use_kerning = FT_HAS_KERNING(face);
+ previous = 0;
+
+ for (i = 0; i < Count; i++)
+ {
+ glyph_index = FT_Get_Char_Index(face, *String);
+ if (!(realglyph = ftGdiGlyphCacheGet(face, glyph_index,
+ TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight)))
+ {
+ error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
+ if (error)
+ {
+ DPRINT1("WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
+ break;
+ }
+
+ glyph = face->glyph;
+ realglyph = ftGdiGlyphCacheSet(face, glyph_index,
+ TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, glyph, RenderMode);
+ if (!realglyph)
+ {
+ DPRINT1("Failed to render glyph! [index: %u]\n", glyph_index);
+ break;
+ }
+ }
+
+ /* retrieve kerning distance */
+ if (use_kerning && previous && glyph_index)
+ {
+ FT_Vector delta;
+ FT_Get_Kerning(face, previous, glyph_index, 0, &delta);
+ TotalWidth += delta.x;
+ }
+
+ TotalWidth += realglyph->advance.x >> 10;
+
+ if (((TotalWidth + 32) >> 6) <= MaxExtent && NULL != Fit)
+ {
+ *Fit = i + 1;
+ }
+ if (NULL != Dx)
+ {
+ Dx[i] = (TotalWidth + 32) >> 6;
+ }
+
+ previous = glyph_index;
+ String++;
+ }
+ IntUnLockFreeType;
+
+ Size->cx = (TotalWidth + 32) >> 6;
+ Size->cy = (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight < 0 ? - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight : TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight);
+ Size->cy = EngMulDiv(Size->cy, IntGdiGetDeviceCaps(dc, LOGPIXELSY), 72);
+
+ return TRUE;
+}
+
+
+INT
+FASTCALL
+ftGdiGetTextCharsetInfo(
+ PDC Dc,
+ LPFONTSIGNATURE lpSig,
+ DWORD dwFlags)
+{
+ PDC_ATTR Dc_Attr;
+ UINT Ret = DEFAULT_CHARSET, i;
+ HFONT hFont;
+ PTEXTOBJ TextObj;
+ PFONTGDI FontGdi;
+ FONTSIGNATURE fs;
+ TT_OS2 *pOS2;
+ FT_Face Face;
+ CHARSETINFO csi;
+ DWORD cp, fs0;
+ USHORT usACP, usOEM;
+
+ Dc_Attr = Dc->pDc_Attr;
+ if(!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
+ hFont = Dc_Attr->hlfntNew;
+ TextObj = RealizeFontInit(hFont);
+
+ if (!TextObj)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return Ret;
+ }
+ FontGdi = ObjToGDI(TextObj->Font, FONT);
+ Face = FontGdi->face;
+ TEXTOBJ_UnlockText(TextObj);
+
+ IntLockFreeType;
+ pOS2 = FT_Get_Sfnt_Table(Face, ft_sfnt_os2);
+ IntUnLockFreeType;
+ memset(&fs, 0, sizeof(FONTSIGNATURE));
+ if (NULL != pOS2)
+ {
+ fs.fsCsb[0] = pOS2->ulCodePageRange1;
+ fs.fsCsb[1] = pOS2->ulCodePageRange2;
+ fs.fsUsb[0] = pOS2->ulUnicodeRange1;
+ fs.fsUsb[1] = pOS2->ulUnicodeRange2;
+ fs.fsUsb[2] = pOS2->ulUnicodeRange3;
+ fs.fsUsb[3] = pOS2->ulUnicodeRange4;
+ if (pOS2->version == 0)
+ {
+ FT_UInt dummy;
+
+ if(FT_Get_First_Char( Face, &dummy ) < 0x100)
+ fs.fsCsb[0] |= FS_LATIN1;
+ else
+ fs.fsCsb[0] |= FS_SYMBOL;
+ }
+ }
+ DPRINT("Csb 1=%x 0=%x\n", fs.fsCsb[1],fs.fsCsb[0]);
+ if (fs.fsCsb[0] == 0)
+ { /* let's see if we can find any interesting cmaps */
+ for (i = 0; i < Face->num_charmaps; i++)
+ {
+ switch (Face->charmaps[i]->encoding)
+ {
+ case FT_ENCODING_UNICODE:
+ case FT_ENCODING_APPLE_ROMAN:
+ fs.fsCsb[0] |= FS_LATIN1;
+ break;
+ case FT_ENCODING_MS_SYMBOL:
+ fs.fsCsb[0] |= FS_SYMBOL;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ if (lpSig)
+ {
+ RtlCopyMemory(lpSig, &fs, sizeof(FONTSIGNATURE));
+ }
+
+ RtlGetDefaultCodePage(&usACP, &usOEM);
+ cp = usACP;
+
+ if (IntTranslateCharsetInfo(&cp, &csi, TCI_SRCCODEPAGE))
+ if (csi.fs.fsCsb[0] & fs.fsCsb[0])
+ {
+ DPRINT("Hit 1\n");
+ Ret = csi.ciCharset;
+ goto Exit;
+ }
+
+ for (i = 0; i < MAXTCIINDEX; i++)
+ {
+ fs0 = 1L << i;
+ if (fs.fsCsb[0] & fs0)
+ {
+ if (IntTranslateCharsetInfo(&fs0, &csi, TCI_SRCFONTSIG))
+ {
+ //*cp = csi.ciACP;
+ DPRINT("Hit 2\n");
+ Ret = csi.ciCharset;
+ goto Exit;
+ }
+ else
+ DPRINT1("TCI failing on %x\n", fs0);
+ }
+ }
+Exit:
+ DPRINT("CharSet %d CodePage %d\n",csi.ciCharset, csi.ciACP);
+ return (MAKELONG(csi.ciACP, csi.ciCharset));
+}
+
+
+DWORD
+FASTCALL
+ftGetFontUnicodeRanges(PFONTGDI Font, PGLYPHSET glyphset)
+{
+ DWORD size = 0;
+ DWORD num_ranges = 0;
+ FT_Face face = Font->face;
+
+ if (face->charmap->encoding == FT_ENCODING_UNICODE)
+ {
+ FT_UInt glyph_code = 0;
+ FT_ULong char_code, char_code_prev;
+
+ char_code_prev = char_code = FT_Get_First_Char(face, &glyph_code);
+
+ DPRINT("face encoding FT_ENCODING_UNICODE, number of glyphs %ld, first glyph %u, first char %04lx\n",
+ face->num_glyphs, glyph_code, char_code);
+
+ if (!glyph_code) return 0;
+
+ if (glyphset)
+ {
+ glyphset->ranges[0].wcLow = (USHORT)char_code;
+ glyphset->ranges[0].cGlyphs = 0;
+ glyphset->cGlyphsSupported = 0;
+ }
+
+ num_ranges = 1;
+ while (glyph_code)
+ {
+ if (char_code < char_code_prev)
+ {
+ DPRINT1("expected increasing char code from FT_Get_Next_Char\n");
+ return 0;
+ }
+ if (char_code - char_code_prev > 1)
+ {
+ num_ranges++;
+ if (glyphset)
+ {
+ glyphset->ranges[num_ranges - 1].wcLow = (USHORT)char_code;
+ glyphset->ranges[num_ranges - 1].cGlyphs = 1;
+ glyphset->cGlyphsSupported++;
+ }
+ }
+ else if (glyphset)
+ {
+ glyphset->ranges[num_ranges - 1].cGlyphs++;
+ glyphset->cGlyphsSupported++;
+ }
+ char_code_prev = char_code;
+ char_code = FT_Get_Next_Char(face, char_code, &glyph_code);
+ }
+ }
+ else
+ DPRINT1("encoding %u not supported\n", face->charmap->encoding);
+
+ size = sizeof(GLYPHSET) + sizeof(WCRANGE) * (num_ranges - 1);
+ if (glyphset)
+ {
+ glyphset->cbThis = size;
+ glyphset->cRanges = num_ranges;
+ }
+ return size;
+}
+
+
+BOOL
+FASTCALL
+ftGdiGetTextMetricsW(
+ HDC hDC,
+ PTMW_INTERNAL ptmwi)
+{
+ PDC dc;
+ PDC_ATTR Dc_Attr;
+ PTEXTOBJ TextObj;
+ PFONTGDI FontGDI;
+ FT_Face Face;
+ TT_OS2 *pOS2;
+ TT_HoriHeader *pHori;
+ FT_WinFNT_HeaderRec Win;
+ ULONG Error;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ if (!ptmwi)
+ {
+ SetLastWin32Error(STATUS_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ if(!(dc = DC_LockDc(hDC)))
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return FALSE;
+ }
+ Dc_Attr = dc->pDc_Attr;
+ if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
+ TextObj = RealizeFontInit(Dc_Attr->hlfntNew);
+ if (NULL != TextObj)
+ {
+ FontGDI = ObjToGDI(TextObj->Font, FONT);
+
+ Face = FontGDI->face;
+ IntLockFreeType;
+ Error = FT_Set_Pixel_Sizes(Face,
+ TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfWidth,
+ /* FIXME should set character height if neg */
+ (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight < 0 ?
+ - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight :
+ TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight == 0 ? 11 : TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight));
+ IntUnLockFreeType;
+ if (0 != Error)
+ {
+ DPRINT1("Error in setting pixel sizes: %u\n", Error);
+ Status = STATUS_UNSUCCESSFUL;
+ }
+ else
+ {
+ Status = STATUS_SUCCESS;
+
+ IntLockFreeType;
+ pOS2 = FT_Get_Sfnt_Table(FontGDI->face, ft_sfnt_os2);
+ if (NULL == pOS2)
+ {
+ DPRINT1("Can't find OS/2 table - not TT font?\n");
+ Status = STATUS_INTERNAL_ERROR;
+ }
+
+ pHori = FT_Get_Sfnt_Table(FontGDI->face, ft_sfnt_hhea);
+ if (NULL == pHori)
+ {
+ DPRINT1("Can't find HHEA table - not TT font?\n");
+ Status = STATUS_INTERNAL_ERROR;
+ }
+
+ Error = FT_Get_WinFNT_Header(FontGDI->face , &Win);
+
+ IntUnLockFreeType;
+
+ if (NT_SUCCESS(Status))
+ {
+ if (!(FontGDI->flRealizedType & FDM_TYPE_TEXT_METRIC))
+ {
+ FillTM(&FontGDI->TextMetric, FontGDI, pOS2, pHori, !Error ? &Win : 0);
+ FontGDI->flRealizedType |= FDM_TYPE_TEXT_METRIC;
+ }
+
+ RtlCopyMemory(&ptmwi->TextMetric, &FontGDI->TextMetric, sizeof(TEXTMETRICW));
+ /* FIXME: Fill Diff member */
+ RtlZeroMemory(&ptmwi->Diff, sizeof(ptmwi->Diff));
+ }
+ }
+ TEXTOBJ_UnlockText(TextObj);
+ }
+ else
+ {
+ Status = STATUS_INVALID_HANDLE;
+ }
+ DC_UnlockDc(dc);
+
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+DWORD
+FASTCALL
+ftGdiGetFontData(
+ PFONTGDI FontGdi,
+ DWORD Table,
+ DWORD Offset,
+ PVOID Buffer,
+ DWORD Size)
+{
+ DWORD Result = GDI_ERROR;
+
+ IntLockFreeType;
+
+ if (FT_IS_SFNT(FontGdi->face))
+ {
+ if (Table)
+ Table = Table >> 24 | Table << 24 | (Table >> 8 & 0xFF00) |
+ (Table << 8 & 0xFF0000);
+
+ if (!Buffer) Size = 0;
+
+ if (Buffer && Size)
+ {
+ FT_Error Error;
+ FT_ULong Needed = 0;
+
+ Error = FT_Load_Sfnt_Table(FontGdi->face, Table, Offset, NULL, &Needed);
+
+ if( !Error && Needed < Size) Size = Needed;
+ }
+ if (!FT_Load_Sfnt_Table(FontGdi->face, Table, Offset, Buffer, &Size))
+ Result = Size;
+ }
+
+ IntUnLockFreeType;
+
+ return Result;
+}
+
+static UINT FASTCALL
+GetFontScore(LOGFONTW *LogFont, PUNICODE_STRING FaceName, PFONTGDI FontGDI)
+{
+ ANSI_STRING EntryFaceNameA;
+ UNICODE_STRING EntryFaceNameW;
+ unsigned Size;
+ OUTLINETEXTMETRICW *Otm;
+ LONG WeightDiff;
+ NTSTATUS Status;
+ UINT Score = 1;
+
+ RtlInitAnsiString(&EntryFaceNameA, FontGDI->face->family_name);
+ Status = RtlAnsiStringToUnicodeString(&EntryFaceNameW, &EntryFaceNameA, TRUE);
+ if (NT_SUCCESS(Status))
+ {
+ if ((LF_FACESIZE - 1) * sizeof(WCHAR) < EntryFaceNameW.Length)
+ {
+ EntryFaceNameW.Length = (LF_FACESIZE - 1) * sizeof(WCHAR);
+ EntryFaceNameW.Buffer[LF_FACESIZE - 1] = L'\0';
+ }
+ if (0 == RtlCompareUnicodeString(FaceName, &EntryFaceNameW, TRUE))
+ {
+ Score += 49;
+ }
+ RtlFreeUnicodeString(&EntryFaceNameW);
+ }
+
+ Size = IntGetOutlineTextMetrics(FontGDI, 0, NULL);
+ Otm = ExAllocatePoolWithTag(PagedPool, Size, TAG_GDITEXT);
+ if (NULL == Otm)
+ {
+ return Score;
+ }
+ IntGetOutlineTextMetrics(FontGDI, Size, Otm);
+
+ if ((0 != LogFont->lfItalic && 0 != Otm->otmTextMetrics.tmItalic) ||
+ (0 == LogFont->lfItalic && 0 == Otm->otmTextMetrics.tmItalic))
+ {
+ Score += 25;
+ }
+ if (LogFont->lfWeight != FW_DONTCARE)
+ {
+ if (LogFont->lfWeight < Otm->otmTextMetrics.tmWeight)
+ {
+ WeightDiff = Otm->otmTextMetrics.tmWeight - LogFont->lfWeight;
+ }
+ else
+ {
+ WeightDiff = LogFont->lfWeight - Otm->otmTextMetrics.tmWeight;
+ }
+ Score += (1000 - WeightDiff) / (1000 / 25);
+ }
+ else
+ {
+ Score += 25;
+ }
+
+ ExFreePool(Otm);
+
+ return Score;
+}
+
+static __inline VOID
+FindBestFontFromList(FONTOBJ **FontObj, UINT *MatchScore, LOGFONTW *LogFont,
+ PUNICODE_STRING FaceName, PLIST_ENTRY Head)
+{
+ PLIST_ENTRY Entry;
+ PFONT_ENTRY CurrentEntry;
+ FONTGDI *FontGDI;
+ UINT Score;
+
+ Entry = Head->Flink;
+ while (Entry != Head)
+ {
+ CurrentEntry = (PFONT_ENTRY) CONTAINING_RECORD(Entry, FONT_ENTRY, ListEntry);
+
+ FontGDI = CurrentEntry->Font;
+ ASSERT(FontGDI);
+
+ Score = GetFontScore(LogFont, FaceName, FontGDI);
+ if (*MatchScore == 0 || *MatchScore < Score)
+ {
+ *FontObj = GDIToObj(FontGDI, FONT);
+ *MatchScore = Score;
+ }
+ Entry = Entry->Flink;
+ }
+}
+
+static __inline BOOLEAN
+SubstituteFontFamilyKey(PUNICODE_STRING FaceName,
+ LPCWSTR Key)
+{
+ RTL_QUERY_REGISTRY_TABLE QueryTable[2] = {{0}};
+ NTSTATUS Status;
+ UNICODE_STRING Value;
+
+ RtlInitUnicodeString(&Value, NULL);
+
+ QueryTable[0].QueryRoutine = NULL;
+ QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND |
+ RTL_QUERY_REGISTRY_REQUIRED;
+ QueryTable[0].Name = FaceName->Buffer;
+ QueryTable[0].EntryContext = &Value;
+ QueryTable[0].DefaultType = REG_NONE;
+ QueryTable[0].DefaultData = NULL;
+ QueryTable[0].DefaultLength = 0;
+
+ QueryTable[1].QueryRoutine = NULL;
+ QueryTable[1].Name = NULL;
+
+ Status = RtlQueryRegistryValues(RTL_REGISTRY_WINDOWS_NT,
+ Key,
+ QueryTable,
+ NULL,
+ NULL);
+ if (NT_SUCCESS(Status))
+ {
+ RtlFreeUnicodeString(FaceName);
+ *FaceName = Value;
+ }
+
+ return NT_SUCCESS(Status);
+}
+
+static __inline void
+SubstituteFontFamily(PUNICODE_STRING FaceName, UINT Level)
+{
+ if (10 < Level) /* Enough is enough */
+ {
+ return;
+ }
+
+ if (SubstituteFontFamilyKey(FaceName, L"SysFontSubstitutes") ||
+ SubstituteFontFamilyKey(FaceName, L"FontSubstitutes"))
+ {
+ SubstituteFontFamily(FaceName, Level + 1);
+ }
+}
+
+static
+VOID
+FASTCALL
+IntFontType(PFONTGDI Font)
+{
+ PS_FontInfoRec psfInfo;
+ FT_ULong tmp_size = 0;
+
+ if (FT_HAS_MULTIPLE_MASTERS(Font->face))
+ Font->FontObj.flFontType |= FO_MULTIPLEMASTER;
+ if (FT_HAS_VERTICAL( Font->face ))
+ Font->FontObj.flFontType |= FO_VERT_FACE;
+ if (FT_IS_SCALABLE( Font->face ))
+ Font->FontObj.flFontType |= FO_TYPE_RASTER;
+ if (FT_IS_SFNT(Font->face))
+ {
+ Font->FontObj.flFontType |= FO_TYPE_TRUETYPE;
+ if (FT_Get_Sfnt_Table(Font->face, ft_sfnt_post))
+ Font->FontObj.flFontType |= FO_POSTSCRIPT;
+ }
+ if (!FT_Get_PS_Font_Info(Font->face, &psfInfo ))
+ {
+ Font->FontObj.flFontType |= FO_POSTSCRIPT;
+ }
+ /* check for the presence of the 'CFF ' table to check if the font is Type1 */
+ if (!FT_Load_Sfnt_Table(Font->face, FT_MAKE_TAG('C','F','F',' '), 0, NULL, &tmp_size))
+ {
+ Font->FontObj.flFontType |= (FO_CFF|FO_POSTSCRIPT);
+ }
+}
+
+NTSTATUS
+FASTCALL
+TextIntRealizeFont(HFONT FontHandle, PTEXTOBJ pTextObj)
+{
+ NTSTATUS Status = STATUS_SUCCESS;
+ PTEXTOBJ TextObj;
+ UNICODE_STRING FaceName;
+ PW32PROCESS Win32Process;
+ UINT MatchScore;
+
+ if (!pTextObj)
+ {
+ TextObj = TEXTOBJ_LockText(FontHandle);
+ if (NULL == TextObj)
+ {
+ return STATUS_INVALID_HANDLE;
+ }
+
+ if (TextObj->fl & TEXTOBJECT_INIT)
+ {
+ TEXTOBJ_UnlockText(TextObj);
+ return STATUS_SUCCESS;
+ }
+ }
+ else
+ TextObj = pTextObj;
+
+ if (! RtlCreateUnicodeString(&FaceName, TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName))
+ {
+ if (!pTextObj) TEXTOBJ_UnlockText(TextObj);
+ return STATUS_NO_MEMORY;
+ }
+ SubstituteFontFamily(&FaceName, 0);
+ MatchScore = 0;
+ TextObj->Font = NULL;
+
+ /* First search private fonts */
+ Win32Process = PsGetCurrentProcessWin32Process();
+ IntLockProcessPrivateFonts(Win32Process);
+ FindBestFontFromList(&TextObj->Font, &MatchScore,
+ &TextObj->logfont.elfEnumLogfontEx.elfLogFont, &FaceName,
+ &Win32Process->PrivateFontListHead);
+ IntUnLockProcessPrivateFonts(Win32Process);
+
+ /* Search system fonts */
+ IntLockGlobalFonts;
+ FindBestFontFromList(&TextObj->Font, &MatchScore,
+ &TextObj->logfont.elfEnumLogfontEx.elfLogFont, &FaceName,
+ &FontListHead);
+ IntUnLockGlobalFonts;
+ if (NULL == TextObj->Font)
+ {
+ DPRINT1("Requested font %S not found, no fonts loaded at all\n",
+ TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName);
+ Status = STATUS_NOT_FOUND;
+ }
+ else
+ {
+ PFONTGDI FontGdi = ObjToGDI(TextObj->Font, FONT);
+ // Need hdev, when freetype is loaded need to create DEVOBJ for
+ // Consumer and Producer.
+ TextObj->Font->iUniq = 1; // Now it can be cached.
+ IntFontType(FontGdi);
+ FontGdi->flType = TextObj->Font->flFontType;
+ FontGdi->flRealizedType = 0;
+ FontGdi->Underline = TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfUnderline ? 0xff : 0;
+ FontGdi->StrikeOut = TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfStrikeOut ? 0xff : 0;
+ TextObj->fl |= TEXTOBJECT_INIT;
+ Status = STATUS_SUCCESS;
+ }
+
+ RtlFreeUnicodeString(&FaceName);
+ if (!pTextObj) TEXTOBJ_UnlockText(TextObj);
+
+ ASSERT((NT_SUCCESS(Status) ^ (NULL == TextObj->Font)) != 0);
+
+ return Status;
+}
+
+
+static
+BOOL
+FASTCALL
+IntGetFullFileName(
+ POBJECT_NAME_INFORMATION NameInfo,
+ ULONG Size,
+ PUNICODE_STRING FileName)
+{
+ NTSTATUS Status;
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ HANDLE hFile;
+ IO_STATUS_BLOCK IoStatusBlock;
+ ULONG Desired;
+
+ InitializeObjectAttributes(&ObjectAttributes,
+ FileName,
+ OBJ_CASE_INSENSITIVE,
+ NULL,
+ NULL);
+
+ Status = ZwOpenFile(
+ &hFile,
+ 0, //FILE_READ_ATTRIBUTES,
+ &ObjectAttributes,
+ &IoStatusBlock,
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+ 0);
+
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT("ZwOpenFile() failed (Status = 0x%lx)\n", Status);
+ return FALSE;
+ }
+
+ Status = ZwQueryObject(hFile, ObjectNameInformation, NameInfo, Size, &Desired);
+ ZwClose(hFile);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT("ZwQueryObject() failed (Status = %lx)\n", Status);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+BOOL
+FASTCALL
+IntGdiGetFontResourceInfo(
+ PUNICODE_STRING FileName,
+ PVOID pBuffer,
+ DWORD *pdwBytes,
+ DWORD dwType)
+{
+ UNICODE_STRING EntryFileName;
+ POBJECT_NAME_INFORMATION NameInfo1, NameInfo2;
+ PLIST_ENTRY ListEntry;
+ PFONT_ENTRY FontEntry;
+ FONTFAMILYINFO Info;
+ ULONG Size;
+ BOOL bFound = FALSE;
+
+ /* Create buffer for full path name */
+ Size = sizeof(OBJECT_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR);
+ NameInfo1 = ExAllocatePoolWithTag(PagedPool, Size, TAG_FINF);
+ if (!NameInfo1)
+ {
+ SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
+
+ /* Get the full path name */
+ if (!IntGetFullFileName(NameInfo1, Size, FileName))
+ {
+ ExFreePool(NameInfo1);
+ return FALSE;
+ }
+
+ /* Create a buffer for the entries' names */
+ NameInfo2 = ExAllocatePoolWithTag(PagedPool, Size, TAG_FINF);
+ if (!NameInfo2)
+ {
+ ExFreePool(NameInfo1);
+ SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
+
+ /* Try to find the pathname in the global font list */
+ IntLockGlobalFonts;
+ for (ListEntry = FontListHead.Flink;
+ ListEntry != &FontListHead;
+ ListEntry = ListEntry->Flink)
+ {
+ FontEntry = CONTAINING_RECORD(ListEntry, FONT_ENTRY, ListEntry);
+ if (FontEntry->Font->Filename != NULL)
+ {
+ RtlInitUnicodeString(&EntryFileName , FontEntry->Font->Filename);
+ if (IntGetFullFileName(NameInfo2, Size, &EntryFileName))
+ {
+ if (RtlEqualUnicodeString(&NameInfo1->Name, &NameInfo2->Name, FALSE))
+ {
+ /* found */
+ FontFamilyFillInfo(&Info, FontEntry->FaceName.Buffer, FontEntry->Font);
+ bFound = TRUE;
+ break;
+ }
+ }
+ }
+ }
+ IntUnLockGlobalFonts;
+
+ /* Free the buffers */
+ ExFreePool(NameInfo1);
+ ExFreePool(NameInfo2);
+
+ if (!bFound && dwType != 5)
+ {
+ /* Font could not be found in system table
+ dwType == 5 will still handle this */
+ return FALSE;
+ }
+
+ switch(dwType)
+ {
+ case 0: /* FIXME: returns 1 or 2, don't know what this is atm */
+ *(DWORD*)pBuffer = 1;
+ *pdwBytes = sizeof(DWORD);
+ break;
+
+ case 1: /* Copy the full font name */
+ Size = wcslen(Info.EnumLogFontEx.elfFullName) + 1;
+ Size = min(Size , LF_FULLFACESIZE) * sizeof(WCHAR);
+ RtlCopyMemory(pBuffer, Info.EnumLogFontEx.elfFullName, Size);
+ // FIXME: Do we have to zeroterminate?
+ *pdwBytes = Size;
+ break;
+
+ case 2: /* Copy a LOGFONTW structure */
+ Info.EnumLogFontEx.elfLogFont.lfWidth = 0;
+ RtlCopyMemory(pBuffer, &Info.EnumLogFontEx.elfLogFont, sizeof(LOGFONTW));
+ *pdwBytes = sizeof(LOGFONTW);
+ break;
+
+ case 3: /* FIXME: What exactly is copied here? */
+ *(DWORD*)pBuffer = 1;
+ *pdwBytes = sizeof(DWORD*);
+ break;
+
+ case 5: /* Looks like a BOOL that is copied, TRUE, if the font was not found */
+ *(BOOL*)pBuffer = !bFound;
+ *pdwBytes = sizeof(BOOL);
+ break;
+
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+BOOL
+FASTCALL
+ftGdiRealizationInfo(PFONTGDI Font, PREALIZATION_INFO Info)
+{
+ if (FT_HAS_FIXED_SIZES(Font->face))
+ Info->iTechnology = RI_TECH_BITMAP;
+ else
+ {
+ if (FT_IS_SCALABLE(Font->face))
+ Info->iTechnology = RI_TECH_SCALABLE;
+ else
+ Info->iTechnology = RI_TECH_FIXED;
+ }
+ Info->iUniq = Font->FontObj.iUniq;
+ Info->dwUnknown = -1;
+ return TRUE;
+}
+
+
+DWORD
+FASTCALL
+ftGdiGetKerningPairs( PFONTGDI Font,
+ DWORD cPairs,
+ LPKERNINGPAIR pKerningPair)
+{
+ DWORD Count = 0;
+ INT i = 0;
+ FT_Face face = Font->face;
+
+ if (FT_HAS_KERNING(face) && face->charmap->encoding == FT_ENCODING_UNICODE)
+ {
+ FT_UInt previous_index = 0, glyph_index = 0;
+ FT_ULong char_code, char_previous;
+ FT_Vector delta;
+
+ char_previous = char_code = FT_Get_First_Char(face, &glyph_index);
+
+ IntUnLockFreeType;
+
+ while (glyph_index)
+ {
+ if (previous_index && glyph_index)
+ {
+ FT_Get_Kerning(face, previous_index, glyph_index, FT_KERNING_DEFAULT, &delta);
+
+ if (pKerningPair && cPairs)
+ {
+ pKerningPair[i].wFirst = char_previous;
+ pKerningPair[i].wSecond = char_code;
+ pKerningPair[i].iKernAmount = delta.x;
+ i++;
+ if (i == cPairs) break;
+ }
+ Count++;
+ }
+ previous_index = glyph_index;
+ char_previous = char_code;
+ char_code = FT_Get_Next_Char(face, char_code, &glyph_index);
+ }
+ IntUnLockFreeType;
+ }
+ return Count;
+}
+
+
+//////////////////
+//
+// Functions needing sorting.
+//
+///////////////
int STDCALL
NtGdiGetFontFamilyInfo(HDC Dc,
LPLOGFONTW UnsafeLogFont,
@@ -1412,109 +3069,6 @@ NtGdiGetFontFamilyInfo(HDC Dc,
return Count;
}
-FT_Glyph STDCALL
-NtGdiGlyphCacheGet(
- FT_Face Face,
- INT GlyphIndex,
- INT Height)
-{
- PLIST_ENTRY CurrentEntry;
- PFONT_CACHE_ENTRY FontEntry;
-
-// DbgPrint("CacheGet\n");
-
- CurrentEntry = FontCacheListHead.Flink;
- while (CurrentEntry != &FontCacheListHead)
- {
- FontEntry = (PFONT_CACHE_ENTRY)CurrentEntry;
- if (FontEntry->Face == Face &&
- FontEntry->GlyphIndex == GlyphIndex &&
- FontEntry->Height == Height)
- break;
- CurrentEntry = CurrentEntry->Flink;
- }
-
- if (CurrentEntry == &FontCacheListHead) {
-// DbgPrint("Miss! %x\n", FontEntry->Glyph);
-/*
- Misses++;
- if (Misses>100) {
- DbgPrint ("Hits: %d Misses: %d\n", Hits, Misses);
- Hits = Misses = 0;
- }
-*/
- return NULL;
- }
-
- RemoveEntryList(CurrentEntry);
- InsertHeadList(&FontCacheListHead, CurrentEntry);
-
-// DbgPrint("Hit! %x\n", FontEntry->Glyph);
-/*
- Hits++;
-
- if (Hits>100) {
- DbgPrint ("Hits: %d Misses: %d\n", Hits, Misses);
- Hits = Misses = 0;
- }
-*/
- return FontEntry->Glyph;
-}
-
-FT_Glyph STDCALL
-NtGdiGlyphCacheSet(
- FT_Face Face,
- INT GlyphIndex,
- INT Height,
- FT_GlyphSlot GlyphSlot,
- FT_Render_Mode RenderMode)
-{
- FT_Glyph GlyphCopy;
- INT error;
- PFONT_CACHE_ENTRY NewEntry;
-
-// DbgPrint("CacheSet.\n");
-
- error = FT_Get_Glyph(GlyphSlot, &GlyphCopy);
- if (error)
- {
- DbgPrint("Failure caching glyph.\n");
- return NULL;
- };
- error = FT_Glyph_To_Bitmap(&GlyphCopy, RenderMode, 0, 1);
- if (error)
- {
- DbgPrint("Failure rendering glyph.\n");
- return NULL;
- };
-
- NewEntry = ExAllocatePoolWithTag(PagedPool, sizeof(FONT_CACHE_ENTRY), TAG_FONT);
- if (!NewEntry)
- {
- DbgPrint("Alloc failure caching glyph.\n");
- FT_Done_Glyph(GlyphCopy);
- return NULL;
- }
-
- NewEntry->GlyphIndex = GlyphIndex;
- NewEntry->Face = Face;
- NewEntry->Glyph = GlyphCopy;
- NewEntry->Height = Height;
-
- InsertHeadList(&FontCacheListHead, &NewEntry->ListEntry);
- if (FontCacheNumEntries++ > MAX_FONT_CACHE) {
- NewEntry = (PFONT_CACHE_ENTRY)FontCacheListHead.Blink;
- FT_Done_Glyph(NewEntry->Glyph);
- RemoveTailList(&FontCacheListHead);
- ExFreePool(NewEntry);
- FontCacheNumEntries--;
- }
-
-// DbgPrint("Returning the glyphcopy: %x\n", GlyphCopy);
-
- return GlyphCopy;
-}
-
BOOL
APIENTRY
NtGdiExtTextOutW(
@@ -1737,7 +3291,7 @@ NtGdiExtTextOutW(
}
}
- TextObj = TEXTOBJ_LockText(Dc_Attr->hlfntNew);
+ TextObj = RealizeFontInit(Dc_Attr->hlfntNew);
if(TextObj == NULL)
{
goto fail;
@@ -1842,7 +3396,7 @@ NtGdiExtTextOutW(
else
glyph_index = FT_Get_Char_Index(face, *TempText);
- if (!(realglyph = NtGdiGlyphCacheGet(face, glyph_index,
+ if (!(realglyph = ftGdiGlyphCacheGet(face, glyph_index,
TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight)))
{
error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
@@ -1852,7 +3406,7 @@ NtGdiExtTextOutW(
}
glyph = face->glyph;
- realglyph = NtGdiGlyphCacheSet(face, glyph_index,
+ realglyph = ftGdiGlyphCacheSet(face, glyph_index,
TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, glyph, RenderMode);
if (!realglyph)
{
@@ -1903,7 +3457,7 @@ NtGdiExtTextOutW(
else
glyph_index = FT_Get_Char_Index(face, *String);
- if (!(realglyph = NtGdiGlyphCacheGet(face, glyph_index,
+ if (!(realglyph = ftGdiGlyphCacheGet(face, glyph_index,
TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight)))
{
error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
@@ -1914,7 +3468,7 @@ NtGdiExtTextOutW(
goto fail;
}
glyph = face->glyph;
- realglyph = NtGdiGlyphCacheSet(face,
+ realglyph = ftGdiGlyphCacheSet(face,
glyph_index,
TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight,
glyph,
@@ -2190,7 +3744,7 @@ NtGdiGetCharABCWidthsW(
Dc_Attr = dc->pDc_Attr;
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
hFont = Dc_Attr->hlfntNew;
- TextObj = TEXTOBJ_LockText(hFont);
+ TextObj = RealizeFontInit(hFont);
DC_UnlockDc(dc);
if (TextObj == NULL)
@@ -2358,7 +3912,7 @@ NtGdiGetCharWidthW(
Dc_Attr = dc->pDc_Attr;
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
hFont = Dc_Attr->hlfntNew;
- TextObj = TEXTOBJ_LockText(hFont);
+ TextObj = RealizeFontInit(hFont);
DC_UnlockDc(dc);
if (TextObj == NULL)
@@ -2455,7 +4009,7 @@ NtGdiGetGlyphIndicesW(
OUTLINETEXTMETRICW *potm;
INT i;
FT_Face face;
- WCHAR DefChar = 0;
+ WCHAR DefChar = 0xffff;
PWSTR Buffer = NULL;
ULONG Size;
@@ -2470,7 +4024,7 @@ NtGdiGetGlyphIndicesW(
Dc_Attr = dc->pDc_Attr;
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
hFont = Dc_Attr->hlfntNew;
- TextObj = TEXTOBJ_LockText(hFont);
+ TextObj = RealizeFontInit(hFont);
DC_UnlockDc(dc);
if (!TextObj)
{
@@ -2522,8 +4076,16 @@ NtGdiGetGlyphIndicesW(
for (i = 0; i < cwc; i++)
{
- Buffer[i] = FT_Get_Char_Index(face, UnSafepwc[i]);
- if (Buffer[i] == 0) Buffer[i] = DefChar;
+ Buffer[i] = FT_Get_Char_Index(face, UnSafepwc[i]);
+ if (Buffer[i] == 0)
+ {
+ if (DefChar == 0xffff && FT_IS_SFNT(face))
+ {
+ TT_OS2 *pOS2 = FT_Get_Sfnt_Table(face, ft_sfnt_os2);
+ DefChar = (pOS2->usDefaultChar ? FT_Get_Char_Index(face, pOS2->usDefaultChar) : 0);
+ }
+ Buffer[i] = DefChar;
+ }
}
IntUnLockFreeType;
@@ -2544,1647 +4106,11 @@ NtGdiGetGlyphIndicesW(
_SEH_END;
ErrorRet:
- ExFreePool(Buffer);
+ ExFreePoolWithTag(Buffer, TAG_GDITEXT);
if (NT_SUCCESS(Status)) return cwc;
SetLastWin32Error(Status);
return GDI_ERROR;
}
-static
-void
-FTVectorToPOINTFX(FT_Vector *vec, POINTFX *pt)
-{
- pt->x.value = vec->x >> 6;
- pt->x.fract = (vec->x & 0x3f) << 10;
- pt->x.fract |= ((pt->x.fract >> 6) | (pt->x.fract >> 12));
- pt->y.value = vec->y >> 6;
- pt->y.fract = (vec->y & 0x3f) << 10;
- pt->y.fract |= ((pt->y.fract >> 6) | (pt->y.fract >> 12));
- return;
-}
-
-/*
- This function builds an FT_Fixed from a float. It puts the integer part
- in the highest 16 bits and the decimal part in the lowest 16 bits of the FT_Fixed.
- It fails if the integer part of the float number is greater than SHORT_MAX.
-*/
-static __inline FT_Fixed FT_FixedFromFloat(float f)
-{
- short value = f;
- unsigned short fract = (f - value) * 0xFFFF;
- return (FT_Fixed)((long)value << 16 | (unsigned long)fract);
-}
-
-/*
- This function builds an FT_Fixed from a FIXED. It simply put f.value
- in the highest 16 bits and f.fract in the lowest 16 bits of the FT_Fixed.
-*/
-static __inline FT_Fixed FT_FixedFromFIXED(FIXED f)
-{
- return (FT_Fixed)((long)f.value << 16 | (unsigned long)f.fract);
-}
-
-/*
- * Based on WineEngGetGlyphOutline
- *
- */
-ULONG
-FASTCALL
-ftGdiGetGlyphOutline(
- IN PDC dc,
- IN WCHAR wch,
- IN UINT iFormat,
- OUT LPGLYPHMETRICS pgm,
- IN ULONG cjBuf,
- OUT OPTIONAL PVOID UnsafeBuf,
- IN LPMAT2 pmat2,
- IN BOOL bIgnoreRotation)
-{
- static const FT_Matrix identityMat = {(1 << 16), 0, 0, (1 << 16)};
- PDC_ATTR Dc_Attr;
- PTEXTOBJ TextObj;
- PFONTGDI FontGDI;
- HFONT hFont = 0;
- NTSTATUS Status;
- GLYPHMETRICS gm;
- ULONG Size;
- FT_Face ft_face;
- FT_UInt glyph_index;
- DWORD width, height, pitch, needed = 0;
- FT_Bitmap ft_bitmap;
- FT_Error error;
- INT left, right, top = 0, bottom = 0;
- FT_Angle angle = 0;
- FT_Int load_flags = FT_LOAD_DEFAULT | FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH;
- FLOAT eM11, widthRatio = 1.0;
- FT_Matrix transMat = identityMat;
- BOOL needsTransform = FALSE;
- INT orientation;
- LONG aveWidth;
- INT adv, lsb, bbx; /* These three hold to widths of the unrotated chars */
- OUTLINETEXTMETRICW *potm;
- PVOID pvBuf = NULL;
- int n = 0;
- FT_CharMap found = 0, charmap;
- XFORM xForm;
-
- DPRINT("%d, %08x, %p, %08lx, %p, %p\n", wch, iFormat, pgm,
- cjBuf, UnsafeBuf, pmat2);
-
- Dc_Attr = dc->pDc_Attr;
- if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
-
- MatrixS2XForm(&xForm, &dc->DcLevel.mxWorldToDevice);
- eM11 = xForm.eM11;
-
- hFont = Dc_Attr->hlfntNew;
- TextObj = TEXTOBJ_LockText(hFont);
-// DC_UnlockDc(dc);
- if (!TextObj)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- return GDI_ERROR;
- }
- FontGDI = ObjToGDI(TextObj->Font, FONT);
- ft_face = FontGDI->face;
-
- aveWidth = FT_IS_SCALABLE(ft_face) ? TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfWidth: 0;
- orientation = FT_IS_SCALABLE(ft_face) ? TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfOrientation: 0;
-
- Size = IntGetOutlineTextMetrics(FontGDI, 0, NULL);
- potm = ExAllocatePoolWithTag(PagedPool, Size, TAG_GDITEXT);
- if (!potm)
- {
- SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
- TEXTOBJ_UnlockText(TextObj);
- return GDI_ERROR;
- }
- IntGetOutlineTextMetrics(FontGDI, Size, potm);
-
- IntLockFreeType;
-
- /* During testing, I never saw this used. In here just incase.*/
- if (ft_face->charmap == NULL)
- {
- DPRINT("WARNING: No charmap selected!\n");
- DPRINT("This font face has %d charmaps\n", ft_face->num_charmaps);
-
-
-
- for (n = 0; n < ft_face->num_charmaps; n++)
- {
- charmap = ft_face->charmaps[n];
- DPRINT("found charmap encoding: %u\n", charmap->encoding);
- if (charmap->encoding != 0)
- {
- found = charmap;
- break;
- }
- }
- if (!found)
- {
- DPRINT1("WARNING: Could not find desired charmap!\n");
- }
- error = FT_Set_Charmap(ft_face, found);
- if (error)
- {
- DPRINT1("WARNING: Could not set the charmap!\n");
- }
- }
-
-// FT_Set_Pixel_Sizes(ft_face,
-// TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfWidth,
- /* FIXME should set character height if neg */
-// (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight < 0 ? - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight :
-// TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight == 0 ? 11 : TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight));
-
- TEXTOBJ_UnlockText(TextObj);
-
- if (iFormat & GGO_GLYPH_INDEX)
- {
- glyph_index = wch;
- iFormat &= ~GGO_GLYPH_INDEX;
- }
- else glyph_index = FT_Get_Char_Index(ft_face, wch);
-
- if (orientation || (iFormat != GGO_METRICS && iFormat != GGO_BITMAP) || aveWidth || pmat2)
- load_flags |= FT_LOAD_NO_BITMAP;
-
- if (iFormat & GGO_UNHINTED)
- {
- load_flags |= FT_LOAD_NO_HINTING;
- iFormat &= ~GGO_UNHINTED;
- }
-
- error = FT_Load_Glyph(ft_face, glyph_index, load_flags);
- if (error)
- {
- DPRINT1("WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
- IntUnLockFreeType;
- if (potm) ExFreePool(potm);
- return GDI_ERROR;
- }
- IntUnLockFreeType;
-
- if (aveWidth && potm)
- {
- widthRatio = (FLOAT)aveWidth * eM11 /
- (FLOAT) potm->otmTextMetrics.tmAveCharWidth;
- }
-
- left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64;
- right = (INT)((ft_face->glyph->metrics.horiBearingX +
- ft_face->glyph->metrics.width) * widthRatio + 63) & -64;
-
- adv = (INT)((ft_face->glyph->metrics.horiAdvance * widthRatio) + 63) >> 6;
- lsb = left >> 6;
- bbx = (right - left) >> 6;
-
- DPRINT("Advance = %d, lsb = %d, bbx = %d\n",adv, lsb, bbx);
-
- IntLockFreeType;
-
- /* Scaling transform */
- if (aveWidth)
- {
- FT_Matrix scaleMat;
- DPRINT("Scaling Trans!\n");
- scaleMat.xx = FT_FixedFromFloat(widthRatio);
- scaleMat.xy = 0;
- scaleMat.yx = 0;
- scaleMat.yy = (1 << 16);
- FT_Matrix_Multiply(&scaleMat, &transMat);
- needsTransform = TRUE;
- }
-
- /* Slant transform */
- if (potm->otmTextMetrics.tmItalic)
- {
- FT_Matrix slantMat;
- DPRINT("Slant Trans!\n");
- slantMat.xx = (1 << 16);
- slantMat.xy = ((1 << 16) >> 2);
- slantMat.yx = 0;
- slantMat.yy = (1 << 16);
- FT_Matrix_Multiply(&slantMat, &transMat);
- needsTransform = TRUE;
- }
-
- /* Rotation transform */
- if (orientation)
- {
- FT_Matrix rotationMat;
- FT_Vector vecAngle;
- DPRINT("Rotation Trans!\n");
- angle = FT_FixedFromFloat((float)orientation / 10.0);
- FT_Vector_Unit(&vecAngle, angle);
- rotationMat.xx = vecAngle.x;
- rotationMat.xy = -vecAngle.y;
- rotationMat.yx = -rotationMat.xy;
- rotationMat.yy = rotationMat.xx;
- FT_Matrix_Multiply(&rotationMat, &transMat);
- needsTransform = TRUE;
- }
-
- /* Extra transformation specified by caller */
- if (pmat2)
- {
- FT_Matrix extraMat;
- DPRINT("MAT2 Matrix Trans!\n");
- extraMat.xx = FT_FixedFromFIXED(pmat2->eM11);
- extraMat.xy = FT_FixedFromFIXED(pmat2->eM21);
- extraMat.yx = FT_FixedFromFIXED(pmat2->eM12);
- extraMat.yy = FT_FixedFromFIXED(pmat2->eM22);
- FT_Matrix_Multiply(&extraMat, &transMat);
- needsTransform = TRUE;
- }
-
- if (potm) ExFreePool(potm); /* It looks like we are finished with potm ATM.*/
-
- if (!needsTransform)
- {
- DPRINT("No Need to be Transformed!\n");
- top = (ft_face->glyph->metrics.horiBearingY + 63) & -64;
- bottom = (ft_face->glyph->metrics.horiBearingY -
- ft_face->glyph->metrics.height) & -64;
- gm.gmCellIncX = adv;
- gm.gmCellIncY = 0;
- }
- else
- {
- INT xc, yc;
- FT_Vector vec;
- for(xc = 0; xc < 2; xc++)
- {
- for(yc = 0; yc < 2; yc++)
- {
- vec.x = (ft_face->glyph->metrics.horiBearingX +
- xc * ft_face->glyph->metrics.width);
- vec.y = ft_face->glyph->metrics.horiBearingY -
- yc * ft_face->glyph->metrics.height;
- DPRINT("Vec %ld,%ld\n", vec.x, vec.y);
- FT_Vector_Transform(&vec, &transMat);
- if(xc == 0 && yc == 0)
- {
- left = right = vec.x;
- top = bottom = vec.y;
- }
- else
- {
- if(vec.x < left) left = vec.x;
- else if(vec.x > right) right = vec.x;
- if(vec.y < bottom) bottom = vec.y;
- else if(vec.y > top) top = vec.y;
- }
- }
- }
- left = left & -64;
- right = (right + 63) & -64;
- bottom = bottom & -64;
- top = (top + 63) & -64;
-
- DPRINT("transformed box: (%d,%d - %d,%d)\n", left, top, right, bottom);
- vec.x = ft_face->glyph->metrics.horiAdvance;
- vec.y = 0;
- FT_Vector_Transform(&vec, &transMat);
- gm.gmCellIncX = (vec.x+63) >> 6;
- gm.gmCellIncY = -((vec.y+63) >> 6);
- }
- gm.gmBlackBoxX = (right - left) >> 6;
- gm.gmBlackBoxY = (top - bottom) >> 6;
- gm.gmptGlyphOrigin.x = left >> 6;
- gm.gmptGlyphOrigin.y = top >> 6;
-
- DPRINT("CX %d CY %d BBX %d BBY %d GOX %d GOY %d\n",
- gm.gmCellIncX, gm.gmCellIncY,
- gm.gmBlackBoxX, gm.gmBlackBoxY,
- gm.gmptGlyphOrigin.x, gm.gmptGlyphOrigin.y);
-
- IntUnLockFreeType;
-
- if (pgm)
- {
- Status = MmCopyToCaller(pgm, &gm, sizeof(GLYPHMETRICS));
- if (! NT_SUCCESS(Status))
- {
- SetLastWin32Error(ERROR_INVALID_PARAMETER);
- return GDI_ERROR;
- }
- DPRINT("Copied GLYPHMETRICS to User!\n");
- }
-
- if (iFormat == GGO_METRICS)
- {
- DPRINT("GGO_METRICS Exit!\n");
- return 1; /* FIXME */
- }
-
- if (ft_face->glyph->format != ft_glyph_format_outline && iFormat != GGO_BITMAP)
- {
- DPRINT1("loaded a bitmap\n");
- return GDI_ERROR;
- }
-
- if (UnsafeBuf && cjBuf)
- {
- pvBuf = ExAllocatePoolWithTag(PagedPool, cjBuf, TAG_GDITEXT);
- if (pvBuf == NULL)
- {
- SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
- return GDI_ERROR;
- }
- RtlZeroMemory(pvBuf, cjBuf);
- }
-
-
- switch(iFormat)
- {
- case GGO_BITMAP:
- width = gm.gmBlackBoxX;
- height = gm.gmBlackBoxY;
- pitch = ((width + 31) >> 5) << 2;
- needed = pitch * height;
-
- if(!pvBuf || !cjBuf) break;
-
- switch(ft_face->glyph->format)
- {
- case ft_glyph_format_bitmap:
- {
- BYTE *src = ft_face->glyph->bitmap.buffer, *dst = pvBuf;
- INT w = (ft_face->glyph->bitmap.width + 7) >> 3;
- INT h = ft_face->glyph->bitmap.rows;
- while(h--)
- {
- RtlCopyMemory(dst, src, w);
- src += ft_face->glyph->bitmap.pitch;
- dst += pitch;
- }
- break;
- }
-
- case ft_glyph_format_outline:
- ft_bitmap.width = width;
- ft_bitmap.rows = height;
- ft_bitmap.pitch = pitch;
- ft_bitmap.pixel_mode = ft_pixel_mode_mono;
- ft_bitmap.buffer = pvBuf;
-
- IntLockFreeType;
- if(needsTransform)
- {
- FT_Outline_Transform(&ft_face->glyph->outline, &transMat);
- }
- FT_Outline_Translate(&ft_face->glyph->outline, -left, -bottom );
- /* Note: FreeType will only set 'black' bits for us. */
- RtlZeroMemory(pvBuf, needed);
- FT_Outline_Get_Bitmap(library, &ft_face->glyph->outline, &ft_bitmap);
- IntUnLockFreeType;
- break;
-
- default:
- DPRINT1("loaded glyph format %x\n", ft_face->glyph->format);
- if(pvBuf) ExFreePool(pvBuf);
- return GDI_ERROR;
- }
- break;
-
- case GGO_GRAY2_BITMAP:
- case GGO_GRAY4_BITMAP:
- case GGO_GRAY8_BITMAP:
- {
- unsigned int mult, row, col;
- BYTE *start, *ptr;
-
- width = gm.gmBlackBoxX;
- height = gm.gmBlackBoxY;
- pitch = (width + 3) / 4 * 4;
- needed = pitch * height;
-
- if(!pvBuf || !cjBuf) break;
-
- ft_bitmap.width = width;
- ft_bitmap.rows = height;
- ft_bitmap.pitch = pitch;
- ft_bitmap.pixel_mode = ft_pixel_mode_grays;
- ft_bitmap.buffer = pvBuf;
-
- IntLockFreeType;
- if(needsTransform)
- {
- FT_Outline_Transform(&ft_face->glyph->outline, &transMat);
- }
- FT_Outline_Translate(&ft_face->glyph->outline, -left, -bottom );
- RtlZeroMemory(ft_bitmap.buffer, cjBuf);
- FT_Outline_Get_Bitmap(library, &ft_face->glyph->outline, &ft_bitmap);
- IntUnLockFreeType;
-
- if(iFormat == GGO_GRAY2_BITMAP)
- mult = 4;
- else if(iFormat == GGO_GRAY4_BITMAP)
- mult = 16;
- else if(iFormat == GGO_GRAY8_BITMAP)
- mult = 64;
- else
- {
- ASSERT(0);
- break;
- }
-
- start = pvBuf;
- for(row = 0; row < height; row++)
- {
- ptr = start;
- for(col = 0; col < width; col++, ptr++)
- {
- *ptr = (((int)*ptr) * mult + 128) / 256;
- }
- start += pitch;
- }
- break;
- }
-
- case GGO_NATIVE:
- {
- int contour, point = 0, first_pt;
- FT_Outline *outline = &ft_face->glyph->outline;
- TTPOLYGONHEADER *pph;
- TTPOLYCURVE *ppc;
- DWORD pph_start, cpfx, type;
-
- if(cjBuf == 0) pvBuf = NULL; /* This is okay, need cjBuf to allocate. */
-
- IntLockFreeType;
- if (needsTransform && pvBuf) FT_Outline_Transform(outline, &transMat);
-
- for(contour = 0; contour < outline->n_contours; contour++)
- {
- pph_start = needed;
- pph = (TTPOLYGONHEADER *)((char *)pvBuf + needed);
- first_pt = point;
- if(pvBuf)
- {
- pph->dwType = TT_POLYGON_TYPE;
- FTVectorToPOINTFX(&outline->points[point], &pph->pfxStart);
- }
- needed += sizeof(*pph);
- point++;
- while(point <= outline->contours[contour])
- {
- ppc = (TTPOLYCURVE *)((char *)pvBuf + needed);
- type = (outline->tags[point] & FT_Curve_Tag_On) ?
- TT_PRIM_LINE : TT_PRIM_QSPLINE;
- cpfx = 0;
- do
- {
- if(pvBuf)
- FTVectorToPOINTFX(&outline->points[point], &ppc->apfx[cpfx]);
- cpfx++;
- point++;
- } while(point <= outline->contours[contour] &&
- (outline->tags[point] & FT_Curve_Tag_On) ==
- (outline->tags[point-1] & FT_Curve_Tag_On));
-
- /* At the end of a contour Windows adds the start point, but
- only for Beziers */
- if(point > outline->contours[contour] &&
- !(outline->tags[point-1] & FT_Curve_Tag_On))
- {
- if(pvBuf)
- FTVectorToPOINTFX(&outline->points[first_pt], &ppc->apfx[cpfx]);
- cpfx++;
- }
- else if(point <= outline->contours[contour] &&
- outline->tags[point] & FT_Curve_Tag_On)
- {
- /* add closing pt for bezier */
- if(pvBuf)
- FTVectorToPOINTFX(&outline->points[point], &ppc->apfx[cpfx]);
- cpfx++;
- point++;
- }
- if(pvBuf)
- {
- ppc->wType = type;
- ppc->cpfx = cpfx;
- }
- needed += sizeof(*ppc) + (cpfx - 1) * sizeof(POINTFX);
- }
- if(pvBuf) pph->cb = needed - pph_start;
- }
- IntUnLockFreeType;
- break;
- }
- case GGO_BEZIER:
- {
- /* Convert the quadratic Beziers to cubic Beziers.
- The parametric eqn for a cubic Bezier is, from PLRM:
- r(t) = at^3 + bt^2 + ct + r0
- with the control points:
- r1 = r0 + c/3
- r2 = r1 + (c + b)/3
- r3 = r0 + c + b + a
-
- A quadratic Beizer has the form:
- p(t) = (1-t)^2 p0 + 2(1-t)t p1 + t^2 p2
-
- So equating powers of t leads to:
- r1 = 2/3 p1 + 1/3 p0
- r2 = 2/3 p1 + 1/3 p2
- and of course r0 = p0, r3 = p2
- */
-
- int contour, point = 0, first_pt;
- FT_Outline *outline = &ft_face->glyph->outline;
- TTPOLYGONHEADER *pph;
- TTPOLYCURVE *ppc;
- DWORD pph_start, cpfx, type;
- FT_Vector cubic_control[4];
- if(cjBuf == 0) pvBuf = NULL;
-
- if (needsTransform && pvBuf)
- {
- IntLockFreeType;
- FT_Outline_Transform(outline, &transMat);
- IntUnLockFreeType;
- }
-
- for(contour = 0; contour < outline->n_contours; contour++)
- {
- pph_start = needed;
- pph = (TTPOLYGONHEADER *)((char *)pvBuf + needed);
- first_pt = point;
- if(pvBuf)
- {
- pph->dwType = TT_POLYGON_TYPE;
- FTVectorToPOINTFX(&outline->points[point], &pph->pfxStart);
- }
- needed += sizeof(*pph);
- point++;
- while(point <= outline->contours[contour])
- {
- ppc = (TTPOLYCURVE *)((char *)pvBuf + needed);
- type = (outline->tags[point] & FT_Curve_Tag_On) ?
- TT_PRIM_LINE : TT_PRIM_CSPLINE;
- cpfx = 0;
- do
- {
- if(type == TT_PRIM_LINE)
- {
- if(pvBuf)
- FTVectorToPOINTFX(&outline->points[point], &ppc->apfx[cpfx]);
- cpfx++;
- point++;
- }
- else
- {
- /* Unlike QSPLINEs, CSPLINEs always have their endpoint
- so cpfx = 3n */
-
- /* FIXME: Possible optimization in endpoint calculation
- if there are two consecutive curves */
- cubic_control[0] = outline->points[point-1];
- if(!(outline->tags[point-1] & FT_Curve_Tag_On))
- {
- cubic_control[0].x += outline->points[point].x + 1;
- cubic_control[0].y += outline->points[point].y + 1;
- cubic_control[0].x >>= 1;
- cubic_control[0].y >>= 1;
- }
- if(point+1 > outline->contours[contour])
- cubic_control[3] = outline->points[first_pt];
- else
- {
- cubic_control[3] = outline->points[point+1];
- if(!(outline->tags[point+1] & FT_Curve_Tag_On))
- {
- cubic_control[3].x += outline->points[point].x + 1;
- cubic_control[3].y += outline->points[point].y + 1;
- cubic_control[3].x >>= 1;
- cubic_control[3].y >>= 1;
- }
- }
- /* r1 = 1/3 p0 + 2/3 p1
- r2 = 1/3 p2 + 2/3 p1 */
- cubic_control[1].x = (2 * outline->points[point].x + 1) / 3;
- cubic_control[1].y = (2 * outline->points[point].y + 1) / 3;
- cubic_control[2] = cubic_control[1];
- cubic_control[1].x += (cubic_control[0].x + 1) / 3;
- cubic_control[1].y += (cubic_control[0].y + 1) / 3;
- cubic_control[2].x += (cubic_control[3].x + 1) / 3;
- cubic_control[2].y += (cubic_control[3].y + 1) / 3;
- if(pvBuf)
- {
- FTVectorToPOINTFX(&cubic_control[1], &ppc->apfx[cpfx]);
- FTVectorToPOINTFX(&cubic_control[2], &ppc->apfx[cpfx+1]);
- FTVectorToPOINTFX(&cubic_control[3], &ppc->apfx[cpfx+2]);
- }
- cpfx += 3;
- point++;
- }
- }
- while(point <= outline->contours[contour] &&
- (outline->tags[point] & FT_Curve_Tag_On) ==
- (outline->tags[point-1] & FT_Curve_Tag_On));
- /* At the end of a contour Windows adds the start point,
- but only for Beziers and we've already done that.
- */
- if(point <= outline->contours[contour] &&
- outline->tags[point] & FT_Curve_Tag_On)
- {
- /* This is the closing pt of a bezier, but we've already
- added it, so just inc point and carry on */
- point++;
- }
- if(pvBuf)
- {
- ppc->wType = type;
- ppc->cpfx = cpfx;
- }
- needed += sizeof(*ppc) + (cpfx - 1) * sizeof(POINTFX);
- }
- if(pvBuf) pph->cb = needed - pph_start;
- }
- break;
- }
-
- default:
- DPRINT1("Unsupported format %d\n", iFormat);
- if(pvBuf) ExFreePool(pvBuf);
- return GDI_ERROR;
- }
-
- if (pvBuf)
- {
- Status = MmCopyToCaller(UnsafeBuf, pvBuf, cjBuf);
- if (! NT_SUCCESS(Status))
- {
- SetLastWin32Error(ERROR_INVALID_PARAMETER);
- ExFreePool(pvBuf);
- return GDI_ERROR;
- }
- DPRINT("NtGdiGetGlyphOutline K -> U worked!\n");
- ExFreePool(pvBuf);
- }
-
- DPRINT("NtGdiGetGlyphOutline END and needed %d\n", needed);
- return needed;
-}
-
-BOOL
-FASTCALL
-TextIntGetTextExtentPoint(PDC dc,
- PTEXTOBJ TextObj,
- LPCWSTR String,
- int Count,
- int MaxExtent,
- LPINT Fit,
- LPINT Dx,
- LPSIZE Size)
-{
- PFONTGDI FontGDI;
- FT_Face face;
- FT_GlyphSlot glyph;
- FT_Glyph realglyph;
- INT error, n, glyph_index, i, previous;
- ULONGLONG TotalWidth = 0;
- FT_CharMap charmap, found = NULL;
- BOOL use_kerning;
- FT_Render_Mode RenderMode;
- BOOLEAN Render;
-
- FontGDI = ObjToGDI(TextObj->Font, FONT);
-
- face = FontGDI->face;
- if (NULL != Fit)
- {
- *Fit = 0;
- }
-
- IntLockFreeType;
- if (face->charmap == NULL)
- {
- DPRINT("WARNING: No charmap selected!\n");
- DPRINT("This font face has %d charmaps\n", face->num_charmaps);
-
- for (n = 0; n < face->num_charmaps; n++)
- {
- charmap = face->charmaps[n];
- DPRINT("found charmap encoding: %u\n", charmap->encoding);
- if (charmap->encoding != 0)
- {
- found = charmap;
- break;
- }
- }
-
- if (! found)
- {
- DPRINT1("WARNING: Could not find desired charmap!\n");
- }
-
- error = FT_Set_Charmap(face, found);
- if (error)
- {
- DPRINT1("WARNING: Could not set the charmap!\n");
- }
- }
-
- Render = IntIsFontRenderingEnabled();
- if (Render)
- RenderMode = IntGetFontRenderMode(&TextObj->logfont.elfEnumLogfontEx.elfLogFont);
- else
- RenderMode = FT_RENDER_MODE_MONO;
-
- error = FT_Set_Pixel_Sizes(face,
- TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfWidth,
- /* FIXME should set character height if neg */
- (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight < 0 ?
- - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight :
- TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight == 0 ? 11 : TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight));
- if (error)
- {
- DPRINT1("Error in setting pixel sizes: %u\n", error);
- }
-
- use_kerning = FT_HAS_KERNING(face);
- previous = 0;
-
- for (i = 0; i < Count; i++)
- {
- glyph_index = FT_Get_Char_Index(face, *String);
- if (!(realglyph = NtGdiGlyphCacheGet(face, glyph_index,
- TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight)))
- {
- error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
- if (error)
- {
- DPRINT1("WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
- break;
- }
-
- glyph = face->glyph;
- realglyph = NtGdiGlyphCacheSet(face, glyph_index,
- TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, glyph, RenderMode);
- if (!realglyph)
- {
- DPRINT1("Failed to render glyph! [index: %u]\n", glyph_index);
- break;
- }
- }
-
- /* retrieve kerning distance */
- if (use_kerning && previous && glyph_index)
- {
- FT_Vector delta;
- FT_Get_Kerning(face, previous, glyph_index, 0, &delta);
- TotalWidth += delta.x;
- }
-
- TotalWidth += realglyph->advance.x >> 10;
-
- if (((TotalWidth + 32) >> 6) <= MaxExtent && NULL != Fit)
- {
- *Fit = i + 1;
- }
- if (NULL != Dx)
- {
- Dx[i] = (TotalWidth + 32) >> 6;
- }
-
- previous = glyph_index;
- String++;
- }
- IntUnLockFreeType;
-
- Size->cx = (TotalWidth + 32) >> 6;
- Size->cy = (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight < 0 ? - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight : TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight);
- Size->cy = EngMulDiv(Size->cy, IntGdiGetDeviceCaps(dc, LOGPIXELSY), 72);
-
- return TRUE;
-}
-
-
-DWORD
-FASTCALL
-IntGdiGetCharSet(HDC hDC)
-{
- UINT cp = 0;
- CHARSETINFO csi;
- DWORD charset = NtGdiGetTextCharsetInfo(hDC,NULL,0);
- if (IntTranslateCharsetInfo(&charset, &csi, TCI_SRCCHARSET))
- cp = csi.ciACP;
- else
- {
- switch(charset)
- {
- case OEM_CHARSET:
- cp = 1;
- break;
- case DEFAULT_CHARSET:
- cp = 0;
- break;
- default:
- DPRINT1("Can't find codepage for charset %d\n", charset);
- break;
- }
- }
- DPRINT("charset %d => cp %d\n", charset, LOWORD(cp));
- return (MAKELONG(cp, charset));
-}
-
-
-DWORD
-APIENTRY
-NtGdiGetCharSet(HDC hDC)
-{
- PDC Dc;
- PDC_ATTR Dc_Attr;
- DWORD cscp = IntGdiGetCharSet(hDC);
- // If here, update everything!
- Dc = DC_LockDc(hDC);
- if (!Dc)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- return 0;
- }
- Dc_Attr = Dc->pDc_Attr;
- if (!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
- Dc_Attr->iCS_CP = cscp;
- Dc_Attr->ulDirty_ &= ~DIRTY_CHARSET;
- DC_UnlockDc( Dc );
- return cscp;
-}
-
-
-INT
-APIENTRY
-NtGdiGetTextCharsetInfo(
- IN HDC hdc,
- OUT OPTIONAL LPFONTSIGNATURE lpSig,
- IN DWORD dwFlags)
-{
- PDC Dc;
- PDC_ATTR Dc_Attr;
- UINT Ret = DEFAULT_CHARSET, i = 0, fs_fsCsb0 = 0;
- HFONT hFont;
- PTEXTOBJ TextObj;
- PFONTGDI FontGdi;
- FONTSIGNATURE fs;
- TT_OS2 *pOS2;
- FT_Face Face;
- NTSTATUS Status;
-
- Dc = DC_LockDc(hdc);
- if (!Dc)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- return Ret;
- }
- Dc_Attr = Dc->pDc_Attr;
- if(!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
- hFont = Dc_Attr->hlfntNew;
- TextObj = TEXTOBJ_LockText(hFont);
- DC_UnlockDc( Dc );
- if ( TextObj == NULL)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- return Ret;
- }
- FontGdi = ObjToGDI(TextObj->Font, FONT);
- Face = FontGdi->face;
- TEXTOBJ_UnlockText(TextObj);
- IntLockFreeType;
- pOS2 = FT_Get_Sfnt_Table(Face, ft_sfnt_os2);
- IntUnLockFreeType;
- memset(&fs, 0, sizeof(FONTSIGNATURE));
- if (NULL != pOS2)
- {
- fs.fsCsb[0] = pOS2->ulCodePageRange1;
- fs.fsCsb[1] = pOS2->ulCodePageRange2;
- fs.fsUsb[0] = pOS2->ulUnicodeRange1;
- fs.fsUsb[1] = pOS2->ulUnicodeRange2;
- fs.fsUsb[2] = pOS2->ulUnicodeRange3;
- fs.fsUsb[3] = pOS2->ulUnicodeRange4;
- fs_fsCsb0 = pOS2->ulCodePageRange1;
- if (pOS2->version == 0)
- {
- FT_UInt dummy;
-
- if(FT_Get_First_Char( Face, &dummy ) < 0x100)
- fs_fsCsb0 |= 1;
- else
- fs_fsCsb0 |= 1L << 31;
- }
- }
- DPRINT("Csb 1=%x 0=%x\n", fs.fsCsb[1],fs.fsCsb[0]);
- if (lpSig)
- {
- Status = MmCopyToCaller(lpSig, &fs, sizeof(FONTSIGNATURE));
- if (! NT_SUCCESS(Status))
- {
- SetLastWin32Error(ERROR_INVALID_PARAMETER);
- return Ret;
- }
- }
- if (0 == fs_fsCsb0)
- { /* let's see if we can find any interesting cmaps */
- for (i = 0; i < Face->num_charmaps; i++)
- {
- switch (Face->charmaps[i]->encoding)
- {
- case ft_encoding_unicode:
- case ft_encoding_apple_roman:
- fs_fsCsb0 |= 1;
- break;
- case ft_encoding_symbol:
- fs_fsCsb0 |= 1L << 31;
- break;
- default:
- break;
- }
- }
- }
- while (0 == (fs_fsCsb0 >> i & 0x0001) && i < MAXTCIINDEX)
- {
- i++;
- }
- Ret = FontTci[i].ciCharset;
- DPRINT("CharSet %d\n",Ret);
- return Ret;
-}
-
-W32KAPI
-BOOL
-APIENTRY
-NtGdiGetTextMetricsW(
- IN HDC hDC,
- OUT TMW_INTERNAL * pUnsafeTmwi,
- IN ULONG cj
-)
-{
- PDC dc;
- PDC_ATTR Dc_Attr;
- PTEXTOBJ TextObj;
- PFONTGDI FontGDI;
- NTSTATUS Status = STATUS_SUCCESS;
- TMW_INTERNAL tmwi;
- FT_Face Face;
- TT_OS2 *pOS2;
- TT_HoriHeader *pHori;
- ULONG Error;
-
- if (NULL == pUnsafeTmwi)
- {
- SetLastWin32Error(STATUS_INVALID_PARAMETER);
- return FALSE;
- }
-
- /* FIXME: check cj ? */
-
- if(!(dc = DC_LockDc(hDC)))
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- return FALSE;
- }
- Dc_Attr = dc->pDc_Attr;
- if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
- TextObj = TEXTOBJ_LockText(Dc_Attr->hlfntNew);
- if (NULL != TextObj)
- {
- FontGDI = ObjToGDI(TextObj->Font, FONT);
-
- Face = FontGDI->face;
- IntLockFreeType;
- Error = FT_Set_Pixel_Sizes(Face,
- TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfWidth,
- /* FIXME should set character height if neg */
- (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight < 0 ?
- - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight :
- TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight == 0 ? 11 : TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight));
- IntUnLockFreeType;
- if (0 != Error)
- {
- DPRINT1("Error in setting pixel sizes: %u\n", Error);
- Status = STATUS_UNSUCCESSFUL;
- }
- else
- {
- memcpy(&tmwi.TextMetric, &FontGDI->TextMetric, sizeof(TEXTMETRICW));
- /* FIXME: Fill Diff member */
- RtlZeroMemory(&tmwi.Diff, sizeof(tmwi.Diff));
-
- Status = STATUS_SUCCESS;
- IntLockFreeType;
- pOS2 = FT_Get_Sfnt_Table(FontGDI->face, ft_sfnt_os2);
- if (NULL == pOS2)
- {
- DPRINT1("Can't find OS/2 table - not TT font?\n");
- Status = STATUS_INTERNAL_ERROR;
- }
-
- pHori = FT_Get_Sfnt_Table(FontGDI->face, ft_sfnt_hhea);
- if (NULL == pHori)
- {
- DPRINT1("Can't find HHEA table - not TT font?\n");
- Status = STATUS_INTERNAL_ERROR;
- }
-
- IntUnLockFreeType;
-
- if (NT_SUCCESS(Status))
- {
- FillTM(&tmwi.TextMetric, FontGDI->face, pOS2, pHori);
-
- if (cj > sizeof(TMW_INTERNAL))
- cj = sizeof(TMW_INTERNAL);
-
- Status = STATUS_SUCCESS;
- _SEH_TRY
- {
- ProbeForWrite(pUnsafeTmwi, cj, 1);
- RtlCopyMemory(pUnsafeTmwi,&tmwi,cj);
- }
- _SEH_HANDLE
- {
- Status = _SEH_GetExceptionCode();
- }
- _SEH_END
- }
- }
- TEXTOBJ_UnlockText(TextObj);
- }
- else
- {
- Status = STATUS_INVALID_HANDLE;
- }
- DC_UnlockDc(dc);
-
- if(!NT_SUCCESS(Status))
- {
- SetLastNtError(Status);
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-DWORD STDCALL
-NtGdiGetFontData(
- HDC hDC,
- DWORD Table,
- DWORD Offset,
- LPVOID Buffer,
- DWORD Size)
-{
- PDC Dc;
- PDC_ATTR Dc_Attr;
- HFONT hFont;
- PTEXTOBJ TextObj;
- PFONTGDI FontGdi;
- DWORD Result = GDI_ERROR;
-
- Dc = DC_LockDc(hDC);
- if (Dc == NULL)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- return GDI_ERROR;
- }
- Dc_Attr = Dc->pDc_Attr;
- if(!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
- hFont = Dc_Attr->hlfntNew;
- TextObj = TEXTOBJ_LockText(hFont);
- DC_UnlockDc(Dc);
-
- if (TextObj == NULL)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- return GDI_ERROR;
- }
-
- FontGdi = ObjToGDI(TextObj->Font, FONT);
-
- IntLockFreeType;
-
- if (FT_IS_SFNT(FontGdi->face))
- {
- if (Table)
- Table = Table >> 24 | Table << 24 | (Table >> 8 & 0xFF00) |
- (Table << 8 & 0xFF0000);
-
- if (Buffer == NULL)
- Size = 0;
-
- if (!FT_Load_Sfnt_Table(FontGdi->face, Table, Offset, Buffer, &Size))
- Result = Size;
- }
-
- IntUnLockFreeType;
-
- TEXTOBJ_UnlockText(TextObj);
-
- return Result;
-}
-
-static UINT FASTCALL
-GetFontScore(LOGFONTW *LogFont, PUNICODE_STRING FaceName, PFONTGDI FontGDI)
-{
- ANSI_STRING EntryFaceNameA;
- UNICODE_STRING EntryFaceNameW;
- unsigned Size;
- OUTLINETEXTMETRICW *Otm;
- LONG WeightDiff;
- NTSTATUS Status;
- UINT Score = 1;
-
- RtlInitAnsiString(&EntryFaceNameA, FontGDI->face->family_name);
- Status = RtlAnsiStringToUnicodeString(&EntryFaceNameW, &EntryFaceNameA, TRUE);
- if (NT_SUCCESS(Status))
- {
- if ((LF_FACESIZE - 1) * sizeof(WCHAR) < EntryFaceNameW.Length)
- {
- EntryFaceNameW.Length = (LF_FACESIZE - 1) * sizeof(WCHAR);
- EntryFaceNameW.Buffer[LF_FACESIZE - 1] = L'\0';
- }
- if (0 == RtlCompareUnicodeString(FaceName, &EntryFaceNameW, TRUE))
- {
- Score += 49;
- }
- RtlFreeUnicodeString(&EntryFaceNameW);
- }
-
- Size = IntGetOutlineTextMetrics(FontGDI, 0, NULL);
- Otm = ExAllocatePoolWithTag(PagedPool, Size, TAG_GDITEXT);
- if (NULL == Otm)
- {
- return Score;
- }
- IntGetOutlineTextMetrics(FontGDI, Size, Otm);
-
- if ((0 != LogFont->lfItalic && 0 != Otm->otmTextMetrics.tmItalic) ||
- (0 == LogFont->lfItalic && 0 == Otm->otmTextMetrics.tmItalic))
- {
- Score += 25;
- }
- if (LogFont->lfWeight != FW_DONTCARE)
- {
- if (LogFont->lfWeight < Otm->otmTextMetrics.tmWeight)
- {
- WeightDiff = Otm->otmTextMetrics.tmWeight - LogFont->lfWeight;
- }
- else
- {
- WeightDiff = LogFont->lfWeight - Otm->otmTextMetrics.tmWeight;
- }
- Score += (1000 - WeightDiff) / (1000 / 25);
- }
- else
- {
- Score += 25;
- }
-
- ExFreePool(Otm);
-
- return Score;
-}
-
-static __inline VOID
-FindBestFontFromList(FONTOBJ **FontObj, UINT *MatchScore, LOGFONTW *LogFont,
- PUNICODE_STRING FaceName, PLIST_ENTRY Head)
-{
- PLIST_ENTRY Entry;
- PFONT_ENTRY CurrentEntry;
- FONTGDI *FontGDI;
- UINT Score;
-
- Entry = Head->Flink;
- while (Entry != Head)
- {
- CurrentEntry = (PFONT_ENTRY) CONTAINING_RECORD(Entry, FONT_ENTRY, ListEntry);
-
- FontGDI = CurrentEntry->Font;
- ASSERT(FontGDI);
-
- Score = GetFontScore(LogFont, FaceName, FontGDI);
- if (*MatchScore == 0 || *MatchScore < Score)
- {
- *FontObj = GDIToObj(FontGDI, FONT);
- *MatchScore = Score;
- }
- Entry = Entry->Flink;
- }
-}
-
-static __inline BOOLEAN
-SubstituteFontFamilyKey(PUNICODE_STRING FaceName,
- LPCWSTR Key)
-{
- RTL_QUERY_REGISTRY_TABLE QueryTable[2] = {{0}};
- NTSTATUS Status;
- UNICODE_STRING Value;
-
- RtlInitUnicodeString(&Value, NULL);
-
- QueryTable[0].QueryRoutine = NULL;
- QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND |
- RTL_QUERY_REGISTRY_REQUIRED;
- QueryTable[0].Name = FaceName->Buffer;
- QueryTable[0].EntryContext = &Value;
- QueryTable[0].DefaultType = REG_NONE;
- QueryTable[0].DefaultData = NULL;
- QueryTable[0].DefaultLength = 0;
-
- QueryTable[1].QueryRoutine = NULL;
- QueryTable[1].Name = NULL;
-
- Status = RtlQueryRegistryValues(RTL_REGISTRY_WINDOWS_NT,
- Key,
- QueryTable,
- NULL,
- NULL);
- if (NT_SUCCESS(Status))
- {
- RtlFreeUnicodeString(FaceName);
- *FaceName = Value;
- }
-
- return NT_SUCCESS(Status);
-}
-
-static __inline void
-SubstituteFontFamily(PUNICODE_STRING FaceName, UINT Level)
-{
- if (10 < Level) /* Enough is enough */
- {
- return;
- }
-
- if (SubstituteFontFamilyKey(FaceName, L"SysFontSubstitutes") ||
- SubstituteFontFamilyKey(FaceName, L"FontSubstitutes"))
- {
- SubstituteFontFamily(FaceName, Level + 1);
- }
-}
-
-NTSTATUS FASTCALL
-TextIntRealizeFont(HFONT FontHandle)
-{
- NTSTATUS Status = STATUS_SUCCESS;
- PTEXTOBJ TextObj;
- UNICODE_STRING FaceName;
- PW32PROCESS Win32Process;
- UINT MatchScore;
-
- TextObj = TEXTOBJ_LockText(FontHandle);
- if (NULL == TextObj)
- {
- return STATUS_INVALID_HANDLE;
- }
-
- if (TextObj->Initialized)
- {
- TEXTOBJ_UnlockText(TextObj);
- return STATUS_SUCCESS;
- }
-
- if (! RtlCreateUnicodeString(&FaceName, TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName))
- {
- TEXTOBJ_UnlockText(TextObj);
- return STATUS_NO_MEMORY;
- }
- SubstituteFontFamily(&FaceName, 0);
- MatchScore = 0;
- TextObj->Font = NULL;
-
- /* First search private fonts */
- Win32Process = PsGetCurrentProcessWin32Process();
- IntLockProcessPrivateFonts(Win32Process);
- FindBestFontFromList(&TextObj->Font, &MatchScore,
- &TextObj->logfont.elfEnumLogfontEx.elfLogFont, &FaceName,
- &Win32Process->PrivateFontListHead);
- IntUnLockProcessPrivateFonts(Win32Process);
-
- /* Search system fonts */
- IntLockGlobalFonts;
- FindBestFontFromList(&TextObj->Font, &MatchScore,
- &TextObj->logfont.elfEnumLogfontEx.elfLogFont, &FaceName,
- &FontListHead);
- IntUnLockGlobalFonts;
-
- if (NULL == TextObj->Font)
- {
- DPRINT1("Requested font %S not found, no fonts loaded at all\n",
- TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName);
- Status = STATUS_NOT_FOUND;
- }
- else
- {
- TextObj->Initialized = TRUE;
- Status = STATUS_SUCCESS;
- }
-
- RtlFreeUnicodeString(&FaceName);
- TEXTOBJ_UnlockText(TextObj);
-
- ASSERT((NT_SUCCESS(Status) ^ (NULL == TextObj->Font)) != 0);
-
- return Status;
-}
-
-INT FASTCALL
-FontGetObject(PTEXTOBJ TFont, INT Count, PVOID Buffer)
-{
- if( Buffer == NULL ) return sizeof(LOGFONTW);
-
- switch (Count)
- {
-
- case sizeof(ENUMLOGFONTEXDVW):
- RtlCopyMemory( (LPENUMLOGFONTEXDVW) Buffer,
- &TFont->logfont,
- sizeof(ENUMLOGFONTEXDVW));
- break;
- case sizeof(ENUMLOGFONTEXW):
- RtlCopyMemory( (LPENUMLOGFONTEXW) Buffer,
- &TFont->logfont.elfEnumLogfontEx,
- sizeof(ENUMLOGFONTEXW));
- break;
-
- case sizeof(EXTLOGFONTW):
- case sizeof(ENUMLOGFONTW):
- RtlCopyMemory((LPENUMLOGFONTW) Buffer,
- &TFont->logfont.elfEnumLogfontEx.elfLogFont,
- sizeof(ENUMLOGFONTW));
- break;
-
- case sizeof(LOGFONTW):
- RtlCopyMemory((LPLOGFONTW) Buffer,
- &TFont->logfont.elfEnumLogfontEx.elfLogFont,
- sizeof(LOGFONTW));
- break;
-
- default:
- SetLastWin32Error(ERROR_BUFFER_OVERFLOW);
- return 0;
- }
- return Count;
-}
-
-
-static BOOL FASTCALL
-IntGetFullFileName(
- POBJECT_NAME_INFORMATION NameInfo,
- ULONG Size,
- PUNICODE_STRING FileName)
-{
- NTSTATUS Status;
- OBJECT_ATTRIBUTES ObjectAttributes;
- HANDLE hFile;
- IO_STATUS_BLOCK IoStatusBlock;
- ULONG Desired;
-
- InitializeObjectAttributes(&ObjectAttributes,
- FileName,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL);
-
- Status = ZwOpenFile(
- &hFile,
- 0, //FILE_READ_ATTRIBUTES,
- &ObjectAttributes,
- &IoStatusBlock,
- FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
- 0);
-
- if (!NT_SUCCESS(Status))
- {
- DPRINT("ZwOpenFile() failed (Status = 0x%lx)\n", Status);
- return FALSE;
- }
-
- Status = ZwQueryObject(hFile, ObjectNameInformation, NameInfo, Size, &Desired);
- ZwClose(hFile);
- if (!NT_SUCCESS(Status))
- {
- DPRINT("ZwQueryObject() failed (Status = %lx)\n", Status);
- return FALSE;
- }
-
- return TRUE;
-}
-
-static BOOL FASTCALL
-IntGdiGetFontResourceInfo(
- IN PUNICODE_STRING FileName,
- OUT void *pBuffer,
- OUT DWORD *pdwBytes,
- IN DWORD dwType)
-{
- UNICODE_STRING EntryFileName;
- POBJECT_NAME_INFORMATION NameInfo1, NameInfo2;
- PLIST_ENTRY ListEntry;
- PFONT_ENTRY FontEntry;
- FONTFAMILYINFO Info;
- ULONG Size;
- BOOL bFound = FALSE;
-
- /* Create buffer for full path name */
- Size = sizeof(OBJECT_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR);
- NameInfo1 = ExAllocatePoolWithTag(PagedPool, Size, TAG_FINF);
- if (!NameInfo1)
- {
- SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
- return FALSE;
- }
-
- /* Get the full path name */
- if (!IntGetFullFileName(NameInfo1, Size, FileName))
- {
- ExFreePool(NameInfo1);
- return FALSE;
- }
-
- /* Create a buffer for the entries' names */
- NameInfo2 = ExAllocatePoolWithTag(PagedPool, Size, TAG_FINF);
- if (!NameInfo2)
- {
- ExFreePool(NameInfo1);
- SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
- return FALSE;
- }
-
- /* Try to find the pathname in the global font list */
- IntLockGlobalFonts;
- for (ListEntry = FontListHead.Flink;
- ListEntry != &FontListHead;
- ListEntry = ListEntry->Flink)
- {
- FontEntry = CONTAINING_RECORD(ListEntry, FONT_ENTRY, ListEntry);
- if (FontEntry->Font->Filename != NULL)
- {
- RtlInitUnicodeString(&EntryFileName , FontEntry->Font->Filename);
- if (IntGetFullFileName(NameInfo2, Size, &EntryFileName))
- {
- if (RtlEqualUnicodeString(&NameInfo1->Name, &NameInfo2->Name, FALSE))
- {
- /* found */
- FontFamilyFillInfo(&Info, FontEntry->FaceName.Buffer, FontEntry->Font);
- bFound = TRUE;
- break;
- }
- }
- }
- }
- IntUnLockGlobalFonts;
-
- /* Free the buffers */
- ExFreePool(NameInfo1);
- ExFreePool(NameInfo2);
-
- if (!bFound && dwType != 5)
- {
- /* Font could not be found in system table
- dwType == 5 will still handle this */
- return FALSE;
- }
-
- switch(dwType)
- {
- case 0: /* FIXME: returns 1 or 2, don't know what this is atm */
- *(DWORD*)pBuffer = 1;
- *pdwBytes = sizeof(DWORD);
- break;
-
- case 1: /* Copy the full font name */
- Size = wcslen(Info.EnumLogFontEx.elfFullName) + 1;
- Size = min(Size , LF_FULLFACESIZE) * sizeof(WCHAR);
- memcpy(pBuffer, Info.EnumLogFontEx.elfFullName, Size);
- // FIXME: Do we have to zeroterminate?
- *pdwBytes = Size;
- break;
-
- case 2: /* Copy a LOGFONTW structure */
- Info.EnumLogFontEx.elfLogFont.lfWidth = 0;
- memcpy(pBuffer, &Info.EnumLogFontEx.elfLogFont, sizeof(LOGFONTW));
- *pdwBytes = sizeof(LOGFONTW);
- break;
-
- case 3: /* FIXME: What exactly is copied here? */
- *(DWORD*)pBuffer = 1;
- *pdwBytes = sizeof(DWORD*);
- break;
-
- case 5: /* Looks like a BOOL that is copied, TRUE, if the font was not found */
- *(BOOL*)pBuffer = !bFound;
- *pdwBytes = sizeof(BOOL);
- break;
-
- default:
- return FALSE;
- }
-
- return TRUE;
-}
-
-W32KAPI BOOL APIENTRY
-NtGdiGetFontResourceInfoInternalW(
- IN LPWSTR pwszFiles,
- IN ULONG cwc,
- IN ULONG cFiles,
- IN UINT cjIn,
- OUT LPDWORD pdwBytes,
- OUT LPVOID pvBuf,
- IN DWORD dwType)
-{
- NTSTATUS Status = STATUS_SUCCESS;
- DWORD dwBytes;
- UNICODE_STRING SafeFileNames;
- BOOL bRet = FALSE;
- ULONG cbStringSize;
-
- union
- {
- LOGFONTW logfontw;
- WCHAR FullName[LF_FULLFACESIZE];
- } Buffer;
-
- /* FIXME: handle cFiles > 0 */
-
- /* Check for valid dwType values
- dwType == 4 seems to be handled by gdi32 only */
- if (dwType == 4 || dwType > 5)
- {
- SetLastWin32Error(ERROR_INVALID_PARAMETER);
- return FALSE;
- }
-
- /* Allocate a safe unicode string buffer */
- cbStringSize = cwc * sizeof(WCHAR);
- SafeFileNames.MaximumLength = SafeFileNames.Length = cbStringSize - sizeof(WCHAR);
- SafeFileNames.Buffer = ExAllocatePoolWithTag(PagedPool,
- cbStringSize,
- TAG('R','T','S','U'));
- if (!SafeFileNames.Buffer)
- {
- SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
- return FALSE;
- }
-
- /* Check buffers and copy pwszFiles to safe unicode string */
- _SEH_TRY
- {
- ProbeForRead(pwszFiles, cbStringSize, 1);
- ProbeForWrite(pdwBytes, sizeof(DWORD), 1);
- ProbeForWrite(pvBuf, cjIn, 1);
-
- RtlCopyMemory(SafeFileNames.Buffer, pwszFiles, cbStringSize);
- }
- _SEH_HANDLE
- {
- Status = _SEH_GetExceptionCode();
- }
- _SEH_END
-
- if(!NT_SUCCESS(Status))
- {
- SetLastNtError(Status);
- /* Free the string buffer for the safe filename */
- ExFreePool(SafeFileNames.Buffer);
- return FALSE;
- }
-
- /* Do the actual call */
- bRet = IntGdiGetFontResourceInfo(&SafeFileNames, &Buffer, &dwBytes, dwType);
-
- /* Check if succeeded and the buffer is big enough */
- if (bRet && cjIn >= dwBytes)
- {
- /* Copy the data back to caller */
- _SEH_TRY
- {
- /* Buffers are already probed */
- RtlCopyMemory(pvBuf, &Buffer, dwBytes);
- *pdwBytes = dwBytes;
- }
- _SEH_HANDLE
- {
- Status = _SEH_GetExceptionCode();
- }
- _SEH_END
-
- if(!NT_SUCCESS(Status))
- {
- SetLastNtError(Status);
- bRet = FALSE;
- }
- }
-
- /* Free the string for the safe filenames */
- ExFreePool(SafeFileNames.Buffer);
-
- return bRet;
-}
/* EOF */
diff --git a/reactos/subsystems/win32/win32k/objects/gdibatch.c b/reactos/subsystems/win32/win32k/objects/gdibatch.c
index 68c758475ae..84744334c42 100644
--- a/reactos/subsystems/win32/win32k/objects/gdibatch.c
+++ b/reactos/subsystems/win32/win32k/objects/gdibatch.c
@@ -64,6 +64,7 @@ FASTCALL
GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
{
PDC_ATTR Dc_Attr = NULL;
+
if (dc)
{
Dc_Attr = dc->pDc_Attr;
@@ -95,8 +96,8 @@ GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
PGDIBSOBJECT pgO;
if(!dc) break;
pgO = (PGDIBSOBJECT) pHdr;
- if(NT_SUCCESS(TextIntRealizeFont((HFONT) pgO->hgdiobj)))
- Dc_Attr->hlfntNew = (HFONT) pgO->hgdiobj;
+ TextIntRealizeFont((HFONT) pgO->hgdiobj, NULL);
+ Dc_Attr->ulDirty_ &= ~(DIRTY_CHARSET);
}
case GdiBCDelObj:
case GdiBCDelRgn:
diff --git a/reactos/subsystems/win32/win32k/objects/line.c b/reactos/subsystems/win32/win32k/objects/line.c
index aac2748f2f3..acb098caf48 100644
--- a/reactos/subsystems/win32/win32k/objects/line.c
+++ b/reactos/subsystems/win32/win32k/objects/line.c
@@ -198,7 +198,7 @@ IntGdiPolyBezier(DC *dc,
if ( Pts )
{
ret = IntGdiPolyline(dc, Pts, nOut);
- ExFreePool(Pts);
+ ExFreePoolWithTag(Pts, TAG_BEZIER);
}
}
@@ -228,7 +228,7 @@ IntGdiPolyBezierTo(DC *dc,
npt[0].y = Dc_Attr->ptlCurrent.y;
memcpy(npt + 1, pt, sizeof(POINT) * Count);
ret = IntGdiPolyBezier(dc, npt, Count+1);
- ExFreePool(npt);
+ ExFreePoolWithTag(npt, TAG_BEZIER);
}
}
if ( ret )
@@ -331,7 +331,7 @@ IntGdiPolylineTo(DC *dc,
pts[0].y = Dc_Attr->ptlCurrent.y;
memcpy( pts + 1, pt, sizeof(POINT) * Count);
ret = IntGdiPolyline(dc, pts, Count + 1);
- ExFreePool(pts);
+ ExFreePoolWithTag(pts, TAG_SHAPE);
}
}
if ( ret )
diff --git a/reactos/subsystems/win32/win32k/objects/palobj.c b/reactos/subsystems/win32/win32k/objects/palobj.c
index 2220f7d803d..13171f267e5 100644
--- a/reactos/subsystems/win32/win32k/objects/palobj.c
+++ b/reactos/subsystems/win32/win32k/objects/palobj.c
@@ -170,7 +170,7 @@ HPALETTE FASTCALL PALETTE_Init(VOID)
}
hpalette = NtGdiCreatePaletteInternal(palPtr,NB_RESERVED_COLORS);
- ExFreePool(palPtr);
+ ExFreePoolWithTag(palPtr, TAG_PALETTE);
#ifndef NO_MAPPING
palObj = (PALOBJ*)PALETTE_LockPalette(hpalette);
diff --git a/reactos/subsystems/win32/win32k/objects/path.c b/reactos/subsystems/win32/win32k/objects/path.c
index 7c9ac01ab36..8337f92c31f 100644
--- a/reactos/subsystems/win32/win32k/objects/path.c
+++ b/reactos/subsystems/win32/win32k/objects/path.c
@@ -140,7 +140,7 @@ PATH_FillPath( PDC dc, PPATH pPath )
/* Restore the old mapping mode */
// IntGdiSetMapMode( dc, mapMode );
// Dc_Attr->szlViewportExt = ptViewportExt;
-// Dc_Attr->ptlViewportOrg = ptViewportOrg;
+// Dc_Attr->ptlViewportOrg = ptViewportOrg;
// Dc_Attr->szlWindowExt = ptWindowExt;
// Dc_Attr->ptlWindowOrg = ptWindowOrg;
@@ -181,8 +181,8 @@ PATH_DestroyGdiPath ( PPATH pPath )
{
ASSERT(pPath!=NULL);
- if (pPath->pPoints) ExFreePool(pPath->pPoints);
- if (pPath->pFlags) ExFreePool(pPath->pFlags);
+ if (pPath->pPoints) ExFreePoolWithTag(pPath->pPoints, TAG_PATH);
+ if (pPath->pFlags) ExFreePoolWithTag(pPath->pFlags, TAG_PATH);
}
/* PATH_AssignGdiPath
@@ -991,7 +991,7 @@ PATH_AddFlatBezier ( PPATH pPath, POINT *pt, BOOL closed )
for(i = 1; i < no; i++)
PATH_AddEntry(pPath, &pts[i], (i == no-1 && closed) ? PT_LINETO | PT_CLOSEFIGURE : PT_LINETO);
- ExFreePool(pts);
+ ExFreePoolWithTag(pts, TAG_BEZIER);
return TRUE;
}
@@ -1092,7 +1092,7 @@ PATH_PathToRegion ( PPATH pPath, INT nPolyFillMode, HRGN *pHrgn )
}
/* Free memory for number-of-points-in-stroke array */
- ExFreePool(pNumPointsInStroke);
+ ExFreePoolWithTag(pNumPointsInStroke, TAG_PATH);
/* Success! */
*pHrgn=hrgn;
@@ -1189,7 +1189,7 @@ PATH_ReserveEntries ( PPATH pPath, INT numEntries )
pFlagsNew=(BYTE *)ExAllocatePoolWithTag(PagedPool, numEntriesToAllocate * sizeof(BYTE), TAG_PATH);
if(!pFlagsNew)
{
- ExFreePool(pPointsNew);
+ ExFreePoolWithTag(pPointsNew, TAG_PATH);
return FALSE;
}
@@ -1201,8 +1201,8 @@ PATH_ReserveEntries ( PPATH pPath, INT numEntries )
memcpy(pPointsNew, pPath->pPoints, sizeof(POINT)*pPath->numEntriesUsed);
memcpy(pFlagsNew, pPath->pFlags, sizeof(BYTE)*pPath->numEntriesUsed);
- ExFreePool(pPath->pPoints);
- ExFreePool(pPath->pFlags);
+ ExFreePoolWithTag(pPath->pPoints, TAG_PATH);
+ ExFreePoolWithTag(pPath->pFlags, TAG_PATH);
}
pPath->pPoints=pPointsNew;
pPath->pFlags=pFlagsNew;
@@ -1424,12 +1424,12 @@ BOOL FASTCALL PATH_StrokePath(DC *dc, PPATH pPath)
}
memcpy(Realloc, pLinePts, nLinePts*sizeof(POINT));
- ExFreePool(pLinePts);
+ ExFreePoolWithTag(pLinePts, TAG_PATH);
pLinePts = Realloc;
}
memcpy(&pLinePts[nLinePts], &pBzrPts[1], (nBzrPts - 1) * sizeof(POINT));
nLinePts += nBzrPts - 1;
- ExFreePool(pBzrPts);
+ ExFreePoolWithTag(pBzrPts, TAG_BEZIER);
i += 2;
}
break;
@@ -1449,7 +1449,7 @@ BOOL FASTCALL PATH_StrokePath(DC *dc, PPATH pPath)
ret = TRUE;
end:
- if(pLinePts)ExFreePool(pLinePts);
+ if(pLinePts) ExFreePoolWithTag(pLinePts, TAG_PATH);
/* Restore the old mapping mode */
Dc_Attr->iMapMode = mapMode;
@@ -1490,9 +1490,9 @@ BOOL
FASTCALL
PATH_WidenPath(DC *dc)
{
- INT i, j, numStrokes, penWidth, penWidthIn, penWidthOut, size, penStyle;
+ INT i, j, numStrokes, numOldStrokes, penWidth, penWidthIn, penWidthOut, size, penStyle;
BOOL ret = FALSE;
- PPATH pPath, pNewPath, *pStrokes, pUpPath, pDownPath;
+ PPATH pPath, pNewPath, *pStrokes, *pOldStrokes, pUpPath, pDownPath;
EXTLOGPEN *elp;
DWORD obj_type, joint, endcap, penType;
PDC_ATTR Dc_Attr = dc->pDc_Attr;
@@ -1534,13 +1534,13 @@ PATH_WidenPath(DC *dc)
else
{
SetLastWin32Error(ERROR_CAN_NOT_COMPLETE);
- ExFreePool(elp);
+ ExFreePoolWithTag(elp, TAG_PATH);
PATH_UnlockPath( pPath );
return FALSE;
}
penWidth = elp->elpWidth;
- ExFreePool(elp);
+ ExFreePoolWithTag(elp, TAG_PATH);
endcap = (PS_ENDCAP_MASK & penStyle);
joint = (PS_JOIN_MASK & penStyle);
@@ -1560,6 +1560,7 @@ PATH_WidenPath(DC *dc)
penWidthOut++;
numStrokes = 0;
+ numOldStrokes = 1;
pStrokes = ExAllocatePoolWithTag(PagedPool, sizeof(PPATH), TAG_PATH);
pStrokes[0] = ExAllocatePoolWithTag(PagedPool, sizeof(PATH), TAG_PATH);
@@ -1588,8 +1589,11 @@ PATH_WidenPath(DC *dc)
}
numStrokes++;
j = 0;
- ExFreePool(pStrokes);
+ pOldStrokes = pStrokes; // Save old pointer.
pStrokes = ExAllocatePoolWithTag(PagedPool, numStrokes * sizeof(PPATH), TAG_PATH);
+ RtlCopyMemory(pStrokes, pOldStrokes, numOldStrokes * sizeof(PPATH));
+ numOldStrokes = numStrokes; // Save orig count.
+ ExFreePoolWithTag(pOldStrokes, TAG_PATH); // Free old pointer.
pStrokes[numStrokes - 1] = ExAllocatePoolWithTag(PagedPool, sizeof(PATH), TAG_PATH);
PATH_InitGdiPath(pStrokes[numStrokes - 1]);
@@ -1834,19 +1838,19 @@ PATH_WidenPath(DC *dc)
}
PATH_DestroyGdiPath(pStrokes[i]);
- ExFreePool(pStrokes[i]);
+ ExFreePoolWithTag(pStrokes[i], TAG_PATH);
PATH_DestroyGdiPath(pUpPath);
- ExFreePool(pUpPath);
+ ExFreePoolWithTag(pUpPath, TAG_PATH);
PATH_DestroyGdiPath(pDownPath);
- ExFreePool(pDownPath);
+ ExFreePoolWithTag(pDownPath, TAG_PATH);
}
- ExFreePool(pStrokes);
+ ExFreePoolWithTag(pStrokes, TAG_PATH);
pNewPath->state = PATH_Closed;
if (!(ret = PATH_AssignGdiPath(pPath, pNewPath)))
DPRINT1("Assign path failed\n");
PATH_DestroyGdiPath(pNewPath);
- ExFreePool(pNewPath);
+ ExFreePoolWithTag(pNewPath, TAG_PATH);
return ret;
}
diff --git a/reactos/subsystems/win32/win32k/objects/pen.c b/reactos/subsystems/win32/win32k/objects/pen.c
index b380331a44d..1346de17fb1 100644
--- a/reactos/subsystems/win32/win32k/objects/pen.c
+++ b/reactos/subsystems/win32/win32k/objects/pen.c
@@ -323,7 +323,7 @@ NtGdiExtCreatePen(
if(!NT_SUCCESS(Status))
{
SetLastNtError(Status);
- ExFreePool(pSafeStyle);
+ ExFreePoolWithTag(pSafeStyle, TAG_PENSTYLES);
return 0;
}
}
@@ -341,7 +341,7 @@ NtGdiExtCreatePen(
hBrush);
if (!hPen && pSafeStyle)
{
- ExFreePool(pSafeStyle);
+ ExFreePoolWithTag(pSafeStyle, TAG_PENSTYLES);
}
return hPen;
}
diff --git a/reactos/subsystems/win32/win32k/objects/print.c b/reactos/subsystems/win32/win32k/objects/print.c
index e40042e818d..85e0c3a516e 100644
--- a/reactos/subsystems/win32/win32k/objects/print.c
+++ b/reactos/subsystems/win32/win32k/objects/print.c
@@ -223,7 +223,7 @@ NtGdiExtEscape(
if ( !NT_SUCCESS(Status) )
{
- ExFreePool ( SafeInData );
+ ExFreePoolWithTag ( SafeInData, TAG_PRINT );
DC_UnlockDc(pDC);
SetLastNtError(Status);
return -1;
@@ -256,7 +256,7 @@ NtGdiExtEscape(
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
freeout:
if ( SafeInData )
- ExFreePool ( SafeInData );
+ ExFreePoolWithTag ( SafeInData, TAG_PRINT );
DC_UnlockDc(pDC);
return -1;
}
@@ -267,7 +267,7 @@ freeout:
DC_UnlockDc(pDC);
if ( SafeInData )
- ExFreePool ( SafeInData );
+ ExFreePoolWithTag ( SafeInData ,TAG_PRINT );
if ( SafeOutData )
{
@@ -284,7 +284,7 @@ freeout:
}
_SEH_END;
- ExFreePool ( SafeOutData );
+ ExFreePoolWithTag ( SafeOutData, TAG_PRINT );
if ( !NT_SUCCESS(Status) )
{
SetLastNtError(Status);
diff --git a/reactos/subsystems/win32/win32k/objects/region.c b/reactos/subsystems/win32/win32k/objects/region.c
index 80864b56fcf..16c0481689f 100644
--- a/reactos/subsystems/win32/win32k/objects/region.c
+++ b/reactos/subsystems/win32/win32k/objects/region.c
@@ -420,7 +420,7 @@ static __inline int xmemcheck(ROSRGNDATA *reg, PRECT *rect, PRECT *firstrect)
}
temp = ExAllocatePoolWithTag(PagedPool, NewSize, TAG_REGION);
- if (temp == 0)
+ if (temp == NULL)
{
return 0;
}
@@ -431,7 +431,7 @@ static __inline int xmemcheck(ROSRGNDATA *reg, PRECT *rect, PRECT *firstrect)
reg->rdh.nRgnSize = NewSize;
if (*firstrect != ®->rdh.rcBound)
{
- ExFreePool(*firstrect);
+ ExFreePoolWithTag(*firstrect, TAG_REGION);
}
*firstrect = temp;
*rect = (*firstrect)+reg->rdh.nCount;
@@ -520,7 +520,7 @@ REGION_CopyRegion(
return FALSE;
if (dst->Buffer && dst->Buffer != &dst->rdh.rcBound)
- ExFreePool(dst->Buffer); //free the old buffer
+ ExFreePoolWithTag(dst->Buffer, TAG_REGION); //free the old buffer
dst->Buffer = temp;
dst->rdh.nRgnSize = src->rdh.nCount * sizeof(RECT); //size of region buffer
}
@@ -608,7 +608,7 @@ REGION_CropAndOffsetRegion(
{
xrect = ExAllocatePoolWithTag(PagedPool, rgnSrc->rdh.nCount * sizeof(RECT), TAG_REGION);
if (rgnDst->Buffer && rgnDst->Buffer != &rgnDst->rdh.rcBound)
- ExFreePool(rgnDst->Buffer); //free the old buffer. will be assigned to xrect below.
+ ExFreePoolWithTag(rgnDst->Buffer, TAG_REGION); //free the old buffer. will be assigned to xrect below.
}
if (xrect)
@@ -676,7 +676,7 @@ REGION_CropAndOffsetRegion(
return FALSE;
if (rgnDst->Buffer && rgnDst->Buffer != &rgnDst->rdh.rcBound)
- ExFreePool(rgnDst->Buffer); //free the old buffer
+ ExFreePoolWithTag(rgnDst->Buffer, TAG_REGION); //free the old buffer
rgnDst->Buffer = temp;
rgnDst->rdh.nCount = i;
rgnDst->rdh.nRgnSize = i * sizeof(RECT);
@@ -1169,7 +1169,7 @@ REGION_RegionOp(
newReg->rdh.nRgnSize = newReg->rdh.nCount*sizeof(RECT);
COPY_RECTS(newReg->Buffer, prev_rects, newReg->rdh.nCount);
if (prev_rects != &newReg->rdh.rcBound)
- ExFreePool(prev_rects);
+ ExFreePoolWithTag(prev_rects, TAG_REGION);
}
}
else
@@ -1180,7 +1180,7 @@ REGION_RegionOp(
*/
newReg->rdh.nRgnSize = sizeof(RECT);
if (newReg->Buffer != &newReg->rdh.rcBound)
- ExFreePool(newReg->Buffer);
+ ExFreePoolWithTag(newReg->Buffer, TAG_REGION);
newReg->Buffer = ExAllocatePoolWithTag(PagedPool, sizeof(RECT), TAG_REGION);
ASSERT(newReg->Buffer);
}
@@ -1188,7 +1188,7 @@ REGION_RegionOp(
newReg->rdh.iType = RDH_RECTANGLES;
if (oldRects != &newReg->rdh.rcBound)
- ExFreePool(oldRects);
+ ExFreePoolWithTag(oldRects, TAG_REGION);
return;
}
@@ -2092,7 +2092,7 @@ IntGdiReleaseRaoRgn(PDC pDC)
INT Index = GDI_HANDLE_GET_INDEX(pDC->BaseObject.hHmgr);
PGDI_TABLE_ENTRY Entry = &GdiHandleTable->Entries[Index];
pDC->DC_Flags |= DC_FLAG_DIRTY_RAO;
- Entry->Flags |= GDI_ENTRY_FLAG_NEED_UPDATE;
+ Entry->Flags |= GDI_ENTRY_VALIDATE_VIS;
IntGdiSetEmptyRect((PRECT)&pDC->erclClip);
}
@@ -2103,7 +2103,7 @@ IntGdiReleaseVisRgn(PDC pDC)
INT Index = GDI_HANDLE_GET_INDEX(pDC->BaseObject.hHmgr);
PGDI_TABLE_ENTRY Entry = &GdiHandleTable->Entries[Index];
pDC->DC_Flags |= DC_FLAG_DIRTY_RAO;
- Entry->Flags |= GDI_ENTRY_FLAG_NEED_UPDATE;
+ Entry->Flags |= GDI_ENTRY_VALIDATE_VIS;
IntGdiSetEmptyRect((PRECT)&pDC->erclClip);
REGION_Delete(pDC->prgnVis);
pDC->prgnVis = prgnDefault;
@@ -2117,7 +2117,7 @@ IntUpdateVisRectRgn(PDC pDC, PROSRGNDATA pRgn)
PDC_ATTR pDc_Attr;
RECTL rcl;
- if (Entry->Flags & GDI_ENTRY_FLAG_NEED_UPDATE)
+ if (Entry->Flags & GDI_ENTRY_VALIDATE_VIS)
{
pDc_Attr = pDC->pDc_Attr;
if ( !pDc_Attr ) pDc_Attr = &pDC->Dc_Attr;
@@ -2141,7 +2141,7 @@ IntUpdateVisRectRgn(PDC pDC, PROSRGNDATA pRgn)
pDc_Attr->VisRectRegion.Rect = rcl;
- Entry->Flags &= ~GDI_ENTRY_FLAG_NEED_UPDATE;
+ Entry->Flags &= ~GDI_ENTRY_VALIDATE_VIS;
}
}
@@ -2501,6 +2501,7 @@ NtGdiExtCreateRegion(
NTSTATUS Status = STATUS_SUCCESS;
MATRIX matrix;
+ DPRINT("NtGdiExtCreateRegion\n");
_SEH_TRY
{
ProbeForRead(RgnData, Count, 1);
@@ -3475,7 +3476,7 @@ REGION_PtsToRegion(
{
COPY_RECTS(temp, reg->Buffer, reg->rdh.nCount);
if (reg->Buffer != ®->rdh.rcBound)
- ExFreePool(reg->Buffer);
+ ExFreePoolWithTag(reg->Buffer, TAG_REGION);
}
reg->Buffer = temp;
@@ -3754,7 +3755,7 @@ IntCreatePolyPolygonRgn(
if (!tmpPtBlock)
{
DPRINT1("Can't alloc tPB\n");
- ExFreePool(pETEs);
+ ExFreePoolWithTag(pETEs, TAG_REGION);
return 0;
}
curPtBlock->next = tmpPtBlock;
@@ -3813,7 +3814,7 @@ IntCreatePolyPolygonRgn(
if (!tmpPtBlock)
{
DPRINT1("Can't alloc tPB\n");
- ExFreePool(pETEs);
+ ExFreePoolWithTag(pETEs, TAG_REGION);
NtGdiDeleteObject(hrgn);
return 0;
}
@@ -3845,10 +3846,10 @@ IntCreatePolyPolygonRgn(
for (curPtBlock = FirstPtBlock.next; --numFullPtBlocks >= 0;)
{
tmpPtBlock = curPtBlock->next;
- ExFreePool(curPtBlock);
+ ExFreePoolWithTag(curPtBlock, TAG_REGION);
curPtBlock = tmpPtBlock;
}
- ExFreePool(pETEs);
+ ExFreePoolWithTag(pETEs, TAG_REGION);
REGION_UnlockRgn(region);
return hrgn;
}
diff --git a/reactos/subsystems/win32/win32k/objects/text.c b/reactos/subsystems/win32/win32k/objects/text.c
index e1c729b1229..0e2f28e41dc 100644
--- a/reactos/subsystems/win32/win32k/objects/text.c
+++ b/reactos/subsystems/win32/win32k/objects/text.c
@@ -13,24 +13,31 @@
#define NDEBUG
#include
-BOOL
-FASTCALL
-ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS lprs);
-
-BOOL
-FASTCALL
-TextIntGetTextExtentPoint(PDC dc,
- PTEXTOBJ TextObj,
- LPCWSTR String,
- int Count,
- int MaxExtent,
- LPINT Fit,
- LPINT Dx,
- LPSIZE Size);
-
-
/** Functions ******************************************************************/
+DWORD
+APIENTRY
+NtGdiGetCharSet(HDC hDC)
+{
+ PDC Dc;
+ PDC_ATTR Dc_Attr;
+ DWORD cscp;
+ // If here, update everything!
+ Dc = DC_LockDc(hDC);
+ if (!Dc)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return 0;
+ }
+ cscp = ftGdiGetTextCharsetInfo(Dc,NULL,0);
+ Dc_Attr = Dc->pDc_Attr;
+ if (!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
+ Dc_Attr->iCS_CP = cscp;
+ Dc_Attr->ulDirty_ &= ~DIRTY_CHARSET;
+ DC_UnlockDc( Dc );
+ return cscp;
+}
+
BOOL
APIENTRY
NtGdiGetRasterizerCaps(
@@ -68,6 +75,58 @@ NtGdiGetRasterizerCaps(
return FALSE;
}
+INT
+APIENTRY
+NtGdiGetTextCharsetInfo(
+ IN HDC hdc,
+ OUT OPTIONAL LPFONTSIGNATURE lpSig,
+ IN DWORD dwFlags)
+{
+ PDC Dc;
+ INT Ret;
+ FONTSIGNATURE fsSafe;
+ PFONTSIGNATURE pfsSafe = &fsSafe;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ Dc = DC_LockDc(hdc);
+ if (!Dc)
+ {
+ SetLastWin32Error(ERROR_INVALID_HANDLE);
+ return DEFAULT_CHARSET;
+ }
+
+ if (!lpSig) pfsSafe = NULL;
+
+ Ret = HIWORD(ftGdiGetTextCharsetInfo( Dc, pfsSafe, dwFlags));
+
+ if (lpSig)
+ {
+ if (Ret == DEFAULT_CHARSET)
+ RtlZeroMemory(pfsSafe, sizeof(FONTSIGNATURE));
+
+ _SEH_TRY
+ {
+ ProbeForWrite( lpSig,
+ sizeof(FONTSIGNATURE),
+ 1);
+ RtlCopyMemory(lpSig, pfsSafe, sizeof(FONTSIGNATURE));
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END;
+
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ return DEFAULT_CHARSET;
+ }
+ }
+ DC_UnlockDc(Dc);
+ return Ret;
+}
+
W32KAPI
BOOL
APIENTRY
@@ -119,7 +178,7 @@ NtGdiGetTextExtentExW(
Dx = ExAllocatePoolWithTag(PagedPool, Count * sizeof(INT), TAG_GDITEXT);
if (NULL == Dx)
{
- ExFreePool(String);
+ ExFreePoolWithTag(String, TAG_GDITEXT);
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
@@ -134,9 +193,9 @@ NtGdiGetTextExtentExW(
{
if (NULL != Dx)
{
- ExFreePool(Dx);
+ ExFreePoolWithTag(Dx, TAG_GDITEXT);
}
- ExFreePool(String);
+ ExFreePoolWithTag(String, TAG_GDITEXT);
SetLastNtError(Status);
return FALSE;
}
@@ -146,15 +205,15 @@ NtGdiGetTextExtentExW(
{
if (NULL != Dx)
{
- ExFreePool(Dx);
+ ExFreePoolWithTag(Dx, TAG_GDITEXT);
}
- ExFreePool(String);
+ ExFreePoolWithTag(String, TAG_GDITEXT);
SetLastWin32Error(ERROR_INVALID_HANDLE);
return FALSE;
}
Dc_Attr = dc->pDc_Attr;
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
- TextObj = TEXTOBJ_LockText(Dc_Attr->hlfntNew);
+ TextObj = RealizeFontInit(Dc_Attr->hlfntNew);
if ( TextObj )
{
Result = TextIntGetTextExtentPoint(dc, TextObj, String, Count, MaxExtent,
@@ -165,12 +224,12 @@ NtGdiGetTextExtentExW(
Result = FALSE;
DC_UnlockDc(dc);
- ExFreePool(String);
+ ExFreePoolWithTag(String, TAG_GDITEXT);
if (! Result)
{
if (NULL != Dx)
{
- ExFreePool(Dx);
+ ExFreePoolWithTag(Dx, TAG_GDITEXT);
}
return FALSE;
}
@@ -182,7 +241,7 @@ NtGdiGetTextExtentExW(
{
if (NULL != Dx)
{
- ExFreePool(Dx);
+ ExFreePoolWithTag(Dx, TAG_GDITEXT);
}
SetLastNtError(Status);
return FALSE;
@@ -196,7 +255,7 @@ NtGdiGetTextExtentExW(
{
if (NULL != Dx)
{
- ExFreePool(Dx);
+ ExFreePoolWithTag(Dx, TAG_GDITEXT);
}
SetLastNtError(Status);
return FALSE;
@@ -204,7 +263,7 @@ NtGdiGetTextExtentExW(
}
if (NULL != Dx)
{
- ExFreePool(Dx);
+ ExFreePoolWithTag(Dx,TAG_GDITEXT);
}
Status = MmCopyToCaller(UnsafeSize, &Size, sizeof(SIZE));
@@ -284,7 +343,7 @@ NtGdiGetTextFaceW(
hFont = Dc_Attr->hlfntNew;
DC_UnlockDc(Dc);
- TextObj = TEXTOBJ_LockText(hFont);
+ TextObj = RealizeFontInit(hFont);
ASSERT(TextObj != NULL);
Count = min(Count, wcslen(TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName));
Status = MmCopyToCaller(FaceName, TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName, Count * sizeof(WCHAR));
@@ -298,4 +357,42 @@ NtGdiGetTextFaceW(
return Count;
}
+W32KAPI
+BOOL
+APIENTRY
+NtGdiGetTextMetricsW(
+ IN HDC hDC,
+ OUT TMW_INTERNAL * pUnsafeTmwi,
+ IN ULONG cj
+)
+{
+ TMW_INTERNAL Tmwi;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ if ( cj <= sizeof(TMW_INTERNAL) )
+ {
+ if (ftGdiGetTextMetricsW(hDC,&Tmwi))
+ {
+ _SEH_TRY
+ {
+ ProbeForWrite(pUnsafeTmwi, cj, 1);
+ RtlCopyMemory(pUnsafeTmwi,&Tmwi,cj);
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END
+
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ return FALSE;
+ }
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
/* EOF */
diff --git a/reactos/subsystems/win32/win32k/stubs/stubs.c b/reactos/subsystems/win32/win32k/stubs/stubs.c
index 439b4765e53..eac95d7563e 100644
--- a/reactos/subsystems/win32/win32k/stubs/stubs.c
+++ b/reactos/subsystems/win32/win32k/stubs/stubs.c
@@ -750,21 +750,34 @@ EngDitherColor(
}
/*
- * @unimplemented
+ * @implemented
*/
BOOL APIENTRY
EngQuerySystemAttribute(
IN ENG_SYSTEM_ATTRIBUTE CapNum,
OUT PDWORD pCapability)
{
+ SYSTEM_BASIC_INFORMATION sbi;
+ SYSTEM_PROCESSOR_INFORMATION spi;
+
switch (CapNum)
{
case EngNumberOfProcessors:
- *pCapability = 1;
+ NtQuerySystemInformation(
+ SystemBasicInformation,
+ &sbi,
+ sizeof(SYSTEM_BASIC_INFORMATION),
+ NULL);
+ *pCapability = sbi.NumberOfProcessors;
return TRUE;
case EngProcessorFeature:
- *pCapability = 0;
+ NtQuerySystemInformation(
+ SystemProcessorInformation,
+ &spi,
+ sizeof(SYSTEM_PROCESSOR_INFORMATION),
+ NULL);
+ *pCapability = spi.ProcessorFeatureBits;
return TRUE;
default:
@@ -2112,20 +2125,6 @@ NtGdiGetMonitorID(
*/
BOOL
APIENTRY
-NtGdiGetRealizationInfo(
- IN HDC hdc,
- OUT PREALIZATION_INFO pri,
- IN HFONT hf)
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
- /*
- * @unimplemented
- */
-BOOL
-APIENTRY
NtGdiDrawStream(
IN HDC hdcDst,
IN ULONG cjIn,
@@ -2227,19 +2226,6 @@ NtGdiQueryFontAssocInfo(
return 0;
}
- /*
- * @unimplemented
- */
-DWORD
-APIENTRY
-NtGdiGetFontUnicodeRanges(
- IN HDC hdc,
- OUT OPTIONAL LPGLYPHSET pgs)
-{
- UNIMPLEMENTED;
- return 0;
-}
-
/*
* @unimplemented
*/
diff --git a/reactos/subsystems/win32/win32k/win32k.rbuild b/reactos/subsystems/win32/win32k/win32k.rbuild
index 5dd14c6504e..0173e4701fa 100644
--- a/reactos/subsystems/win32/win32k/win32k.rbuild
+++ b/reactos/subsystems/win32/win32k/win32k.rbuild
@@ -184,12 +184,11 @@
stubs.c
-
+
win32k_base
pseh
ntoskrnl
- libcntpr
hal
freetype
dxguid
diff --git a/reactos/tools/gendib/gendib.c b/reactos/tools/gendib/gendib.c
index 488b634385d..5fd50ec77d6 100644
--- a/reactos/tools/gendib/gendib.c
+++ b/reactos/tools/gendib/gendib.c
@@ -147,7 +147,7 @@ FindRopInfo(unsigned RopCode)
{ ROPCODE_SRCINVERT, "SRCINVERT", "D ^ S", 1, 1, 0 },
{ ROPCODE_SRCAND, "SRCAND", "D & S", 1, 1, 0 },
{ ROPCODE_NOOP, "NOOP", "D", 1, 0, 0 },
- { ROPCODE_MERGEPAINT, "MERGEPAINT", "D & (~S)", 1, 1, 0 },
+ { ROPCODE_MERGEPAINT, "MERGEPAINT", "D | (~S)", 1, 1, 0 },
{ ROPCODE_MERGECOPY, "MERGECOPY", "S & P", 0, 1, 1 },
{ ROPCODE_SRCCOPY, "SRCCOPY", "S", 0, 1, 0 },
{ ROPCODE_SRCPAINT, "SRCPAINT", "D | S", 1, 1, 0 },
@@ -542,7 +542,7 @@ CreateBitCase(FILE *Out, unsigned Bpp, PROPINFO RopInfo, int Flags,
if (ROPCODE_SRCCOPY == RopInfo->RopCode &&
0 != (Flags & FLAG_TRIVIALXLATE) && Bpp == SourceBpp)
{
- Output(Out, "CenterCount = 2 * (BltInfo->DestRect.right -\n");
+ Output(Out, "CenterCount = %u * (BltInfo->DestRect.right -\n", Bpp >> 3);
Output(Out, " BltInfo->DestRect.left);\n");
}
if (RopInfo->UsesPattern && 0 != (Flags & FLAG_PATTERNSURFACE))
diff --git a/reactos/tools/nci/nci.mak b/reactos/tools/nci/nci.mak
index fb08ebe79d4..d2480c0409f 100644
--- a/reactos/tools/nci/nci.mak
+++ b/reactos/tools/nci/nci.mak
@@ -56,13 +56,15 @@ KERNEL_SVC_DB = ntoskrnl$(SEP)sysfuncs.lst
KERNEL_SERVICE_TABLE = $(INTERMEDIATE_)ntoskrnl$(SEP)include$(SEP)internal$(SEP)napi.h
NTDLL_STUBS = $(INTERMEDIATE_)lib$(SEP)ntdllsys$(SEP)ntdll.S
KERNEL_STUBS = $(INTERMEDIATE_)ntoskrnl$(SEP)ex$(SEP)zw.S
+NT_SPEC = $(INTERMEDIATE_)dll$(SEP)ntdll$(SEP)def$(SEP)ntsys.pspec
NCI_SERVICE_FILES = \
$(KERNEL_SERVICE_TABLE) \
$(WIN32K_SERVICE_TABLE) \
$(NTDLL_STUBS) \
$(KERNEL_STUBS) \
- $(WIN32K_STUBS)
+ $(WIN32K_STUBS) \
+ $(NT_SPEC)
$(NCI_SERVICE_FILES): $(NCI_TARGET) $(KERNEL_SVC_DB) $(WIN32K_SVC_DB)
$(ECHO_NCI)
@@ -71,6 +73,7 @@ $(NCI_SERVICE_FILES): $(NCI_TARGET) $(KERNEL_SVC_DB) $(WIN32K_SVC_DB)
${mkdir} $(INTERMEDIATE_)ntoskrnl$(SEP)ex$(SEP) 2>$(NUL)
${mkdir} $(INTERMEDIATE_)subsystems$(SEP)win32$(SEP)win32k$(SEP)include 2>$(NUL)
${mkdir} $(INTERMEDIATE_)lib$(SEP)win32ksys 2>$(NUL)
+ ${mkdir} $(INTERMEDIATE_)dll$(SEP)ntdll$(SEP)def 2>$(NUL)
$(Q)$(NCI_TARGET) -arch $(ARCH) \
$(KERNEL_SVC_DB) \
@@ -79,7 +82,8 @@ $(NCI_SERVICE_FILES): $(NCI_TARGET) $(KERNEL_SVC_DB) $(WIN32K_SVC_DB)
$(WIN32K_SERVICE_TABLE) \
$(NTDLL_STUBS) \
$(KERNEL_STUBS) \
- $(WIN32K_STUBS)
+ $(WIN32K_STUBS) \
+ $(NT_SPEC)
.PHONY: nci_service_files_clean
nci_service_files_clean:
diff --git a/reactos/tools/nci/ncitool.c b/reactos/tools/nci/ncitool.c
index 4490e7f4b44..d002a18c157 100644
--- a/reactos/tools/nci/ncitool.c
+++ b/reactos/tools/nci/ncitool.c
@@ -21,26 +21,29 @@
/* DEFINES ****************************************************************/
#define INPUT_BUFFER_SIZE 255
-#define Arguments 7
+#define Arguments 8
/******* Table Indexes ************/
#define MAIN_INDEX 0x0
#define WIN32K_INDEX 0x1000
/******* Argument List ************/
-/* First, define the Databases */
+/* Databases */
#define NativeSystemDb 0
#define NativeGuiDb 1
-/* Now the Service Tables */
+/* Service Tables */
#define NtosServiceTable 2
#define Win32kServiceTable 3
-/* And finally, the stub files. */
+/* Stub Files */
#define NtosUserStubs 4
#define NtosKernelStubs 5
#define Win32kStubs 6
+/* Spec Files */
+#define NtSpec 7
+
/********** Stub Code ************/
/*
@@ -128,26 +131,26 @@
/***** Arch Dependent Stuff ******/
struct ncitool_data_t {
- const char *arch;
- int args_to_bytes;
- const char *km_stub;
- const char *um_stub;
- const char *global_header;
- const char *declaration;
+ const char *arch;
+ int args_to_bytes;
+ const char *km_stub;
+ const char *um_stub;
+ const char *global_header;
+ const char *declaration;
};
struct ncitool_data_t ncitool_data[] = {
- { "i386", 4, KernelModeStub_x86, UserModeStub_x86,
- ".global _%s@%d\n", "_%s@%d:\n" },
- { "amd64", 4, KernelModeStub_amd64, UserModeStub_amd64,
- ".global _%s\n", "_%s:\n" },
- { "powerpc", 4, KernelModeStub_ppc, UserModeStub_ppc,
- "\t.globl %s\n", "%s:\n" },
- { "mips", 4, KernelModeStub_mips, UserModeStub_mips,
- "\t.globl %s\n", "%s:\n" },
- { "arm", 4, KernelModeStub_arm, UserModeStub_arm,
+ { "i386", 4, KernelModeStub_x86, UserModeStub_x86,
+ ".global _%s@%d\n", "_%s@%d:\n" },
+ { "amd64", 4, KernelModeStub_amd64, UserModeStub_amd64,
+ ".global _%s\n", "_%s:\n" },
+ { "powerpc", 4, KernelModeStub_ppc, UserModeStub_ppc,
+ "\t.globl %s\n", "%s:\n" },
+ { "mips", 4, KernelModeStub_mips, UserModeStub_mips,
+ "\t.globl %s\n", "%s:\n" },
+ { "arm", 4, KernelModeStub_arm, UserModeStub_arm,
"\t.globl %s\n", "%s:\n" },
- { 0, }
+ { 0, }
};
int arch_sel = 0;
#define ARGS_TO_BYTES(x) (x)*(ncitool_data[arch_sel].args_to_bytes)
@@ -545,6 +548,108 @@ CreateSystemServiceTable(FILE *SyscallDb,
fprintf(SyscallTable, "ULONG %sNumberOfSysCalls = %d;\n", Name, SyscallId);
}
+/*++
+ * WriteSpec
+ *
+ * Prints out the Spec Entry for a System Call.
+ *
+ * Params:
+ * SpecFile - Spec File to which to write the header.
+ *
+ * SyscallName - Name of System Call for which to add the stub.
+ *
+ * CountArguments - Number of arguments to the System Call.
+ *
+ * Returns:
+ * None.
+ *
+ * Remarks:
+ * None.
+ *
+ *--*/
+void
+WriteSpec(FILE* StubFile,
+ char* SyscallName,
+ unsigned CountArguments)
+{
+ unsigned i;
+
+ fprintf(StubFile, "@ stdcall %s", SyscallName);
+
+ fputc ('(', StubFile);
+
+ for (i = 0; i < CountArguments; ++ i)
+ fputs ("ptr ", StubFile);
+
+ fputc (')', StubFile);
+ fputc ('\n', StubFile);
+}
+
+/*++
+ * CreateSpec
+ *
+ * Parses a System Call Database and creates a spec file for all the entries.
+ *
+ * Params:
+ * SyscallDb - System Call Database to parse.
+ *
+ * Files - Array of Spec Files to which to write.
+ *
+ * CountFiles - Number of Spec Files to create
+ *
+ * UseZw - Use Zw prefix?
+ *
+ * Returns:
+ * None.
+ *
+ * Remarks:
+ * None.
+ *
+ *--*/
+void
+CreateSpec(FILE * SyscallDb,
+ FILE * Files[],
+ unsigned CountFiles,
+ unsigned UseZw)
+{
+ char Line[INPUT_BUFFER_SIZE];
+ char *NtSyscallName;
+ char *SyscallArguments;
+ unsigned CountArguments;
+
+ /* We loop until the end of the file */
+ while ((!feof(SyscallDb)) && (fgets(Line, sizeof(Line), SyscallDb) != NULL)) {
+
+ /* Extract the Name and Arguments */
+ GetNameAndArgumentsFromDb(Line, &NtSyscallName, &SyscallArguments);
+ CountArguments = strtoul(SyscallArguments, NULL, 0);
+
+ /* Make sure we really extracted something */
+ if (NtSyscallName) {
+
+ int i;
+ for (i= 0; i < CountFiles; i++) {
+
+ if (!UseZw) {
+ WriteSpec(Files[i],
+ NtSyscallName,
+ CountArguments);
+ }
+
+ if (UseZw && NtSyscallName[0] == 'N' && NtSyscallName[1] == 't') {
+
+ NtSyscallName[0] = 'Z';
+ NtSyscallName[1] = 'w';
+ WriteSpec(Files[i],
+ NtSyscallName,
+ CountArguments);
+ }
+
+ }
+ }
+ }
+}
+
void usage(char * argv0)
{
printf("Usage: %s [-arch ] sysfuncs.lst w32ksvc.db napi.h ssdt.h napi.S zw.S win32k.S win32k.S\n"
@@ -556,6 +661,7 @@ void usage(char * argv0)
" zw.S NTOSKRNL Zw stubs\n"
" win32k.S GDI32 stubs\n"
" win32k.S USER32 stubs\n"
+ " nt.pspec NTDLL exports\n"
" -arch is optional, default is %s\n",
argv0,
ncitool_data[0].arch
@@ -630,21 +736,32 @@ int main(int argc, char* argv[])
1,
0);
- /* Rewind the databases */
- rewind(Files[NativeSystemDb]);
- rewind(Files[NativeGuiDb]);
-
/* Create the Service Tables */
+ rewind(Files[NativeSystemDb]);
CreateSystemServiceTable(Files[NativeSystemDb],
Files[NtosServiceTable],
"Main",
argv[NtosServiceTable + ArgOffset]);
+ rewind(Files[NativeGuiDb]);
CreateSystemServiceTable(Files[NativeGuiDb],
Files[Win32kServiceTable],
"Win32k",
argv[Win32kServiceTable + ArgOffset]);
+ /* Create the Spec Files */
+ rewind(Files[NativeSystemDb]);
+ CreateSpec(Files[NativeSystemDb],
+ &Files[NtSpec],
+ 1,
+ 0);
+
+ rewind(Files[NativeSystemDb]);
+ CreateSpec(Files[NativeSystemDb],
+ &Files[NtSpec],
+ 1,
+ 1);
+
/* Close all files */
for (FileNumber = 0; FileNumber < Arguments-ArgOffset; FileNumber++) {
diff --git a/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp b/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp
index 73502e8fdb5..9648bc421e8 100644
--- a/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp
+++ b/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp
@@ -211,7 +211,7 @@ std::string
CBBackend::CbpFileName ( const Module& module ) const
{
return DosSeparator(
- ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_auto.cbp" )
+ ReplaceExtension ( module.output->relative_path + sSep + module.output->name, "_auto.cbp" )
);
}
@@ -219,7 +219,7 @@ std::string
CBBackend::LayoutFileName ( const Module& module ) const
{
return DosSeparator(
- ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_auto.layout" )
+ ReplaceExtension ( module.output->relative_path + sSep + module.output->name, "_auto.layout" )
);
}
@@ -227,7 +227,7 @@ std::string
CBBackend::DependFileName ( const Module& module ) const
{
return DosSeparator(
- ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_auto.depend" )
+ ReplaceExtension ( module.output->relative_path + sSep + module.output->name, "_auto.depend" )
);
}
@@ -236,8 +236,8 @@ CBBackend::_get_object_files ( const Module& module, vector& out) const
{
string basepath = module.output->relative_path;
size_t i;
- string intenv = Environment::GetIntermediatePath () + "\\" + basepath + "\\";
- string outenv = Environment::GetOutputPath () + "\\" + basepath + "\\";
+ string intenv = Environment::GetIntermediatePath () + sSep + basepath + sSep;
+ string outenv = Environment::GetOutputPath () + sSep + basepath + sSep;
vector cfgs;
@@ -265,7 +265,7 @@ CBBackend::_get_object_files ( const Module& module, vector& out) const
for ( i = 0; i < files.size (); i++ )
{
string file = files[i]->file.relative_path + sSep + files[i]->file.name;
- string::size_type pos = file.find_last_of ("\\");
+ string::size_type pos = file.find_last_of (sSep);
if ( pos != string::npos )
file.erase ( 0, pos+1 );
if ( !stricmp ( Right(file,3).c_str(), ".rc" ) )
@@ -273,7 +273,7 @@ CBBackend::_get_object_files ( const Module& module, vector& out) const
else
file = ReplaceExtension ( file, ".obj" );
for ( size_t j = 0; j < cfgs.size () / 2; j++ )
- out.push_back ( cfgs[j] + "\\" + file );
+ out.push_back ( cfgs[j] + sSep + file );
}
}
@@ -334,7 +334,7 @@ CBBackend::_generate_workspace ( FILE* OUT )
ifs_list.pop_back();
const vector& libs = data.libraries;
for ( size_t j = 0; j < libs.size(); j++ )
- fprintf ( OUT, "\t\t\t\r\n", libs[j]->importedModule->output->relative_path.c_str(), libs[j]->name.c_str() );
+ fprintf ( OUT, "\t\t\t\r\n", libs[j]->importedModule->output->relative_path.c_str(), sSep.c_str(), libs[j]->name.c_str() );
}
fprintf ( OUT, "\t\t\r\n" );
}
@@ -447,7 +447,7 @@ CBBackend::_generate_cbproj ( const Module& module )
const vector& libs = data.libraries;
for ( i = 0; i < libs.size(); i++ )
{
- string libpath = intdir + "\\" + libs[i]->importedModule->output->relative_path;
+ string libpath = intdir + sSep + libs[i]->importedModule->output->relative_path;
libraries.push_back ( libs[i]->name );
libpaths.push_back ( libpath );
}
@@ -516,18 +516,18 @@ CBBackend::_generate_cbproj ( const Module& module )
if ( configuration.UseConfigurationInPath )
{
if ( IsStaticLibrary ( module ) ||module.type == ObjectLibrary )
- fprintf ( OUT, "\t\t\t\t\r\n", intdir.c_str (), module.output->relative_path.c_str (), cfg.name.c_str(), module.name.c_str(), module_type.c_str());
+ fprintf ( OUT, "\t\t\t\t\r\n", intdir.c_str (), sSep.c_str(), module.output->relative_path.c_str (), cfg.name.c_str(), sSep.c_str(), module.name.c_str(), module_type.c_str());
else
- fprintf ( OUT, "\t\t\t\t\r\n", outdir.c_str (), module.output->relative_path.c_str (), cfg.name.c_str(), module.name.c_str(), module_type.c_str());
- fprintf ( OUT, "\t\t\t\t\r\n", intdir.c_str(), module.output->relative_path.c_str (), cfg.name.c_str() );
+ fprintf ( OUT, "\t\t\t\t\r\n", outdir.c_str (), sSep.c_str(), module.output->relative_path.c_str (), cfg.name.c_str(), sSep.c_str(), module.name.c_str(), module_type.c_str());
+ fprintf ( OUT, "\t\t\t\t\r\n", intdir.c_str(), sSep.c_str(), module.output->relative_path.c_str (), cfg.name.c_str() );
}
else
{
if ( IsStaticLibrary ( module ) || module.type == ObjectLibrary )
- fprintf ( OUT, "\t\t\t\t\r\n", intdir.c_str (), module.output->relative_path.c_str (), module.name.c_str(), module_type.c_str() );
+ fprintf ( OUT, "\t\t\t\t\r\n", intdir.c_str (), sSep.c_str(), module.output->relative_path.c_str (), sSep.c_str(), module.name.c_str(), module_type.c_str() );
else
- fprintf ( OUT, "\t\t\t\t\r\n", outdir.c_str (), module.output->relative_path.c_str (), module.name.c_str(), module_type.c_str() );
- fprintf ( OUT, "\t\t\t\t\r\n", intdir.c_str(), module.output->relative_path.c_str () );
+ fprintf ( OUT, "\t\t\t\t\r\n", outdir.c_str (), sSep.c_str(), module.output->relative_path.c_str (), sSep.c_str(), module.name.c_str(), module_type.c_str() );
+ fprintf ( OUT, "\t\t\t\t\r\n", intdir.c_str(), sSep.c_str(), module.output->relative_path.c_str () );
}
if ( lib )
@@ -674,8 +674,8 @@ CBBackend::_generate_cbproj ( const Module& module )
{
const string& resource_file = resource_files[i];
#ifdef WIN32
- fprintf ( OUT, "\t\t\t\t\t\r\n", resource_file.c_str() );
- fprintf ( OUT, "\t\t\t\t\t\r\n", resource_file.c_str() );
+ fprintf ( OUT, "\t\t\t\t\t\r\n", sSep.c_str(), resource_file.c_str() );
+ fprintf ( OUT, "\t\t\t\t\t\r\n", sSep.c_str(), resource_file.c_str() );
#else
fprintf ( OUT, "\t\t\t\t\t\r\n", resource_file.c_str() );
fprintf ( OUT, "\t\t\t\t\t\r\n", resource_file.c_str() );
@@ -686,9 +686,9 @@ CBBackend::_generate_cbproj ( const Module& module )
if ( dll )
{
if (IsSpecDefinitionFile( module ))
- fprintf ( OUT, "\t\t\t\t\t\r\n", outdir.c_str(), module.importLibrary->definition.c_str(), module.name.c_str());
+ fprintf ( OUT, "\t\t\t\t\t\r\n", outdir.c_str(), sSep, sSep, sSep, module.importLibrary->definition.c_str(), module.name.c_str());
fprintf ( OUT, "\t\t\t\t\t\r\n", module.GetTargetName ().c_str(), module.importLibrary->definition.c_str(), module.name.c_str(), module.mangledSymbols ? "" : "--kill-at" );
- fprintf ( OUT, "\t\t\t\t\t\r\n", outdir.c_str() );
+ fprintf ( OUT, "\t\t\t\t\t\r\n", outdir.c_str(), sSep, sSep );
#ifdef WIN32
fprintf ( OUT, "\t\t\t\t\t\r\n", module.name.c_str() );
#else
@@ -764,13 +764,13 @@ CBBackend::_generate_cbproj ( const Module& module )
else if ( extension == ".idl" || extension == ".IDL" )
{
fprintf ( OUT, "\t\t\t\r\n" );
- fprintf ( OUT, "\t\t\t\r\n", outdir.c_str(), widl_options.c_str(), windres_defines.c_str(), widl_options.c_str() );
+ fprintf ( OUT, "\t\t\t\r\n", outdir.c_str(), sSep.c_str(), sSep.c_str(), sSep.c_str(), widl_options.c_str(), windres_defines.c_str(), sSep.c_str(), widl_options.c_str() );
}
else if ( extension == ".spec" || extension == ".SPEC" )
{
fprintf ( OUT, "\t\t\t\r\n" );
fprintf ( OUT, "\t\t\t\r\n" );
- fprintf ( OUT, "\t\t\t\r\n", outdir.c_str() );
+ fprintf ( OUT, "\t\t\t\r\n", outdir.c_str(), sSep.c_str(), sSep.c_str(), sSep.c_str(), sSep.c_str() );
}
for ( size_t icfg = 0; icfg < m_configurations.size(); icfg++ )
@@ -788,7 +788,7 @@ CBBackend::_generate_cbproj ( const Module& module )
fprintf ( OUT, "\t\t\r\n", resource_file.c_str() );
fprintf ( OUT, "\t\t\t\r\n" );
string extension = GetExtension ( resource_file );
- fprintf ( OUT, "\t\t\t\r\n" , windres_defines.c_str(), outdir.c_str(), windres_defines.c_str() );
+ fprintf ( OUT, "\t\t\t\r\n" , windres_defines.c_str(), sSep.c_str(), outdir.c_str(), sSep.c_str(), sSep.c_str(), sSep.c_str(), windres_defines.c_str(), sSep.c_str(), sSep.c_str(), sSep.c_str() );
for ( size_t icfg = 0; icfg < m_configurations.size(); icfg++ )
{
const CBConfiguration& cfg = *m_configurations[icfg];
diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp
index 2d57389d04e..7c160aa0e19 100644
--- a/reactos/tools/rbuild/backend/mingw/mingw.cpp
+++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp
@@ -450,7 +450,44 @@ MingwBackend::GenerateProjectGccOptionsMacro ( const char* assignmentOperation,
}
}
- fprintf ( fMakefile, "\n" );
+ fputs ( "\n", fMakefile );
+
+ // TODO: reference these from somewhere
+ fprintf (
+ fMakefile,
+ "PROJECT_GCC_CFLAGS %s",
+ assignmentOperation );
+
+ for ( i = 0; i < data.compilerFlags.size(); i++ )
+ {
+ if ( data.compilerFlags[i]->compiler == CompilerTypeCC )
+ {
+ fprintf (
+ fMakefile,
+ " %s",
+ data.compilerFlags[i]->flag.c_str() );
+ }
+ }
+
+ fputs ( "\n", fMakefile );
+
+ fprintf (
+ fMakefile,
+ "PROJECT_GCC_CXXFLAGS %s",
+ assignmentOperation );
+
+ for ( i = 0; i < data.compilerFlags.size(); i++ )
+ {
+ if ( data.compilerFlags[i]->compiler == CompilerTypeCPP )
+ {
+ fprintf (
+ fMakefile,
+ " %s",
+ data.compilerFlags[i]->flag.c_str() );
+ }
+ }
+
+ fputs ( "\n", fMakefile );
}
void
@@ -495,7 +532,7 @@ MingwBackend::GenerateGlobalVariables () const
fprintf ( fMakefile, "PROJECT_RCFLAGS := $(PROJECT_CFLAGS) $(PROJECT_CDEFINES)\n" );
fprintf ( fMakefile, "PROJECT_WIDLFLAGS := $(PROJECT_CFLAGS) $(PROJECT_CDEFINES)\n" );
fprintf ( fMakefile, "PROJECT_LFLAGS := '$(shell ${TARGET_CC} -print-libgcc-file-name)' %s\n", GenerateProjectLFLAGS ().c_str () );
- fprintf ( fMakefile, "PROJECT_LPPFLAGS := '$(shell ${TARGET_CPP} -print-file-name=libstdc++.a)' '$(shell ${TARGET_CPP} -print-file-name=libgcc.a)' '$(shell ${TARGET_CPP} -print-file-name=libmingw32.a)' '$(shell ${TARGET_CPP} -print-file-name=libmingwex.a)'\n" );
+ fprintf ( fMakefile, "PROJECT_LPPFLAGS := '$(shell ${TARGET_CPP} -print-file-name=libstdc++.a)' '$(shell ${TARGET_CPP} -print-file-name=libgcc.a)' '$(shell ${TARGET_CPP} -print-file-name=libmingw32.a)' '$(shell ${TARGET_CPP} -print-file-name=libmingwex.a)' '$(shell ${TARGET_CPP} -print-file-name=libcoldname.a)'\n" );
fprintf ( fMakefile, "PROJECT_CFLAGS += -Wall\n" );
fprintf ( fMakefile, "ifneq ($(OARCH),)\n" );
fprintf ( fMakefile, "PROJECT_CFLAGS += -march=$(OARCH)\n" );
diff --git a/reactos/tools/rbuild/backend/mingw/mingw.h b/reactos/tools/rbuild/backend/mingw/mingw.h
index 2c7e23b2961..aeb7bb6ff4d 100644
--- a/reactos/tools/rbuild/backend/mingw/mingw.h
+++ b/reactos/tools/rbuild/backend/mingw/mingw.h
@@ -142,7 +142,7 @@ private:
const Project& project;
};
-typedef struct ModuleHandlerInformations
+struct ModuleHandlerInformations
{
HostType DefaultHost;
const char* cflags;
diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
index dce48779b8d..77b3f4ee3b2 100644
--- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
+++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
@@ -420,8 +420,6 @@ MingwModuleHandler::GetObjectFilename (
newExtension = "_" + module.name + ".coff";
else if (extension == ".mc")
newExtension = ".rc";
- else if (extension == ".spec" || extension == ".pspec")
- newExtension = "_" + module.name + ".stubs.o";
else if (extension == ".idl")
{
if ( module.type == RpcServer )
@@ -540,26 +538,6 @@ MingwModuleHandler::GenerateDependsTarget () const
module.name.c_str () );
}
-string
-MingwModuleHandler::GetObjectFilenames ()
-{
- const vector& compilationUnits = module.non_if_data.compilationUnits;
- if ( compilationUnits.size () == 0 )
- return "";
-
- string objectFilenames ( "" );
- for ( size_t i = 0; i < compilationUnits.size (); i++ )
- {
- if ( objectFilenames.size () > 0 )
- objectFilenames += " ";
- const FileLocation& compilationName = compilationUnits[i]->GetFilename ();
- const FileLocation *object_file = GetObjectFilename ( &compilationName, module );
- objectFilenames += backend->GetFullName ( *object_file );
- delete object_file;
- }
- return objectFilenames;
-}
-
/* static */ string
MingwModuleHandler::GenerateGccDefineParametersFromVector (
const vector& defines,
@@ -1001,6 +979,22 @@ MingwModuleHandler::GenerateObjectMacros (
delete object_file;
}
CleanupCompilationUnitVector ( sourceCompilationUnits );
+
+ if ( IsSpecDefinitionFile() )
+ {
+ const FileLocation *stubs_file = new FileLocation(
+ IntermediateDirectory,
+ module.importLibrary->source->relative_path,
+ ReplaceExtension ( module.importLibrary->source->name, "_" + module.name + ".stubs.o" ) );
+
+ fprintf (
+ fMakefile,
+ "%s += %s\n",
+ objectsMacro.c_str(),
+ backend->GetFullName ( *stubs_file ).c_str () );
+
+ delete stubs_file;
+ }
}
/* caller needs to delete the returned object */
@@ -1056,31 +1050,34 @@ Rule wmcRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc",
"$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
-Rule winebuildPDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+Rule winebuildPDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec: $(source)$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_CPP)\n"
+ "\t${gcc} -xc -E ${$(module_name)_RCFLAGS} $(source) > $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec\n\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WINEBLD)\n"
- "\t${gcc} -xc -E $(source) -I. > $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec\n"
- "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).auto.def --def -E $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec\n\n",
- "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec",
+ "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def --def -E $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec --filename $(module_dllname)\n\n",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
-Rule winebuildPRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c:\n"
- "\t${cp} $(NUL) $@ 1>$(NUL)\n"
- "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+Rule winebuildPRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_WINEBLD)\n"
+ "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $@ --pedll $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec --filename $(module_dllname)\n\n"
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
- "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WINEBLD)\n"
- "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).auto.def --def -E $(source)\n\n",
+ "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).auto.def --def -E $(source) --filename $(module_dllname)\n\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
-Rule winebuildRule ( "$(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).stubs.c: $(source_path)$(SEP)$(source_name_noext).spec $(WINEBUILD_TARGET)\n"
+Rule winebuildRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c: $(source_path)$(SEP)$(source_name_noext).spec $(WINEBUILD_TARGET)\n"
"\t$(ECHO_WINEBLD)\n"
- "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).stubs.c --pedll $(source_path)$(SEP)$(source_name_noext).spec\n"
+ "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $@ --pedll $(source_path)$(SEP)$(source_name_noext).spec --filename $(module_dllname)\n"
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
@@ -1256,8 +1253,6 @@ MingwModuleHandler::GenerateCommands (
{ HostDontCare, TypeDontCare, ".asm", &nasmRule },
{ HostDontCare, TypeDontCare, ".rc", &windresRule },
{ HostDontCare, TypeDontCare, ".mc", &wmcRule },
- { HostDontCare, TypeDontCare, ".pspec", &winebuildPRule },
- { HostDontCare, TypeDontCare, ".spec", &winebuildRule },
{ HostDontCare, RpcServer, ".idl", &widlServerRule },
{ HostDontCare, RpcClient, ".idl", &widlClientRule },
{ HostDontCare, RpcProxy, ".idl", &widlProxyRule },
@@ -1476,15 +1471,6 @@ MingwModuleHandler::GenerateLinkerCommand (
else
linkerScriptArgument = "";
- fprintf ( fMakefile,
- "%s: %s %s $(RSYM_TARGET) $(PEFIXUP_TARGET) | %s\n",
- target_macro.c_str (),
- definitionFilename ? backend->GetFullName ( *definitionFilename ).c_str () : "",
- dependencies.c_str (),
- target_folder.c_str () );
- fprintf ( fMakefile, "\t$(ECHO_LD)\n" );
- string targetName ( module.output->name );
-
/* check if we need to add default C++ libraries, ie if we have
* a C++ user-mode module without the -nostdlib linker flag
*/
@@ -1494,6 +1480,14 @@ MingwModuleHandler::GenerateLinkerCommand (
if ( !module.HasImportLibrary() )
{
+ fprintf ( fMakefile,
+ "%s: %s %s $(RSYM_TARGET) $(PEFIXUP_TARGET) | %s\n",
+ target_macro.c_str (),
+ definitionFilename ? backend->GetFullName ( *definitionFilename ).c_str () : "",
+ dependencies.c_str (),
+ target_folder.c_str () );
+ fprintf ( fMakefile, "\t$(ECHO_LD)\n" );
+
fprintf ( fMakefile,
"\t%s %s%s %s %s %s %s -o %s\n",
linker.c_str (),
@@ -1507,19 +1501,33 @@ MingwModuleHandler::GenerateLinkerCommand (
}
else
{
- FileLocation temp_exp ( TemporaryDirectory,
- "",
- module.name + ".temp.exp" );
+ FileLocation temp_exp ( IntermediateDirectory,
+ module.output->relative_path,
+ module.name + ".exp" );
CLEAN_FILE ( temp_exp );
fprintf ( fMakefile,
- "\t${dlltool} --dllname %s --def %s --output-exp %s%s%s\n",
- targetName.c_str (),
+ "%s: %s | %s\n",
+ backend->GetFullName ( temp_exp ).c_str (),
+ definitionFilename ? backend->GetFullName ( *definitionFilename ).c_str () : "",
+ backend->GetFullPath ( temp_exp ).c_str () );
+ fprintf ( fMakefile, "\t$(ECHO_DLLTOOL)\n" );
+
+ fprintf ( fMakefile,
+ "\t${dlltool} --dllname %s --def %s --output-exp $@%s%s\n",
+ module.GetDllName ().c_str (),
definitionFilename ? backend->GetFullName ( *definitionFilename ).c_str () : "",
- backend->GetFullName ( temp_exp ).c_str (),
module.mangledSymbols ? "" : " --kill-at",
module.underscoreSymbols ? " --add-underscore" : "" );
+ fprintf ( fMakefile,
+ "%s: %s %s $(RSYM_TARGET) $(PEFIXUP_TARGET) | %s\n",
+ target_macro.c_str (),
+ backend->GetFullName ( temp_exp ).c_str (),
+ dependencies.c_str (),
+ target_folder.c_str () );
+ fprintf ( fMakefile, "\t$(ECHO_LD)\n" );
+
fprintf ( fMakefile,
"\t%s %s%s %s %s %s %s %s -o %s\n",
@@ -1537,10 +1545,6 @@ MingwModuleHandler::GenerateLinkerCommand (
"\t$(Q)$(PEFIXUP_TARGET) %s -exports%s\n",
target_macro.c_str (),
pefixupParameters.c_str() );
-
- fprintf ( fMakefile,
- "\t-@${rm} %s 2>$(NUL)\n",
- backend->GetFullName ( temp_exp ).c_str () );
}
GenerateBuildMapCode ();
@@ -1608,6 +1612,20 @@ MingwModuleHandler::GenerateObjectFileTargets ( const IfableData& data )
moduleDependencies );
}
CleanupCompilationUnitVector ( sourceCompilationUnits );
+
+ SpecFileType spec = IsSpecDefinitionFile ();
+
+ if ( spec )
+ {
+ Rule * defRule;
+
+ if (spec == PSpec)
+ defRule = &winebuildPRule;
+ else
+ defRule = &winebuildRule;
+
+ defRule->Execute ( fMakefile, backend, module, module.importLibrary->source, clean_files );
+ }
}
void
@@ -1637,10 +1655,11 @@ MingwModuleHandler::GenerateObjectFileTargets ()
backend->GetFullPath ( *pchFilename ).c_str() );
fprintf ( fMakefile, "\t$(ECHO_PCH)\n" );
fprintf ( fMakefile,
- "\t%s -o %s %s -g %s\n\n",
+ "\t%s -o %s %s %s -g %s\n\n",
module.cplusplus ? cppc.c_str() : cc.c_str(),
backend->GetFullName ( *pchFilename ).c_str(),
cflagsMacro.c_str(),
+ GenerateCompilerParametersFromVector ( module.non_if_data.compilerFlags, module.cplusplus ? CompilerTypeCPP : CompilerTypeCC ).c_str(),
backend->GetFullName ( baseHeaderFile ).c_str() );
delete pchFilename;
}
@@ -1669,7 +1688,7 @@ MingwModuleHandler::GenerateArchiveTarget ()
fprintf ( fMakefile,
"\t${dlltool} --dllname %s --def %s --output-lib $@%s%s\n",
- module.importLibrary->dllname.c_str (),
+ module.GetDllName ().c_str (),
backend->GetFullName ( *definitionFilename ).c_str (),
module.mangledSymbols ? "" : " --kill-at",
module.underscoreSymbols ? " --add-underscore" : "" );
@@ -1873,7 +1892,11 @@ MingwModuleHandler::GenerateOtherMacros ()
string globalCflags = "";
if ( ModuleHandlerInformations[module.type].DefaultHost == HostFalse )
+ {
globalCflags += " $(PROJECT_CFLAGS)";
+ if ( module.dynamicCRT )
+ globalCflags += " -D_DLL -D__USE_CRTIMP";
+ }
else
globalCflags += " -Wall -Wpointer-arith";
globalCflags += " -g";
@@ -2182,10 +2205,12 @@ MingwModuleHandler::IsSpecDefinitionFile () const
if(!module.importLibrary)
return None;
- if(module.importLibrary->source->name.rfind(".spec") != string::npos)
+ std::string ext = GetExtension ( *module.importLibrary->source );
+
+ if ( ext == ".spec" )
return Spec;
- if(module.importLibrary->source->name.rfind(".pspec") != string::npos)
+ if ( ext == ".pspec" )
return PSpec;
return None;
@@ -2221,9 +2246,6 @@ MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ()
const FileLocation *defFilename = GetDefinitionFilename ();
string empty = "tools" + sSep + "rbuild" + sSep + "empty.def";
- vector deps;
- GetDefinitionDependencies ( deps );
-
fprintf ( fMakefile, "# IMPORT LIBRARY RULE\n" );
fprintf ( fMakefile, "%s:",
@@ -2235,11 +2257,6 @@ MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ()
backend->GetFullName ( *defFilename ).c_str () );
}
- size_t i, iend = deps.size();
- for ( i = 0; i < iend; i++ )
- fprintf ( fMakefile, " %s",
- backend->GetFullName ( deps[i] ).c_str () );
-
fprintf ( fMakefile, " | %s\n",
backend->GetFullPath ( *library_target ).c_str () );
@@ -2247,7 +2264,7 @@ MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ()
fprintf ( fMakefile,
"\t${dlltool} --dllname %s --def %s --output-lib %s%s%s\n\n",
- module.output->name.c_str (),
+ module.GetDllName ().c_str (),
defFilename ? backend->GetFullName ( *defFilename ).c_str ()
: empty.c_str (),
backend->GetFullName ( *library_target ).c_str (),
@@ -2365,6 +2382,38 @@ MingwAddDebugSupportLibraries ( Module& module, DebugSupportType type )
module.non_if_data.libraries.push_back(pLibrary);
}
+static void
+MingwAddCRTLibrary( Module &module )
+{
+ const char * crtAttr = module.CRT.c_str ();
+ const char * crtLib = NULL;
+
+ if ( stricmp ( crtAttr, "libc" ) == 0 )
+ crtLib = "crt";
+ else if ( stricmp ( crtAttr, "msvcrt" ) == 0 )
+ crtLib = "msvcrt";
+ else if ( stricmp ( crtAttr, "libcntpr" ) == 0 )
+ crtLib = "libcntpr";
+ else if ( stricmp ( crtAttr, "ntdll" ) == 0 )
+ crtLib = "ntdll";
+
+ if ( crtLib )
+ {
+ Library* pLibrary = new Library ( module, std::string ( crtLib ) );
+
+ if ( pLibrary->importedModule == NULL)
+ {
+ throw XMLInvalidBuildFileException (
+ module.node.location,
+ "module '%s' trying to import non-existant C runtime module '%s'",
+ module.name.c_str(),
+ crtLib );
+ }
+
+ module.non_if_data.libraries.push_back ( pLibrary );
+ }
+}
+
MingwBuildToolModuleHandler::MingwBuildToolModuleHandler ( const Module& module_ )
: MingwModuleHandler ( module_ )
{
@@ -2466,6 +2515,7 @@ MingwKernelModeDLLModuleHandler::MingwKernelModeDLLModuleHandler (
void
MingwKernelModeDLLModuleHandler::AddImplicitLibraries ( Module& module )
{
+ MingwAddCRTLibrary ( module );
MingwAddDebugSupportLibraries ( module, DebugKernelMode );
}
@@ -2514,6 +2564,7 @@ MingwNativeDLLModuleHandler::MingwNativeDLLModuleHandler (
void
MingwNativeDLLModuleHandler::AddImplicitLibraries ( Module& module )
{
+ MingwAddCRTLibrary ( module );
MingwAddDebugSupportLibraries ( module, DebugUserMode );
}
@@ -2562,6 +2613,7 @@ MingwNativeCUIModuleHandler::MingwNativeCUIModuleHandler (
void
MingwNativeCUIModuleHandler::AddImplicitLibraries ( Module& module )
{
+ MingwAddCRTLibrary ( module );
MingwAddDebugSupportLibraries ( module, DebugUserMode );
}
@@ -2614,23 +2666,10 @@ MingwWin32OCXModuleHandler::MingwWin32OCXModuleHandler (
{
}
-static bool
-LinksToCrt( Module &module )
-{
- for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ )
- {
- Library& library = *module.non_if_data.libraries[i];
- if ( library.name == "libcntpr" || library.name == "crt" )
- return true;
- }
- return false;
-}
-
static void
MingwAddImplicitLibraries( Module &module )
{
Library* pLibrary;
- bool links_to_crt;
if ( module.type != Win32DLL
&& module.type != Win32OCX
@@ -2638,54 +2677,28 @@ MingwAddImplicitLibraries( Module &module )
&& module.type != Win32GUI
&& module.type != Win32SCR)
{
- // no implicit libraries
return;
}
- links_to_crt = LinksToCrt ( module );
-
- if ( !module.isDefaultEntryPoint )
+ if ( module.isDefaultEntryPoint )
{
- if ( module.GetEntryPoint(false) == "0" )
+ if ( module.IsDLL () )
{
- if ( !links_to_crt )
- {
- pLibrary = new Library ( module, "mingw_common" );
- module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin() , pLibrary );
-
- pLibrary = new Library ( module, "msvcrt" );
- module.non_if_data.libraries.push_back ( pLibrary );
- links_to_crt = true;
- }
+ //pLibrary = new Library ( module, "__mingw_dllmain" );
+ //module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin(), pLibrary );
+ }
+ else
+ {
+ pLibrary = new Library ( module, module.isUnicode ? "mingw_wmain" : "mingw_main" );
+ module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin(), pLibrary );
}
- pLibrary = new Library ( module, "debugsup_ntdll" );
- module.non_if_data.libraries.push_back(pLibrary);
- return;
- }
-
- if ( module.IsDLL () )
- {
- //pLibrary = new Library ( module, "__mingw_dllmain" );
- //module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin(), pLibrary );
- }
- else
- {
- pLibrary = new Library ( module, module.isUnicode ? "mingw_wmain" : "mingw_main" );
- module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin(), pLibrary );
}
pLibrary = new Library ( module, "mingw_common" );
- module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin() + 1, pLibrary );
+ module.non_if_data.libraries.push_back ( pLibrary );
- if ( !links_to_crt )
- {
- // always link in msvcrt to get the basic routines
- pLibrary = new Library ( module, "msvcrt" );
- module.non_if_data.libraries.push_back ( pLibrary );
- }
-
- pLibrary = new Library ( module, "debugsup_ntdll" );
- module.non_if_data.libraries.push_back(pLibrary);
+ MingwAddCRTLibrary ( module );
+ MingwAddDebugSupportLibraries ( module, DebugUserMode );
}
void
diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.h b/reactos/tools/rbuild/backend/mingw/modulehandler.h
index 331335f375b..9c8895ec598 100644
--- a/reactos/tools/rbuild/backend/mingw/modulehandler.h
+++ b/reactos/tools/rbuild/backend/mingw/modulehandler.h
@@ -97,8 +97,6 @@ protected:
const FileLocation* GetObjectFilename ( const FileLocation* sourceFile,
const Module& module ) const;
- std::string GetObjectFilenames ();
-
std::string GetPreconditionDependenciesName () const;
std::string GetCFlagsMacro () const;
static std::string GetObjectsMacro ( const Module& );
diff --git a/reactos/tools/rbuild/backend/mingw/rule.cpp b/reactos/tools/rbuild/backend/mingw/rule.cpp
index d246f3d12ad..e177ca84b58 100644
--- a/reactos/tools/rbuild/backend/mingw/rule.cpp
+++ b/reactos/tools/rbuild/backend/mingw/rule.cpp
@@ -55,6 +55,7 @@ FixString ( const string& str, Backend *backend, const Module& module, const Fil
}
ReplaceVariable ( ret, "$(dependencies)", dep );
ReplaceVariable ( ret, "$(module_name)", module.name );
+ ReplaceVariable ( ret, "$(module_dllname)", module.GetDllName() );
ReplaceVariable ( ret, "$(module_output)", GetTargetMacro ( module, true ) );
ReplaceVariable ( ret, "$(SEP)", sSep );
diff --git a/reactos/tools/rbuild/module.cpp b/reactos/tools/rbuild/module.cpp
index ba94ea8a8c0..81c39160feb 100644
--- a/reactos/tools/rbuild/module.cpp
+++ b/reactos/tools/rbuild/module.cpp
@@ -232,6 +232,28 @@ void IfableData::ProcessXML ()
compilationUnits[i]->ProcessXML ();
}
+bool Module::GetBooleanAttribute ( const XMLElement& moduleNode, const char * name, bool default_value )
+{
+ const XMLAttribute* att = moduleNode.GetAttribute ( name, false );
+ if ( att != NULL )
+ {
+ const char* p = att->value.c_str();
+ if ( !stricmp ( p, "true" ) || !stricmp ( p, "yes" ) )
+ return true;
+ else if ( !stricmp ( p, "false" ) || !stricmp ( p, "no" ) )
+ return false;
+ else
+ {
+ throw InvalidAttributeValueException (
+ moduleNode.location,
+ name,
+ att->value );
+ }
+ }
+ else
+ return default_value;
+}
+
Module::Module ( const Project& project,
const XMLElement& moduleNode,
const string& modulePath )
@@ -282,24 +304,7 @@ Module::Module ( const Project& project,
else
extension = GetDefaultModuleExtension ();
- att = moduleNode.GetAttribute ( "unicode", false );
- if ( att != NULL )
- {
- const char* p = att->value.c_str();
- if ( !stricmp ( p, "true" ) || !stricmp ( p, "yes" ) )
- isUnicode = true;
- else if ( !stricmp ( p, "false" ) || !stricmp ( p, "no" ) )
- isUnicode = false;
- else
- {
- throw InvalidAttributeValueException (
- moduleNode.location,
- "unicode",
- att->value );
- }
- }
- else
- isUnicode = false;
+ isUnicode = GetBooleanAttribute ( moduleNode, "unicode" );
if (isUnicode)
{
@@ -337,24 +342,7 @@ Module::Module ( const Project& project,
else
baseaddress = GetDefaultModuleBaseaddress ();
- att = moduleNode.GetAttribute ( "mangledsymbols", false );
- if ( att != NULL )
- {
- const char* p = att->value.c_str();
- if ( !stricmp ( p, "true" ) || !stricmp ( p, "yes" ) )
- mangledSymbols = true;
- else if ( !stricmp ( p, "false" ) || !stricmp ( p, "no" ) )
- mangledSymbols = false;
- else
- {
- throw InvalidAttributeValueException (
- moduleNode.location,
- "mangledsymbols",
- att->value );
- }
- }
- else
- mangledSymbols = false;
+ mangledSymbols = GetBooleanAttribute ( moduleNode, "mangledsymbols" );
att = moduleNode.GetAttribute ( "underscoresymbols", false );
if ( att != NULL )
@@ -362,24 +350,50 @@ Module::Module ( const Project& project,
else
underscoreSymbols = false;
- att = moduleNode.GetAttribute ( "isstartuplib", false );
- if ( att != NULL )
+ isStartupLib = GetBooleanAttribute ( moduleNode, "isstartuplib" );
+ isCRT = GetBooleanAttribute ( moduleNode, "iscrt", GetDefaultModuleIsCRT () );
+
+ att = moduleNode.GetAttribute ( "crt", false );
+ if ( att != NULL)
{
- const char* p = att->value.c_str();
- if ( !stricmp ( p, "true" ) || !stricmp ( p, "yes" ) )
- isStartupLib = true;
- else if ( !stricmp ( p, "false" ) || !stricmp ( p, "no" ) )
- isStartupLib = false;
- else
- {
- throw InvalidAttributeValueException (
- moduleNode.location,
- "isstartuplib",
- att->value );
- }
+ CRT = att->value;
+
+ if ( stricmp ( CRT.c_str (), "auto" ) == 0 )
+ CRT = GetDefaultModuleCRT ();
}
else
- isStartupLib = false;
+ CRT = GetDefaultModuleCRT ();
+
+ const char * crtAttr = CRT.c_str ();
+ if ( crtAttr == NULL || stricmp ( crtAttr, "none" ) == 0 )
+ dynamicCRT = false;
+ else if ( stricmp ( crtAttr, "libc" ) == 0 )
+ dynamicCRT = false;
+ else if ( stricmp ( crtAttr, "msvcrt" ) == 0 )
+ dynamicCRT = true;
+ else if ( stricmp ( crtAttr, "libcntpr" ) == 0 )
+ dynamicCRT = false;
+ else if ( stricmp ( crtAttr, "ntdll" ) == 0 )
+ dynamicCRT = true;
+ else if ( stricmp ( crtAttr, "static" ) == 0 )
+ dynamicCRT = false;
+ else if ( stricmp ( crtAttr, "dll" ) == 0 )
+ dynamicCRT = true;
+ else
+ {
+ throw InvalidAttributeValueException (
+ moduleNode.location,
+ "crt",
+ std::string ( crtAttr ) );
+ }
+
+ if ( isCRT && dynamicCRT )
+ {
+ throw XMLInvalidBuildFileException (
+ moduleNode.location,
+ "C runtime module '%s' cannot be compiled for a dynamically-linked C runtime",
+ name.c_str() );
+ }
att = moduleNode.GetAttribute ( "prefix", false );
if ( att != NULL )
@@ -1155,6 +1169,67 @@ Module::GetDefaultModuleBaseaddress () const
__LINE__ );
}
+std::string
+Module::GetDefaultModuleCRT () const
+{
+ if ( isCRT )
+ return "static";
+
+ switch ( type )
+ {
+ case Kernel:
+ return "static";
+ case Win32DLL:
+ case Win32OCX:
+ return "msvcrt";
+ case NativeDLL:
+ case NativeCUI:
+ return "ntdll";
+ case Win32CUI:
+ case Win32SCR:
+ case Win32GUI:
+ return "msvcrt";
+ case Test:
+ return "msvcrt"; // BUGBUG: not sure about this
+ case KeyboardLayout:
+ return "none";
+ case KernelModeDLL:
+ case KernelModeDriver:
+ return "dll";
+ case BootLoader:
+ return "libcntpr";
+ case ElfExecutable:
+ case BuildTool:
+ case StaticLibrary:
+ case HostStaticLibrary:
+ case ObjectLibrary:
+ case BootSector:
+ case Iso:
+ case LiveIso:
+ case IsoRegTest:
+ case LiveIsoRegTest:
+ case RpcServer:
+ case RpcClient:
+ case RpcProxy:
+ case Alias:
+ case BootProgram:
+ case IdlHeader:
+ case MessageHeader:
+ case EmbeddedTypeLib:
+ case Cabinet:
+ case TypeDontCare:
+ return "none";
+ }
+ throw InvalidOperationException ( __FILE__,
+ __LINE__ );
+}
+
+bool
+Module::GetDefaultModuleIsCRT () const
+{
+ return type == Kernel;
+}
+
bool
Module::HasImportLibrary () const
{
@@ -1295,6 +1370,16 @@ Module::SetImportLibrary ( ImportLibrary* importLibrary )
HasImportLibrary () ? "lib" + name + ".a" : output->name );
}
+std::string
+Module::GetDllName () const
+{
+ if ( importLibrary && !importLibrary->dllname.empty() )
+ return importLibrary->dllname;
+ else if ( output )
+ return output->name;
+ else
+ throw new InvalidOperationException ( __FILE__, __LINE__, "Module %s has no dllname." );
+}
File::File ( DirectoryLocation directory,
const string& relative_path,
diff --git a/reactos/tools/rbuild/project.dtd b/reactos/tools/rbuild/project.dtd
index 5411ce18646..a84dc9f357b 100644
--- a/reactos/tools/rbuild/project.dtd
+++ b/reactos/tools/rbuild/project.dtd
@@ -127,6 +127,8 @@
unicode (true|yes|false|no) "no"
isstartuplib (true) #IMPLIED
buildtype %Text; #FIXED "OFWLDR"
+ iscrt (true|yes|false|no) "no"
+ crt (libc|msvcrt|libcntpr|ntdll|static|dll|none|auto) "auto"
>
diff --git a/reactos/tools/rbuild/rbuild.h b/reactos/tools/rbuild/rbuild.h
index 3d87200ed4f..0d2d3be90a5 100644
--- a/reactos/tools/rbuild/rbuild.h
+++ b/reactos/tools/rbuild/rbuild.h
@@ -368,6 +368,9 @@ public:
bool allowWarnings;
bool enabled;
bool isStartupLib;
+ bool isCRT;
+ std::string CRT;
+ bool dynamicCRT;
FileLocation *output; // "path/foo.exe"
FileLocation *dependency; // "path/foo.exe" or "path/libfoo.a"
FileLocation *install;
@@ -392,17 +395,23 @@ public:
bool HasFileWithExtension ( const IfableData&, const std::string& extension ) const;
void InvokeModule () const;
void ProcessXML ();
+ std::string GetDllName() const;
private:
void SetImportLibrary ( ImportLibrary* importLibrary );
DirectoryLocation GetTargetDirectoryTree () const;
std::string GetDefaultModuleExtension () const;
std::string GetDefaultModuleEntrypoint () const;
std::string GetDefaultModuleBaseaddress () const;
+ std::string GetDefaultModuleCRT () const;
+ bool GetDefaultModuleIsCRT () const;
std::string entrypoint;
void ProcessXMLSubElement ( const XMLElement& e,
DirectoryLocation directory,
const std::string& relative_path,
ParseContext& parseContext );
+ bool GetBooleanAttribute ( const XMLElement& moduleNode,
+ const char * name,
+ bool default_value = false );
};
diff --git a/reactos/tools/unicode/Makefile.in b/reactos/tools/unicode/Makefile.in
index b0419c716df..3d6b847e7e3 100644
--- a/reactos/tools/unicode/Makefile.in
+++ b/reactos/tools/unicode/Makefile.in
@@ -45,12 +45,14 @@ CODEPAGES = \
1256 \
1257 \
1258 \
+ 1361 \
10000 \
10006 \
10007 \
10029 \
10079 \
10081 \
+ 20127 \
20866 \
20932 \
21866 \
diff --git a/reactos/tools/unicode/c_037.c b/reactos/tools/unicode/c_037.c
index be5b8bb5e28..0b7d90008a7 100644
--- a/reactos/tools/unicode/c_037.c
+++ b/reactos/tools/unicode/c_037.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_037 =
{
{ 37, 1, 0x003f, 0x003f, "IBM EBCDIC US Canada" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_10000.c b/reactos/tools/unicode/c_10000.c
index d43ca98840a..5d8df056886 100644
--- a/reactos/tools/unicode/c_10000.c
+++ b/reactos/tools/unicode/c_10000.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_10000 =
{
{ 10000, 1, 0x003f, 0x003f, "Mac Roman" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_10006.c b/reactos/tools/unicode/c_10006.c
index 6ac0b20f8b7..64a263eb811 100644
--- a/reactos/tools/unicode/c_10006.c
+++ b/reactos/tools/unicode/c_10006.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_10006 =
{
{ 10006, 1, 0x003f, 0x003f, "Mac Greek" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_10007.c b/reactos/tools/unicode/c_10007.c
index b58d56210d0..e41f58e811b 100644
--- a/reactos/tools/unicode/c_10007.c
+++ b/reactos/tools/unicode/c_10007.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_10007 =
{
{ 10007, 1, 0x003f, 0x003f, "Mac Cyrillic" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_10029.c b/reactos/tools/unicode/c_10029.c
index 6946df11bf0..22e24ec052f 100644
--- a/reactos/tools/unicode/c_10029.c
+++ b/reactos/tools/unicode/c_10029.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_10029 =
{
{ 10029, 1, 0x003f, 0x003f, "Mac Latin 2" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1006.c b/reactos/tools/unicode/c_1006.c
index 4584ca24d66..1fb61f648e5 100644
--- a/reactos/tools/unicode/c_1006.c
+++ b/reactos/tools/unicode/c_1006.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_1006 =
{
{ 1006, 1, 0x003f, 0x003f, "IBM Arabic" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_10079.c b/reactos/tools/unicode/c_10079.c
index 0290253c3bc..c3e28b62081 100644
--- a/reactos/tools/unicode/c_10079.c
+++ b/reactos/tools/unicode/c_10079.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_10079 =
{
{ 10079, 1, 0x003f, 0x003f, "Mac Icelandic" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_10081.c b/reactos/tools/unicode/c_10081.c
index 6351e59e68b..683c95a6d4b 100644
--- a/reactos/tools/unicode/c_10081.c
+++ b/reactos/tools/unicode/c_10081.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_10081 =
{
{ 10081, 1, 0x003f, 0x003f, "Mac Turkish" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1026.c b/reactos/tools/unicode/c_1026.c
index 2ed67c03df0..cabff2f2c98 100644
--- a/reactos/tools/unicode/c_1026.c
+++ b/reactos/tools/unicode/c_1026.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_1026 =
{
{ 1026, 1, 0x003f, 0x003f, "IBM EBCDIC Latin 5 Turkish" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1250.c b/reactos/tools/unicode/c_1250.c
index 7df9ccf1a37..656619d2869 100644
--- a/reactos/tools/unicode/c_1250.c
+++ b/reactos/tools/unicode/c_1250.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_1250 =
{
{ 1250, 1, 0x003f, 0x003f, "ANSI Eastern Europe" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1251.c b/reactos/tools/unicode/c_1251.c
index bb4ede20b3e..7e5ec8801c2 100644
--- a/reactos/tools/unicode/c_1251.c
+++ b/reactos/tools/unicode/c_1251.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_1251 =
{
{ 1251, 1, 0x003f, 0x003f, "ANSI Cyrillic" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1252.c b/reactos/tools/unicode/c_1252.c
index 04a5485a515..a43fb5e676f 100644
--- a/reactos/tools/unicode/c_1252.c
+++ b/reactos/tools/unicode/c_1252.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_1252 =
{
{ 1252, 1, 0x003f, 0x003f, "ANSI Latin 1" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1253.c b/reactos/tools/unicode/c_1253.c
index 49bc3b9ef29..a83d2dc9cca 100644
--- a/reactos/tools/unicode/c_1253.c
+++ b/reactos/tools/unicode/c_1253.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_1253 =
{
{ 1253, 1, 0x003f, 0x003f, "ANSI Greek" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1254.c b/reactos/tools/unicode/c_1254.c
index 5d30611f12c..cfabe49fc28 100644
--- a/reactos/tools/unicode/c_1254.c
+++ b/reactos/tools/unicode/c_1254.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_1254 =
{
{ 1254, 1, 0x003f, 0x003f, "ANSI Turkish" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1255.c b/reactos/tools/unicode/c_1255.c
index 31f2d98623b..0bdf0fd5efe 100644
--- a/reactos/tools/unicode/c_1255.c
+++ b/reactos/tools/unicode/c_1255.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_1255 =
{
{ 1255, 1, 0x003f, 0x003f, "ANSI Hebrew" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1256.c b/reactos/tools/unicode/c_1256.c
index 13a4569ac07..1e2f39dfab3 100644
--- a/reactos/tools/unicode/c_1256.c
+++ b/reactos/tools/unicode/c_1256.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_1256 =
{
{ 1256, 1, 0x003f, 0x003f, "ANSI Arabic" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1257.c b/reactos/tools/unicode/c_1257.c
index a71e6281ae0..3fb0022872b 100644
--- a/reactos/tools/unicode/c_1257.c
+++ b/reactos/tools/unicode/c_1257.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_1257 =
{
{ 1257, 1, 0x003f, 0x003f, "ANSI Baltic" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1258.c b/reactos/tools/unicode/c_1258.c
index 791f1fbbcc0..8c1fd6f5020 100644
--- a/reactos/tools/unicode/c_1258.c
+++ b/reactos/tools/unicode/c_1258.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_1258 =
{
{ 1258, 1, 0x003f, 0x003f, "ANSI/OEM Viet Nam" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_1361.c b/reactos/tools/unicode/c_1361.c
new file mode 100644
index 00000000000..3ba6c2a704a
--- /dev/null
+++ b/reactos/tools/unicode/c_1361.c
@@ -0,0 +1,8872 @@
+/* code page 1361 (Korean Johab) */
+/* generated from ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT */
+/* DO NOT EDIT!! */
+
+#include "wine/unicode.h"
+
+static const WCHAR cp2uni[28928] =
+{
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x20a9, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003f,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte 84 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x3133, 0x003f, 0x3135, 0x3136,
+ 0x003f, 0x003f, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f,
+ 0x3140, 0x003f, 0x003f, 0x003f, 0x3144, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x314f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3150, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3151, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3152, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3153, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte 85 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3154, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3155, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3156, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3157, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3158, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3159, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte 86 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x315a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x315b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x315c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x315d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x315e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x315f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte 87 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3160, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3161, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3162, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3163, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte 88 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3131, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xac00, 0xac01, 0xac02, 0xac03, 0xac04, 0xac05, 0xac06,
+ 0xac07, 0xac08, 0xac09, 0xac0a, 0xac0b, 0xac0c, 0xac0d, 0xac0e,
+ 0xac0f, 0xac10, 0x003f, 0xac11, 0xac12, 0xac13, 0xac14, 0xac15,
+ 0xac16, 0xac17, 0xac18, 0xac19, 0xac1a, 0xac1b, 0x003f, 0x003f,
+ 0x003f, 0xac1c, 0xac1d, 0xac1e, 0xac1f, 0xac20, 0xac21, 0xac22,
+ 0xac23, 0xac24, 0xac25, 0xac26, 0xac27, 0xac28, 0xac29, 0xac2a,
+ 0xac2b, 0xac2c, 0x003f, 0xac2d, 0xac2e, 0xac2f, 0xac30, 0xac31,
+ 0xac32, 0xac33, 0xac34, 0xac35, 0xac36, 0xac37, 0x003f, 0x003f,
+ 0x003f, 0xac38, 0xac39, 0xac3a, 0xac3b, 0xac3c, 0xac3d, 0xac3e,
+ 0xac3f, 0xac40, 0xac41, 0xac42, 0xac43, 0xac44, 0xac45, 0xac46,
+ 0xac47, 0xac48, 0x003f, 0xac49, 0xac4a, 0xac4b, 0xac4c, 0xac4d,
+ 0xac4e, 0xac4f, 0xac50, 0xac51, 0xac52, 0xac53, 0x003f, 0x003f,
+ 0x003f, 0xac54, 0xac55, 0xac56, 0xac57, 0xac58, 0xac59, 0xac5a,
+ 0xac5b, 0xac5c, 0xac5d, 0xac5e, 0xac5f, 0xac60, 0xac61, 0xac62,
+ 0xac63, 0xac64, 0x003f, 0xac65, 0xac66, 0xac67, 0xac68, 0xac69,
+ 0xac6a, 0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xac6f, 0x003f, 0x003f,
+ 0x003f, 0xac70, 0xac71, 0xac72, 0xac73, 0xac74, 0xac75, 0xac76,
+ 0xac77, 0xac78, 0xac79, 0xac7a, 0xac7b, 0xac7c, 0xac7d, 0xac7e,
+ 0xac7f, 0xac80, 0x003f, 0xac81, 0xac82, 0xac83, 0xac84, 0xac85,
+ 0xac86, 0xac87, 0xac88, 0xac89, 0xac8a, 0xac8b, 0x003f, 0x003f,
+ /* lead byte 89 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90, 0xac91, 0xac92,
+ 0xac93, 0xac94, 0xac95, 0xac96, 0xac97, 0xac98, 0xac99, 0xac9a,
+ 0xac9b, 0xac9c, 0x003f, 0xac9d, 0xac9e, 0xac9f, 0xaca0, 0xaca1,
+ 0xaca2, 0xaca3, 0xaca4, 0xaca5, 0xaca6, 0xaca7, 0x003f, 0x003f,
+ 0x003f, 0xaca8, 0xaca9, 0xacaa, 0xacab, 0xacac, 0xacad, 0xacae,
+ 0xacaf, 0xacb0, 0xacb1, 0xacb2, 0xacb3, 0xacb4, 0xacb5, 0xacb6,
+ 0xacb7, 0xacb8, 0x003f, 0xacb9, 0xacba, 0xacbb, 0xacbc, 0xacbd,
+ 0xacbe, 0xacbf, 0xacc0, 0xacc1, 0xacc2, 0xacc3, 0x003f, 0x003f,
+ 0x003f, 0xacc4, 0xacc5, 0xacc6, 0xacc7, 0xacc8, 0xacc9, 0xacca,
+ 0xaccb, 0xaccc, 0xaccd, 0xacce, 0xaccf, 0xacd0, 0xacd1, 0xacd2,
+ 0xacd3, 0xacd4, 0x003f, 0xacd5, 0xacd6, 0xacd7, 0xacd8, 0xacd9,
+ 0xacda, 0xacdb, 0xacdc, 0xacdd, 0xacde, 0xacdf, 0x003f, 0x003f,
+ 0x003f, 0xace0, 0xace1, 0xace2, 0xace3, 0xace4, 0xace5, 0xace6,
+ 0xace7, 0xace8, 0xace9, 0xacea, 0xaceb, 0xacec, 0xaced, 0xacee,
+ 0xacef, 0xacf0, 0x003f, 0xacf1, 0xacf2, 0xacf3, 0xacf4, 0xacf5,
+ 0xacf6, 0xacf7, 0xacf8, 0xacf9, 0xacfa, 0xacfb, 0x003f, 0x003f,
+ 0x003f, 0xacfc, 0xacfd, 0xacfe, 0xacff, 0xad00, 0xad01, 0xad02,
+ 0xad03, 0xad04, 0xad05, 0xad06, 0xad07, 0xad08, 0xad09, 0xad0a,
+ 0xad0b, 0xad0c, 0x003f, 0xad0d, 0xad0e, 0xad0f, 0xad10, 0xad11,
+ 0xad12, 0xad13, 0xad14, 0xad15, 0xad16, 0xad17, 0x003f, 0x003f,
+ 0x003f, 0xad18, 0xad19, 0xad1a, 0xad1b, 0xad1c, 0xad1d, 0xad1e,
+ 0xad1f, 0xad20, 0xad21, 0xad22, 0xad23, 0xad24, 0xad25, 0xad26,
+ 0xad27, 0xad28, 0x003f, 0xad29, 0xad2a, 0xad2b, 0xad2c, 0xad2d,
+ 0xad2e, 0xad2f, 0xad30, 0xad31, 0xad32, 0xad33, 0x003f, 0x003f,
+ /* lead byte 8a */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xad34, 0xad35, 0xad36, 0xad37, 0xad38, 0xad39, 0xad3a,
+ 0xad3b, 0xad3c, 0xad3d, 0xad3e, 0xad3f, 0xad40, 0xad41, 0xad42,
+ 0xad43, 0xad44, 0x003f, 0xad45, 0xad46, 0xad47, 0xad48, 0xad49,
+ 0xad4a, 0xad4b, 0xad4c, 0xad4d, 0xad4e, 0xad4f, 0x003f, 0x003f,
+ 0x003f, 0xad50, 0xad51, 0xad52, 0xad53, 0xad54, 0xad55, 0xad56,
+ 0xad57, 0xad58, 0xad59, 0xad5a, 0xad5b, 0xad5c, 0xad5d, 0xad5e,
+ 0xad5f, 0xad60, 0x003f, 0xad61, 0xad62, 0xad63, 0xad64, 0xad65,
+ 0xad66, 0xad67, 0xad68, 0xad69, 0xad6a, 0xad6b, 0x003f, 0x003f,
+ 0x003f, 0xad6c, 0xad6d, 0xad6e, 0xad6f, 0xad70, 0xad71, 0xad72,
+ 0xad73, 0xad74, 0xad75, 0xad76, 0xad77, 0xad78, 0xad79, 0xad7a,
+ 0xad7b, 0xad7c, 0x003f, 0xad7d, 0xad7e, 0xad7f, 0xad80, 0xad81,
+ 0xad82, 0xad83, 0xad84, 0xad85, 0xad86, 0xad87, 0x003f, 0x003f,
+ 0x003f, 0xad88, 0xad89, 0xad8a, 0xad8b, 0xad8c, 0xad8d, 0xad8e,
+ 0xad8f, 0xad90, 0xad91, 0xad92, 0xad93, 0xad94, 0xad95, 0xad96,
+ 0xad97, 0xad98, 0x003f, 0xad99, 0xad9a, 0xad9b, 0xad9c, 0xad9d,
+ 0xad9e, 0xad9f, 0xada0, 0xada1, 0xada2, 0xada3, 0x003f, 0x003f,
+ 0x003f, 0xada4, 0xada5, 0xada6, 0xada7, 0xada8, 0xada9, 0xadaa,
+ 0xadab, 0xadac, 0xadad, 0xadae, 0xadaf, 0xadb0, 0xadb1, 0xadb2,
+ 0xadb3, 0xadb4, 0x003f, 0xadb5, 0xadb6, 0xadb7, 0xadb8, 0xadb9,
+ 0xadba, 0xadbb, 0xadbc, 0xadbd, 0xadbe, 0xadbf, 0x003f, 0x003f,
+ 0x003f, 0xadc0, 0xadc1, 0xadc2, 0xadc3, 0xadc4, 0xadc5, 0xadc6,
+ 0xadc7, 0xadc8, 0xadc9, 0xadca, 0xadcb, 0xadcc, 0xadcd, 0xadce,
+ 0xadcf, 0xadd0, 0x003f, 0xadd1, 0xadd2, 0xadd3, 0xadd4, 0xadd5,
+ 0xadd6, 0xadd7, 0xadd8, 0xadd9, 0xadda, 0xaddb, 0x003f, 0x003f,
+ /* lead byte 8b */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xaddc, 0xaddd, 0xadde, 0xaddf, 0xade0, 0xade1, 0xade2,
+ 0xade3, 0xade4, 0xade5, 0xade6, 0xade7, 0xade8, 0xade9, 0xadea,
+ 0xadeb, 0xadec, 0x003f, 0xaded, 0xadee, 0xadef, 0xadf0, 0xadf1,
+ 0xadf2, 0xadf3, 0xadf4, 0xadf5, 0xadf6, 0xadf7, 0x003f, 0x003f,
+ 0x003f, 0xadf8, 0xadf9, 0xadfa, 0xadfb, 0xadfc, 0xadfd, 0xadfe,
+ 0xadff, 0xae00, 0xae01, 0xae02, 0xae03, 0xae04, 0xae05, 0xae06,
+ 0xae07, 0xae08, 0x003f, 0xae09, 0xae0a, 0xae0b, 0xae0c, 0xae0d,
+ 0xae0e, 0xae0f, 0xae10, 0xae11, 0xae12, 0xae13, 0x003f, 0x003f,
+ 0x003f, 0xae14, 0xae15, 0xae16, 0xae17, 0xae18, 0xae19, 0xae1a,
+ 0xae1b, 0xae1c, 0xae1d, 0xae1e, 0xae1f, 0xae20, 0xae21, 0xae22,
+ 0xae23, 0xae24, 0x003f, 0xae25, 0xae26, 0xae27, 0xae28, 0xae29,
+ 0xae2a, 0xae2b, 0xae2c, 0xae2d, 0xae2e, 0xae2f, 0x003f, 0x003f,
+ 0x003f, 0xae30, 0xae31, 0xae32, 0xae33, 0xae34, 0xae35, 0xae36,
+ 0xae37, 0xae38, 0xae39, 0xae3a, 0xae3b, 0xae3c, 0xae3d, 0xae3e,
+ 0xae3f, 0xae40, 0x003f, 0xae41, 0xae42, 0xae43, 0xae44, 0xae45,
+ 0xae46, 0xae47, 0xae48, 0xae49, 0xae4a, 0xae4b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte 8c */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3132, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xae4c, 0xae4d, 0xae4e, 0xae4f, 0xae50, 0xae51, 0xae52,
+ 0xae53, 0xae54, 0xae55, 0xae56, 0xae57, 0xae58, 0xae59, 0xae5a,
+ 0xae5b, 0xae5c, 0x003f, 0xae5d, 0xae5e, 0xae5f, 0xae60, 0xae61,
+ 0xae62, 0xae63, 0xae64, 0xae65, 0xae66, 0xae67, 0x003f, 0x003f,
+ 0x003f, 0xae68, 0xae69, 0xae6a, 0xae6b, 0xae6c, 0xae6d, 0xae6e,
+ 0xae6f, 0xae70, 0xae71, 0xae72, 0xae73, 0xae74, 0xae75, 0xae76,
+ 0xae77, 0xae78, 0x003f, 0xae79, 0xae7a, 0xae7b, 0xae7c, 0xae7d,
+ 0xae7e, 0xae7f, 0xae80, 0xae81, 0xae82, 0xae83, 0x003f, 0x003f,
+ 0x003f, 0xae84, 0xae85, 0xae86, 0xae87, 0xae88, 0xae89, 0xae8a,
+ 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f, 0xae90, 0xae91, 0xae92,
+ 0xae93, 0xae94, 0x003f, 0xae95, 0xae96, 0xae97, 0xae98, 0xae99,
+ 0xae9a, 0xae9b, 0xae9c, 0xae9d, 0xae9e, 0xae9f, 0x003f, 0x003f,
+ 0x003f, 0xaea0, 0xaea1, 0xaea2, 0xaea3, 0xaea4, 0xaea5, 0xaea6,
+ 0xaea7, 0xaea8, 0xaea9, 0xaeaa, 0xaeab, 0xaeac, 0xaead, 0xaeae,
+ 0xaeaf, 0xaeb0, 0x003f, 0xaeb1, 0xaeb2, 0xaeb3, 0xaeb4, 0xaeb5,
+ 0xaeb6, 0xaeb7, 0xaeb8, 0xaeb9, 0xaeba, 0xaebb, 0x003f, 0x003f,
+ 0x003f, 0xaebc, 0xaebd, 0xaebe, 0xaebf, 0xaec0, 0xaec1, 0xaec2,
+ 0xaec3, 0xaec4, 0xaec5, 0xaec6, 0xaec7, 0xaec8, 0xaec9, 0xaeca,
+ 0xaecb, 0xaecc, 0x003f, 0xaecd, 0xaece, 0xaecf, 0xaed0, 0xaed1,
+ 0xaed2, 0xaed3, 0xaed4, 0xaed5, 0xaed6, 0xaed7, 0x003f, 0x003f,
+ /* lead byte 8d */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xaed8, 0xaed9, 0xaeda, 0xaedb, 0xaedc, 0xaedd, 0xaede,
+ 0xaedf, 0xaee0, 0xaee1, 0xaee2, 0xaee3, 0xaee4, 0xaee5, 0xaee6,
+ 0xaee7, 0xaee8, 0x003f, 0xaee9, 0xaeea, 0xaeeb, 0xaeec, 0xaeed,
+ 0xaeee, 0xaeef, 0xaef0, 0xaef1, 0xaef2, 0xaef3, 0x003f, 0x003f,
+ 0x003f, 0xaef4, 0xaef5, 0xaef6, 0xaef7, 0xaef8, 0xaef9, 0xaefa,
+ 0xaefb, 0xaefc, 0xaefd, 0xaefe, 0xaeff, 0xaf00, 0xaf01, 0xaf02,
+ 0xaf03, 0xaf04, 0x003f, 0xaf05, 0xaf06, 0xaf07, 0xaf08, 0xaf09,
+ 0xaf0a, 0xaf0b, 0xaf0c, 0xaf0d, 0xaf0e, 0xaf0f, 0x003f, 0x003f,
+ 0x003f, 0xaf10, 0xaf11, 0xaf12, 0xaf13, 0xaf14, 0xaf15, 0xaf16,
+ 0xaf17, 0xaf18, 0xaf19, 0xaf1a, 0xaf1b, 0xaf1c, 0xaf1d, 0xaf1e,
+ 0xaf1f, 0xaf20, 0x003f, 0xaf21, 0xaf22, 0xaf23, 0xaf24, 0xaf25,
+ 0xaf26, 0xaf27, 0xaf28, 0xaf29, 0xaf2a, 0xaf2b, 0x003f, 0x003f,
+ 0x003f, 0xaf2c, 0xaf2d, 0xaf2e, 0xaf2f, 0xaf30, 0xaf31, 0xaf32,
+ 0xaf33, 0xaf34, 0xaf35, 0xaf36, 0xaf37, 0xaf38, 0xaf39, 0xaf3a,
+ 0xaf3b, 0xaf3c, 0x003f, 0xaf3d, 0xaf3e, 0xaf3f, 0xaf40, 0xaf41,
+ 0xaf42, 0xaf43, 0xaf44, 0xaf45, 0xaf46, 0xaf47, 0x003f, 0x003f,
+ 0x003f, 0xaf48, 0xaf49, 0xaf4a, 0xaf4b, 0xaf4c, 0xaf4d, 0xaf4e,
+ 0xaf4f, 0xaf50, 0xaf51, 0xaf52, 0xaf53, 0xaf54, 0xaf55, 0xaf56,
+ 0xaf57, 0xaf58, 0x003f, 0xaf59, 0xaf5a, 0xaf5b, 0xaf5c, 0xaf5d,
+ 0xaf5e, 0xaf5f, 0xaf60, 0xaf61, 0xaf62, 0xaf63, 0x003f, 0x003f,
+ 0x003f, 0xaf64, 0xaf65, 0xaf66, 0xaf67, 0xaf68, 0xaf69, 0xaf6a,
+ 0xaf6b, 0xaf6c, 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, 0xaf71, 0xaf72,
+ 0xaf73, 0xaf74, 0x003f, 0xaf75, 0xaf76, 0xaf77, 0xaf78, 0xaf79,
+ 0xaf7a, 0xaf7b, 0xaf7c, 0xaf7d, 0xaf7e, 0xaf7f, 0x003f, 0x003f,
+ /* lead byte 8e */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xaf80, 0xaf81, 0xaf82, 0xaf83, 0xaf84, 0xaf85, 0xaf86,
+ 0xaf87, 0xaf88, 0xaf89, 0xaf8a, 0xaf8b, 0xaf8c, 0xaf8d, 0xaf8e,
+ 0xaf8f, 0xaf90, 0x003f, 0xaf91, 0xaf92, 0xaf93, 0xaf94, 0xaf95,
+ 0xaf96, 0xaf97, 0xaf98, 0xaf99, 0xaf9a, 0xaf9b, 0x003f, 0x003f,
+ 0x003f, 0xaf9c, 0xaf9d, 0xaf9e, 0xaf9f, 0xafa0, 0xafa1, 0xafa2,
+ 0xafa3, 0xafa4, 0xafa5, 0xafa6, 0xafa7, 0xafa8, 0xafa9, 0xafaa,
+ 0xafab, 0xafac, 0x003f, 0xafad, 0xafae, 0xafaf, 0xafb0, 0xafb1,
+ 0xafb2, 0xafb3, 0xafb4, 0xafb5, 0xafb6, 0xafb7, 0x003f, 0x003f,
+ 0x003f, 0xafb8, 0xafb9, 0xafba, 0xafbb, 0xafbc, 0xafbd, 0xafbe,
+ 0xafbf, 0xafc0, 0xafc1, 0xafc2, 0xafc3, 0xafc4, 0xafc5, 0xafc6,
+ 0xafc7, 0xafc8, 0x003f, 0xafc9, 0xafca, 0xafcb, 0xafcc, 0xafcd,
+ 0xafce, 0xafcf, 0xafd0, 0xafd1, 0xafd2, 0xafd3, 0x003f, 0x003f,
+ 0x003f, 0xafd4, 0xafd5, 0xafd6, 0xafd7, 0xafd8, 0xafd9, 0xafda,
+ 0xafdb, 0xafdc, 0xafdd, 0xafde, 0xafdf, 0xafe0, 0xafe1, 0xafe2,
+ 0xafe3, 0xafe4, 0x003f, 0xafe5, 0xafe6, 0xafe7, 0xafe8, 0xafe9,
+ 0xafea, 0xafeb, 0xafec, 0xafed, 0xafee, 0xafef, 0x003f, 0x003f,
+ 0x003f, 0xaff0, 0xaff1, 0xaff2, 0xaff3, 0xaff4, 0xaff5, 0xaff6,
+ 0xaff7, 0xaff8, 0xaff9, 0xaffa, 0xaffb, 0xaffc, 0xaffd, 0xaffe,
+ 0xafff, 0xb000, 0x003f, 0xb001, 0xb002, 0xb003, 0xb004, 0xb005,
+ 0xb006, 0xb007, 0xb008, 0xb009, 0xb00a, 0xb00b, 0x003f, 0x003f,
+ 0x003f, 0xb00c, 0xb00d, 0xb00e, 0xb00f, 0xb010, 0xb011, 0xb012,
+ 0xb013, 0xb014, 0xb015, 0xb016, 0xb017, 0xb018, 0xb019, 0xb01a,
+ 0xb01b, 0xb01c, 0x003f, 0xb01d, 0xb01e, 0xb01f, 0xb020, 0xb021,
+ 0xb022, 0xb023, 0xb024, 0xb025, 0xb026, 0xb027, 0x003f, 0x003f,
+ /* lead byte 8f */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb028, 0xb029, 0xb02a, 0xb02b, 0xb02c, 0xb02d, 0xb02e,
+ 0xb02f, 0xb030, 0xb031, 0xb032, 0xb033, 0xb034, 0xb035, 0xb036,
+ 0xb037, 0xb038, 0x003f, 0xb039, 0xb03a, 0xb03b, 0xb03c, 0xb03d,
+ 0xb03e, 0xb03f, 0xb040, 0xb041, 0xb042, 0xb043, 0x003f, 0x003f,
+ 0x003f, 0xb044, 0xb045, 0xb046, 0xb047, 0xb048, 0xb049, 0xb04a,
+ 0xb04b, 0xb04c, 0xb04d, 0xb04e, 0xb04f, 0xb050, 0xb051, 0xb052,
+ 0xb053, 0xb054, 0x003f, 0xb055, 0xb056, 0xb057, 0xb058, 0xb059,
+ 0xb05a, 0xb05b, 0xb05c, 0xb05d, 0xb05e, 0xb05f, 0x003f, 0x003f,
+ 0x003f, 0xb060, 0xb061, 0xb062, 0xb063, 0xb064, 0xb065, 0xb066,
+ 0xb067, 0xb068, 0xb069, 0xb06a, 0xb06b, 0xb06c, 0xb06d, 0xb06e,
+ 0xb06f, 0xb070, 0x003f, 0xb071, 0xb072, 0xb073, 0xb074, 0xb075,
+ 0xb076, 0xb077, 0xb078, 0xb079, 0xb07a, 0xb07b, 0x003f, 0x003f,
+ 0x003f, 0xb07c, 0xb07d, 0xb07e, 0xb07f, 0xb080, 0xb081, 0xb082,
+ 0xb083, 0xb084, 0xb085, 0xb086, 0xb087, 0xb088, 0xb089, 0xb08a,
+ 0xb08b, 0xb08c, 0x003f, 0xb08d, 0xb08e, 0xb08f, 0xb090, 0xb091,
+ 0xb092, 0xb093, 0xb094, 0xb095, 0xb096, 0xb097, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte 90 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3134, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb098, 0xb099, 0xb09a, 0xb09b, 0xb09c, 0xb09d, 0xb09e,
+ 0xb09f, 0xb0a0, 0xb0a1, 0xb0a2, 0xb0a3, 0xb0a4, 0xb0a5, 0xb0a6,
+ 0xb0a7, 0xb0a8, 0x003f, 0xb0a9, 0xb0aa, 0xb0ab, 0xb0ac, 0xb0ad,
+ 0xb0ae, 0xb0af, 0xb0b0, 0xb0b1, 0xb0b2, 0xb0b3, 0x003f, 0x003f,
+ 0x003f, 0xb0b4, 0xb0b5, 0xb0b6, 0xb0b7, 0xb0b8, 0xb0b9, 0xb0ba,
+ 0xb0bb, 0xb0bc, 0xb0bd, 0xb0be, 0xb0bf, 0xb0c0, 0xb0c1, 0xb0c2,
+ 0xb0c3, 0xb0c4, 0x003f, 0xb0c5, 0xb0c6, 0xb0c7, 0xb0c8, 0xb0c9,
+ 0xb0ca, 0xb0cb, 0xb0cc, 0xb0cd, 0xb0ce, 0xb0cf, 0x003f, 0x003f,
+ 0x003f, 0xb0d0, 0xb0d1, 0xb0d2, 0xb0d3, 0xb0d4, 0xb0d5, 0xb0d6,
+ 0xb0d7, 0xb0d8, 0xb0d9, 0xb0da, 0xb0db, 0xb0dc, 0xb0dd, 0xb0de,
+ 0xb0df, 0xb0e0, 0x003f, 0xb0e1, 0xb0e2, 0xb0e3, 0xb0e4, 0xb0e5,
+ 0xb0e6, 0xb0e7, 0xb0e8, 0xb0e9, 0xb0ea, 0xb0eb, 0x003f, 0x003f,
+ 0x003f, 0xb0ec, 0xb0ed, 0xb0ee, 0xb0ef, 0xb0f0, 0xb0f1, 0xb0f2,
+ 0xb0f3, 0xb0f4, 0xb0f5, 0xb0f6, 0xb0f7, 0xb0f8, 0xb0f9, 0xb0fa,
+ 0xb0fb, 0xb0fc, 0x003f, 0xb0fd, 0xb0fe, 0xb0ff, 0xb100, 0xb101,
+ 0xb102, 0xb103, 0xb104, 0xb105, 0xb106, 0xb107, 0x003f, 0x003f,
+ 0x003f, 0xb108, 0xb109, 0xb10a, 0xb10b, 0xb10c, 0xb10d, 0xb10e,
+ 0xb10f, 0xb110, 0xb111, 0xb112, 0xb113, 0xb114, 0xb115, 0xb116,
+ 0xb117, 0xb118, 0x003f, 0xb119, 0xb11a, 0xb11b, 0xb11c, 0xb11d,
+ 0xb11e, 0xb11f, 0xb120, 0xb121, 0xb122, 0xb123, 0x003f, 0x003f,
+ /* lead byte 91 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb124, 0xb125, 0xb126, 0xb127, 0xb128, 0xb129, 0xb12a,
+ 0xb12b, 0xb12c, 0xb12d, 0xb12e, 0xb12f, 0xb130, 0xb131, 0xb132,
+ 0xb133, 0xb134, 0x003f, 0xb135, 0xb136, 0xb137, 0xb138, 0xb139,
+ 0xb13a, 0xb13b, 0xb13c, 0xb13d, 0xb13e, 0xb13f, 0x003f, 0x003f,
+ 0x003f, 0xb140, 0xb141, 0xb142, 0xb143, 0xb144, 0xb145, 0xb146,
+ 0xb147, 0xb148, 0xb149, 0xb14a, 0xb14b, 0xb14c, 0xb14d, 0xb14e,
+ 0xb14f, 0xb150, 0x003f, 0xb151, 0xb152, 0xb153, 0xb154, 0xb155,
+ 0xb156, 0xb157, 0xb158, 0xb159, 0xb15a, 0xb15b, 0x003f, 0x003f,
+ 0x003f, 0xb15c, 0xb15d, 0xb15e, 0xb15f, 0xb160, 0xb161, 0xb162,
+ 0xb163, 0xb164, 0xb165, 0xb166, 0xb167, 0xb168, 0xb169, 0xb16a,
+ 0xb16b, 0xb16c, 0x003f, 0xb16d, 0xb16e, 0xb16f, 0xb170, 0xb171,
+ 0xb172, 0xb173, 0xb174, 0xb175, 0xb176, 0xb177, 0x003f, 0x003f,
+ 0x003f, 0xb178, 0xb179, 0xb17a, 0xb17b, 0xb17c, 0xb17d, 0xb17e,
+ 0xb17f, 0xb180, 0xb181, 0xb182, 0xb183, 0xb184, 0xb185, 0xb186,
+ 0xb187, 0xb188, 0x003f, 0xb189, 0xb18a, 0xb18b, 0xb18c, 0xb18d,
+ 0xb18e, 0xb18f, 0xb190, 0xb191, 0xb192, 0xb193, 0x003f, 0x003f,
+ 0x003f, 0xb194, 0xb195, 0xb196, 0xb197, 0xb198, 0xb199, 0xb19a,
+ 0xb19b, 0xb19c, 0xb19d, 0xb19e, 0xb19f, 0xb1a0, 0xb1a1, 0xb1a2,
+ 0xb1a3, 0xb1a4, 0x003f, 0xb1a5, 0xb1a6, 0xb1a7, 0xb1a8, 0xb1a9,
+ 0xb1aa, 0xb1ab, 0xb1ac, 0xb1ad, 0xb1ae, 0xb1af, 0x003f, 0x003f,
+ 0x003f, 0xb1b0, 0xb1b1, 0xb1b2, 0xb1b3, 0xb1b4, 0xb1b5, 0xb1b6,
+ 0xb1b7, 0xb1b8, 0xb1b9, 0xb1ba, 0xb1bb, 0xb1bc, 0xb1bd, 0xb1be,
+ 0xb1bf, 0xb1c0, 0x003f, 0xb1c1, 0xb1c2, 0xb1c3, 0xb1c4, 0xb1c5,
+ 0xb1c6, 0xb1c7, 0xb1c8, 0xb1c9, 0xb1ca, 0xb1cb, 0x003f, 0x003f,
+ /* lead byte 92 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb1cc, 0xb1cd, 0xb1ce, 0xb1cf, 0xb1d0, 0xb1d1, 0xb1d2,
+ 0xb1d3, 0xb1d4, 0xb1d5, 0xb1d6, 0xb1d7, 0xb1d8, 0xb1d9, 0xb1da,
+ 0xb1db, 0xb1dc, 0x003f, 0xb1dd, 0xb1de, 0xb1df, 0xb1e0, 0xb1e1,
+ 0xb1e2, 0xb1e3, 0xb1e4, 0xb1e5, 0xb1e6, 0xb1e7, 0x003f, 0x003f,
+ 0x003f, 0xb1e8, 0xb1e9, 0xb1ea, 0xb1eb, 0xb1ec, 0xb1ed, 0xb1ee,
+ 0xb1ef, 0xb1f0, 0xb1f1, 0xb1f2, 0xb1f3, 0xb1f4, 0xb1f5, 0xb1f6,
+ 0xb1f7, 0xb1f8, 0x003f, 0xb1f9, 0xb1fa, 0xb1fb, 0xb1fc, 0xb1fd,
+ 0xb1fe, 0xb1ff, 0xb200, 0xb201, 0xb202, 0xb203, 0x003f, 0x003f,
+ 0x003f, 0xb204, 0xb205, 0xb206, 0xb207, 0xb208, 0xb209, 0xb20a,
+ 0xb20b, 0xb20c, 0xb20d, 0xb20e, 0xb20f, 0xb210, 0xb211, 0xb212,
+ 0xb213, 0xb214, 0x003f, 0xb215, 0xb216, 0xb217, 0xb218, 0xb219,
+ 0xb21a, 0xb21b, 0xb21c, 0xb21d, 0xb21e, 0xb21f, 0x003f, 0x003f,
+ 0x003f, 0xb220, 0xb221, 0xb222, 0xb223, 0xb224, 0xb225, 0xb226,
+ 0xb227, 0xb228, 0xb229, 0xb22a, 0xb22b, 0xb22c, 0xb22d, 0xb22e,
+ 0xb22f, 0xb230, 0x003f, 0xb231, 0xb232, 0xb233, 0xb234, 0xb235,
+ 0xb236, 0xb237, 0xb238, 0xb239, 0xb23a, 0xb23b, 0x003f, 0x003f,
+ 0x003f, 0xb23c, 0xb23d, 0xb23e, 0xb23f, 0xb240, 0xb241, 0xb242,
+ 0xb243, 0xb244, 0xb245, 0xb246, 0xb247, 0xb248, 0xb249, 0xb24a,
+ 0xb24b, 0xb24c, 0x003f, 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251,
+ 0xb252, 0xb253, 0xb254, 0xb255, 0xb256, 0xb257, 0x003f, 0x003f,
+ 0x003f, 0xb258, 0xb259, 0xb25a, 0xb25b, 0xb25c, 0xb25d, 0xb25e,
+ 0xb25f, 0xb260, 0xb261, 0xb262, 0xb263, 0xb264, 0xb265, 0xb266,
+ 0xb267, 0xb268, 0x003f, 0xb269, 0xb26a, 0xb26b, 0xb26c, 0xb26d,
+ 0xb26e, 0xb26f, 0xb270, 0xb271, 0xb272, 0xb273, 0x003f, 0x003f,
+ /* lead byte 93 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb274, 0xb275, 0xb276, 0xb277, 0xb278, 0xb279, 0xb27a,
+ 0xb27b, 0xb27c, 0xb27d, 0xb27e, 0xb27f, 0xb280, 0xb281, 0xb282,
+ 0xb283, 0xb284, 0x003f, 0xb285, 0xb286, 0xb287, 0xb288, 0xb289,
+ 0xb28a, 0xb28b, 0xb28c, 0xb28d, 0xb28e, 0xb28f, 0x003f, 0x003f,
+ 0x003f, 0xb290, 0xb291, 0xb292, 0xb293, 0xb294, 0xb295, 0xb296,
+ 0xb297, 0xb298, 0xb299, 0xb29a, 0xb29b, 0xb29c, 0xb29d, 0xb29e,
+ 0xb29f, 0xb2a0, 0x003f, 0xb2a1, 0xb2a2, 0xb2a3, 0xb2a4, 0xb2a5,
+ 0xb2a6, 0xb2a7, 0xb2a8, 0xb2a9, 0xb2aa, 0xb2ab, 0x003f, 0x003f,
+ 0x003f, 0xb2ac, 0xb2ad, 0xb2ae, 0xb2af, 0xb2b0, 0xb2b1, 0xb2b2,
+ 0xb2b3, 0xb2b4, 0xb2b5, 0xb2b6, 0xb2b7, 0xb2b8, 0xb2b9, 0xb2ba,
+ 0xb2bb, 0xb2bc, 0x003f, 0xb2bd, 0xb2be, 0xb2bf, 0xb2c0, 0xb2c1,
+ 0xb2c2, 0xb2c3, 0xb2c4, 0xb2c5, 0xb2c6, 0xb2c7, 0x003f, 0x003f,
+ 0x003f, 0xb2c8, 0xb2c9, 0xb2ca, 0xb2cb, 0xb2cc, 0xb2cd, 0xb2ce,
+ 0xb2cf, 0xb2d0, 0xb2d1, 0xb2d2, 0xb2d3, 0xb2d4, 0xb2d5, 0xb2d6,
+ 0xb2d7, 0xb2d8, 0x003f, 0xb2d9, 0xb2da, 0xb2db, 0xb2dc, 0xb2dd,
+ 0xb2de, 0xb2df, 0xb2e0, 0xb2e1, 0xb2e2, 0xb2e3, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte 94 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3137, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb2e4, 0xb2e5, 0xb2e6, 0xb2e7, 0xb2e8, 0xb2e9, 0xb2ea,
+ 0xb2eb, 0xb2ec, 0xb2ed, 0xb2ee, 0xb2ef, 0xb2f0, 0xb2f1, 0xb2f2,
+ 0xb2f3, 0xb2f4, 0x003f, 0xb2f5, 0xb2f6, 0xb2f7, 0xb2f8, 0xb2f9,
+ 0xb2fa, 0xb2fb, 0xb2fc, 0xb2fd, 0xb2fe, 0xb2ff, 0x003f, 0x003f,
+ 0x003f, 0xb300, 0xb301, 0xb302, 0xb303, 0xb304, 0xb305, 0xb306,
+ 0xb307, 0xb308, 0xb309, 0xb30a, 0xb30b, 0xb30c, 0xb30d, 0xb30e,
+ 0xb30f, 0xb310, 0x003f, 0xb311, 0xb312, 0xb313, 0xb314, 0xb315,
+ 0xb316, 0xb317, 0xb318, 0xb319, 0xb31a, 0xb31b, 0x003f, 0x003f,
+ 0x003f, 0xb31c, 0xb31d, 0xb31e, 0xb31f, 0xb320, 0xb321, 0xb322,
+ 0xb323, 0xb324, 0xb325, 0xb326, 0xb327, 0xb328, 0xb329, 0xb32a,
+ 0xb32b, 0xb32c, 0x003f, 0xb32d, 0xb32e, 0xb32f, 0xb330, 0xb331,
+ 0xb332, 0xb333, 0xb334, 0xb335, 0xb336, 0xb337, 0x003f, 0x003f,
+ 0x003f, 0xb338, 0xb339, 0xb33a, 0xb33b, 0xb33c, 0xb33d, 0xb33e,
+ 0xb33f, 0xb340, 0xb341, 0xb342, 0xb343, 0xb344, 0xb345, 0xb346,
+ 0xb347, 0xb348, 0x003f, 0xb349, 0xb34a, 0xb34b, 0xb34c, 0xb34d,
+ 0xb34e, 0xb34f, 0xb350, 0xb351, 0xb352, 0xb353, 0x003f, 0x003f,
+ 0x003f, 0xb354, 0xb355, 0xb356, 0xb357, 0xb358, 0xb359, 0xb35a,
+ 0xb35b, 0xb35c, 0xb35d, 0xb35e, 0xb35f, 0xb360, 0xb361, 0xb362,
+ 0xb363, 0xb364, 0x003f, 0xb365, 0xb366, 0xb367, 0xb368, 0xb369,
+ 0xb36a, 0xb36b, 0xb36c, 0xb36d, 0xb36e, 0xb36f, 0x003f, 0x003f,
+ /* lead byte 95 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb370, 0xb371, 0xb372, 0xb373, 0xb374, 0xb375, 0xb376,
+ 0xb377, 0xb378, 0xb379, 0xb37a, 0xb37b, 0xb37c, 0xb37d, 0xb37e,
+ 0xb37f, 0xb380, 0x003f, 0xb381, 0xb382, 0xb383, 0xb384, 0xb385,
+ 0xb386, 0xb387, 0xb388, 0xb389, 0xb38a, 0xb38b, 0x003f, 0x003f,
+ 0x003f, 0xb38c, 0xb38d, 0xb38e, 0xb38f, 0xb390, 0xb391, 0xb392,
+ 0xb393, 0xb394, 0xb395, 0xb396, 0xb397, 0xb398, 0xb399, 0xb39a,
+ 0xb39b, 0xb39c, 0x003f, 0xb39d, 0xb39e, 0xb39f, 0xb3a0, 0xb3a1,
+ 0xb3a2, 0xb3a3, 0xb3a4, 0xb3a5, 0xb3a6, 0xb3a7, 0x003f, 0x003f,
+ 0x003f, 0xb3a8, 0xb3a9, 0xb3aa, 0xb3ab, 0xb3ac, 0xb3ad, 0xb3ae,
+ 0xb3af, 0xb3b0, 0xb3b1, 0xb3b2, 0xb3b3, 0xb3b4, 0xb3b5, 0xb3b6,
+ 0xb3b7, 0xb3b8, 0x003f, 0xb3b9, 0xb3ba, 0xb3bb, 0xb3bc, 0xb3bd,
+ 0xb3be, 0xb3bf, 0xb3c0, 0xb3c1, 0xb3c2, 0xb3c3, 0x003f, 0x003f,
+ 0x003f, 0xb3c4, 0xb3c5, 0xb3c6, 0xb3c7, 0xb3c8, 0xb3c9, 0xb3ca,
+ 0xb3cb, 0xb3cc, 0xb3cd, 0xb3ce, 0xb3cf, 0xb3d0, 0xb3d1, 0xb3d2,
+ 0xb3d3, 0xb3d4, 0x003f, 0xb3d5, 0xb3d6, 0xb3d7, 0xb3d8, 0xb3d9,
+ 0xb3da, 0xb3db, 0xb3dc, 0xb3dd, 0xb3de, 0xb3df, 0x003f, 0x003f,
+ 0x003f, 0xb3e0, 0xb3e1, 0xb3e2, 0xb3e3, 0xb3e4, 0xb3e5, 0xb3e6,
+ 0xb3e7, 0xb3e8, 0xb3e9, 0xb3ea, 0xb3eb, 0xb3ec, 0xb3ed, 0xb3ee,
+ 0xb3ef, 0xb3f0, 0x003f, 0xb3f1, 0xb3f2, 0xb3f3, 0xb3f4, 0xb3f5,
+ 0xb3f6, 0xb3f7, 0xb3f8, 0xb3f9, 0xb3fa, 0xb3fb, 0x003f, 0x003f,
+ 0x003f, 0xb3fc, 0xb3fd, 0xb3fe, 0xb3ff, 0xb400, 0xb401, 0xb402,
+ 0xb403, 0xb404, 0xb405, 0xb406, 0xb407, 0xb408, 0xb409, 0xb40a,
+ 0xb40b, 0xb40c, 0x003f, 0xb40d, 0xb40e, 0xb40f, 0xb410, 0xb411,
+ 0xb412, 0xb413, 0xb414, 0xb415, 0xb416, 0xb417, 0x003f, 0x003f,
+ /* lead byte 96 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb418, 0xb419, 0xb41a, 0xb41b, 0xb41c, 0xb41d, 0xb41e,
+ 0xb41f, 0xb420, 0xb421, 0xb422, 0xb423, 0xb424, 0xb425, 0xb426,
+ 0xb427, 0xb428, 0x003f, 0xb429, 0xb42a, 0xb42b, 0xb42c, 0xb42d,
+ 0xb42e, 0xb42f, 0xb430, 0xb431, 0xb432, 0xb433, 0x003f, 0x003f,
+ 0x003f, 0xb434, 0xb435, 0xb436, 0xb437, 0xb438, 0xb439, 0xb43a,
+ 0xb43b, 0xb43c, 0xb43d, 0xb43e, 0xb43f, 0xb440, 0xb441, 0xb442,
+ 0xb443, 0xb444, 0x003f, 0xb445, 0xb446, 0xb447, 0xb448, 0xb449,
+ 0xb44a, 0xb44b, 0xb44c, 0xb44d, 0xb44e, 0xb44f, 0x003f, 0x003f,
+ 0x003f, 0xb450, 0xb451, 0xb452, 0xb453, 0xb454, 0xb455, 0xb456,
+ 0xb457, 0xb458, 0xb459, 0xb45a, 0xb45b, 0xb45c, 0xb45d, 0xb45e,
+ 0xb45f, 0xb460, 0x003f, 0xb461, 0xb462, 0xb463, 0xb464, 0xb465,
+ 0xb466, 0xb467, 0xb468, 0xb469, 0xb46a, 0xb46b, 0x003f, 0x003f,
+ 0x003f, 0xb46c, 0xb46d, 0xb46e, 0xb46f, 0xb470, 0xb471, 0xb472,
+ 0xb473, 0xb474, 0xb475, 0xb476, 0xb477, 0xb478, 0xb479, 0xb47a,
+ 0xb47b, 0xb47c, 0x003f, 0xb47d, 0xb47e, 0xb47f, 0xb480, 0xb481,
+ 0xb482, 0xb483, 0xb484, 0xb485, 0xb486, 0xb487, 0x003f, 0x003f,
+ 0x003f, 0xb488, 0xb489, 0xb48a, 0xb48b, 0xb48c, 0xb48d, 0xb48e,
+ 0xb48f, 0xb490, 0xb491, 0xb492, 0xb493, 0xb494, 0xb495, 0xb496,
+ 0xb497, 0xb498, 0x003f, 0xb499, 0xb49a, 0xb49b, 0xb49c, 0xb49d,
+ 0xb49e, 0xb49f, 0xb4a0, 0xb4a1, 0xb4a2, 0xb4a3, 0x003f, 0x003f,
+ 0x003f, 0xb4a4, 0xb4a5, 0xb4a6, 0xb4a7, 0xb4a8, 0xb4a9, 0xb4aa,
+ 0xb4ab, 0xb4ac, 0xb4ad, 0xb4ae, 0xb4af, 0xb4b0, 0xb4b1, 0xb4b2,
+ 0xb4b3, 0xb4b4, 0x003f, 0xb4b5, 0xb4b6, 0xb4b7, 0xb4b8, 0xb4b9,
+ 0xb4ba, 0xb4bb, 0xb4bc, 0xb4bd, 0xb4be, 0xb4bf, 0x003f, 0x003f,
+ /* lead byte 97 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb4c0, 0xb4c1, 0xb4c2, 0xb4c3, 0xb4c4, 0xb4c5, 0xb4c6,
+ 0xb4c7, 0xb4c8, 0xb4c9, 0xb4ca, 0xb4cb, 0xb4cc, 0xb4cd, 0xb4ce,
+ 0xb4cf, 0xb4d0, 0x003f, 0xb4d1, 0xb4d2, 0xb4d3, 0xb4d4, 0xb4d5,
+ 0xb4d6, 0xb4d7, 0xb4d8, 0xb4d9, 0xb4da, 0xb4db, 0x003f, 0x003f,
+ 0x003f, 0xb4dc, 0xb4dd, 0xb4de, 0xb4df, 0xb4e0, 0xb4e1, 0xb4e2,
+ 0xb4e3, 0xb4e4, 0xb4e5, 0xb4e6, 0xb4e7, 0xb4e8, 0xb4e9, 0xb4ea,
+ 0xb4eb, 0xb4ec, 0x003f, 0xb4ed, 0xb4ee, 0xb4ef, 0xb4f0, 0xb4f1,
+ 0xb4f2, 0xb4f3, 0xb4f4, 0xb4f5, 0xb4f6, 0xb4f7, 0x003f, 0x003f,
+ 0x003f, 0xb4f8, 0xb4f9, 0xb4fa, 0xb4fb, 0xb4fc, 0xb4fd, 0xb4fe,
+ 0xb4ff, 0xb500, 0xb501, 0xb502, 0xb503, 0xb504, 0xb505, 0xb506,
+ 0xb507, 0xb508, 0x003f, 0xb509, 0xb50a, 0xb50b, 0xb50c, 0xb50d,
+ 0xb50e, 0xb50f, 0xb510, 0xb511, 0xb512, 0xb513, 0x003f, 0x003f,
+ 0x003f, 0xb514, 0xb515, 0xb516, 0xb517, 0xb518, 0xb519, 0xb51a,
+ 0xb51b, 0xb51c, 0xb51d, 0xb51e, 0xb51f, 0xb520, 0xb521, 0xb522,
+ 0xb523, 0xb524, 0x003f, 0xb525, 0xb526, 0xb527, 0xb528, 0xb529,
+ 0xb52a, 0xb52b, 0xb52c, 0xb52d, 0xb52e, 0xb52f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte 98 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3138, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb530, 0xb531, 0xb532, 0xb533, 0xb534, 0xb535, 0xb536,
+ 0xb537, 0xb538, 0xb539, 0xb53a, 0xb53b, 0xb53c, 0xb53d, 0xb53e,
+ 0xb53f, 0xb540, 0x003f, 0xb541, 0xb542, 0xb543, 0xb544, 0xb545,
+ 0xb546, 0xb547, 0xb548, 0xb549, 0xb54a, 0xb54b, 0x003f, 0x003f,
+ 0x003f, 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xb550, 0xb551, 0xb552,
+ 0xb553, 0xb554, 0xb555, 0xb556, 0xb557, 0xb558, 0xb559, 0xb55a,
+ 0xb55b, 0xb55c, 0x003f, 0xb55d, 0xb55e, 0xb55f, 0xb560, 0xb561,
+ 0xb562, 0xb563, 0xb564, 0xb565, 0xb566, 0xb567, 0x003f, 0x003f,
+ 0x003f, 0xb568, 0xb569, 0xb56a, 0xb56b, 0xb56c, 0xb56d, 0xb56e,
+ 0xb56f, 0xb570, 0xb571, 0xb572, 0xb573, 0xb574, 0xb575, 0xb576,
+ 0xb577, 0xb578, 0x003f, 0xb579, 0xb57a, 0xb57b, 0xb57c, 0xb57d,
+ 0xb57e, 0xb57f, 0xb580, 0xb581, 0xb582, 0xb583, 0x003f, 0x003f,
+ 0x003f, 0xb584, 0xb585, 0xb586, 0xb587, 0xb588, 0xb589, 0xb58a,
+ 0xb58b, 0xb58c, 0xb58d, 0xb58e, 0xb58f, 0xb590, 0xb591, 0xb592,
+ 0xb593, 0xb594, 0x003f, 0xb595, 0xb596, 0xb597, 0xb598, 0xb599,
+ 0xb59a, 0xb59b, 0xb59c, 0xb59d, 0xb59e, 0xb59f, 0x003f, 0x003f,
+ 0x003f, 0xb5a0, 0xb5a1, 0xb5a2, 0xb5a3, 0xb5a4, 0xb5a5, 0xb5a6,
+ 0xb5a7, 0xb5a8, 0xb5a9, 0xb5aa, 0xb5ab, 0xb5ac, 0xb5ad, 0xb5ae,
+ 0xb5af, 0xb5b0, 0x003f, 0xb5b1, 0xb5b2, 0xb5b3, 0xb5b4, 0xb5b5,
+ 0xb5b6, 0xb5b7, 0xb5b8, 0xb5b9, 0xb5ba, 0xb5bb, 0x003f, 0x003f,
+ /* lead byte 99 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb5bc, 0xb5bd, 0xb5be, 0xb5bf, 0xb5c0, 0xb5c1, 0xb5c2,
+ 0xb5c3, 0xb5c4, 0xb5c5, 0xb5c6, 0xb5c7, 0xb5c8, 0xb5c9, 0xb5ca,
+ 0xb5cb, 0xb5cc, 0x003f, 0xb5cd, 0xb5ce, 0xb5cf, 0xb5d0, 0xb5d1,
+ 0xb5d2, 0xb5d3, 0xb5d4, 0xb5d5, 0xb5d6, 0xb5d7, 0x003f, 0x003f,
+ 0x003f, 0xb5d8, 0xb5d9, 0xb5da, 0xb5db, 0xb5dc, 0xb5dd, 0xb5de,
+ 0xb5df, 0xb5e0, 0xb5e1, 0xb5e2, 0xb5e3, 0xb5e4, 0xb5e5, 0xb5e6,
+ 0xb5e7, 0xb5e8, 0x003f, 0xb5e9, 0xb5ea, 0xb5eb, 0xb5ec, 0xb5ed,
+ 0xb5ee, 0xb5ef, 0xb5f0, 0xb5f1, 0xb5f2, 0xb5f3, 0x003f, 0x003f,
+ 0x003f, 0xb5f4, 0xb5f5, 0xb5f6, 0xb5f7, 0xb5f8, 0xb5f9, 0xb5fa,
+ 0xb5fb, 0xb5fc, 0xb5fd, 0xb5fe, 0xb5ff, 0xb600, 0xb601, 0xb602,
+ 0xb603, 0xb604, 0x003f, 0xb605, 0xb606, 0xb607, 0xb608, 0xb609,
+ 0xb60a, 0xb60b, 0xb60c, 0xb60d, 0xb60e, 0xb60f, 0x003f, 0x003f,
+ 0x003f, 0xb610, 0xb611, 0xb612, 0xb613, 0xb614, 0xb615, 0xb616,
+ 0xb617, 0xb618, 0xb619, 0xb61a, 0xb61b, 0xb61c, 0xb61d, 0xb61e,
+ 0xb61f, 0xb620, 0x003f, 0xb621, 0xb622, 0xb623, 0xb624, 0xb625,
+ 0xb626, 0xb627, 0xb628, 0xb629, 0xb62a, 0xb62b, 0x003f, 0x003f,
+ 0x003f, 0xb62c, 0xb62d, 0xb62e, 0xb62f, 0xb630, 0xb631, 0xb632,
+ 0xb633, 0xb634, 0xb635, 0xb636, 0xb637, 0xb638, 0xb639, 0xb63a,
+ 0xb63b, 0xb63c, 0x003f, 0xb63d, 0xb63e, 0xb63f, 0xb640, 0xb641,
+ 0xb642, 0xb643, 0xb644, 0xb645, 0xb646, 0xb647, 0x003f, 0x003f,
+ 0x003f, 0xb648, 0xb649, 0xb64a, 0xb64b, 0xb64c, 0xb64d, 0xb64e,
+ 0xb64f, 0xb650, 0xb651, 0xb652, 0xb653, 0xb654, 0xb655, 0xb656,
+ 0xb657, 0xb658, 0x003f, 0xb659, 0xb65a, 0xb65b, 0xb65c, 0xb65d,
+ 0xb65e, 0xb65f, 0xb660, 0xb661, 0xb662, 0xb663, 0x003f, 0x003f,
+ /* lead byte 9a */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb664, 0xb665, 0xb666, 0xb667, 0xb668, 0xb669, 0xb66a,
+ 0xb66b, 0xb66c, 0xb66d, 0xb66e, 0xb66f, 0xb670, 0xb671, 0xb672,
+ 0xb673, 0xb674, 0x003f, 0xb675, 0xb676, 0xb677, 0xb678, 0xb679,
+ 0xb67a, 0xb67b, 0xb67c, 0xb67d, 0xb67e, 0xb67f, 0x003f, 0x003f,
+ 0x003f, 0xb680, 0xb681, 0xb682, 0xb683, 0xb684, 0xb685, 0xb686,
+ 0xb687, 0xb688, 0xb689, 0xb68a, 0xb68b, 0xb68c, 0xb68d, 0xb68e,
+ 0xb68f, 0xb690, 0x003f, 0xb691, 0xb692, 0xb693, 0xb694, 0xb695,
+ 0xb696, 0xb697, 0xb698, 0xb699, 0xb69a, 0xb69b, 0x003f, 0x003f,
+ 0x003f, 0xb69c, 0xb69d, 0xb69e, 0xb69f, 0xb6a0, 0xb6a1, 0xb6a2,
+ 0xb6a3, 0xb6a4, 0xb6a5, 0xb6a6, 0xb6a7, 0xb6a8, 0xb6a9, 0xb6aa,
+ 0xb6ab, 0xb6ac, 0x003f, 0xb6ad, 0xb6ae, 0xb6af, 0xb6b0, 0xb6b1,
+ 0xb6b2, 0xb6b3, 0xb6b4, 0xb6b5, 0xb6b6, 0xb6b7, 0x003f, 0x003f,
+ 0x003f, 0xb6b8, 0xb6b9, 0xb6ba, 0xb6bb, 0xb6bc, 0xb6bd, 0xb6be,
+ 0xb6bf, 0xb6c0, 0xb6c1, 0xb6c2, 0xb6c3, 0xb6c4, 0xb6c5, 0xb6c6,
+ 0xb6c7, 0xb6c8, 0x003f, 0xb6c9, 0xb6ca, 0xb6cb, 0xb6cc, 0xb6cd,
+ 0xb6ce, 0xb6cf, 0xb6d0, 0xb6d1, 0xb6d2, 0xb6d3, 0x003f, 0x003f,
+ 0x003f, 0xb6d4, 0xb6d5, 0xb6d6, 0xb6d7, 0xb6d8, 0xb6d9, 0xb6da,
+ 0xb6db, 0xb6dc, 0xb6dd, 0xb6de, 0xb6df, 0xb6e0, 0xb6e1, 0xb6e2,
+ 0xb6e3, 0xb6e4, 0x003f, 0xb6e5, 0xb6e6, 0xb6e7, 0xb6e8, 0xb6e9,
+ 0xb6ea, 0xb6eb, 0xb6ec, 0xb6ed, 0xb6ee, 0xb6ef, 0x003f, 0x003f,
+ 0x003f, 0xb6f0, 0xb6f1, 0xb6f2, 0xb6f3, 0xb6f4, 0xb6f5, 0xb6f6,
+ 0xb6f7, 0xb6f8, 0xb6f9, 0xb6fa, 0xb6fb, 0xb6fc, 0xb6fd, 0xb6fe,
+ 0xb6ff, 0xb700, 0x003f, 0xb701, 0xb702, 0xb703, 0xb704, 0xb705,
+ 0xb706, 0xb707, 0xb708, 0xb709, 0xb70a, 0xb70b, 0x003f, 0x003f,
+ /* lead byte 9b */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb70c, 0xb70d, 0xb70e, 0xb70f, 0xb710, 0xb711, 0xb712,
+ 0xb713, 0xb714, 0xb715, 0xb716, 0xb717, 0xb718, 0xb719, 0xb71a,
+ 0xb71b, 0xb71c, 0x003f, 0xb71d, 0xb71e, 0xb71f, 0xb720, 0xb721,
+ 0xb722, 0xb723, 0xb724, 0xb725, 0xb726, 0xb727, 0x003f, 0x003f,
+ 0x003f, 0xb728, 0xb729, 0xb72a, 0xb72b, 0xb72c, 0xb72d, 0xb72e,
+ 0xb72f, 0xb730, 0xb731, 0xb732, 0xb733, 0xb734, 0xb735, 0xb736,
+ 0xb737, 0xb738, 0x003f, 0xb739, 0xb73a, 0xb73b, 0xb73c, 0xb73d,
+ 0xb73e, 0xb73f, 0xb740, 0xb741, 0xb742, 0xb743, 0x003f, 0x003f,
+ 0x003f, 0xb744, 0xb745, 0xb746, 0xb747, 0xb748, 0xb749, 0xb74a,
+ 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f, 0xb750, 0xb751, 0xb752,
+ 0xb753, 0xb754, 0x003f, 0xb755, 0xb756, 0xb757, 0xb758, 0xb759,
+ 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xb75f, 0x003f, 0x003f,
+ 0x003f, 0xb760, 0xb761, 0xb762, 0xb763, 0xb764, 0xb765, 0xb766,
+ 0xb767, 0xb768, 0xb769, 0xb76a, 0xb76b, 0xb76c, 0xb76d, 0xb76e,
+ 0xb76f, 0xb770, 0x003f, 0xb771, 0xb772, 0xb773, 0xb774, 0xb775,
+ 0xb776, 0xb777, 0xb778, 0xb779, 0xb77a, 0xb77b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte 9c */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3139, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb77c, 0xb77d, 0xb77e, 0xb77f, 0xb780, 0xb781, 0xb782,
+ 0xb783, 0xb784, 0xb785, 0xb786, 0xb787, 0xb788, 0xb789, 0xb78a,
+ 0xb78b, 0xb78c, 0x003f, 0xb78d, 0xb78e, 0xb78f, 0xb790, 0xb791,
+ 0xb792, 0xb793, 0xb794, 0xb795, 0xb796, 0xb797, 0x003f, 0x003f,
+ 0x003f, 0xb798, 0xb799, 0xb79a, 0xb79b, 0xb79c, 0xb79d, 0xb79e,
+ 0xb79f, 0xb7a0, 0xb7a1, 0xb7a2, 0xb7a3, 0xb7a4, 0xb7a5, 0xb7a6,
+ 0xb7a7, 0xb7a8, 0x003f, 0xb7a9, 0xb7aa, 0xb7ab, 0xb7ac, 0xb7ad,
+ 0xb7ae, 0xb7af, 0xb7b0, 0xb7b1, 0xb7b2, 0xb7b3, 0x003f, 0x003f,
+ 0x003f, 0xb7b4, 0xb7b5, 0xb7b6, 0xb7b7, 0xb7b8, 0xb7b9, 0xb7ba,
+ 0xb7bb, 0xb7bc, 0xb7bd, 0xb7be, 0xb7bf, 0xb7c0, 0xb7c1, 0xb7c2,
+ 0xb7c3, 0xb7c4, 0x003f, 0xb7c5, 0xb7c6, 0xb7c7, 0xb7c8, 0xb7c9,
+ 0xb7ca, 0xb7cb, 0xb7cc, 0xb7cd, 0xb7ce, 0xb7cf, 0x003f, 0x003f,
+ 0x003f, 0xb7d0, 0xb7d1, 0xb7d2, 0xb7d3, 0xb7d4, 0xb7d5, 0xb7d6,
+ 0xb7d7, 0xb7d8, 0xb7d9, 0xb7da, 0xb7db, 0xb7dc, 0xb7dd, 0xb7de,
+ 0xb7df, 0xb7e0, 0x003f, 0xb7e1, 0xb7e2, 0xb7e3, 0xb7e4, 0xb7e5,
+ 0xb7e6, 0xb7e7, 0xb7e8, 0xb7e9, 0xb7ea, 0xb7eb, 0x003f, 0x003f,
+ 0x003f, 0xb7ec, 0xb7ed, 0xb7ee, 0xb7ef, 0xb7f0, 0xb7f1, 0xb7f2,
+ 0xb7f3, 0xb7f4, 0xb7f5, 0xb7f6, 0xb7f7, 0xb7f8, 0xb7f9, 0xb7fa,
+ 0xb7fb, 0xb7fc, 0x003f, 0xb7fd, 0xb7fe, 0xb7ff, 0xb800, 0xb801,
+ 0xb802, 0xb803, 0xb804, 0xb805, 0xb806, 0xb807, 0x003f, 0x003f,
+ /* lead byte 9d */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb808, 0xb809, 0xb80a, 0xb80b, 0xb80c, 0xb80d, 0xb80e,
+ 0xb80f, 0xb810, 0xb811, 0xb812, 0xb813, 0xb814, 0xb815, 0xb816,
+ 0xb817, 0xb818, 0x003f, 0xb819, 0xb81a, 0xb81b, 0xb81c, 0xb81d,
+ 0xb81e, 0xb81f, 0xb820, 0xb821, 0xb822, 0xb823, 0x003f, 0x003f,
+ 0x003f, 0xb824, 0xb825, 0xb826, 0xb827, 0xb828, 0xb829, 0xb82a,
+ 0xb82b, 0xb82c, 0xb82d, 0xb82e, 0xb82f, 0xb830, 0xb831, 0xb832,
+ 0xb833, 0xb834, 0x003f, 0xb835, 0xb836, 0xb837, 0xb838, 0xb839,
+ 0xb83a, 0xb83b, 0xb83c, 0xb83d, 0xb83e, 0xb83f, 0x003f, 0x003f,
+ 0x003f, 0xb840, 0xb841, 0xb842, 0xb843, 0xb844, 0xb845, 0xb846,
+ 0xb847, 0xb848, 0xb849, 0xb84a, 0xb84b, 0xb84c, 0xb84d, 0xb84e,
+ 0xb84f, 0xb850, 0x003f, 0xb851, 0xb852, 0xb853, 0xb854, 0xb855,
+ 0xb856, 0xb857, 0xb858, 0xb859, 0xb85a, 0xb85b, 0x003f, 0x003f,
+ 0x003f, 0xb85c, 0xb85d, 0xb85e, 0xb85f, 0xb860, 0xb861, 0xb862,
+ 0xb863, 0xb864, 0xb865, 0xb866, 0xb867, 0xb868, 0xb869, 0xb86a,
+ 0xb86b, 0xb86c, 0x003f, 0xb86d, 0xb86e, 0xb86f, 0xb870, 0xb871,
+ 0xb872, 0xb873, 0xb874, 0xb875, 0xb876, 0xb877, 0x003f, 0x003f,
+ 0x003f, 0xb878, 0xb879, 0xb87a, 0xb87b, 0xb87c, 0xb87d, 0xb87e,
+ 0xb87f, 0xb880, 0xb881, 0xb882, 0xb883, 0xb884, 0xb885, 0xb886,
+ 0xb887, 0xb888, 0x003f, 0xb889, 0xb88a, 0xb88b, 0xb88c, 0xb88d,
+ 0xb88e, 0xb88f, 0xb890, 0xb891, 0xb892, 0xb893, 0x003f, 0x003f,
+ 0x003f, 0xb894, 0xb895, 0xb896, 0xb897, 0xb898, 0xb899, 0xb89a,
+ 0xb89b, 0xb89c, 0xb89d, 0xb89e, 0xb89f, 0xb8a0, 0xb8a1, 0xb8a2,
+ 0xb8a3, 0xb8a4, 0x003f, 0xb8a5, 0xb8a6, 0xb8a7, 0xb8a8, 0xb8a9,
+ 0xb8aa, 0xb8ab, 0xb8ac, 0xb8ad, 0xb8ae, 0xb8af, 0x003f, 0x003f,
+ /* lead byte 9e */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb8b0, 0xb8b1, 0xb8b2, 0xb8b3, 0xb8b4, 0xb8b5, 0xb8b6,
+ 0xb8b7, 0xb8b8, 0xb8b9, 0xb8ba, 0xb8bb, 0xb8bc, 0xb8bd, 0xb8be,
+ 0xb8bf, 0xb8c0, 0x003f, 0xb8c1, 0xb8c2, 0xb8c3, 0xb8c4, 0xb8c5,
+ 0xb8c6, 0xb8c7, 0xb8c8, 0xb8c9, 0xb8ca, 0xb8cb, 0x003f, 0x003f,
+ 0x003f, 0xb8cc, 0xb8cd, 0xb8ce, 0xb8cf, 0xb8d0, 0xb8d1, 0xb8d2,
+ 0xb8d3, 0xb8d4, 0xb8d5, 0xb8d6, 0xb8d7, 0xb8d8, 0xb8d9, 0xb8da,
+ 0xb8db, 0xb8dc, 0x003f, 0xb8dd, 0xb8de, 0xb8df, 0xb8e0, 0xb8e1,
+ 0xb8e2, 0xb8e3, 0xb8e4, 0xb8e5, 0xb8e6, 0xb8e7, 0x003f, 0x003f,
+ 0x003f, 0xb8e8, 0xb8e9, 0xb8ea, 0xb8eb, 0xb8ec, 0xb8ed, 0xb8ee,
+ 0xb8ef, 0xb8f0, 0xb8f1, 0xb8f2, 0xb8f3, 0xb8f4, 0xb8f5, 0xb8f6,
+ 0xb8f7, 0xb8f8, 0x003f, 0xb8f9, 0xb8fa, 0xb8fb, 0xb8fc, 0xb8fd,
+ 0xb8fe, 0xb8ff, 0xb900, 0xb901, 0xb902, 0xb903, 0x003f, 0x003f,
+ 0x003f, 0xb904, 0xb905, 0xb906, 0xb907, 0xb908, 0xb909, 0xb90a,
+ 0xb90b, 0xb90c, 0xb90d, 0xb90e, 0xb90f, 0xb910, 0xb911, 0xb912,
+ 0xb913, 0xb914, 0x003f, 0xb915, 0xb916, 0xb917, 0xb918, 0xb919,
+ 0xb91a, 0xb91b, 0xb91c, 0xb91d, 0xb91e, 0xb91f, 0x003f, 0x003f,
+ 0x003f, 0xb920, 0xb921, 0xb922, 0xb923, 0xb924, 0xb925, 0xb926,
+ 0xb927, 0xb928, 0xb929, 0xb92a, 0xb92b, 0xb92c, 0xb92d, 0xb92e,
+ 0xb92f, 0xb930, 0x003f, 0xb931, 0xb932, 0xb933, 0xb934, 0xb935,
+ 0xb936, 0xb937, 0xb938, 0xb939, 0xb93a, 0xb93b, 0x003f, 0x003f,
+ 0x003f, 0xb93c, 0xb93d, 0xb93e, 0xb93f, 0xb940, 0xb941, 0xb942,
+ 0xb943, 0xb944, 0xb945, 0xb946, 0xb947, 0xb948, 0xb949, 0xb94a,
+ 0xb94b, 0xb94c, 0x003f, 0xb94d, 0xb94e, 0xb94f, 0xb950, 0xb951,
+ 0xb952, 0xb953, 0xb954, 0xb955, 0xb956, 0xb957, 0x003f, 0x003f,
+ /* lead byte 9f */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb958, 0xb959, 0xb95a, 0xb95b, 0xb95c, 0xb95d, 0xb95e,
+ 0xb95f, 0xb960, 0xb961, 0xb962, 0xb963, 0xb964, 0xb965, 0xb966,
+ 0xb967, 0xb968, 0x003f, 0xb969, 0xb96a, 0xb96b, 0xb96c, 0xb96d,
+ 0xb96e, 0xb96f, 0xb970, 0xb971, 0xb972, 0xb973, 0x003f, 0x003f,
+ 0x003f, 0xb974, 0xb975, 0xb976, 0xb977, 0xb978, 0xb979, 0xb97a,
+ 0xb97b, 0xb97c, 0xb97d, 0xb97e, 0xb97f, 0xb980, 0xb981, 0xb982,
+ 0xb983, 0xb984, 0x003f, 0xb985, 0xb986, 0xb987, 0xb988, 0xb989,
+ 0xb98a, 0xb98b, 0xb98c, 0xb98d, 0xb98e, 0xb98f, 0x003f, 0x003f,
+ 0x003f, 0xb990, 0xb991, 0xb992, 0xb993, 0xb994, 0xb995, 0xb996,
+ 0xb997, 0xb998, 0xb999, 0xb99a, 0xb99b, 0xb99c, 0xb99d, 0xb99e,
+ 0xb99f, 0xb9a0, 0x003f, 0xb9a1, 0xb9a2, 0xb9a3, 0xb9a4, 0xb9a5,
+ 0xb9a6, 0xb9a7, 0xb9a8, 0xb9a9, 0xb9aa, 0xb9ab, 0x003f, 0x003f,
+ 0x003f, 0xb9ac, 0xb9ad, 0xb9ae, 0xb9af, 0xb9b0, 0xb9b1, 0xb9b2,
+ 0xb9b3, 0xb9b4, 0xb9b5, 0xb9b6, 0xb9b7, 0xb9b8, 0xb9b9, 0xb9ba,
+ 0xb9bb, 0xb9bc, 0x003f, 0xb9bd, 0xb9be, 0xb9bf, 0xb9c0, 0xb9c1,
+ 0xb9c2, 0xb9c3, 0xb9c4, 0xb9c5, 0xb9c6, 0xb9c7, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte a0 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3141, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xb9c8, 0xb9c9, 0xb9ca, 0xb9cb, 0xb9cc, 0xb9cd, 0xb9ce,
+ 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d3, 0xb9d4, 0xb9d5, 0xb9d6,
+ 0xb9d7, 0xb9d8, 0x003f, 0xb9d9, 0xb9da, 0xb9db, 0xb9dc, 0xb9dd,
+ 0xb9de, 0xb9df, 0xb9e0, 0xb9e1, 0xb9e2, 0xb9e3, 0x003f, 0x003f,
+ 0x003f, 0xb9e4, 0xb9e5, 0xb9e6, 0xb9e7, 0xb9e8, 0xb9e9, 0xb9ea,
+ 0xb9eb, 0xb9ec, 0xb9ed, 0xb9ee, 0xb9ef, 0xb9f0, 0xb9f1, 0xb9f2,
+ 0xb9f3, 0xb9f4, 0x003f, 0xb9f5, 0xb9f6, 0xb9f7, 0xb9f8, 0xb9f9,
+ 0xb9fa, 0xb9fb, 0xb9fc, 0xb9fd, 0xb9fe, 0xb9ff, 0x003f, 0x003f,
+ 0x003f, 0xba00, 0xba01, 0xba02, 0xba03, 0xba04, 0xba05, 0xba06,
+ 0xba07, 0xba08, 0xba09, 0xba0a, 0xba0b, 0xba0c, 0xba0d, 0xba0e,
+ 0xba0f, 0xba10, 0x003f, 0xba11, 0xba12, 0xba13, 0xba14, 0xba15,
+ 0xba16, 0xba17, 0xba18, 0xba19, 0xba1a, 0xba1b, 0x003f, 0x003f,
+ 0x003f, 0xba1c, 0xba1d, 0xba1e, 0xba1f, 0xba20, 0xba21, 0xba22,
+ 0xba23, 0xba24, 0xba25, 0xba26, 0xba27, 0xba28, 0xba29, 0xba2a,
+ 0xba2b, 0xba2c, 0x003f, 0xba2d, 0xba2e, 0xba2f, 0xba30, 0xba31,
+ 0xba32, 0xba33, 0xba34, 0xba35, 0xba36, 0xba37, 0x003f, 0x003f,
+ 0x003f, 0xba38, 0xba39, 0xba3a, 0xba3b, 0xba3c, 0xba3d, 0xba3e,
+ 0xba3f, 0xba40, 0xba41, 0xba42, 0xba43, 0xba44, 0xba45, 0xba46,
+ 0xba47, 0xba48, 0x003f, 0xba49, 0xba4a, 0xba4b, 0xba4c, 0xba4d,
+ 0xba4e, 0xba4f, 0xba50, 0xba51, 0xba52, 0xba53, 0x003f, 0x003f,
+ /* lead byte a1 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xba54, 0xba55, 0xba56, 0xba57, 0xba58, 0xba59, 0xba5a,
+ 0xba5b, 0xba5c, 0xba5d, 0xba5e, 0xba5f, 0xba60, 0xba61, 0xba62,
+ 0xba63, 0xba64, 0x003f, 0xba65, 0xba66, 0xba67, 0xba68, 0xba69,
+ 0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f, 0x003f, 0x003f,
+ 0x003f, 0xba70, 0xba71, 0xba72, 0xba73, 0xba74, 0xba75, 0xba76,
+ 0xba77, 0xba78, 0xba79, 0xba7a, 0xba7b, 0xba7c, 0xba7d, 0xba7e,
+ 0xba7f, 0xba80, 0x003f, 0xba81, 0xba82, 0xba83, 0xba84, 0xba85,
+ 0xba86, 0xba87, 0xba88, 0xba89, 0xba8a, 0xba8b, 0x003f, 0x003f,
+ 0x003f, 0xba8c, 0xba8d, 0xba8e, 0xba8f, 0xba90, 0xba91, 0xba92,
+ 0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, 0xba9a,
+ 0xba9b, 0xba9c, 0x003f, 0xba9d, 0xba9e, 0xba9f, 0xbaa0, 0xbaa1,
+ 0xbaa2, 0xbaa3, 0xbaa4, 0xbaa5, 0xbaa6, 0xbaa7, 0x003f, 0x003f,
+ 0x003f, 0xbaa8, 0xbaa9, 0xbaaa, 0xbaab, 0xbaac, 0xbaad, 0xbaae,
+ 0xbaaf, 0xbab0, 0xbab1, 0xbab2, 0xbab3, 0xbab4, 0xbab5, 0xbab6,
+ 0xbab7, 0xbab8, 0x003f, 0xbab9, 0xbaba, 0xbabb, 0xbabc, 0xbabd,
+ 0xbabe, 0xbabf, 0xbac0, 0xbac1, 0xbac2, 0xbac3, 0x003f, 0x003f,
+ 0x003f, 0xbac4, 0xbac5, 0xbac6, 0xbac7, 0xbac8, 0xbac9, 0xbaca,
+ 0xbacb, 0xbacc, 0xbacd, 0xbace, 0xbacf, 0xbad0, 0xbad1, 0xbad2,
+ 0xbad3, 0xbad4, 0x003f, 0xbad5, 0xbad6, 0xbad7, 0xbad8, 0xbad9,
+ 0xbada, 0xbadb, 0xbadc, 0xbadd, 0xbade, 0xbadf, 0x003f, 0x003f,
+ 0x003f, 0xbae0, 0xbae1, 0xbae2, 0xbae3, 0xbae4, 0xbae5, 0xbae6,
+ 0xbae7, 0xbae8, 0xbae9, 0xbaea, 0xbaeb, 0xbaec, 0xbaed, 0xbaee,
+ 0xbaef, 0xbaf0, 0x003f, 0xbaf1, 0xbaf2, 0xbaf3, 0xbaf4, 0xbaf5,
+ 0xbaf6, 0xbaf7, 0xbaf8, 0xbaf9, 0xbafa, 0xbafb, 0x003f, 0x003f,
+ /* lead byte a2 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xbafc, 0xbafd, 0xbafe, 0xbaff, 0xbb00, 0xbb01, 0xbb02,
+ 0xbb03, 0xbb04, 0xbb05, 0xbb06, 0xbb07, 0xbb08, 0xbb09, 0xbb0a,
+ 0xbb0b, 0xbb0c, 0x003f, 0xbb0d, 0xbb0e, 0xbb0f, 0xbb10, 0xbb11,
+ 0xbb12, 0xbb13, 0xbb14, 0xbb15, 0xbb16, 0xbb17, 0x003f, 0x003f,
+ 0x003f, 0xbb18, 0xbb19, 0xbb1a, 0xbb1b, 0xbb1c, 0xbb1d, 0xbb1e,
+ 0xbb1f, 0xbb20, 0xbb21, 0xbb22, 0xbb23, 0xbb24, 0xbb25, 0xbb26,
+ 0xbb27, 0xbb28, 0x003f, 0xbb29, 0xbb2a, 0xbb2b, 0xbb2c, 0xbb2d,
+ 0xbb2e, 0xbb2f, 0xbb30, 0xbb31, 0xbb32, 0xbb33, 0x003f, 0x003f,
+ 0x003f, 0xbb34, 0xbb35, 0xbb36, 0xbb37, 0xbb38, 0xbb39, 0xbb3a,
+ 0xbb3b, 0xbb3c, 0xbb3d, 0xbb3e, 0xbb3f, 0xbb40, 0xbb41, 0xbb42,
+ 0xbb43, 0xbb44, 0x003f, 0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49,
+ 0xbb4a, 0xbb4b, 0xbb4c, 0xbb4d, 0xbb4e, 0xbb4f, 0x003f, 0x003f,
+ 0x003f, 0xbb50, 0xbb51, 0xbb52, 0xbb53, 0xbb54, 0xbb55, 0xbb56,
+ 0xbb57, 0xbb58, 0xbb59, 0xbb5a, 0xbb5b, 0xbb5c, 0xbb5d, 0xbb5e,
+ 0xbb5f, 0xbb60, 0x003f, 0xbb61, 0xbb62, 0xbb63, 0xbb64, 0xbb65,
+ 0xbb66, 0xbb67, 0xbb68, 0xbb69, 0xbb6a, 0xbb6b, 0x003f, 0x003f,
+ 0x003f, 0xbb6c, 0xbb6d, 0xbb6e, 0xbb6f, 0xbb70, 0xbb71, 0xbb72,
+ 0xbb73, 0xbb74, 0xbb75, 0xbb76, 0xbb77, 0xbb78, 0xbb79, 0xbb7a,
+ 0xbb7b, 0xbb7c, 0x003f, 0xbb7d, 0xbb7e, 0xbb7f, 0xbb80, 0xbb81,
+ 0xbb82, 0xbb83, 0xbb84, 0xbb85, 0xbb86, 0xbb87, 0x003f, 0x003f,
+ 0x003f, 0xbb88, 0xbb89, 0xbb8a, 0xbb8b, 0xbb8c, 0xbb8d, 0xbb8e,
+ 0xbb8f, 0xbb90, 0xbb91, 0xbb92, 0xbb93, 0xbb94, 0xbb95, 0xbb96,
+ 0xbb97, 0xbb98, 0x003f, 0xbb99, 0xbb9a, 0xbb9b, 0xbb9c, 0xbb9d,
+ 0xbb9e, 0xbb9f, 0xbba0, 0xbba1, 0xbba2, 0xbba3, 0x003f, 0x003f,
+ /* lead byte a3 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xbba4, 0xbba5, 0xbba6, 0xbba7, 0xbba8, 0xbba9, 0xbbaa,
+ 0xbbab, 0xbbac, 0xbbad, 0xbbae, 0xbbaf, 0xbbb0, 0xbbb1, 0xbbb2,
+ 0xbbb3, 0xbbb4, 0x003f, 0xbbb5, 0xbbb6, 0xbbb7, 0xbbb8, 0xbbb9,
+ 0xbbba, 0xbbbb, 0xbbbc, 0xbbbd, 0xbbbe, 0xbbbf, 0x003f, 0x003f,
+ 0x003f, 0xbbc0, 0xbbc1, 0xbbc2, 0xbbc3, 0xbbc4, 0xbbc5, 0xbbc6,
+ 0xbbc7, 0xbbc8, 0xbbc9, 0xbbca, 0xbbcb, 0xbbcc, 0xbbcd, 0xbbce,
+ 0xbbcf, 0xbbd0, 0x003f, 0xbbd1, 0xbbd2, 0xbbd3, 0xbbd4, 0xbbd5,
+ 0xbbd6, 0xbbd7, 0xbbd8, 0xbbd9, 0xbbda, 0xbbdb, 0x003f, 0x003f,
+ 0x003f, 0xbbdc, 0xbbdd, 0xbbde, 0xbbdf, 0xbbe0, 0xbbe1, 0xbbe2,
+ 0xbbe3, 0xbbe4, 0xbbe5, 0xbbe6, 0xbbe7, 0xbbe8, 0xbbe9, 0xbbea,
+ 0xbbeb, 0xbbec, 0x003f, 0xbbed, 0xbbee, 0xbbef, 0xbbf0, 0xbbf1,
+ 0xbbf2, 0xbbf3, 0xbbf4, 0xbbf5, 0xbbf6, 0xbbf7, 0x003f, 0x003f,
+ 0x003f, 0xbbf8, 0xbbf9, 0xbbfa, 0xbbfb, 0xbbfc, 0xbbfd, 0xbbfe,
+ 0xbbff, 0xbc00, 0xbc01, 0xbc02, 0xbc03, 0xbc04, 0xbc05, 0xbc06,
+ 0xbc07, 0xbc08, 0x003f, 0xbc09, 0xbc0a, 0xbc0b, 0xbc0c, 0xbc0d,
+ 0xbc0e, 0xbc0f, 0xbc10, 0xbc11, 0xbc12, 0xbc13, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte a4 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3142, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xbc14, 0xbc15, 0xbc16, 0xbc17, 0xbc18, 0xbc19, 0xbc1a,
+ 0xbc1b, 0xbc1c, 0xbc1d, 0xbc1e, 0xbc1f, 0xbc20, 0xbc21, 0xbc22,
+ 0xbc23, 0xbc24, 0x003f, 0xbc25, 0xbc26, 0xbc27, 0xbc28, 0xbc29,
+ 0xbc2a, 0xbc2b, 0xbc2c, 0xbc2d, 0xbc2e, 0xbc2f, 0x003f, 0x003f,
+ 0x003f, 0xbc30, 0xbc31, 0xbc32, 0xbc33, 0xbc34, 0xbc35, 0xbc36,
+ 0xbc37, 0xbc38, 0xbc39, 0xbc3a, 0xbc3b, 0xbc3c, 0xbc3d, 0xbc3e,
+ 0xbc3f, 0xbc40, 0x003f, 0xbc41, 0xbc42, 0xbc43, 0xbc44, 0xbc45,
+ 0xbc46, 0xbc47, 0xbc48, 0xbc49, 0xbc4a, 0xbc4b, 0x003f, 0x003f,
+ 0x003f, 0xbc4c, 0xbc4d, 0xbc4e, 0xbc4f, 0xbc50, 0xbc51, 0xbc52,
+ 0xbc53, 0xbc54, 0xbc55, 0xbc56, 0xbc57, 0xbc58, 0xbc59, 0xbc5a,
+ 0xbc5b, 0xbc5c, 0x003f, 0xbc5d, 0xbc5e, 0xbc5f, 0xbc60, 0xbc61,
+ 0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67, 0x003f, 0x003f,
+ 0x003f, 0xbc68, 0xbc69, 0xbc6a, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e,
+ 0xbc6f, 0xbc70, 0xbc71, 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76,
+ 0xbc77, 0xbc78, 0x003f, 0xbc79, 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d,
+ 0xbc7e, 0xbc7f, 0xbc80, 0xbc81, 0xbc82, 0xbc83, 0x003f, 0x003f,
+ 0x003f, 0xbc84, 0xbc85, 0xbc86, 0xbc87, 0xbc88, 0xbc89, 0xbc8a,
+ 0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, 0xbc8f, 0xbc90, 0xbc91, 0xbc92,
+ 0xbc93, 0xbc94, 0x003f, 0xbc95, 0xbc96, 0xbc97, 0xbc98, 0xbc99,
+ 0xbc9a, 0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f, 0x003f, 0x003f,
+ /* lead byte a5 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xbca0, 0xbca1, 0xbca2, 0xbca3, 0xbca4, 0xbca5, 0xbca6,
+ 0xbca7, 0xbca8, 0xbca9, 0xbcaa, 0xbcab, 0xbcac, 0xbcad, 0xbcae,
+ 0xbcaf, 0xbcb0, 0x003f, 0xbcb1, 0xbcb2, 0xbcb3, 0xbcb4, 0xbcb5,
+ 0xbcb6, 0xbcb7, 0xbcb8, 0xbcb9, 0xbcba, 0xbcbb, 0x003f, 0x003f,
+ 0x003f, 0xbcbc, 0xbcbd, 0xbcbe, 0xbcbf, 0xbcc0, 0xbcc1, 0xbcc2,
+ 0xbcc3, 0xbcc4, 0xbcc5, 0xbcc6, 0xbcc7, 0xbcc8, 0xbcc9, 0xbcca,
+ 0xbccb, 0xbccc, 0x003f, 0xbccd, 0xbcce, 0xbccf, 0xbcd0, 0xbcd1,
+ 0xbcd2, 0xbcd3, 0xbcd4, 0xbcd5, 0xbcd6, 0xbcd7, 0x003f, 0x003f,
+ 0x003f, 0xbcd8, 0xbcd9, 0xbcda, 0xbcdb, 0xbcdc, 0xbcdd, 0xbcde,
+ 0xbcdf, 0xbce0, 0xbce1, 0xbce2, 0xbce3, 0xbce4, 0xbce5, 0xbce6,
+ 0xbce7, 0xbce8, 0x003f, 0xbce9, 0xbcea, 0xbceb, 0xbcec, 0xbced,
+ 0xbcee, 0xbcef, 0xbcf0, 0xbcf1, 0xbcf2, 0xbcf3, 0x003f, 0x003f,
+ 0x003f, 0xbcf4, 0xbcf5, 0xbcf6, 0xbcf7, 0xbcf8, 0xbcf9, 0xbcfa,
+ 0xbcfb, 0xbcfc, 0xbcfd, 0xbcfe, 0xbcff, 0xbd00, 0xbd01, 0xbd02,
+ 0xbd03, 0xbd04, 0x003f, 0xbd05, 0xbd06, 0xbd07, 0xbd08, 0xbd09,
+ 0xbd0a, 0xbd0b, 0xbd0c, 0xbd0d, 0xbd0e, 0xbd0f, 0x003f, 0x003f,
+ 0x003f, 0xbd10, 0xbd11, 0xbd12, 0xbd13, 0xbd14, 0xbd15, 0xbd16,
+ 0xbd17, 0xbd18, 0xbd19, 0xbd1a, 0xbd1b, 0xbd1c, 0xbd1d, 0xbd1e,
+ 0xbd1f, 0xbd20, 0x003f, 0xbd21, 0xbd22, 0xbd23, 0xbd24, 0xbd25,
+ 0xbd26, 0xbd27, 0xbd28, 0xbd29, 0xbd2a, 0xbd2b, 0x003f, 0x003f,
+ 0x003f, 0xbd2c, 0xbd2d, 0xbd2e, 0xbd2f, 0xbd30, 0xbd31, 0xbd32,
+ 0xbd33, 0xbd34, 0xbd35, 0xbd36, 0xbd37, 0xbd38, 0xbd39, 0xbd3a,
+ 0xbd3b, 0xbd3c, 0x003f, 0xbd3d, 0xbd3e, 0xbd3f, 0xbd40, 0xbd41,
+ 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0x003f, 0x003f,
+ /* lead byte a6 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xbd48, 0xbd49, 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e,
+ 0xbd4f, 0xbd50, 0xbd51, 0xbd52, 0xbd53, 0xbd54, 0xbd55, 0xbd56,
+ 0xbd57, 0xbd58, 0x003f, 0xbd59, 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d,
+ 0xbd5e, 0xbd5f, 0xbd60, 0xbd61, 0xbd62, 0xbd63, 0x003f, 0x003f,
+ 0x003f, 0xbd64, 0xbd65, 0xbd66, 0xbd67, 0xbd68, 0xbd69, 0xbd6a,
+ 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, 0xbd71, 0xbd72,
+ 0xbd73, 0xbd74, 0x003f, 0xbd75, 0xbd76, 0xbd77, 0xbd78, 0xbd79,
+ 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xbd7f, 0x003f, 0x003f,
+ 0x003f, 0xbd80, 0xbd81, 0xbd82, 0xbd83, 0xbd84, 0xbd85, 0xbd86,
+ 0xbd87, 0xbd88, 0xbd89, 0xbd8a, 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e,
+ 0xbd8f, 0xbd90, 0x003f, 0xbd91, 0xbd92, 0xbd93, 0xbd94, 0xbd95,
+ 0xbd96, 0xbd97, 0xbd98, 0xbd99, 0xbd9a, 0xbd9b, 0x003f, 0x003f,
+ 0x003f, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f, 0xbda0, 0xbda1, 0xbda2,
+ 0xbda3, 0xbda4, 0xbda5, 0xbda6, 0xbda7, 0xbda8, 0xbda9, 0xbdaa,
+ 0xbdab, 0xbdac, 0x003f, 0xbdad, 0xbdae, 0xbdaf, 0xbdb0, 0xbdb1,
+ 0xbdb2, 0xbdb3, 0xbdb4, 0xbdb5, 0xbdb6, 0xbdb7, 0x003f, 0x003f,
+ 0x003f, 0xbdb8, 0xbdb9, 0xbdba, 0xbdbb, 0xbdbc, 0xbdbd, 0xbdbe,
+ 0xbdbf, 0xbdc0, 0xbdc1, 0xbdc2, 0xbdc3, 0xbdc4, 0xbdc5, 0xbdc6,
+ 0xbdc7, 0xbdc8, 0x003f, 0xbdc9, 0xbdca, 0xbdcb, 0xbdcc, 0xbdcd,
+ 0xbdce, 0xbdcf, 0xbdd0, 0xbdd1, 0xbdd2, 0xbdd3, 0x003f, 0x003f,
+ 0x003f, 0xbdd4, 0xbdd5, 0xbdd6, 0xbdd7, 0xbdd8, 0xbdd9, 0xbdda,
+ 0xbddb, 0xbddc, 0xbddd, 0xbdde, 0xbddf, 0xbde0, 0xbde1, 0xbde2,
+ 0xbde3, 0xbde4, 0x003f, 0xbde5, 0xbde6, 0xbde7, 0xbde8, 0xbde9,
+ 0xbdea, 0xbdeb, 0xbdec, 0xbded, 0xbdee, 0xbdef, 0x003f, 0x003f,
+ /* lead byte a7 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xbdf0, 0xbdf1, 0xbdf2, 0xbdf3, 0xbdf4, 0xbdf5, 0xbdf6,
+ 0xbdf7, 0xbdf8, 0xbdf9, 0xbdfa, 0xbdfb, 0xbdfc, 0xbdfd, 0xbdfe,
+ 0xbdff, 0xbe00, 0x003f, 0xbe01, 0xbe02, 0xbe03, 0xbe04, 0xbe05,
+ 0xbe06, 0xbe07, 0xbe08, 0xbe09, 0xbe0a, 0xbe0b, 0x003f, 0x003f,
+ 0x003f, 0xbe0c, 0xbe0d, 0xbe0e, 0xbe0f, 0xbe10, 0xbe11, 0xbe12,
+ 0xbe13, 0xbe14, 0xbe15, 0xbe16, 0xbe17, 0xbe18, 0xbe19, 0xbe1a,
+ 0xbe1b, 0xbe1c, 0x003f, 0xbe1d, 0xbe1e, 0xbe1f, 0xbe20, 0xbe21,
+ 0xbe22, 0xbe23, 0xbe24, 0xbe25, 0xbe26, 0xbe27, 0x003f, 0x003f,
+ 0x003f, 0xbe28, 0xbe29, 0xbe2a, 0xbe2b, 0xbe2c, 0xbe2d, 0xbe2e,
+ 0xbe2f, 0xbe30, 0xbe31, 0xbe32, 0xbe33, 0xbe34, 0xbe35, 0xbe36,
+ 0xbe37, 0xbe38, 0x003f, 0xbe39, 0xbe3a, 0xbe3b, 0xbe3c, 0xbe3d,
+ 0xbe3e, 0xbe3f, 0xbe40, 0xbe41, 0xbe42, 0xbe43, 0x003f, 0x003f,
+ 0x003f, 0xbe44, 0xbe45, 0xbe46, 0xbe47, 0xbe48, 0xbe49, 0xbe4a,
+ 0xbe4b, 0xbe4c, 0xbe4d, 0xbe4e, 0xbe4f, 0xbe50, 0xbe51, 0xbe52,
+ 0xbe53, 0xbe54, 0x003f, 0xbe55, 0xbe56, 0xbe57, 0xbe58, 0xbe59,
+ 0xbe5a, 0xbe5b, 0xbe5c, 0xbe5d, 0xbe5e, 0xbe5f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte a8 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3143, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xbe60, 0xbe61, 0xbe62, 0xbe63, 0xbe64, 0xbe65, 0xbe66,
+ 0xbe67, 0xbe68, 0xbe69, 0xbe6a, 0xbe6b, 0xbe6c, 0xbe6d, 0xbe6e,
+ 0xbe6f, 0xbe70, 0x003f, 0xbe71, 0xbe72, 0xbe73, 0xbe74, 0xbe75,
+ 0xbe76, 0xbe77, 0xbe78, 0xbe79, 0xbe7a, 0xbe7b, 0x003f, 0x003f,
+ 0x003f, 0xbe7c, 0xbe7d, 0xbe7e, 0xbe7f, 0xbe80, 0xbe81, 0xbe82,
+ 0xbe83, 0xbe84, 0xbe85, 0xbe86, 0xbe87, 0xbe88, 0xbe89, 0xbe8a,
+ 0xbe8b, 0xbe8c, 0x003f, 0xbe8d, 0xbe8e, 0xbe8f, 0xbe90, 0xbe91,
+ 0xbe92, 0xbe93, 0xbe94, 0xbe95, 0xbe96, 0xbe97, 0x003f, 0x003f,
+ 0x003f, 0xbe98, 0xbe99, 0xbe9a, 0xbe9b, 0xbe9c, 0xbe9d, 0xbe9e,
+ 0xbe9f, 0xbea0, 0xbea1, 0xbea2, 0xbea3, 0xbea4, 0xbea5, 0xbea6,
+ 0xbea7, 0xbea8, 0x003f, 0xbea9, 0xbeaa, 0xbeab, 0xbeac, 0xbead,
+ 0xbeae, 0xbeaf, 0xbeb0, 0xbeb1, 0xbeb2, 0xbeb3, 0x003f, 0x003f,
+ 0x003f, 0xbeb4, 0xbeb5, 0xbeb6, 0xbeb7, 0xbeb8, 0xbeb9, 0xbeba,
+ 0xbebb, 0xbebc, 0xbebd, 0xbebe, 0xbebf, 0xbec0, 0xbec1, 0xbec2,
+ 0xbec3, 0xbec4, 0x003f, 0xbec5, 0xbec6, 0xbec7, 0xbec8, 0xbec9,
+ 0xbeca, 0xbecb, 0xbecc, 0xbecd, 0xbece, 0xbecf, 0x003f, 0x003f,
+ 0x003f, 0xbed0, 0xbed1, 0xbed2, 0xbed3, 0xbed4, 0xbed5, 0xbed6,
+ 0xbed7, 0xbed8, 0xbed9, 0xbeda, 0xbedb, 0xbedc, 0xbedd, 0xbede,
+ 0xbedf, 0xbee0, 0x003f, 0xbee1, 0xbee2, 0xbee3, 0xbee4, 0xbee5,
+ 0xbee6, 0xbee7, 0xbee8, 0xbee9, 0xbeea, 0xbeeb, 0x003f, 0x003f,
+ /* lead byte a9 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xbeec, 0xbeed, 0xbeee, 0xbeef, 0xbef0, 0xbef1, 0xbef2,
+ 0xbef3, 0xbef4, 0xbef5, 0xbef6, 0xbef7, 0xbef8, 0xbef9, 0xbefa,
+ 0xbefb, 0xbefc, 0x003f, 0xbefd, 0xbefe, 0xbeff, 0xbf00, 0xbf01,
+ 0xbf02, 0xbf03, 0xbf04, 0xbf05, 0xbf06, 0xbf07, 0x003f, 0x003f,
+ 0x003f, 0xbf08, 0xbf09, 0xbf0a, 0xbf0b, 0xbf0c, 0xbf0d, 0xbf0e,
+ 0xbf0f, 0xbf10, 0xbf11, 0xbf12, 0xbf13, 0xbf14, 0xbf15, 0xbf16,
+ 0xbf17, 0xbf18, 0x003f, 0xbf19, 0xbf1a, 0xbf1b, 0xbf1c, 0xbf1d,
+ 0xbf1e, 0xbf1f, 0xbf20, 0xbf21, 0xbf22, 0xbf23, 0x003f, 0x003f,
+ 0x003f, 0xbf24, 0xbf25, 0xbf26, 0xbf27, 0xbf28, 0xbf29, 0xbf2a,
+ 0xbf2b, 0xbf2c, 0xbf2d, 0xbf2e, 0xbf2f, 0xbf30, 0xbf31, 0xbf32,
+ 0xbf33, 0xbf34, 0x003f, 0xbf35, 0xbf36, 0xbf37, 0xbf38, 0xbf39,
+ 0xbf3a, 0xbf3b, 0xbf3c, 0xbf3d, 0xbf3e, 0xbf3f, 0x003f, 0x003f,
+ 0x003f, 0xbf40, 0xbf41, 0xbf42, 0xbf43, 0xbf44, 0xbf45, 0xbf46,
+ 0xbf47, 0xbf48, 0xbf49, 0xbf4a, 0xbf4b, 0xbf4c, 0xbf4d, 0xbf4e,
+ 0xbf4f, 0xbf50, 0x003f, 0xbf51, 0xbf52, 0xbf53, 0xbf54, 0xbf55,
+ 0xbf56, 0xbf57, 0xbf58, 0xbf59, 0xbf5a, 0xbf5b, 0x003f, 0x003f,
+ 0x003f, 0xbf5c, 0xbf5d, 0xbf5e, 0xbf5f, 0xbf60, 0xbf61, 0xbf62,
+ 0xbf63, 0xbf64, 0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, 0xbf6a,
+ 0xbf6b, 0xbf6c, 0x003f, 0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71,
+ 0xbf72, 0xbf73, 0xbf74, 0xbf75, 0xbf76, 0xbf77, 0x003f, 0x003f,
+ 0x003f, 0xbf78, 0xbf79, 0xbf7a, 0xbf7b, 0xbf7c, 0xbf7d, 0xbf7e,
+ 0xbf7f, 0xbf80, 0xbf81, 0xbf82, 0xbf83, 0xbf84, 0xbf85, 0xbf86,
+ 0xbf87, 0xbf88, 0x003f, 0xbf89, 0xbf8a, 0xbf8b, 0xbf8c, 0xbf8d,
+ 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, 0xbf92, 0xbf93, 0x003f, 0x003f,
+ /* lead byte aa */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xbf94, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99, 0xbf9a,
+ 0xbf9b, 0xbf9c, 0xbf9d, 0xbf9e, 0xbf9f, 0xbfa0, 0xbfa1, 0xbfa2,
+ 0xbfa3, 0xbfa4, 0x003f, 0xbfa5, 0xbfa6, 0xbfa7, 0xbfa8, 0xbfa9,
+ 0xbfaa, 0xbfab, 0xbfac, 0xbfad, 0xbfae, 0xbfaf, 0x003f, 0x003f,
+ 0x003f, 0xbfb0, 0xbfb1, 0xbfb2, 0xbfb3, 0xbfb4, 0xbfb5, 0xbfb6,
+ 0xbfb7, 0xbfb8, 0xbfb9, 0xbfba, 0xbfbb, 0xbfbc, 0xbfbd, 0xbfbe,
+ 0xbfbf, 0xbfc0, 0x003f, 0xbfc1, 0xbfc2, 0xbfc3, 0xbfc4, 0xbfc5,
+ 0xbfc6, 0xbfc7, 0xbfc8, 0xbfc9, 0xbfca, 0xbfcb, 0x003f, 0x003f,
+ 0x003f, 0xbfcc, 0xbfcd, 0xbfce, 0xbfcf, 0xbfd0, 0xbfd1, 0xbfd2,
+ 0xbfd3, 0xbfd4, 0xbfd5, 0xbfd6, 0xbfd7, 0xbfd8, 0xbfd9, 0xbfda,
+ 0xbfdb, 0xbfdc, 0x003f, 0xbfdd, 0xbfde, 0xbfdf, 0xbfe0, 0xbfe1,
+ 0xbfe2, 0xbfe3, 0xbfe4, 0xbfe5, 0xbfe6, 0xbfe7, 0x003f, 0x003f,
+ 0x003f, 0xbfe8, 0xbfe9, 0xbfea, 0xbfeb, 0xbfec, 0xbfed, 0xbfee,
+ 0xbfef, 0xbff0, 0xbff1, 0xbff2, 0xbff3, 0xbff4, 0xbff5, 0xbff6,
+ 0xbff7, 0xbff8, 0x003f, 0xbff9, 0xbffa, 0xbffb, 0xbffc, 0xbffd,
+ 0xbffe, 0xbfff, 0xc000, 0xc001, 0xc002, 0xc003, 0x003f, 0x003f,
+ 0x003f, 0xc004, 0xc005, 0xc006, 0xc007, 0xc008, 0xc009, 0xc00a,
+ 0xc00b, 0xc00c, 0xc00d, 0xc00e, 0xc00f, 0xc010, 0xc011, 0xc012,
+ 0xc013, 0xc014, 0x003f, 0xc015, 0xc016, 0xc017, 0xc018, 0xc019,
+ 0xc01a, 0xc01b, 0xc01c, 0xc01d, 0xc01e, 0xc01f, 0x003f, 0x003f,
+ 0x003f, 0xc020, 0xc021, 0xc022, 0xc023, 0xc024, 0xc025, 0xc026,
+ 0xc027, 0xc028, 0xc029, 0xc02a, 0xc02b, 0xc02c, 0xc02d, 0xc02e,
+ 0xc02f, 0xc030, 0x003f, 0xc031, 0xc032, 0xc033, 0xc034, 0xc035,
+ 0xc036, 0xc037, 0xc038, 0xc039, 0xc03a, 0xc03b, 0x003f, 0x003f,
+ /* lead byte ab */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc03c, 0xc03d, 0xc03e, 0xc03f, 0xc040, 0xc041, 0xc042,
+ 0xc043, 0xc044, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049, 0xc04a,
+ 0xc04b, 0xc04c, 0x003f, 0xc04d, 0xc04e, 0xc04f, 0xc050, 0xc051,
+ 0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057, 0x003f, 0x003f,
+ 0x003f, 0xc058, 0xc059, 0xc05a, 0xc05b, 0xc05c, 0xc05d, 0xc05e,
+ 0xc05f, 0xc060, 0xc061, 0xc062, 0xc063, 0xc064, 0xc065, 0xc066,
+ 0xc067, 0xc068, 0x003f, 0xc069, 0xc06a, 0xc06b, 0xc06c, 0xc06d,
+ 0xc06e, 0xc06f, 0xc070, 0xc071, 0xc072, 0xc073, 0x003f, 0x003f,
+ 0x003f, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, 0xc079, 0xc07a,
+ 0xc07b, 0xc07c, 0xc07d, 0xc07e, 0xc07f, 0xc080, 0xc081, 0xc082,
+ 0xc083, 0xc084, 0x003f, 0xc085, 0xc086, 0xc087, 0xc088, 0xc089,
+ 0xc08a, 0xc08b, 0xc08c, 0xc08d, 0xc08e, 0xc08f, 0x003f, 0x003f,
+ 0x003f, 0xc090, 0xc091, 0xc092, 0xc093, 0xc094, 0xc095, 0xc096,
+ 0xc097, 0xc098, 0xc099, 0xc09a, 0xc09b, 0xc09c, 0xc09d, 0xc09e,
+ 0xc09f, 0xc0a0, 0x003f, 0xc0a1, 0xc0a2, 0xc0a3, 0xc0a4, 0xc0a5,
+ 0xc0a6, 0xc0a7, 0xc0a8, 0xc0a9, 0xc0aa, 0xc0ab, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte ac */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3145, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc0ac, 0xc0ad, 0xc0ae, 0xc0af, 0xc0b0, 0xc0b1, 0xc0b2,
+ 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0b7, 0xc0b8, 0xc0b9, 0xc0ba,
+ 0xc0bb, 0xc0bc, 0x003f, 0xc0bd, 0xc0be, 0xc0bf, 0xc0c0, 0xc0c1,
+ 0xc0c2, 0xc0c3, 0xc0c4, 0xc0c5, 0xc0c6, 0xc0c7, 0x003f, 0x003f,
+ 0x003f, 0xc0c8, 0xc0c9, 0xc0ca, 0xc0cb, 0xc0cc, 0xc0cd, 0xc0ce,
+ 0xc0cf, 0xc0d0, 0xc0d1, 0xc0d2, 0xc0d3, 0xc0d4, 0xc0d5, 0xc0d6,
+ 0xc0d7, 0xc0d8, 0x003f, 0xc0d9, 0xc0da, 0xc0db, 0xc0dc, 0xc0dd,
+ 0xc0de, 0xc0df, 0xc0e0, 0xc0e1, 0xc0e2, 0xc0e3, 0x003f, 0x003f,
+ 0x003f, 0xc0e4, 0xc0e5, 0xc0e6, 0xc0e7, 0xc0e8, 0xc0e9, 0xc0ea,
+ 0xc0eb, 0xc0ec, 0xc0ed, 0xc0ee, 0xc0ef, 0xc0f0, 0xc0f1, 0xc0f2,
+ 0xc0f3, 0xc0f4, 0x003f, 0xc0f5, 0xc0f6, 0xc0f7, 0xc0f8, 0xc0f9,
+ 0xc0fa, 0xc0fb, 0xc0fc, 0xc0fd, 0xc0fe, 0xc0ff, 0x003f, 0x003f,
+ 0x003f, 0xc100, 0xc101, 0xc102, 0xc103, 0xc104, 0xc105, 0xc106,
+ 0xc107, 0xc108, 0xc109, 0xc10a, 0xc10b, 0xc10c, 0xc10d, 0xc10e,
+ 0xc10f, 0xc110, 0x003f, 0xc111, 0xc112, 0xc113, 0xc114, 0xc115,
+ 0xc116, 0xc117, 0xc118, 0xc119, 0xc11a, 0xc11b, 0x003f, 0x003f,
+ 0x003f, 0xc11c, 0xc11d, 0xc11e, 0xc11f, 0xc120, 0xc121, 0xc122,
+ 0xc123, 0xc124, 0xc125, 0xc126, 0xc127, 0xc128, 0xc129, 0xc12a,
+ 0xc12b, 0xc12c, 0x003f, 0xc12d, 0xc12e, 0xc12f, 0xc130, 0xc131,
+ 0xc132, 0xc133, 0xc134, 0xc135, 0xc136, 0xc137, 0x003f, 0x003f,
+ /* lead byte ad */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc138, 0xc139, 0xc13a, 0xc13b, 0xc13c, 0xc13d, 0xc13e,
+ 0xc13f, 0xc140, 0xc141, 0xc142, 0xc143, 0xc144, 0xc145, 0xc146,
+ 0xc147, 0xc148, 0x003f, 0xc149, 0xc14a, 0xc14b, 0xc14c, 0xc14d,
+ 0xc14e, 0xc14f, 0xc150, 0xc151, 0xc152, 0xc153, 0x003f, 0x003f,
+ 0x003f, 0xc154, 0xc155, 0xc156, 0xc157, 0xc158, 0xc159, 0xc15a,
+ 0xc15b, 0xc15c, 0xc15d, 0xc15e, 0xc15f, 0xc160, 0xc161, 0xc162,
+ 0xc163, 0xc164, 0x003f, 0xc165, 0xc166, 0xc167, 0xc168, 0xc169,
+ 0xc16a, 0xc16b, 0xc16c, 0xc16d, 0xc16e, 0xc16f, 0x003f, 0x003f,
+ 0x003f, 0xc170, 0xc171, 0xc172, 0xc173, 0xc174, 0xc175, 0xc176,
+ 0xc177, 0xc178, 0xc179, 0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xc17e,
+ 0xc17f, 0xc180, 0x003f, 0xc181, 0xc182, 0xc183, 0xc184, 0xc185,
+ 0xc186, 0xc187, 0xc188, 0xc189, 0xc18a, 0xc18b, 0x003f, 0x003f,
+ 0x003f, 0xc18c, 0xc18d, 0xc18e, 0xc18f, 0xc190, 0xc191, 0xc192,
+ 0xc193, 0xc194, 0xc195, 0xc196, 0xc197, 0xc198, 0xc199, 0xc19a,
+ 0xc19b, 0xc19c, 0x003f, 0xc19d, 0xc19e, 0xc19f, 0xc1a0, 0xc1a1,
+ 0xc1a2, 0xc1a3, 0xc1a4, 0xc1a5, 0xc1a6, 0xc1a7, 0x003f, 0x003f,
+ 0x003f, 0xc1a8, 0xc1a9, 0xc1aa, 0xc1ab, 0xc1ac, 0xc1ad, 0xc1ae,
+ 0xc1af, 0xc1b0, 0xc1b1, 0xc1b2, 0xc1b3, 0xc1b4, 0xc1b5, 0xc1b6,
+ 0xc1b7, 0xc1b8, 0x003f, 0xc1b9, 0xc1ba, 0xc1bb, 0xc1bc, 0xc1bd,
+ 0xc1be, 0xc1bf, 0xc1c0, 0xc1c1, 0xc1c2, 0xc1c3, 0x003f, 0x003f,
+ 0x003f, 0xc1c4, 0xc1c5, 0xc1c6, 0xc1c7, 0xc1c8, 0xc1c9, 0xc1ca,
+ 0xc1cb, 0xc1cc, 0xc1cd, 0xc1ce, 0xc1cf, 0xc1d0, 0xc1d1, 0xc1d2,
+ 0xc1d3, 0xc1d4, 0x003f, 0xc1d5, 0xc1d6, 0xc1d7, 0xc1d8, 0xc1d9,
+ 0xc1da, 0xc1db, 0xc1dc, 0xc1dd, 0xc1de, 0xc1df, 0x003f, 0x003f,
+ /* lead byte ae */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc1e0, 0xc1e1, 0xc1e2, 0xc1e3, 0xc1e4, 0xc1e5, 0xc1e6,
+ 0xc1e7, 0xc1e8, 0xc1e9, 0xc1ea, 0xc1eb, 0xc1ec, 0xc1ed, 0xc1ee,
+ 0xc1ef, 0xc1f0, 0x003f, 0xc1f1, 0xc1f2, 0xc1f3, 0xc1f4, 0xc1f5,
+ 0xc1f6, 0xc1f7, 0xc1f8, 0xc1f9, 0xc1fa, 0xc1fb, 0x003f, 0x003f,
+ 0x003f, 0xc1fc, 0xc1fd, 0xc1fe, 0xc1ff, 0xc200, 0xc201, 0xc202,
+ 0xc203, 0xc204, 0xc205, 0xc206, 0xc207, 0xc208, 0xc209, 0xc20a,
+ 0xc20b, 0xc20c, 0x003f, 0xc20d, 0xc20e, 0xc20f, 0xc210, 0xc211,
+ 0xc212, 0xc213, 0xc214, 0xc215, 0xc216, 0xc217, 0x003f, 0x003f,
+ 0x003f, 0xc218, 0xc219, 0xc21a, 0xc21b, 0xc21c, 0xc21d, 0xc21e,
+ 0xc21f, 0xc220, 0xc221, 0xc222, 0xc223, 0xc224, 0xc225, 0xc226,
+ 0xc227, 0xc228, 0x003f, 0xc229, 0xc22a, 0xc22b, 0xc22c, 0xc22d,
+ 0xc22e, 0xc22f, 0xc230, 0xc231, 0xc232, 0xc233, 0x003f, 0x003f,
+ 0x003f, 0xc234, 0xc235, 0xc236, 0xc237, 0xc238, 0xc239, 0xc23a,
+ 0xc23b, 0xc23c, 0xc23d, 0xc23e, 0xc23f, 0xc240, 0xc241, 0xc242,
+ 0xc243, 0xc244, 0x003f, 0xc245, 0xc246, 0xc247, 0xc248, 0xc249,
+ 0xc24a, 0xc24b, 0xc24c, 0xc24d, 0xc24e, 0xc24f, 0x003f, 0x003f,
+ 0x003f, 0xc250, 0xc251, 0xc252, 0xc253, 0xc254, 0xc255, 0xc256,
+ 0xc257, 0xc258, 0xc259, 0xc25a, 0xc25b, 0xc25c, 0xc25d, 0xc25e,
+ 0xc25f, 0xc260, 0x003f, 0xc261, 0xc262, 0xc263, 0xc264, 0xc265,
+ 0xc266, 0xc267, 0xc268, 0xc269, 0xc26a, 0xc26b, 0x003f, 0x003f,
+ 0x003f, 0xc26c, 0xc26d, 0xc26e, 0xc26f, 0xc270, 0xc271, 0xc272,
+ 0xc273, 0xc274, 0xc275, 0xc276, 0xc277, 0xc278, 0xc279, 0xc27a,
+ 0xc27b, 0xc27c, 0x003f, 0xc27d, 0xc27e, 0xc27f, 0xc280, 0xc281,
+ 0xc282, 0xc283, 0xc284, 0xc285, 0xc286, 0xc287, 0x003f, 0x003f,
+ /* lead byte af */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc288, 0xc289, 0xc28a, 0xc28b, 0xc28c, 0xc28d, 0xc28e,
+ 0xc28f, 0xc290, 0xc291, 0xc292, 0xc293, 0xc294, 0xc295, 0xc296,
+ 0xc297, 0xc298, 0x003f, 0xc299, 0xc29a, 0xc29b, 0xc29c, 0xc29d,
+ 0xc29e, 0xc29f, 0xc2a0, 0xc2a1, 0xc2a2, 0xc2a3, 0x003f, 0x003f,
+ 0x003f, 0xc2a4, 0xc2a5, 0xc2a6, 0xc2a7, 0xc2a8, 0xc2a9, 0xc2aa,
+ 0xc2ab, 0xc2ac, 0xc2ad, 0xc2ae, 0xc2af, 0xc2b0, 0xc2b1, 0xc2b2,
+ 0xc2b3, 0xc2b4, 0x003f, 0xc2b5, 0xc2b6, 0xc2b7, 0xc2b8, 0xc2b9,
+ 0xc2ba, 0xc2bb, 0xc2bc, 0xc2bd, 0xc2be, 0xc2bf, 0x003f, 0x003f,
+ 0x003f, 0xc2c0, 0xc2c1, 0xc2c2, 0xc2c3, 0xc2c4, 0xc2c5, 0xc2c6,
+ 0xc2c7, 0xc2c8, 0xc2c9, 0xc2ca, 0xc2cb, 0xc2cc, 0xc2cd, 0xc2ce,
+ 0xc2cf, 0xc2d0, 0x003f, 0xc2d1, 0xc2d2, 0xc2d3, 0xc2d4, 0xc2d5,
+ 0xc2d6, 0xc2d7, 0xc2d8, 0xc2d9, 0xc2da, 0xc2db, 0x003f, 0x003f,
+ 0x003f, 0xc2dc, 0xc2dd, 0xc2de, 0xc2df, 0xc2e0, 0xc2e1, 0xc2e2,
+ 0xc2e3, 0xc2e4, 0xc2e5, 0xc2e6, 0xc2e7, 0xc2e8, 0xc2e9, 0xc2ea,
+ 0xc2eb, 0xc2ec, 0x003f, 0xc2ed, 0xc2ee, 0xc2ef, 0xc2f0, 0xc2f1,
+ 0xc2f2, 0xc2f3, 0xc2f4, 0xc2f5, 0xc2f6, 0xc2f7, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte b0 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3146, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc2f8, 0xc2f9, 0xc2fa, 0xc2fb, 0xc2fc, 0xc2fd, 0xc2fe,
+ 0xc2ff, 0xc300, 0xc301, 0xc302, 0xc303, 0xc304, 0xc305, 0xc306,
+ 0xc307, 0xc308, 0x003f, 0xc309, 0xc30a, 0xc30b, 0xc30c, 0xc30d,
+ 0xc30e, 0xc30f, 0xc310, 0xc311, 0xc312, 0xc313, 0x003f, 0x003f,
+ 0x003f, 0xc314, 0xc315, 0xc316, 0xc317, 0xc318, 0xc319, 0xc31a,
+ 0xc31b, 0xc31c, 0xc31d, 0xc31e, 0xc31f, 0xc320, 0xc321, 0xc322,
+ 0xc323, 0xc324, 0x003f, 0xc325, 0xc326, 0xc327, 0xc328, 0xc329,
+ 0xc32a, 0xc32b, 0xc32c, 0xc32d, 0xc32e, 0xc32f, 0x003f, 0x003f,
+ 0x003f, 0xc330, 0xc331, 0xc332, 0xc333, 0xc334, 0xc335, 0xc336,
+ 0xc337, 0xc338, 0xc339, 0xc33a, 0xc33b, 0xc33c, 0xc33d, 0xc33e,
+ 0xc33f, 0xc340, 0x003f, 0xc341, 0xc342, 0xc343, 0xc344, 0xc345,
+ 0xc346, 0xc347, 0xc348, 0xc349, 0xc34a, 0xc34b, 0x003f, 0x003f,
+ 0x003f, 0xc34c, 0xc34d, 0xc34e, 0xc34f, 0xc350, 0xc351, 0xc352,
+ 0xc353, 0xc354, 0xc355, 0xc356, 0xc357, 0xc358, 0xc359, 0xc35a,
+ 0xc35b, 0xc35c, 0x003f, 0xc35d, 0xc35e, 0xc35f, 0xc360, 0xc361,
+ 0xc362, 0xc363, 0xc364, 0xc365, 0xc366, 0xc367, 0x003f, 0x003f,
+ 0x003f, 0xc368, 0xc369, 0xc36a, 0xc36b, 0xc36c, 0xc36d, 0xc36e,
+ 0xc36f, 0xc370, 0xc371, 0xc372, 0xc373, 0xc374, 0xc375, 0xc376,
+ 0xc377, 0xc378, 0x003f, 0xc379, 0xc37a, 0xc37b, 0xc37c, 0xc37d,
+ 0xc37e, 0xc37f, 0xc380, 0xc381, 0xc382, 0xc383, 0x003f, 0x003f,
+ /* lead byte b1 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc384, 0xc385, 0xc386, 0xc387, 0xc388, 0xc389, 0xc38a,
+ 0xc38b, 0xc38c, 0xc38d, 0xc38e, 0xc38f, 0xc390, 0xc391, 0xc392,
+ 0xc393, 0xc394, 0x003f, 0xc395, 0xc396, 0xc397, 0xc398, 0xc399,
+ 0xc39a, 0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f, 0x003f, 0x003f,
+ 0x003f, 0xc3a0, 0xc3a1, 0xc3a2, 0xc3a3, 0xc3a4, 0xc3a5, 0xc3a6,
+ 0xc3a7, 0xc3a8, 0xc3a9, 0xc3aa, 0xc3ab, 0xc3ac, 0xc3ad, 0xc3ae,
+ 0xc3af, 0xc3b0, 0x003f, 0xc3b1, 0xc3b2, 0xc3b3, 0xc3b4, 0xc3b5,
+ 0xc3b6, 0xc3b7, 0xc3b8, 0xc3b9, 0xc3ba, 0xc3bb, 0x003f, 0x003f,
+ 0x003f, 0xc3bc, 0xc3bd, 0xc3be, 0xc3bf, 0xc3c0, 0xc3c1, 0xc3c2,
+ 0xc3c3, 0xc3c4, 0xc3c5, 0xc3c6, 0xc3c7, 0xc3c8, 0xc3c9, 0xc3ca,
+ 0xc3cb, 0xc3cc, 0x003f, 0xc3cd, 0xc3ce, 0xc3cf, 0xc3d0, 0xc3d1,
+ 0xc3d2, 0xc3d3, 0xc3d4, 0xc3d5, 0xc3d6, 0xc3d7, 0x003f, 0x003f,
+ 0x003f, 0xc3d8, 0xc3d9, 0xc3da, 0xc3db, 0xc3dc, 0xc3dd, 0xc3de,
+ 0xc3df, 0xc3e0, 0xc3e1, 0xc3e2, 0xc3e3, 0xc3e4, 0xc3e5, 0xc3e6,
+ 0xc3e7, 0xc3e8, 0x003f, 0xc3e9, 0xc3ea, 0xc3eb, 0xc3ec, 0xc3ed,
+ 0xc3ee, 0xc3ef, 0xc3f0, 0xc3f1, 0xc3f2, 0xc3f3, 0x003f, 0x003f,
+ 0x003f, 0xc3f4, 0xc3f5, 0xc3f6, 0xc3f7, 0xc3f8, 0xc3f9, 0xc3fa,
+ 0xc3fb, 0xc3fc, 0xc3fd, 0xc3fe, 0xc3ff, 0xc400, 0xc401, 0xc402,
+ 0xc403, 0xc404, 0x003f, 0xc405, 0xc406, 0xc407, 0xc408, 0xc409,
+ 0xc40a, 0xc40b, 0xc40c, 0xc40d, 0xc40e, 0xc40f, 0x003f, 0x003f,
+ 0x003f, 0xc410, 0xc411, 0xc412, 0xc413, 0xc414, 0xc415, 0xc416,
+ 0xc417, 0xc418, 0xc419, 0xc41a, 0xc41b, 0xc41c, 0xc41d, 0xc41e,
+ 0xc41f, 0xc420, 0x003f, 0xc421, 0xc422, 0xc423, 0xc424, 0xc425,
+ 0xc426, 0xc427, 0xc428, 0xc429, 0xc42a, 0xc42b, 0x003f, 0x003f,
+ /* lead byte b2 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc42c, 0xc42d, 0xc42e, 0xc42f, 0xc430, 0xc431, 0xc432,
+ 0xc433, 0xc434, 0xc435, 0xc436, 0xc437, 0xc438, 0xc439, 0xc43a,
+ 0xc43b, 0xc43c, 0x003f, 0xc43d, 0xc43e, 0xc43f, 0xc440, 0xc441,
+ 0xc442, 0xc443, 0xc444, 0xc445, 0xc446, 0xc447, 0x003f, 0x003f,
+ 0x003f, 0xc448, 0xc449, 0xc44a, 0xc44b, 0xc44c, 0xc44d, 0xc44e,
+ 0xc44f, 0xc450, 0xc451, 0xc452, 0xc453, 0xc454, 0xc455, 0xc456,
+ 0xc457, 0xc458, 0x003f, 0xc459, 0xc45a, 0xc45b, 0xc45c, 0xc45d,
+ 0xc45e, 0xc45f, 0xc460, 0xc461, 0xc462, 0xc463, 0x003f, 0x003f,
+ 0x003f, 0xc464, 0xc465, 0xc466, 0xc467, 0xc468, 0xc469, 0xc46a,
+ 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xc46f, 0xc470, 0xc471, 0xc472,
+ 0xc473, 0xc474, 0x003f, 0xc475, 0xc476, 0xc477, 0xc478, 0xc479,
+ 0xc47a, 0xc47b, 0xc47c, 0xc47d, 0xc47e, 0xc47f, 0x003f, 0x003f,
+ 0x003f, 0xc480, 0xc481, 0xc482, 0xc483, 0xc484, 0xc485, 0xc486,
+ 0xc487, 0xc488, 0xc489, 0xc48a, 0xc48b, 0xc48c, 0xc48d, 0xc48e,
+ 0xc48f, 0xc490, 0x003f, 0xc491, 0xc492, 0xc493, 0xc494, 0xc495,
+ 0xc496, 0xc497, 0xc498, 0xc499, 0xc49a, 0xc49b, 0x003f, 0x003f,
+ 0x003f, 0xc49c, 0xc49d, 0xc49e, 0xc49f, 0xc4a0, 0xc4a1, 0xc4a2,
+ 0xc4a3, 0xc4a4, 0xc4a5, 0xc4a6, 0xc4a7, 0xc4a8, 0xc4a9, 0xc4aa,
+ 0xc4ab, 0xc4ac, 0x003f, 0xc4ad, 0xc4ae, 0xc4af, 0xc4b0, 0xc4b1,
+ 0xc4b2, 0xc4b3, 0xc4b4, 0xc4b5, 0xc4b6, 0xc4b7, 0x003f, 0x003f,
+ 0x003f, 0xc4b8, 0xc4b9, 0xc4ba, 0xc4bb, 0xc4bc, 0xc4bd, 0xc4be,
+ 0xc4bf, 0xc4c0, 0xc4c1, 0xc4c2, 0xc4c3, 0xc4c4, 0xc4c5, 0xc4c6,
+ 0xc4c7, 0xc4c8, 0x003f, 0xc4c9, 0xc4ca, 0xc4cb, 0xc4cc, 0xc4cd,
+ 0xc4ce, 0xc4cf, 0xc4d0, 0xc4d1, 0xc4d2, 0xc4d3, 0x003f, 0x003f,
+ /* lead byte b3 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc4d4, 0xc4d5, 0xc4d6, 0xc4d7, 0xc4d8, 0xc4d9, 0xc4da,
+ 0xc4db, 0xc4dc, 0xc4dd, 0xc4de, 0xc4df, 0xc4e0, 0xc4e1, 0xc4e2,
+ 0xc4e3, 0xc4e4, 0x003f, 0xc4e5, 0xc4e6, 0xc4e7, 0xc4e8, 0xc4e9,
+ 0xc4ea, 0xc4eb, 0xc4ec, 0xc4ed, 0xc4ee, 0xc4ef, 0x003f, 0x003f,
+ 0x003f, 0xc4f0, 0xc4f1, 0xc4f2, 0xc4f3, 0xc4f4, 0xc4f5, 0xc4f6,
+ 0xc4f7, 0xc4f8, 0xc4f9, 0xc4fa, 0xc4fb, 0xc4fc, 0xc4fd, 0xc4fe,
+ 0xc4ff, 0xc500, 0x003f, 0xc501, 0xc502, 0xc503, 0xc504, 0xc505,
+ 0xc506, 0xc507, 0xc508, 0xc509, 0xc50a, 0xc50b, 0x003f, 0x003f,
+ 0x003f, 0xc50c, 0xc50d, 0xc50e, 0xc50f, 0xc510, 0xc511, 0xc512,
+ 0xc513, 0xc514, 0xc515, 0xc516, 0xc517, 0xc518, 0xc519, 0xc51a,
+ 0xc51b, 0xc51c, 0x003f, 0xc51d, 0xc51e, 0xc51f, 0xc520, 0xc521,
+ 0xc522, 0xc523, 0xc524, 0xc525, 0xc526, 0xc527, 0x003f, 0x003f,
+ 0x003f, 0xc528, 0xc529, 0xc52a, 0xc52b, 0xc52c, 0xc52d, 0xc52e,
+ 0xc52f, 0xc530, 0xc531, 0xc532, 0xc533, 0xc534, 0xc535, 0xc536,
+ 0xc537, 0xc538, 0x003f, 0xc539, 0xc53a, 0xc53b, 0xc53c, 0xc53d,
+ 0xc53e, 0xc53f, 0xc540, 0xc541, 0xc542, 0xc543, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte b4 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3147, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc544, 0xc545, 0xc546, 0xc547, 0xc548, 0xc549, 0xc54a,
+ 0xc54b, 0xc54c, 0xc54d, 0xc54e, 0xc54f, 0xc550, 0xc551, 0xc552,
+ 0xc553, 0xc554, 0x003f, 0xc555, 0xc556, 0xc557, 0xc558, 0xc559,
+ 0xc55a, 0xc55b, 0xc55c, 0xc55d, 0xc55e, 0xc55f, 0x003f, 0x003f,
+ 0x003f, 0xc560, 0xc561, 0xc562, 0xc563, 0xc564, 0xc565, 0xc566,
+ 0xc567, 0xc568, 0xc569, 0xc56a, 0xc56b, 0xc56c, 0xc56d, 0xc56e,
+ 0xc56f, 0xc570, 0x003f, 0xc571, 0xc572, 0xc573, 0xc574, 0xc575,
+ 0xc576, 0xc577, 0xc578, 0xc579, 0xc57a, 0xc57b, 0x003f, 0x003f,
+ 0x003f, 0xc57c, 0xc57d, 0xc57e, 0xc57f, 0xc580, 0xc581, 0xc582,
+ 0xc583, 0xc584, 0xc585, 0xc586, 0xc587, 0xc588, 0xc589, 0xc58a,
+ 0xc58b, 0xc58c, 0x003f, 0xc58d, 0xc58e, 0xc58f, 0xc590, 0xc591,
+ 0xc592, 0xc593, 0xc594, 0xc595, 0xc596, 0xc597, 0x003f, 0x003f,
+ 0x003f, 0xc598, 0xc599, 0xc59a, 0xc59b, 0xc59c, 0xc59d, 0xc59e,
+ 0xc59f, 0xc5a0, 0xc5a1, 0xc5a2, 0xc5a3, 0xc5a4, 0xc5a5, 0xc5a6,
+ 0xc5a7, 0xc5a8, 0x003f, 0xc5a9, 0xc5aa, 0xc5ab, 0xc5ac, 0xc5ad,
+ 0xc5ae, 0xc5af, 0xc5b0, 0xc5b1, 0xc5b2, 0xc5b3, 0x003f, 0x003f,
+ 0x003f, 0xc5b4, 0xc5b5, 0xc5b6, 0xc5b7, 0xc5b8, 0xc5b9, 0xc5ba,
+ 0xc5bb, 0xc5bc, 0xc5bd, 0xc5be, 0xc5bf, 0xc5c0, 0xc5c1, 0xc5c2,
+ 0xc5c3, 0xc5c4, 0x003f, 0xc5c5, 0xc5c6, 0xc5c7, 0xc5c8, 0xc5c9,
+ 0xc5ca, 0xc5cb, 0xc5cc, 0xc5cd, 0xc5ce, 0xc5cf, 0x003f, 0x003f,
+ /* lead byte b5 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc5d0, 0xc5d1, 0xc5d2, 0xc5d3, 0xc5d4, 0xc5d5, 0xc5d6,
+ 0xc5d7, 0xc5d8, 0xc5d9, 0xc5da, 0xc5db, 0xc5dc, 0xc5dd, 0xc5de,
+ 0xc5df, 0xc5e0, 0x003f, 0xc5e1, 0xc5e2, 0xc5e3, 0xc5e4, 0xc5e5,
+ 0xc5e6, 0xc5e7, 0xc5e8, 0xc5e9, 0xc5ea, 0xc5eb, 0x003f, 0x003f,
+ 0x003f, 0xc5ec, 0xc5ed, 0xc5ee, 0xc5ef, 0xc5f0, 0xc5f1, 0xc5f2,
+ 0xc5f3, 0xc5f4, 0xc5f5, 0xc5f6, 0xc5f7, 0xc5f8, 0xc5f9, 0xc5fa,
+ 0xc5fb, 0xc5fc, 0x003f, 0xc5fd, 0xc5fe, 0xc5ff, 0xc600, 0xc601,
+ 0xc602, 0xc603, 0xc604, 0xc605, 0xc606, 0xc607, 0x003f, 0x003f,
+ 0x003f, 0xc608, 0xc609, 0xc60a, 0xc60b, 0xc60c, 0xc60d, 0xc60e,
+ 0xc60f, 0xc610, 0xc611, 0xc612, 0xc613, 0xc614, 0xc615, 0xc616,
+ 0xc617, 0xc618, 0x003f, 0xc619, 0xc61a, 0xc61b, 0xc61c, 0xc61d,
+ 0xc61e, 0xc61f, 0xc620, 0xc621, 0xc622, 0xc623, 0x003f, 0x003f,
+ 0x003f, 0xc624, 0xc625, 0xc626, 0xc627, 0xc628, 0xc629, 0xc62a,
+ 0xc62b, 0xc62c, 0xc62d, 0xc62e, 0xc62f, 0xc630, 0xc631, 0xc632,
+ 0xc633, 0xc634, 0x003f, 0xc635, 0xc636, 0xc637, 0xc638, 0xc639,
+ 0xc63a, 0xc63b, 0xc63c, 0xc63d, 0xc63e, 0xc63f, 0x003f, 0x003f,
+ 0x003f, 0xc640, 0xc641, 0xc642, 0xc643, 0xc644, 0xc645, 0xc646,
+ 0xc647, 0xc648, 0xc649, 0xc64a, 0xc64b, 0xc64c, 0xc64d, 0xc64e,
+ 0xc64f, 0xc650, 0x003f, 0xc651, 0xc652, 0xc653, 0xc654, 0xc655,
+ 0xc656, 0xc657, 0xc658, 0xc659, 0xc65a, 0xc65b, 0x003f, 0x003f,
+ 0x003f, 0xc65c, 0xc65d, 0xc65e, 0xc65f, 0xc660, 0xc661, 0xc662,
+ 0xc663, 0xc664, 0xc665, 0xc666, 0xc667, 0xc668, 0xc669, 0xc66a,
+ 0xc66b, 0xc66c, 0x003f, 0xc66d, 0xc66e, 0xc66f, 0xc670, 0xc671,
+ 0xc672, 0xc673, 0xc674, 0xc675, 0xc676, 0xc677, 0x003f, 0x003f,
+ /* lead byte b6 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc678, 0xc679, 0xc67a, 0xc67b, 0xc67c, 0xc67d, 0xc67e,
+ 0xc67f, 0xc680, 0xc681, 0xc682, 0xc683, 0xc684, 0xc685, 0xc686,
+ 0xc687, 0xc688, 0x003f, 0xc689, 0xc68a, 0xc68b, 0xc68c, 0xc68d,
+ 0xc68e, 0xc68f, 0xc690, 0xc691, 0xc692, 0xc693, 0x003f, 0x003f,
+ 0x003f, 0xc694, 0xc695, 0xc696, 0xc697, 0xc698, 0xc699, 0xc69a,
+ 0xc69b, 0xc69c, 0xc69d, 0xc69e, 0xc69f, 0xc6a0, 0xc6a1, 0xc6a2,
+ 0xc6a3, 0xc6a4, 0x003f, 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9,
+ 0xc6aa, 0xc6ab, 0xc6ac, 0xc6ad, 0xc6ae, 0xc6af, 0x003f, 0x003f,
+ 0x003f, 0xc6b0, 0xc6b1, 0xc6b2, 0xc6b3, 0xc6b4, 0xc6b5, 0xc6b6,
+ 0xc6b7, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb, 0xc6bc, 0xc6bd, 0xc6be,
+ 0xc6bf, 0xc6c0, 0x003f, 0xc6c1, 0xc6c2, 0xc6c3, 0xc6c4, 0xc6c5,
+ 0xc6c6, 0xc6c7, 0xc6c8, 0xc6c9, 0xc6ca, 0xc6cb, 0x003f, 0x003f,
+ 0x003f, 0xc6cc, 0xc6cd, 0xc6ce, 0xc6cf, 0xc6d0, 0xc6d1, 0xc6d2,
+ 0xc6d3, 0xc6d4, 0xc6d5, 0xc6d6, 0xc6d7, 0xc6d8, 0xc6d9, 0xc6da,
+ 0xc6db, 0xc6dc, 0x003f, 0xc6dd, 0xc6de, 0xc6df, 0xc6e0, 0xc6e1,
+ 0xc6e2, 0xc6e3, 0xc6e4, 0xc6e5, 0xc6e6, 0xc6e7, 0x003f, 0x003f,
+ 0x003f, 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb, 0xc6ec, 0xc6ed, 0xc6ee,
+ 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f2, 0xc6f3, 0xc6f4, 0xc6f5, 0xc6f6,
+ 0xc6f7, 0xc6f8, 0x003f, 0xc6f9, 0xc6fa, 0xc6fb, 0xc6fc, 0xc6fd,
+ 0xc6fe, 0xc6ff, 0xc700, 0xc701, 0xc702, 0xc703, 0x003f, 0x003f,
+ 0x003f, 0xc704, 0xc705, 0xc706, 0xc707, 0xc708, 0xc709, 0xc70a,
+ 0xc70b, 0xc70c, 0xc70d, 0xc70e, 0xc70f, 0xc710, 0xc711, 0xc712,
+ 0xc713, 0xc714, 0x003f, 0xc715, 0xc716, 0xc717, 0xc718, 0xc719,
+ 0xc71a, 0xc71b, 0xc71c, 0xc71d, 0xc71e, 0xc71f, 0x003f, 0x003f,
+ /* lead byte b7 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc720, 0xc721, 0xc722, 0xc723, 0xc724, 0xc725, 0xc726,
+ 0xc727, 0xc728, 0xc729, 0xc72a, 0xc72b, 0xc72c, 0xc72d, 0xc72e,
+ 0xc72f, 0xc730, 0x003f, 0xc731, 0xc732, 0xc733, 0xc734, 0xc735,
+ 0xc736, 0xc737, 0xc738, 0xc739, 0xc73a, 0xc73b, 0x003f, 0x003f,
+ 0x003f, 0xc73c, 0xc73d, 0xc73e, 0xc73f, 0xc740, 0xc741, 0xc742,
+ 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, 0xc74a,
+ 0xc74b, 0xc74c, 0x003f, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751,
+ 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0x003f, 0x003f,
+ 0x003f, 0xc758, 0xc759, 0xc75a, 0xc75b, 0xc75c, 0xc75d, 0xc75e,
+ 0xc75f, 0xc760, 0xc761, 0xc762, 0xc763, 0xc764, 0xc765, 0xc766,
+ 0xc767, 0xc768, 0x003f, 0xc769, 0xc76a, 0xc76b, 0xc76c, 0xc76d,
+ 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc772, 0xc773, 0x003f, 0x003f,
+ 0x003f, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a,
+ 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc77f, 0xc780, 0xc781, 0xc782,
+ 0xc783, 0xc784, 0x003f, 0xc785, 0xc786, 0xc787, 0xc788, 0xc789,
+ 0xc78a, 0xc78b, 0xc78c, 0xc78d, 0xc78e, 0xc78f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte b8 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3148, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc790, 0xc791, 0xc792, 0xc793, 0xc794, 0xc795, 0xc796,
+ 0xc797, 0xc798, 0xc799, 0xc79a, 0xc79b, 0xc79c, 0xc79d, 0xc79e,
+ 0xc79f, 0xc7a0, 0x003f, 0xc7a1, 0xc7a2, 0xc7a3, 0xc7a4, 0xc7a5,
+ 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0x003f, 0x003f,
+ 0x003f, 0xc7ac, 0xc7ad, 0xc7ae, 0xc7af, 0xc7b0, 0xc7b1, 0xc7b2,
+ 0xc7b3, 0xc7b4, 0xc7b5, 0xc7b6, 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba,
+ 0xc7bb, 0xc7bc, 0x003f, 0xc7bd, 0xc7be, 0xc7bf, 0xc7c0, 0xc7c1,
+ 0xc7c2, 0xc7c3, 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, 0x003f, 0x003f,
+ 0x003f, 0xc7c8, 0xc7c9, 0xc7ca, 0xc7cb, 0xc7cc, 0xc7cd, 0xc7ce,
+ 0xc7cf, 0xc7d0, 0xc7d1, 0xc7d2, 0xc7d3, 0xc7d4, 0xc7d5, 0xc7d6,
+ 0xc7d7, 0xc7d8, 0x003f, 0xc7d9, 0xc7da, 0xc7db, 0xc7dc, 0xc7dd,
+ 0xc7de, 0xc7df, 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3, 0x003f, 0x003f,
+ 0x003f, 0xc7e4, 0xc7e5, 0xc7e6, 0xc7e7, 0xc7e8, 0xc7e9, 0xc7ea,
+ 0xc7eb, 0xc7ec, 0xc7ed, 0xc7ee, 0xc7ef, 0xc7f0, 0xc7f1, 0xc7f2,
+ 0xc7f3, 0xc7f4, 0x003f, 0xc7f5, 0xc7f6, 0xc7f7, 0xc7f8, 0xc7f9,
+ 0xc7fa, 0xc7fb, 0xc7fc, 0xc7fd, 0xc7fe, 0xc7ff, 0x003f, 0x003f,
+ 0x003f, 0xc800, 0xc801, 0xc802, 0xc803, 0xc804, 0xc805, 0xc806,
+ 0xc807, 0xc808, 0xc809, 0xc80a, 0xc80b, 0xc80c, 0xc80d, 0xc80e,
+ 0xc80f, 0xc810, 0x003f, 0xc811, 0xc812, 0xc813, 0xc814, 0xc815,
+ 0xc816, 0xc817, 0xc818, 0xc819, 0xc81a, 0xc81b, 0x003f, 0x003f,
+ /* lead byte b9 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc81c, 0xc81d, 0xc81e, 0xc81f, 0xc820, 0xc821, 0xc822,
+ 0xc823, 0xc824, 0xc825, 0xc826, 0xc827, 0xc828, 0xc829, 0xc82a,
+ 0xc82b, 0xc82c, 0x003f, 0xc82d, 0xc82e, 0xc82f, 0xc830, 0xc831,
+ 0xc832, 0xc833, 0xc834, 0xc835, 0xc836, 0xc837, 0x003f, 0x003f,
+ 0x003f, 0xc838, 0xc839, 0xc83a, 0xc83b, 0xc83c, 0xc83d, 0xc83e,
+ 0xc83f, 0xc840, 0xc841, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846,
+ 0xc847, 0xc848, 0x003f, 0xc849, 0xc84a, 0xc84b, 0xc84c, 0xc84d,
+ 0xc84e, 0xc84f, 0xc850, 0xc851, 0xc852, 0xc853, 0x003f, 0x003f,
+ 0x003f, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, 0xc85a,
+ 0xc85b, 0xc85c, 0xc85d, 0xc85e, 0xc85f, 0xc860, 0xc861, 0xc862,
+ 0xc863, 0xc864, 0x003f, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869,
+ 0xc86a, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0x003f, 0x003f,
+ 0x003f, 0xc870, 0xc871, 0xc872, 0xc873, 0xc874, 0xc875, 0xc876,
+ 0xc877, 0xc878, 0xc879, 0xc87a, 0xc87b, 0xc87c, 0xc87d, 0xc87e,
+ 0xc87f, 0xc880, 0x003f, 0xc881, 0xc882, 0xc883, 0xc884, 0xc885,
+ 0xc886, 0xc887, 0xc888, 0xc889, 0xc88a, 0xc88b, 0x003f, 0x003f,
+ 0x003f, 0xc88c, 0xc88d, 0xc88e, 0xc88f, 0xc890, 0xc891, 0xc892,
+ 0xc893, 0xc894, 0xc895, 0xc896, 0xc897, 0xc898, 0xc899, 0xc89a,
+ 0xc89b, 0xc89c, 0x003f, 0xc89d, 0xc89e, 0xc89f, 0xc8a0, 0xc8a1,
+ 0xc8a2, 0xc8a3, 0xc8a4, 0xc8a5, 0xc8a6, 0xc8a7, 0x003f, 0x003f,
+ 0x003f, 0xc8a8, 0xc8a9, 0xc8aa, 0xc8ab, 0xc8ac, 0xc8ad, 0xc8ae,
+ 0xc8af, 0xc8b0, 0xc8b1, 0xc8b2, 0xc8b3, 0xc8b4, 0xc8b5, 0xc8b6,
+ 0xc8b7, 0xc8b8, 0x003f, 0xc8b9, 0xc8ba, 0xc8bb, 0xc8bc, 0xc8bd,
+ 0xc8be, 0xc8bf, 0xc8c0, 0xc8c1, 0xc8c2, 0xc8c3, 0x003f, 0x003f,
+ /* lead byte ba */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc8c4, 0xc8c5, 0xc8c6, 0xc8c7, 0xc8c8, 0xc8c9, 0xc8ca,
+ 0xc8cb, 0xc8cc, 0xc8cd, 0xc8ce, 0xc8cf, 0xc8d0, 0xc8d1, 0xc8d2,
+ 0xc8d3, 0xc8d4, 0x003f, 0xc8d5, 0xc8d6, 0xc8d7, 0xc8d8, 0xc8d9,
+ 0xc8da, 0xc8db, 0xc8dc, 0xc8dd, 0xc8de, 0xc8df, 0x003f, 0x003f,
+ 0x003f, 0xc8e0, 0xc8e1, 0xc8e2, 0xc8e3, 0xc8e4, 0xc8e5, 0xc8e6,
+ 0xc8e7, 0xc8e8, 0xc8e9, 0xc8ea, 0xc8eb, 0xc8ec, 0xc8ed, 0xc8ee,
+ 0xc8ef, 0xc8f0, 0x003f, 0xc8f1, 0xc8f2, 0xc8f3, 0xc8f4, 0xc8f5,
+ 0xc8f6, 0xc8f7, 0xc8f8, 0xc8f9, 0xc8fa, 0xc8fb, 0x003f, 0x003f,
+ 0x003f, 0xc8fc, 0xc8fd, 0xc8fe, 0xc8ff, 0xc900, 0xc901, 0xc902,
+ 0xc903, 0xc904, 0xc905, 0xc906, 0xc907, 0xc908, 0xc909, 0xc90a,
+ 0xc90b, 0xc90c, 0x003f, 0xc90d, 0xc90e, 0xc90f, 0xc910, 0xc911,
+ 0xc912, 0xc913, 0xc914, 0xc915, 0xc916, 0xc917, 0x003f, 0x003f,
+ 0x003f, 0xc918, 0xc919, 0xc91a, 0xc91b, 0xc91c, 0xc91d, 0xc91e,
+ 0xc91f, 0xc920, 0xc921, 0xc922, 0xc923, 0xc924, 0xc925, 0xc926,
+ 0xc927, 0xc928, 0x003f, 0xc929, 0xc92a, 0xc92b, 0xc92c, 0xc92d,
+ 0xc92e, 0xc92f, 0xc930, 0xc931, 0xc932, 0xc933, 0x003f, 0x003f,
+ 0x003f, 0xc934, 0xc935, 0xc936, 0xc937, 0xc938, 0xc939, 0xc93a,
+ 0xc93b, 0xc93c, 0xc93d, 0xc93e, 0xc93f, 0xc940, 0xc941, 0xc942,
+ 0xc943, 0xc944, 0x003f, 0xc945, 0xc946, 0xc947, 0xc948, 0xc949,
+ 0xc94a, 0xc94b, 0xc94c, 0xc94d, 0xc94e, 0xc94f, 0x003f, 0x003f,
+ 0x003f, 0xc950, 0xc951, 0xc952, 0xc953, 0xc954, 0xc955, 0xc956,
+ 0xc957, 0xc958, 0xc959, 0xc95a, 0xc95b, 0xc95c, 0xc95d, 0xc95e,
+ 0xc95f, 0xc960, 0x003f, 0xc961, 0xc962, 0xc963, 0xc964, 0xc965,
+ 0xc966, 0xc967, 0xc968, 0xc969, 0xc96a, 0xc96b, 0x003f, 0x003f,
+ /* lead byte bb */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc96c, 0xc96d, 0xc96e, 0xc96f, 0xc970, 0xc971, 0xc972,
+ 0xc973, 0xc974, 0xc975, 0xc976, 0xc977, 0xc978, 0xc979, 0xc97a,
+ 0xc97b, 0xc97c, 0x003f, 0xc97d, 0xc97e, 0xc97f, 0xc980, 0xc981,
+ 0xc982, 0xc983, 0xc984, 0xc985, 0xc986, 0xc987, 0x003f, 0x003f,
+ 0x003f, 0xc988, 0xc989, 0xc98a, 0xc98b, 0xc98c, 0xc98d, 0xc98e,
+ 0xc98f, 0xc990, 0xc991, 0xc992, 0xc993, 0xc994, 0xc995, 0xc996,
+ 0xc997, 0xc998, 0x003f, 0xc999, 0xc99a, 0xc99b, 0xc99c, 0xc99d,
+ 0xc99e, 0xc99f, 0xc9a0, 0xc9a1, 0xc9a2, 0xc9a3, 0x003f, 0x003f,
+ 0x003f, 0xc9a4, 0xc9a5, 0xc9a6, 0xc9a7, 0xc9a8, 0xc9a9, 0xc9aa,
+ 0xc9ab, 0xc9ac, 0xc9ad, 0xc9ae, 0xc9af, 0xc9b0, 0xc9b1, 0xc9b2,
+ 0xc9b3, 0xc9b4, 0x003f, 0xc9b5, 0xc9b6, 0xc9b7, 0xc9b8, 0xc9b9,
+ 0xc9ba, 0xc9bb, 0xc9bc, 0xc9bd, 0xc9be, 0xc9bf, 0x003f, 0x003f,
+ 0x003f, 0xc9c0, 0xc9c1, 0xc9c2, 0xc9c3, 0xc9c4, 0xc9c5, 0xc9c6,
+ 0xc9c7, 0xc9c8, 0xc9c9, 0xc9ca, 0xc9cb, 0xc9cc, 0xc9cd, 0xc9ce,
+ 0xc9cf, 0xc9d0, 0x003f, 0xc9d1, 0xc9d2, 0xc9d3, 0xc9d4, 0xc9d5,
+ 0xc9d6, 0xc9d7, 0xc9d8, 0xc9d9, 0xc9da, 0xc9db, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte bc */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3149, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xc9dc, 0xc9dd, 0xc9de, 0xc9df, 0xc9e0, 0xc9e1, 0xc9e2,
+ 0xc9e3, 0xc9e4, 0xc9e5, 0xc9e6, 0xc9e7, 0xc9e8, 0xc9e9, 0xc9ea,
+ 0xc9eb, 0xc9ec, 0x003f, 0xc9ed, 0xc9ee, 0xc9ef, 0xc9f0, 0xc9f1,
+ 0xc9f2, 0xc9f3, 0xc9f4, 0xc9f5, 0xc9f6, 0xc9f7, 0x003f, 0x003f,
+ 0x003f, 0xc9f8, 0xc9f9, 0xc9fa, 0xc9fb, 0xc9fc, 0xc9fd, 0xc9fe,
+ 0xc9ff, 0xca00, 0xca01, 0xca02, 0xca03, 0xca04, 0xca05, 0xca06,
+ 0xca07, 0xca08, 0x003f, 0xca09, 0xca0a, 0xca0b, 0xca0c, 0xca0d,
+ 0xca0e, 0xca0f, 0xca10, 0xca11, 0xca12, 0xca13, 0x003f, 0x003f,
+ 0x003f, 0xca14, 0xca15, 0xca16, 0xca17, 0xca18, 0xca19, 0xca1a,
+ 0xca1b, 0xca1c, 0xca1d, 0xca1e, 0xca1f, 0xca20, 0xca21, 0xca22,
+ 0xca23, 0xca24, 0x003f, 0xca25, 0xca26, 0xca27, 0xca28, 0xca29,
+ 0xca2a, 0xca2b, 0xca2c, 0xca2d, 0xca2e, 0xca2f, 0x003f, 0x003f,
+ 0x003f, 0xca30, 0xca31, 0xca32, 0xca33, 0xca34, 0xca35, 0xca36,
+ 0xca37, 0xca38, 0xca39, 0xca3a, 0xca3b, 0xca3c, 0xca3d, 0xca3e,
+ 0xca3f, 0xca40, 0x003f, 0xca41, 0xca42, 0xca43, 0xca44, 0xca45,
+ 0xca46, 0xca47, 0xca48, 0xca49, 0xca4a, 0xca4b, 0x003f, 0x003f,
+ 0x003f, 0xca4c, 0xca4d, 0xca4e, 0xca4f, 0xca50, 0xca51, 0xca52,
+ 0xca53, 0xca54, 0xca55, 0xca56, 0xca57, 0xca58, 0xca59, 0xca5a,
+ 0xca5b, 0xca5c, 0x003f, 0xca5d, 0xca5e, 0xca5f, 0xca60, 0xca61,
+ 0xca62, 0xca63, 0xca64, 0xca65, 0xca66, 0xca67, 0x003f, 0x003f,
+ /* lead byte bd */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xca68, 0xca69, 0xca6a, 0xca6b, 0xca6c, 0xca6d, 0xca6e,
+ 0xca6f, 0xca70, 0xca71, 0xca72, 0xca73, 0xca74, 0xca75, 0xca76,
+ 0xca77, 0xca78, 0x003f, 0xca79, 0xca7a, 0xca7b, 0xca7c, 0xca7d,
+ 0xca7e, 0xca7f, 0xca80, 0xca81, 0xca82, 0xca83, 0x003f, 0x003f,
+ 0x003f, 0xca84, 0xca85, 0xca86, 0xca87, 0xca88, 0xca89, 0xca8a,
+ 0xca8b, 0xca8c, 0xca8d, 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca92,
+ 0xca93, 0xca94, 0x003f, 0xca95, 0xca96, 0xca97, 0xca98, 0xca99,
+ 0xca9a, 0xca9b, 0xca9c, 0xca9d, 0xca9e, 0xca9f, 0x003f, 0x003f,
+ 0x003f, 0xcaa0, 0xcaa1, 0xcaa2, 0xcaa3, 0xcaa4, 0xcaa5, 0xcaa6,
+ 0xcaa7, 0xcaa8, 0xcaa9, 0xcaaa, 0xcaab, 0xcaac, 0xcaad, 0xcaae,
+ 0xcaaf, 0xcab0, 0x003f, 0xcab1, 0xcab2, 0xcab3, 0xcab4, 0xcab5,
+ 0xcab6, 0xcab7, 0xcab8, 0xcab9, 0xcaba, 0xcabb, 0x003f, 0x003f,
+ 0x003f, 0xcabc, 0xcabd, 0xcabe, 0xcabf, 0xcac0, 0xcac1, 0xcac2,
+ 0xcac3, 0xcac4, 0xcac5, 0xcac6, 0xcac7, 0xcac8, 0xcac9, 0xcaca,
+ 0xcacb, 0xcacc, 0x003f, 0xcacd, 0xcace, 0xcacf, 0xcad0, 0xcad1,
+ 0xcad2, 0xcad3, 0xcad4, 0xcad5, 0xcad6, 0xcad7, 0x003f, 0x003f,
+ 0x003f, 0xcad8, 0xcad9, 0xcada, 0xcadb, 0xcadc, 0xcadd, 0xcade,
+ 0xcadf, 0xcae0, 0xcae1, 0xcae2, 0xcae3, 0xcae4, 0xcae5, 0xcae6,
+ 0xcae7, 0xcae8, 0x003f, 0xcae9, 0xcaea, 0xcaeb, 0xcaec, 0xcaed,
+ 0xcaee, 0xcaef, 0xcaf0, 0xcaf1, 0xcaf2, 0xcaf3, 0x003f, 0x003f,
+ 0x003f, 0xcaf4, 0xcaf5, 0xcaf6, 0xcaf7, 0xcaf8, 0xcaf9, 0xcafa,
+ 0xcafb, 0xcafc, 0xcafd, 0xcafe, 0xcaff, 0xcb00, 0xcb01, 0xcb02,
+ 0xcb03, 0xcb04, 0x003f, 0xcb05, 0xcb06, 0xcb07, 0xcb08, 0xcb09,
+ 0xcb0a, 0xcb0b, 0xcb0c, 0xcb0d, 0xcb0e, 0xcb0f, 0x003f, 0x003f,
+ /* lead byte be */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xcb10, 0xcb11, 0xcb12, 0xcb13, 0xcb14, 0xcb15, 0xcb16,
+ 0xcb17, 0xcb18, 0xcb19, 0xcb1a, 0xcb1b, 0xcb1c, 0xcb1d, 0xcb1e,
+ 0xcb1f, 0xcb20, 0x003f, 0xcb21, 0xcb22, 0xcb23, 0xcb24, 0xcb25,
+ 0xcb26, 0xcb27, 0xcb28, 0xcb29, 0xcb2a, 0xcb2b, 0x003f, 0x003f,
+ 0x003f, 0xcb2c, 0xcb2d, 0xcb2e, 0xcb2f, 0xcb30, 0xcb31, 0xcb32,
+ 0xcb33, 0xcb34, 0xcb35, 0xcb36, 0xcb37, 0xcb38, 0xcb39, 0xcb3a,
+ 0xcb3b, 0xcb3c, 0x003f, 0xcb3d, 0xcb3e, 0xcb3f, 0xcb40, 0xcb41,
+ 0xcb42, 0xcb43, 0xcb44, 0xcb45, 0xcb46, 0xcb47, 0x003f, 0x003f,
+ 0x003f, 0xcb48, 0xcb49, 0xcb4a, 0xcb4b, 0xcb4c, 0xcb4d, 0xcb4e,
+ 0xcb4f, 0xcb50, 0xcb51, 0xcb52, 0xcb53, 0xcb54, 0xcb55, 0xcb56,
+ 0xcb57, 0xcb58, 0x003f, 0xcb59, 0xcb5a, 0xcb5b, 0xcb5c, 0xcb5d,
+ 0xcb5e, 0xcb5f, 0xcb60, 0xcb61, 0xcb62, 0xcb63, 0x003f, 0x003f,
+ 0x003f, 0xcb64, 0xcb65, 0xcb66, 0xcb67, 0xcb68, 0xcb69, 0xcb6a,
+ 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f, 0xcb70, 0xcb71, 0xcb72,
+ 0xcb73, 0xcb74, 0x003f, 0xcb75, 0xcb76, 0xcb77, 0xcb78, 0xcb79,
+ 0xcb7a, 0xcb7b, 0xcb7c, 0xcb7d, 0xcb7e, 0xcb7f, 0x003f, 0x003f,
+ 0x003f, 0xcb80, 0xcb81, 0xcb82, 0xcb83, 0xcb84, 0xcb85, 0xcb86,
+ 0xcb87, 0xcb88, 0xcb89, 0xcb8a, 0xcb8b, 0xcb8c, 0xcb8d, 0xcb8e,
+ 0xcb8f, 0xcb90, 0x003f, 0xcb91, 0xcb92, 0xcb93, 0xcb94, 0xcb95,
+ 0xcb96, 0xcb97, 0xcb98, 0xcb99, 0xcb9a, 0xcb9b, 0x003f, 0x003f,
+ 0x003f, 0xcb9c, 0xcb9d, 0xcb9e, 0xcb9f, 0xcba0, 0xcba1, 0xcba2,
+ 0xcba3, 0xcba4, 0xcba5, 0xcba6, 0xcba7, 0xcba8, 0xcba9, 0xcbaa,
+ 0xcbab, 0xcbac, 0x003f, 0xcbad, 0xcbae, 0xcbaf, 0xcbb0, 0xcbb1,
+ 0xcbb2, 0xcbb3, 0xcbb4, 0xcbb5, 0xcbb6, 0xcbb7, 0x003f, 0x003f,
+ /* lead byte bf */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xcbb8, 0xcbb9, 0xcbba, 0xcbbb, 0xcbbc, 0xcbbd, 0xcbbe,
+ 0xcbbf, 0xcbc0, 0xcbc1, 0xcbc2, 0xcbc3, 0xcbc4, 0xcbc5, 0xcbc6,
+ 0xcbc7, 0xcbc8, 0x003f, 0xcbc9, 0xcbca, 0xcbcb, 0xcbcc, 0xcbcd,
+ 0xcbce, 0xcbcf, 0xcbd0, 0xcbd1, 0xcbd2, 0xcbd3, 0x003f, 0x003f,
+ 0x003f, 0xcbd4, 0xcbd5, 0xcbd6, 0xcbd7, 0xcbd8, 0xcbd9, 0xcbda,
+ 0xcbdb, 0xcbdc, 0xcbdd, 0xcbde, 0xcbdf, 0xcbe0, 0xcbe1, 0xcbe2,
+ 0xcbe3, 0xcbe4, 0x003f, 0xcbe5, 0xcbe6, 0xcbe7, 0xcbe8, 0xcbe9,
+ 0xcbea, 0xcbeb, 0xcbec, 0xcbed, 0xcbee, 0xcbef, 0x003f, 0x003f,
+ 0x003f, 0xcbf0, 0xcbf1, 0xcbf2, 0xcbf3, 0xcbf4, 0xcbf5, 0xcbf6,
+ 0xcbf7, 0xcbf8, 0xcbf9, 0xcbfa, 0xcbfb, 0xcbfc, 0xcbfd, 0xcbfe,
+ 0xcbff, 0xcc00, 0x003f, 0xcc01, 0xcc02, 0xcc03, 0xcc04, 0xcc05,
+ 0xcc06, 0xcc07, 0xcc08, 0xcc09, 0xcc0a, 0xcc0b, 0x003f, 0x003f,
+ 0x003f, 0xcc0c, 0xcc0d, 0xcc0e, 0xcc0f, 0xcc10, 0xcc11, 0xcc12,
+ 0xcc13, 0xcc14, 0xcc15, 0xcc16, 0xcc17, 0xcc18, 0xcc19, 0xcc1a,
+ 0xcc1b, 0xcc1c, 0x003f, 0xcc1d, 0xcc1e, 0xcc1f, 0xcc20, 0xcc21,
+ 0xcc22, 0xcc23, 0xcc24, 0xcc25, 0xcc26, 0xcc27, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte c0 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x314a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xcc28, 0xcc29, 0xcc2a, 0xcc2b, 0xcc2c, 0xcc2d, 0xcc2e,
+ 0xcc2f, 0xcc30, 0xcc31, 0xcc32, 0xcc33, 0xcc34, 0xcc35, 0xcc36,
+ 0xcc37, 0xcc38, 0x003f, 0xcc39, 0xcc3a, 0xcc3b, 0xcc3c, 0xcc3d,
+ 0xcc3e, 0xcc3f, 0xcc40, 0xcc41, 0xcc42, 0xcc43, 0x003f, 0x003f,
+ 0x003f, 0xcc44, 0xcc45, 0xcc46, 0xcc47, 0xcc48, 0xcc49, 0xcc4a,
+ 0xcc4b, 0xcc4c, 0xcc4d, 0xcc4e, 0xcc4f, 0xcc50, 0xcc51, 0xcc52,
+ 0xcc53, 0xcc54, 0x003f, 0xcc55, 0xcc56, 0xcc57, 0xcc58, 0xcc59,
+ 0xcc5a, 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f, 0x003f, 0x003f,
+ 0x003f, 0xcc60, 0xcc61, 0xcc62, 0xcc63, 0xcc64, 0xcc65, 0xcc66,
+ 0xcc67, 0xcc68, 0xcc69, 0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e,
+ 0xcc6f, 0xcc70, 0x003f, 0xcc71, 0xcc72, 0xcc73, 0xcc74, 0xcc75,
+ 0xcc76, 0xcc77, 0xcc78, 0xcc79, 0xcc7a, 0xcc7b, 0x003f, 0x003f,
+ 0x003f, 0xcc7c, 0xcc7d, 0xcc7e, 0xcc7f, 0xcc80, 0xcc81, 0xcc82,
+ 0xcc83, 0xcc84, 0xcc85, 0xcc86, 0xcc87, 0xcc88, 0xcc89, 0xcc8a,
+ 0xcc8b, 0xcc8c, 0x003f, 0xcc8d, 0xcc8e, 0xcc8f, 0xcc90, 0xcc91,
+ 0xcc92, 0xcc93, 0xcc94, 0xcc95, 0xcc96, 0xcc97, 0x003f, 0x003f,
+ 0x003f, 0xcc98, 0xcc99, 0xcc9a, 0xcc9b, 0xcc9c, 0xcc9d, 0xcc9e,
+ 0xcc9f, 0xcca0, 0xcca1, 0xcca2, 0xcca3, 0xcca4, 0xcca5, 0xcca6,
+ 0xcca7, 0xcca8, 0x003f, 0xcca9, 0xccaa, 0xccab, 0xccac, 0xccad,
+ 0xccae, 0xccaf, 0xccb0, 0xccb1, 0xccb2, 0xccb3, 0x003f, 0x003f,
+ /* lead byte c1 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xccb4, 0xccb5, 0xccb6, 0xccb7, 0xccb8, 0xccb9, 0xccba,
+ 0xccbb, 0xccbc, 0xccbd, 0xccbe, 0xccbf, 0xccc0, 0xccc1, 0xccc2,
+ 0xccc3, 0xccc4, 0x003f, 0xccc5, 0xccc6, 0xccc7, 0xccc8, 0xccc9,
+ 0xccca, 0xcccb, 0xcccc, 0xcccd, 0xccce, 0xcccf, 0x003f, 0x003f,
+ 0x003f, 0xccd0, 0xccd1, 0xccd2, 0xccd3, 0xccd4, 0xccd5, 0xccd6,
+ 0xccd7, 0xccd8, 0xccd9, 0xccda, 0xccdb, 0xccdc, 0xccdd, 0xccde,
+ 0xccdf, 0xcce0, 0x003f, 0xcce1, 0xcce2, 0xcce3, 0xcce4, 0xcce5,
+ 0xcce6, 0xcce7, 0xcce8, 0xcce9, 0xccea, 0xcceb, 0x003f, 0x003f,
+ 0x003f, 0xccec, 0xcced, 0xccee, 0xccef, 0xccf0, 0xccf1, 0xccf2,
+ 0xccf3, 0xccf4, 0xccf5, 0xccf6, 0xccf7, 0xccf8, 0xccf9, 0xccfa,
+ 0xccfb, 0xccfc, 0x003f, 0xccfd, 0xccfe, 0xccff, 0xcd00, 0xcd01,
+ 0xcd02, 0xcd03, 0xcd04, 0xcd05, 0xcd06, 0xcd07, 0x003f, 0x003f,
+ 0x003f, 0xcd08, 0xcd09, 0xcd0a, 0xcd0b, 0xcd0c, 0xcd0d, 0xcd0e,
+ 0xcd0f, 0xcd10, 0xcd11, 0xcd12, 0xcd13, 0xcd14, 0xcd15, 0xcd16,
+ 0xcd17, 0xcd18, 0x003f, 0xcd19, 0xcd1a, 0xcd1b, 0xcd1c, 0xcd1d,
+ 0xcd1e, 0xcd1f, 0xcd20, 0xcd21, 0xcd22, 0xcd23, 0x003f, 0x003f,
+ 0x003f, 0xcd24, 0xcd25, 0xcd26, 0xcd27, 0xcd28, 0xcd29, 0xcd2a,
+ 0xcd2b, 0xcd2c, 0xcd2d, 0xcd2e, 0xcd2f, 0xcd30, 0xcd31, 0xcd32,
+ 0xcd33, 0xcd34, 0x003f, 0xcd35, 0xcd36, 0xcd37, 0xcd38, 0xcd39,
+ 0xcd3a, 0xcd3b, 0xcd3c, 0xcd3d, 0xcd3e, 0xcd3f, 0x003f, 0x003f,
+ 0x003f, 0xcd40, 0xcd41, 0xcd42, 0xcd43, 0xcd44, 0xcd45, 0xcd46,
+ 0xcd47, 0xcd48, 0xcd49, 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e,
+ 0xcd4f, 0xcd50, 0x003f, 0xcd51, 0xcd52, 0xcd53, 0xcd54, 0xcd55,
+ 0xcd56, 0xcd57, 0xcd58, 0xcd59, 0xcd5a, 0xcd5b, 0x003f, 0x003f,
+ /* lead byte c2 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xcd5c, 0xcd5d, 0xcd5e, 0xcd5f, 0xcd60, 0xcd61, 0xcd62,
+ 0xcd63, 0xcd64, 0xcd65, 0xcd66, 0xcd67, 0xcd68, 0xcd69, 0xcd6a,
+ 0xcd6b, 0xcd6c, 0x003f, 0xcd6d, 0xcd6e, 0xcd6f, 0xcd70, 0xcd71,
+ 0xcd72, 0xcd73, 0xcd74, 0xcd75, 0xcd76, 0xcd77, 0x003f, 0x003f,
+ 0x003f, 0xcd78, 0xcd79, 0xcd7a, 0xcd7b, 0xcd7c, 0xcd7d, 0xcd7e,
+ 0xcd7f, 0xcd80, 0xcd81, 0xcd82, 0xcd83, 0xcd84, 0xcd85, 0xcd86,
+ 0xcd87, 0xcd88, 0x003f, 0xcd89, 0xcd8a, 0xcd8b, 0xcd8c, 0xcd8d,
+ 0xcd8e, 0xcd8f, 0xcd90, 0xcd91, 0xcd92, 0xcd93, 0x003f, 0x003f,
+ 0x003f, 0xcd94, 0xcd95, 0xcd96, 0xcd97, 0xcd98, 0xcd99, 0xcd9a,
+ 0xcd9b, 0xcd9c, 0xcd9d, 0xcd9e, 0xcd9f, 0xcda0, 0xcda1, 0xcda2,
+ 0xcda3, 0xcda4, 0x003f, 0xcda5, 0xcda6, 0xcda7, 0xcda8, 0xcda9,
+ 0xcdaa, 0xcdab, 0xcdac, 0xcdad, 0xcdae, 0xcdaf, 0x003f, 0x003f,
+ 0x003f, 0xcdb0, 0xcdb1, 0xcdb2, 0xcdb3, 0xcdb4, 0xcdb5, 0xcdb6,
+ 0xcdb7, 0xcdb8, 0xcdb9, 0xcdba, 0xcdbb, 0xcdbc, 0xcdbd, 0xcdbe,
+ 0xcdbf, 0xcdc0, 0x003f, 0xcdc1, 0xcdc2, 0xcdc3, 0xcdc4, 0xcdc5,
+ 0xcdc6, 0xcdc7, 0xcdc8, 0xcdc9, 0xcdca, 0xcdcb, 0x003f, 0x003f,
+ 0x003f, 0xcdcc, 0xcdcd, 0xcdce, 0xcdcf, 0xcdd0, 0xcdd1, 0xcdd2,
+ 0xcdd3, 0xcdd4, 0xcdd5, 0xcdd6, 0xcdd7, 0xcdd8, 0xcdd9, 0xcdda,
+ 0xcddb, 0xcddc, 0x003f, 0xcddd, 0xcdde, 0xcddf, 0xcde0, 0xcde1,
+ 0xcde2, 0xcde3, 0xcde4, 0xcde5, 0xcde6, 0xcde7, 0x003f, 0x003f,
+ 0x003f, 0xcde8, 0xcde9, 0xcdea, 0xcdeb, 0xcdec, 0xcded, 0xcdee,
+ 0xcdef, 0xcdf0, 0xcdf1, 0xcdf2, 0xcdf3, 0xcdf4, 0xcdf5, 0xcdf6,
+ 0xcdf7, 0xcdf8, 0x003f, 0xcdf9, 0xcdfa, 0xcdfb, 0xcdfc, 0xcdfd,
+ 0xcdfe, 0xcdff, 0xce00, 0xce01, 0xce02, 0xce03, 0x003f, 0x003f,
+ /* lead byte c3 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xce04, 0xce05, 0xce06, 0xce07, 0xce08, 0xce09, 0xce0a,
+ 0xce0b, 0xce0c, 0xce0d, 0xce0e, 0xce0f, 0xce10, 0xce11, 0xce12,
+ 0xce13, 0xce14, 0x003f, 0xce15, 0xce16, 0xce17, 0xce18, 0xce19,
+ 0xce1a, 0xce1b, 0xce1c, 0xce1d, 0xce1e, 0xce1f, 0x003f, 0x003f,
+ 0x003f, 0xce20, 0xce21, 0xce22, 0xce23, 0xce24, 0xce25, 0xce26,
+ 0xce27, 0xce28, 0xce29, 0xce2a, 0xce2b, 0xce2c, 0xce2d, 0xce2e,
+ 0xce2f, 0xce30, 0x003f, 0xce31, 0xce32, 0xce33, 0xce34, 0xce35,
+ 0xce36, 0xce37, 0xce38, 0xce39, 0xce3a, 0xce3b, 0x003f, 0x003f,
+ 0x003f, 0xce3c, 0xce3d, 0xce3e, 0xce3f, 0xce40, 0xce41, 0xce42,
+ 0xce43, 0xce44, 0xce45, 0xce46, 0xce47, 0xce48, 0xce49, 0xce4a,
+ 0xce4b, 0xce4c, 0x003f, 0xce4d, 0xce4e, 0xce4f, 0xce50, 0xce51,
+ 0xce52, 0xce53, 0xce54, 0xce55, 0xce56, 0xce57, 0x003f, 0x003f,
+ 0x003f, 0xce58, 0xce59, 0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce5e,
+ 0xce5f, 0xce60, 0xce61, 0xce62, 0xce63, 0xce64, 0xce65, 0xce66,
+ 0xce67, 0xce68, 0x003f, 0xce69, 0xce6a, 0xce6b, 0xce6c, 0xce6d,
+ 0xce6e, 0xce6f, 0xce70, 0xce71, 0xce72, 0xce73, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte c4 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x314b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xce74, 0xce75, 0xce76, 0xce77, 0xce78, 0xce79, 0xce7a,
+ 0xce7b, 0xce7c, 0xce7d, 0xce7e, 0xce7f, 0xce80, 0xce81, 0xce82,
+ 0xce83, 0xce84, 0x003f, 0xce85, 0xce86, 0xce87, 0xce88, 0xce89,
+ 0xce8a, 0xce8b, 0xce8c, 0xce8d, 0xce8e, 0xce8f, 0x003f, 0x003f,
+ 0x003f, 0xce90, 0xce91, 0xce92, 0xce93, 0xce94, 0xce95, 0xce96,
+ 0xce97, 0xce98, 0xce99, 0xce9a, 0xce9b, 0xce9c, 0xce9d, 0xce9e,
+ 0xce9f, 0xcea0, 0x003f, 0xcea1, 0xcea2, 0xcea3, 0xcea4, 0xcea5,
+ 0xcea6, 0xcea7, 0xcea8, 0xcea9, 0xceaa, 0xceab, 0x003f, 0x003f,
+ 0x003f, 0xceac, 0xcead, 0xceae, 0xceaf, 0xceb0, 0xceb1, 0xceb2,
+ 0xceb3, 0xceb4, 0xceb5, 0xceb6, 0xceb7, 0xceb8, 0xceb9, 0xceba,
+ 0xcebb, 0xcebc, 0x003f, 0xcebd, 0xcebe, 0xcebf, 0xcec0, 0xcec1,
+ 0xcec2, 0xcec3, 0xcec4, 0xcec5, 0xcec6, 0xcec7, 0x003f, 0x003f,
+ 0x003f, 0xcec8, 0xcec9, 0xceca, 0xcecb, 0xcecc, 0xcecd, 0xcece,
+ 0xcecf, 0xced0, 0xced1, 0xced2, 0xced3, 0xced4, 0xced5, 0xced6,
+ 0xced7, 0xced8, 0x003f, 0xced9, 0xceda, 0xcedb, 0xcedc, 0xcedd,
+ 0xcede, 0xcedf, 0xcee0, 0xcee1, 0xcee2, 0xcee3, 0x003f, 0x003f,
+ 0x003f, 0xcee4, 0xcee5, 0xcee6, 0xcee7, 0xcee8, 0xcee9, 0xceea,
+ 0xceeb, 0xceec, 0xceed, 0xceee, 0xceef, 0xcef0, 0xcef1, 0xcef2,
+ 0xcef3, 0xcef4, 0x003f, 0xcef5, 0xcef6, 0xcef7, 0xcef8, 0xcef9,
+ 0xcefa, 0xcefb, 0xcefc, 0xcefd, 0xcefe, 0xceff, 0x003f, 0x003f,
+ /* lead byte c5 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xcf00, 0xcf01, 0xcf02, 0xcf03, 0xcf04, 0xcf05, 0xcf06,
+ 0xcf07, 0xcf08, 0xcf09, 0xcf0a, 0xcf0b, 0xcf0c, 0xcf0d, 0xcf0e,
+ 0xcf0f, 0xcf10, 0x003f, 0xcf11, 0xcf12, 0xcf13, 0xcf14, 0xcf15,
+ 0xcf16, 0xcf17, 0xcf18, 0xcf19, 0xcf1a, 0xcf1b, 0x003f, 0x003f,
+ 0x003f, 0xcf1c, 0xcf1d, 0xcf1e, 0xcf1f, 0xcf20, 0xcf21, 0xcf22,
+ 0xcf23, 0xcf24, 0xcf25, 0xcf26, 0xcf27, 0xcf28, 0xcf29, 0xcf2a,
+ 0xcf2b, 0xcf2c, 0x003f, 0xcf2d, 0xcf2e, 0xcf2f, 0xcf30, 0xcf31,
+ 0xcf32, 0xcf33, 0xcf34, 0xcf35, 0xcf36, 0xcf37, 0x003f, 0x003f,
+ 0x003f, 0xcf38, 0xcf39, 0xcf3a, 0xcf3b, 0xcf3c, 0xcf3d, 0xcf3e,
+ 0xcf3f, 0xcf40, 0xcf41, 0xcf42, 0xcf43, 0xcf44, 0xcf45, 0xcf46,
+ 0xcf47, 0xcf48, 0x003f, 0xcf49, 0xcf4a, 0xcf4b, 0xcf4c, 0xcf4d,
+ 0xcf4e, 0xcf4f, 0xcf50, 0xcf51, 0xcf52, 0xcf53, 0x003f, 0x003f,
+ 0x003f, 0xcf54, 0xcf55, 0xcf56, 0xcf57, 0xcf58, 0xcf59, 0xcf5a,
+ 0xcf5b, 0xcf5c, 0xcf5d, 0xcf5e, 0xcf5f, 0xcf60, 0xcf61, 0xcf62,
+ 0xcf63, 0xcf64, 0x003f, 0xcf65, 0xcf66, 0xcf67, 0xcf68, 0xcf69,
+ 0xcf6a, 0xcf6b, 0xcf6c, 0xcf6d, 0xcf6e, 0xcf6f, 0x003f, 0x003f,
+ 0x003f, 0xcf70, 0xcf71, 0xcf72, 0xcf73, 0xcf74, 0xcf75, 0xcf76,
+ 0xcf77, 0xcf78, 0xcf79, 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, 0xcf7e,
+ 0xcf7f, 0xcf80, 0x003f, 0xcf81, 0xcf82, 0xcf83, 0xcf84, 0xcf85,
+ 0xcf86, 0xcf87, 0xcf88, 0xcf89, 0xcf8a, 0xcf8b, 0x003f, 0x003f,
+ 0x003f, 0xcf8c, 0xcf8d, 0xcf8e, 0xcf8f, 0xcf90, 0xcf91, 0xcf92,
+ 0xcf93, 0xcf94, 0xcf95, 0xcf96, 0xcf97, 0xcf98, 0xcf99, 0xcf9a,
+ 0xcf9b, 0xcf9c, 0x003f, 0xcf9d, 0xcf9e, 0xcf9f, 0xcfa0, 0xcfa1,
+ 0xcfa2, 0xcfa3, 0xcfa4, 0xcfa5, 0xcfa6, 0xcfa7, 0x003f, 0x003f,
+ /* lead byte c6 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xcfa8, 0xcfa9, 0xcfaa, 0xcfab, 0xcfac, 0xcfad, 0xcfae,
+ 0xcfaf, 0xcfb0, 0xcfb1, 0xcfb2, 0xcfb3, 0xcfb4, 0xcfb5, 0xcfb6,
+ 0xcfb7, 0xcfb8, 0x003f, 0xcfb9, 0xcfba, 0xcfbb, 0xcfbc, 0xcfbd,
+ 0xcfbe, 0xcfbf, 0xcfc0, 0xcfc1, 0xcfc2, 0xcfc3, 0x003f, 0x003f,
+ 0x003f, 0xcfc4, 0xcfc5, 0xcfc6, 0xcfc7, 0xcfc8, 0xcfc9, 0xcfca,
+ 0xcfcb, 0xcfcc, 0xcfcd, 0xcfce, 0xcfcf, 0xcfd0, 0xcfd1, 0xcfd2,
+ 0xcfd3, 0xcfd4, 0x003f, 0xcfd5, 0xcfd6, 0xcfd7, 0xcfd8, 0xcfd9,
+ 0xcfda, 0xcfdb, 0xcfdc, 0xcfdd, 0xcfde, 0xcfdf, 0x003f, 0x003f,
+ 0x003f, 0xcfe0, 0xcfe1, 0xcfe2, 0xcfe3, 0xcfe4, 0xcfe5, 0xcfe6,
+ 0xcfe7, 0xcfe8, 0xcfe9, 0xcfea, 0xcfeb, 0xcfec, 0xcfed, 0xcfee,
+ 0xcfef, 0xcff0, 0x003f, 0xcff1, 0xcff2, 0xcff3, 0xcff4, 0xcff5,
+ 0xcff6, 0xcff7, 0xcff8, 0xcff9, 0xcffa, 0xcffb, 0x003f, 0x003f,
+ 0x003f, 0xcffc, 0xcffd, 0xcffe, 0xcfff, 0xd000, 0xd001, 0xd002,
+ 0xd003, 0xd004, 0xd005, 0xd006, 0xd007, 0xd008, 0xd009, 0xd00a,
+ 0xd00b, 0xd00c, 0x003f, 0xd00d, 0xd00e, 0xd00f, 0xd010, 0xd011,
+ 0xd012, 0xd013, 0xd014, 0xd015, 0xd016, 0xd017, 0x003f, 0x003f,
+ 0x003f, 0xd018, 0xd019, 0xd01a, 0xd01b, 0xd01c, 0xd01d, 0xd01e,
+ 0xd01f, 0xd020, 0xd021, 0xd022, 0xd023, 0xd024, 0xd025, 0xd026,
+ 0xd027, 0xd028, 0x003f, 0xd029, 0xd02a, 0xd02b, 0xd02c, 0xd02d,
+ 0xd02e, 0xd02f, 0xd030, 0xd031, 0xd032, 0xd033, 0x003f, 0x003f,
+ 0x003f, 0xd034, 0xd035, 0xd036, 0xd037, 0xd038, 0xd039, 0xd03a,
+ 0xd03b, 0xd03c, 0xd03d, 0xd03e, 0xd03f, 0xd040, 0xd041, 0xd042,
+ 0xd043, 0xd044, 0x003f, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049,
+ 0xd04a, 0xd04b, 0xd04c, 0xd04d, 0xd04e, 0xd04f, 0x003f, 0x003f,
+ /* lead byte c7 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd050, 0xd051, 0xd052, 0xd053, 0xd054, 0xd055, 0xd056,
+ 0xd057, 0xd058, 0xd059, 0xd05a, 0xd05b, 0xd05c, 0xd05d, 0xd05e,
+ 0xd05f, 0xd060, 0x003f, 0xd061, 0xd062, 0xd063, 0xd064, 0xd065,
+ 0xd066, 0xd067, 0xd068, 0xd069, 0xd06a, 0xd06b, 0x003f, 0x003f,
+ 0x003f, 0xd06c, 0xd06d, 0xd06e, 0xd06f, 0xd070, 0xd071, 0xd072,
+ 0xd073, 0xd074, 0xd075, 0xd076, 0xd077, 0xd078, 0xd079, 0xd07a,
+ 0xd07b, 0xd07c, 0x003f, 0xd07d, 0xd07e, 0xd07f, 0xd080, 0xd081,
+ 0xd082, 0xd083, 0xd084, 0xd085, 0xd086, 0xd087, 0x003f, 0x003f,
+ 0x003f, 0xd088, 0xd089, 0xd08a, 0xd08b, 0xd08c, 0xd08d, 0xd08e,
+ 0xd08f, 0xd090, 0xd091, 0xd092, 0xd093, 0xd094, 0xd095, 0xd096,
+ 0xd097, 0xd098, 0x003f, 0xd099, 0xd09a, 0xd09b, 0xd09c, 0xd09d,
+ 0xd09e, 0xd09f, 0xd0a0, 0xd0a1, 0xd0a2, 0xd0a3, 0x003f, 0x003f,
+ 0x003f, 0xd0a4, 0xd0a5, 0xd0a6, 0xd0a7, 0xd0a8, 0xd0a9, 0xd0aa,
+ 0xd0ab, 0xd0ac, 0xd0ad, 0xd0ae, 0xd0af, 0xd0b0, 0xd0b1, 0xd0b2,
+ 0xd0b3, 0xd0b4, 0x003f, 0xd0b5, 0xd0b6, 0xd0b7, 0xd0b8, 0xd0b9,
+ 0xd0ba, 0xd0bb, 0xd0bc, 0xd0bd, 0xd0be, 0xd0bf, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte c8 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x314c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd0c0, 0xd0c1, 0xd0c2, 0xd0c3, 0xd0c4, 0xd0c5, 0xd0c6,
+ 0xd0c7, 0xd0c8, 0xd0c9, 0xd0ca, 0xd0cb, 0xd0cc, 0xd0cd, 0xd0ce,
+ 0xd0cf, 0xd0d0, 0x003f, 0xd0d1, 0xd0d2, 0xd0d3, 0xd0d4, 0xd0d5,
+ 0xd0d6, 0xd0d7, 0xd0d8, 0xd0d9, 0xd0da, 0xd0db, 0x003f, 0x003f,
+ 0x003f, 0xd0dc, 0xd0dd, 0xd0de, 0xd0df, 0xd0e0, 0xd0e1, 0xd0e2,
+ 0xd0e3, 0xd0e4, 0xd0e5, 0xd0e6, 0xd0e7, 0xd0e8, 0xd0e9, 0xd0ea,
+ 0xd0eb, 0xd0ec, 0x003f, 0xd0ed, 0xd0ee, 0xd0ef, 0xd0f0, 0xd0f1,
+ 0xd0f2, 0xd0f3, 0xd0f4, 0xd0f5, 0xd0f6, 0xd0f7, 0x003f, 0x003f,
+ 0x003f, 0xd0f8, 0xd0f9, 0xd0fa, 0xd0fb, 0xd0fc, 0xd0fd, 0xd0fe,
+ 0xd0ff, 0xd100, 0xd101, 0xd102, 0xd103, 0xd104, 0xd105, 0xd106,
+ 0xd107, 0xd108, 0x003f, 0xd109, 0xd10a, 0xd10b, 0xd10c, 0xd10d,
+ 0xd10e, 0xd10f, 0xd110, 0xd111, 0xd112, 0xd113, 0x003f, 0x003f,
+ 0x003f, 0xd114, 0xd115, 0xd116, 0xd117, 0xd118, 0xd119, 0xd11a,
+ 0xd11b, 0xd11c, 0xd11d, 0xd11e, 0xd11f, 0xd120, 0xd121, 0xd122,
+ 0xd123, 0xd124, 0x003f, 0xd125, 0xd126, 0xd127, 0xd128, 0xd129,
+ 0xd12a, 0xd12b, 0xd12c, 0xd12d, 0xd12e, 0xd12f, 0x003f, 0x003f,
+ 0x003f, 0xd130, 0xd131, 0xd132, 0xd133, 0xd134, 0xd135, 0xd136,
+ 0xd137, 0xd138, 0xd139, 0xd13a, 0xd13b, 0xd13c, 0xd13d, 0xd13e,
+ 0xd13f, 0xd140, 0x003f, 0xd141, 0xd142, 0xd143, 0xd144, 0xd145,
+ 0xd146, 0xd147, 0xd148, 0xd149, 0xd14a, 0xd14b, 0x003f, 0x003f,
+ /* lead byte c9 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd14c, 0xd14d, 0xd14e, 0xd14f, 0xd150, 0xd151, 0xd152,
+ 0xd153, 0xd154, 0xd155, 0xd156, 0xd157, 0xd158, 0xd159, 0xd15a,
+ 0xd15b, 0xd15c, 0x003f, 0xd15d, 0xd15e, 0xd15f, 0xd160, 0xd161,
+ 0xd162, 0xd163, 0xd164, 0xd165, 0xd166, 0xd167, 0x003f, 0x003f,
+ 0x003f, 0xd168, 0xd169, 0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e,
+ 0xd16f, 0xd170, 0xd171, 0xd172, 0xd173, 0xd174, 0xd175, 0xd176,
+ 0xd177, 0xd178, 0x003f, 0xd179, 0xd17a, 0xd17b, 0xd17c, 0xd17d,
+ 0xd17e, 0xd17f, 0xd180, 0xd181, 0xd182, 0xd183, 0x003f, 0x003f,
+ 0x003f, 0xd184, 0xd185, 0xd186, 0xd187, 0xd188, 0xd189, 0xd18a,
+ 0xd18b, 0xd18c, 0xd18d, 0xd18e, 0xd18f, 0xd190, 0xd191, 0xd192,
+ 0xd193, 0xd194, 0x003f, 0xd195, 0xd196, 0xd197, 0xd198, 0xd199,
+ 0xd19a, 0xd19b, 0xd19c, 0xd19d, 0xd19e, 0xd19f, 0x003f, 0x003f,
+ 0x003f, 0xd1a0, 0xd1a1, 0xd1a2, 0xd1a3, 0xd1a4, 0xd1a5, 0xd1a6,
+ 0xd1a7, 0xd1a8, 0xd1a9, 0xd1aa, 0xd1ab, 0xd1ac, 0xd1ad, 0xd1ae,
+ 0xd1af, 0xd1b0, 0x003f, 0xd1b1, 0xd1b2, 0xd1b3, 0xd1b4, 0xd1b5,
+ 0xd1b6, 0xd1b7, 0xd1b8, 0xd1b9, 0xd1ba, 0xd1bb, 0x003f, 0x003f,
+ 0x003f, 0xd1bc, 0xd1bd, 0xd1be, 0xd1bf, 0xd1c0, 0xd1c1, 0xd1c2,
+ 0xd1c3, 0xd1c4, 0xd1c5, 0xd1c6, 0xd1c7, 0xd1c8, 0xd1c9, 0xd1ca,
+ 0xd1cb, 0xd1cc, 0x003f, 0xd1cd, 0xd1ce, 0xd1cf, 0xd1d0, 0xd1d1,
+ 0xd1d2, 0xd1d3, 0xd1d4, 0xd1d5, 0xd1d6, 0xd1d7, 0x003f, 0x003f,
+ 0x003f, 0xd1d8, 0xd1d9, 0xd1da, 0xd1db, 0xd1dc, 0xd1dd, 0xd1de,
+ 0xd1df, 0xd1e0, 0xd1e1, 0xd1e2, 0xd1e3, 0xd1e4, 0xd1e5, 0xd1e6,
+ 0xd1e7, 0xd1e8, 0x003f, 0xd1e9, 0xd1ea, 0xd1eb, 0xd1ec, 0xd1ed,
+ 0xd1ee, 0xd1ef, 0xd1f0, 0xd1f1, 0xd1f2, 0xd1f3, 0x003f, 0x003f,
+ /* lead byte ca */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd1f4, 0xd1f5, 0xd1f6, 0xd1f7, 0xd1f8, 0xd1f9, 0xd1fa,
+ 0xd1fb, 0xd1fc, 0xd1fd, 0xd1fe, 0xd1ff, 0xd200, 0xd201, 0xd202,
+ 0xd203, 0xd204, 0x003f, 0xd205, 0xd206, 0xd207, 0xd208, 0xd209,
+ 0xd20a, 0xd20b, 0xd20c, 0xd20d, 0xd20e, 0xd20f, 0x003f, 0x003f,
+ 0x003f, 0xd210, 0xd211, 0xd212, 0xd213, 0xd214, 0xd215, 0xd216,
+ 0xd217, 0xd218, 0xd219, 0xd21a, 0xd21b, 0xd21c, 0xd21d, 0xd21e,
+ 0xd21f, 0xd220, 0x003f, 0xd221, 0xd222, 0xd223, 0xd224, 0xd225,
+ 0xd226, 0xd227, 0xd228, 0xd229, 0xd22a, 0xd22b, 0x003f, 0x003f,
+ 0x003f, 0xd22c, 0xd22d, 0xd22e, 0xd22f, 0xd230, 0xd231, 0xd232,
+ 0xd233, 0xd234, 0xd235, 0xd236, 0xd237, 0xd238, 0xd239, 0xd23a,
+ 0xd23b, 0xd23c, 0x003f, 0xd23d, 0xd23e, 0xd23f, 0xd240, 0xd241,
+ 0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, 0x003f, 0x003f,
+ 0x003f, 0xd248, 0xd249, 0xd24a, 0xd24b, 0xd24c, 0xd24d, 0xd24e,
+ 0xd24f, 0xd250, 0xd251, 0xd252, 0xd253, 0xd254, 0xd255, 0xd256,
+ 0xd257, 0xd258, 0x003f, 0xd259, 0xd25a, 0xd25b, 0xd25c, 0xd25d,
+ 0xd25e, 0xd25f, 0xd260, 0xd261, 0xd262, 0xd263, 0x003f, 0x003f,
+ 0x003f, 0xd264, 0xd265, 0xd266, 0xd267, 0xd268, 0xd269, 0xd26a,
+ 0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, 0xd270, 0xd271, 0xd272,
+ 0xd273, 0xd274, 0x003f, 0xd275, 0xd276, 0xd277, 0xd278, 0xd279,
+ 0xd27a, 0xd27b, 0xd27c, 0xd27d, 0xd27e, 0xd27f, 0x003f, 0x003f,
+ 0x003f, 0xd280, 0xd281, 0xd282, 0xd283, 0xd284, 0xd285, 0xd286,
+ 0xd287, 0xd288, 0xd289, 0xd28a, 0xd28b, 0xd28c, 0xd28d, 0xd28e,
+ 0xd28f, 0xd290, 0x003f, 0xd291, 0xd292, 0xd293, 0xd294, 0xd295,
+ 0xd296, 0xd297, 0xd298, 0xd299, 0xd29a, 0xd29b, 0x003f, 0x003f,
+ /* lead byte cb */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd29c, 0xd29d, 0xd29e, 0xd29f, 0xd2a0, 0xd2a1, 0xd2a2,
+ 0xd2a3, 0xd2a4, 0xd2a5, 0xd2a6, 0xd2a7, 0xd2a8, 0xd2a9, 0xd2aa,
+ 0xd2ab, 0xd2ac, 0x003f, 0xd2ad, 0xd2ae, 0xd2af, 0xd2b0, 0xd2b1,
+ 0xd2b2, 0xd2b3, 0xd2b4, 0xd2b5, 0xd2b6, 0xd2b7, 0x003f, 0x003f,
+ 0x003f, 0xd2b8, 0xd2b9, 0xd2ba, 0xd2bb, 0xd2bc, 0xd2bd, 0xd2be,
+ 0xd2bf, 0xd2c0, 0xd2c1, 0xd2c2, 0xd2c3, 0xd2c4, 0xd2c5, 0xd2c6,
+ 0xd2c7, 0xd2c8, 0x003f, 0xd2c9, 0xd2ca, 0xd2cb, 0xd2cc, 0xd2cd,
+ 0xd2ce, 0xd2cf, 0xd2d0, 0xd2d1, 0xd2d2, 0xd2d3, 0x003f, 0x003f,
+ 0x003f, 0xd2d4, 0xd2d5, 0xd2d6, 0xd2d7, 0xd2d8, 0xd2d9, 0xd2da,
+ 0xd2db, 0xd2dc, 0xd2dd, 0xd2de, 0xd2df, 0xd2e0, 0xd2e1, 0xd2e2,
+ 0xd2e3, 0xd2e4, 0x003f, 0xd2e5, 0xd2e6, 0xd2e7, 0xd2e8, 0xd2e9,
+ 0xd2ea, 0xd2eb, 0xd2ec, 0xd2ed, 0xd2ee, 0xd2ef, 0x003f, 0x003f,
+ 0x003f, 0xd2f0, 0xd2f1, 0xd2f2, 0xd2f3, 0xd2f4, 0xd2f5, 0xd2f6,
+ 0xd2f7, 0xd2f8, 0xd2f9, 0xd2fa, 0xd2fb, 0xd2fc, 0xd2fd, 0xd2fe,
+ 0xd2ff, 0xd300, 0x003f, 0xd301, 0xd302, 0xd303, 0xd304, 0xd305,
+ 0xd306, 0xd307, 0xd308, 0xd309, 0xd30a, 0xd30b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte cc */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x314d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd30c, 0xd30d, 0xd30e, 0xd30f, 0xd310, 0xd311, 0xd312,
+ 0xd313, 0xd314, 0xd315, 0xd316, 0xd317, 0xd318, 0xd319, 0xd31a,
+ 0xd31b, 0xd31c, 0x003f, 0xd31d, 0xd31e, 0xd31f, 0xd320, 0xd321,
+ 0xd322, 0xd323, 0xd324, 0xd325, 0xd326, 0xd327, 0x003f, 0x003f,
+ 0x003f, 0xd328, 0xd329, 0xd32a, 0xd32b, 0xd32c, 0xd32d, 0xd32e,
+ 0xd32f, 0xd330, 0xd331, 0xd332, 0xd333, 0xd334, 0xd335, 0xd336,
+ 0xd337, 0xd338, 0x003f, 0xd339, 0xd33a, 0xd33b, 0xd33c, 0xd33d,
+ 0xd33e, 0xd33f, 0xd340, 0xd341, 0xd342, 0xd343, 0x003f, 0x003f,
+ 0x003f, 0xd344, 0xd345, 0xd346, 0xd347, 0xd348, 0xd349, 0xd34a,
+ 0xd34b, 0xd34c, 0xd34d, 0xd34e, 0xd34f, 0xd350, 0xd351, 0xd352,
+ 0xd353, 0xd354, 0x003f, 0xd355, 0xd356, 0xd357, 0xd358, 0xd359,
+ 0xd35a, 0xd35b, 0xd35c, 0xd35d, 0xd35e, 0xd35f, 0x003f, 0x003f,
+ 0x003f, 0xd360, 0xd361, 0xd362, 0xd363, 0xd364, 0xd365, 0xd366,
+ 0xd367, 0xd368, 0xd369, 0xd36a, 0xd36b, 0xd36c, 0xd36d, 0xd36e,
+ 0xd36f, 0xd370, 0x003f, 0xd371, 0xd372, 0xd373, 0xd374, 0xd375,
+ 0xd376, 0xd377, 0xd378, 0xd379, 0xd37a, 0xd37b, 0x003f, 0x003f,
+ 0x003f, 0xd37c, 0xd37d, 0xd37e, 0xd37f, 0xd380, 0xd381, 0xd382,
+ 0xd383, 0xd384, 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, 0xd38a,
+ 0xd38b, 0xd38c, 0x003f, 0xd38d, 0xd38e, 0xd38f, 0xd390, 0xd391,
+ 0xd392, 0xd393, 0xd394, 0xd395, 0xd396, 0xd397, 0x003f, 0x003f,
+ /* lead byte cd */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd398, 0xd399, 0xd39a, 0xd39b, 0xd39c, 0xd39d, 0xd39e,
+ 0xd39f, 0xd3a0, 0xd3a1, 0xd3a2, 0xd3a3, 0xd3a4, 0xd3a5, 0xd3a6,
+ 0xd3a7, 0xd3a8, 0x003f, 0xd3a9, 0xd3aa, 0xd3ab, 0xd3ac, 0xd3ad,
+ 0xd3ae, 0xd3af, 0xd3b0, 0xd3b1, 0xd3b2, 0xd3b3, 0x003f, 0x003f,
+ 0x003f, 0xd3b4, 0xd3b5, 0xd3b6, 0xd3b7, 0xd3b8, 0xd3b9, 0xd3ba,
+ 0xd3bb, 0xd3bc, 0xd3bd, 0xd3be, 0xd3bf, 0xd3c0, 0xd3c1, 0xd3c2,
+ 0xd3c3, 0xd3c4, 0x003f, 0xd3c5, 0xd3c6, 0xd3c7, 0xd3c8, 0xd3c9,
+ 0xd3ca, 0xd3cb, 0xd3cc, 0xd3cd, 0xd3ce, 0xd3cf, 0x003f, 0x003f,
+ 0x003f, 0xd3d0, 0xd3d1, 0xd3d2, 0xd3d3, 0xd3d4, 0xd3d5, 0xd3d6,
+ 0xd3d7, 0xd3d8, 0xd3d9, 0xd3da, 0xd3db, 0xd3dc, 0xd3dd, 0xd3de,
+ 0xd3df, 0xd3e0, 0x003f, 0xd3e1, 0xd3e2, 0xd3e3, 0xd3e4, 0xd3e5,
+ 0xd3e6, 0xd3e7, 0xd3e8, 0xd3e9, 0xd3ea, 0xd3eb, 0x003f, 0x003f,
+ 0x003f, 0xd3ec, 0xd3ed, 0xd3ee, 0xd3ef, 0xd3f0, 0xd3f1, 0xd3f2,
+ 0xd3f3, 0xd3f4, 0xd3f5, 0xd3f6, 0xd3f7, 0xd3f8, 0xd3f9, 0xd3fa,
+ 0xd3fb, 0xd3fc, 0x003f, 0xd3fd, 0xd3fe, 0xd3ff, 0xd400, 0xd401,
+ 0xd402, 0xd403, 0xd404, 0xd405, 0xd406, 0xd407, 0x003f, 0x003f,
+ 0x003f, 0xd408, 0xd409, 0xd40a, 0xd40b, 0xd40c, 0xd40d, 0xd40e,
+ 0xd40f, 0xd410, 0xd411, 0xd412, 0xd413, 0xd414, 0xd415, 0xd416,
+ 0xd417, 0xd418, 0x003f, 0xd419, 0xd41a, 0xd41b, 0xd41c, 0xd41d,
+ 0xd41e, 0xd41f, 0xd420, 0xd421, 0xd422, 0xd423, 0x003f, 0x003f,
+ 0x003f, 0xd424, 0xd425, 0xd426, 0xd427, 0xd428, 0xd429, 0xd42a,
+ 0xd42b, 0xd42c, 0xd42d, 0xd42e, 0xd42f, 0xd430, 0xd431, 0xd432,
+ 0xd433, 0xd434, 0x003f, 0xd435, 0xd436, 0xd437, 0xd438, 0xd439,
+ 0xd43a, 0xd43b, 0xd43c, 0xd43d, 0xd43e, 0xd43f, 0x003f, 0x003f,
+ /* lead byte ce */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd440, 0xd441, 0xd442, 0xd443, 0xd444, 0xd445, 0xd446,
+ 0xd447, 0xd448, 0xd449, 0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e,
+ 0xd44f, 0xd450, 0x003f, 0xd451, 0xd452, 0xd453, 0xd454, 0xd455,
+ 0xd456, 0xd457, 0xd458, 0xd459, 0xd45a, 0xd45b, 0x003f, 0x003f,
+ 0x003f, 0xd45c, 0xd45d, 0xd45e, 0xd45f, 0xd460, 0xd461, 0xd462,
+ 0xd463, 0xd464, 0xd465, 0xd466, 0xd467, 0xd468, 0xd469, 0xd46a,
+ 0xd46b, 0xd46c, 0x003f, 0xd46d, 0xd46e, 0xd46f, 0xd470, 0xd471,
+ 0xd472, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477, 0x003f, 0x003f,
+ 0x003f, 0xd478, 0xd479, 0xd47a, 0xd47b, 0xd47c, 0xd47d, 0xd47e,
+ 0xd47f, 0xd480, 0xd481, 0xd482, 0xd483, 0xd484, 0xd485, 0xd486,
+ 0xd487, 0xd488, 0x003f, 0xd489, 0xd48a, 0xd48b, 0xd48c, 0xd48d,
+ 0xd48e, 0xd48f, 0xd490, 0xd491, 0xd492, 0xd493, 0x003f, 0x003f,
+ 0x003f, 0xd494, 0xd495, 0xd496, 0xd497, 0xd498, 0xd499, 0xd49a,
+ 0xd49b, 0xd49c, 0xd49d, 0xd49e, 0xd49f, 0xd4a0, 0xd4a1, 0xd4a2,
+ 0xd4a3, 0xd4a4, 0x003f, 0xd4a5, 0xd4a6, 0xd4a7, 0xd4a8, 0xd4a9,
+ 0xd4aa, 0xd4ab, 0xd4ac, 0xd4ad, 0xd4ae, 0xd4af, 0x003f, 0x003f,
+ 0x003f, 0xd4b0, 0xd4b1, 0xd4b2, 0xd4b3, 0xd4b4, 0xd4b5, 0xd4b6,
+ 0xd4b7, 0xd4b8, 0xd4b9, 0xd4ba, 0xd4bb, 0xd4bc, 0xd4bd, 0xd4be,
+ 0xd4bf, 0xd4c0, 0x003f, 0xd4c1, 0xd4c2, 0xd4c3, 0xd4c4, 0xd4c5,
+ 0xd4c6, 0xd4c7, 0xd4c8, 0xd4c9, 0xd4ca, 0xd4cb, 0x003f, 0x003f,
+ 0x003f, 0xd4cc, 0xd4cd, 0xd4ce, 0xd4cf, 0xd4d0, 0xd4d1, 0xd4d2,
+ 0xd4d3, 0xd4d4, 0xd4d5, 0xd4d6, 0xd4d7, 0xd4d8, 0xd4d9, 0xd4da,
+ 0xd4db, 0xd4dc, 0x003f, 0xd4dd, 0xd4de, 0xd4df, 0xd4e0, 0xd4e1,
+ 0xd4e2, 0xd4e3, 0xd4e4, 0xd4e5, 0xd4e6, 0xd4e7, 0x003f, 0x003f,
+ /* lead byte cf */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd4e8, 0xd4e9, 0xd4ea, 0xd4eb, 0xd4ec, 0xd4ed, 0xd4ee,
+ 0xd4ef, 0xd4f0, 0xd4f1, 0xd4f2, 0xd4f3, 0xd4f4, 0xd4f5, 0xd4f6,
+ 0xd4f7, 0xd4f8, 0x003f, 0xd4f9, 0xd4fa, 0xd4fb, 0xd4fc, 0xd4fd,
+ 0xd4fe, 0xd4ff, 0xd500, 0xd501, 0xd502, 0xd503, 0x003f, 0x003f,
+ 0x003f, 0xd504, 0xd505, 0xd506, 0xd507, 0xd508, 0xd509, 0xd50a,
+ 0xd50b, 0xd50c, 0xd50d, 0xd50e, 0xd50f, 0xd510, 0xd511, 0xd512,
+ 0xd513, 0xd514, 0x003f, 0xd515, 0xd516, 0xd517, 0xd518, 0xd519,
+ 0xd51a, 0xd51b, 0xd51c, 0xd51d, 0xd51e, 0xd51f, 0x003f, 0x003f,
+ 0x003f, 0xd520, 0xd521, 0xd522, 0xd523, 0xd524, 0xd525, 0xd526,
+ 0xd527, 0xd528, 0xd529, 0xd52a, 0xd52b, 0xd52c, 0xd52d, 0xd52e,
+ 0xd52f, 0xd530, 0x003f, 0xd531, 0xd532, 0xd533, 0xd534, 0xd535,
+ 0xd536, 0xd537, 0xd538, 0xd539, 0xd53a, 0xd53b, 0x003f, 0x003f,
+ 0x003f, 0xd53c, 0xd53d, 0xd53e, 0xd53f, 0xd540, 0xd541, 0xd542,
+ 0xd543, 0xd544, 0xd545, 0xd546, 0xd547, 0xd548, 0xd549, 0xd54a,
+ 0xd54b, 0xd54c, 0x003f, 0xd54d, 0xd54e, 0xd54f, 0xd550, 0xd551,
+ 0xd552, 0xd553, 0xd554, 0xd555, 0xd556, 0xd557, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte d0 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x314e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd558, 0xd559, 0xd55a, 0xd55b, 0xd55c, 0xd55d, 0xd55e,
+ 0xd55f, 0xd560, 0xd561, 0xd562, 0xd563, 0xd564, 0xd565, 0xd566,
+ 0xd567, 0xd568, 0x003f, 0xd569, 0xd56a, 0xd56b, 0xd56c, 0xd56d,
+ 0xd56e, 0xd56f, 0xd570, 0xd571, 0xd572, 0xd573, 0x003f, 0x003f,
+ 0x003f, 0xd574, 0xd575, 0xd576, 0xd577, 0xd578, 0xd579, 0xd57a,
+ 0xd57b, 0xd57c, 0xd57d, 0xd57e, 0xd57f, 0xd580, 0xd581, 0xd582,
+ 0xd583, 0xd584, 0x003f, 0xd585, 0xd586, 0xd587, 0xd588, 0xd589,
+ 0xd58a, 0xd58b, 0xd58c, 0xd58d, 0xd58e, 0xd58f, 0x003f, 0x003f,
+ 0x003f, 0xd590, 0xd591, 0xd592, 0xd593, 0xd594, 0xd595, 0xd596,
+ 0xd597, 0xd598, 0xd599, 0xd59a, 0xd59b, 0xd59c, 0xd59d, 0xd59e,
+ 0xd59f, 0xd5a0, 0x003f, 0xd5a1, 0xd5a2, 0xd5a3, 0xd5a4, 0xd5a5,
+ 0xd5a6, 0xd5a7, 0xd5a8, 0xd5a9, 0xd5aa, 0xd5ab, 0x003f, 0x003f,
+ 0x003f, 0xd5ac, 0xd5ad, 0xd5ae, 0xd5af, 0xd5b0, 0xd5b1, 0xd5b2,
+ 0xd5b3, 0xd5b4, 0xd5b5, 0xd5b6, 0xd5b7, 0xd5b8, 0xd5b9, 0xd5ba,
+ 0xd5bb, 0xd5bc, 0x003f, 0xd5bd, 0xd5be, 0xd5bf, 0xd5c0, 0xd5c1,
+ 0xd5c2, 0xd5c3, 0xd5c4, 0xd5c5, 0xd5c6, 0xd5c7, 0x003f, 0x003f,
+ 0x003f, 0xd5c8, 0xd5c9, 0xd5ca, 0xd5cb, 0xd5cc, 0xd5cd, 0xd5ce,
+ 0xd5cf, 0xd5d0, 0xd5d1, 0xd5d2, 0xd5d3, 0xd5d4, 0xd5d5, 0xd5d6,
+ 0xd5d7, 0xd5d8, 0x003f, 0xd5d9, 0xd5da, 0xd5db, 0xd5dc, 0xd5dd,
+ 0xd5de, 0xd5df, 0xd5e0, 0xd5e1, 0xd5e2, 0xd5e3, 0x003f, 0x003f,
+ /* lead byte d1 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd5e4, 0xd5e5, 0xd5e6, 0xd5e7, 0xd5e8, 0xd5e9, 0xd5ea,
+ 0xd5eb, 0xd5ec, 0xd5ed, 0xd5ee, 0xd5ef, 0xd5f0, 0xd5f1, 0xd5f2,
+ 0xd5f3, 0xd5f4, 0x003f, 0xd5f5, 0xd5f6, 0xd5f7, 0xd5f8, 0xd5f9,
+ 0xd5fa, 0xd5fb, 0xd5fc, 0xd5fd, 0xd5fe, 0xd5ff, 0x003f, 0x003f,
+ 0x003f, 0xd600, 0xd601, 0xd602, 0xd603, 0xd604, 0xd605, 0xd606,
+ 0xd607, 0xd608, 0xd609, 0xd60a, 0xd60b, 0xd60c, 0xd60d, 0xd60e,
+ 0xd60f, 0xd610, 0x003f, 0xd611, 0xd612, 0xd613, 0xd614, 0xd615,
+ 0xd616, 0xd617, 0xd618, 0xd619, 0xd61a, 0xd61b, 0x003f, 0x003f,
+ 0x003f, 0xd61c, 0xd61d, 0xd61e, 0xd61f, 0xd620, 0xd621, 0xd622,
+ 0xd623, 0xd624, 0xd625, 0xd626, 0xd627, 0xd628, 0xd629, 0xd62a,
+ 0xd62b, 0xd62c, 0x003f, 0xd62d, 0xd62e, 0xd62f, 0xd630, 0xd631,
+ 0xd632, 0xd633, 0xd634, 0xd635, 0xd636, 0xd637, 0x003f, 0x003f,
+ 0x003f, 0xd638, 0xd639, 0xd63a, 0xd63b, 0xd63c, 0xd63d, 0xd63e,
+ 0xd63f, 0xd640, 0xd641, 0xd642, 0xd643, 0xd644, 0xd645, 0xd646,
+ 0xd647, 0xd648, 0x003f, 0xd649, 0xd64a, 0xd64b, 0xd64c, 0xd64d,
+ 0xd64e, 0xd64f, 0xd650, 0xd651, 0xd652, 0xd653, 0x003f, 0x003f,
+ 0x003f, 0xd654, 0xd655, 0xd656, 0xd657, 0xd658, 0xd659, 0xd65a,
+ 0xd65b, 0xd65c, 0xd65d, 0xd65e, 0xd65f, 0xd660, 0xd661, 0xd662,
+ 0xd663, 0xd664, 0x003f, 0xd665, 0xd666, 0xd667, 0xd668, 0xd669,
+ 0xd66a, 0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f, 0x003f, 0x003f,
+ 0x003f, 0xd670, 0xd671, 0xd672, 0xd673, 0xd674, 0xd675, 0xd676,
+ 0xd677, 0xd678, 0xd679, 0xd67a, 0xd67b, 0xd67c, 0xd67d, 0xd67e,
+ 0xd67f, 0xd680, 0x003f, 0xd681, 0xd682, 0xd683, 0xd684, 0xd685,
+ 0xd686, 0xd687, 0xd688, 0xd689, 0xd68a, 0xd68b, 0x003f, 0x003f,
+ /* lead byte d2 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd68c, 0xd68d, 0xd68e, 0xd68f, 0xd690, 0xd691, 0xd692,
+ 0xd693, 0xd694, 0xd695, 0xd696, 0xd697, 0xd698, 0xd699, 0xd69a,
+ 0xd69b, 0xd69c, 0x003f, 0xd69d, 0xd69e, 0xd69f, 0xd6a0, 0xd6a1,
+ 0xd6a2, 0xd6a3, 0xd6a4, 0xd6a5, 0xd6a6, 0xd6a7, 0x003f, 0x003f,
+ 0x003f, 0xd6a8, 0xd6a9, 0xd6aa, 0xd6ab, 0xd6ac, 0xd6ad, 0xd6ae,
+ 0xd6af, 0xd6b0, 0xd6b1, 0xd6b2, 0xd6b3, 0xd6b4, 0xd6b5, 0xd6b6,
+ 0xd6b7, 0xd6b8, 0x003f, 0xd6b9, 0xd6ba, 0xd6bb, 0xd6bc, 0xd6bd,
+ 0xd6be, 0xd6bf, 0xd6c0, 0xd6c1, 0xd6c2, 0xd6c3, 0x003f, 0x003f,
+ 0x003f, 0xd6c4, 0xd6c5, 0xd6c6, 0xd6c7, 0xd6c8, 0xd6c9, 0xd6ca,
+ 0xd6cb, 0xd6cc, 0xd6cd, 0xd6ce, 0xd6cf, 0xd6d0, 0xd6d1, 0xd6d2,
+ 0xd6d3, 0xd6d4, 0x003f, 0xd6d5, 0xd6d6, 0xd6d7, 0xd6d8, 0xd6d9,
+ 0xd6da, 0xd6db, 0xd6dc, 0xd6dd, 0xd6de, 0xd6df, 0x003f, 0x003f,
+ 0x003f, 0xd6e0, 0xd6e1, 0xd6e2, 0xd6e3, 0xd6e4, 0xd6e5, 0xd6e6,
+ 0xd6e7, 0xd6e8, 0xd6e9, 0xd6ea, 0xd6eb, 0xd6ec, 0xd6ed, 0xd6ee,
+ 0xd6ef, 0xd6f0, 0x003f, 0xd6f1, 0xd6f2, 0xd6f3, 0xd6f4, 0xd6f5,
+ 0xd6f6, 0xd6f7, 0xd6f8, 0xd6f9, 0xd6fa, 0xd6fb, 0x003f, 0x003f,
+ 0x003f, 0xd6fc, 0xd6fd, 0xd6fe, 0xd6ff, 0xd700, 0xd701, 0xd702,
+ 0xd703, 0xd704, 0xd705, 0xd706, 0xd707, 0xd708, 0xd709, 0xd70a,
+ 0xd70b, 0xd70c, 0x003f, 0xd70d, 0xd70e, 0xd70f, 0xd710, 0xd711,
+ 0xd712, 0xd713, 0xd714, 0xd715, 0xd716, 0xd717, 0x003f, 0x003f,
+ 0x003f, 0xd718, 0xd719, 0xd71a, 0xd71b, 0xd71c, 0xd71d, 0xd71e,
+ 0xd71f, 0xd720, 0xd721, 0xd722, 0xd723, 0xd724, 0xd725, 0xd726,
+ 0xd727, 0xd728, 0x003f, 0xd729, 0xd72a, 0xd72b, 0xd72c, 0xd72d,
+ 0xd72e, 0xd72f, 0xd730, 0xd731, 0xd732, 0xd733, 0x003f, 0x003f,
+ /* lead byte d3 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd734, 0xd735, 0xd736, 0xd737, 0xd738, 0xd739, 0xd73a,
+ 0xd73b, 0xd73c, 0xd73d, 0xd73e, 0xd73f, 0xd740, 0xd741, 0xd742,
+ 0xd743, 0xd744, 0x003f, 0xd745, 0xd746, 0xd747, 0xd748, 0xd749,
+ 0xd74a, 0xd74b, 0xd74c, 0xd74d, 0xd74e, 0xd74f, 0x003f, 0x003f,
+ 0x003f, 0xd750, 0xd751, 0xd752, 0xd753, 0xd754, 0xd755, 0xd756,
+ 0xd757, 0xd758, 0xd759, 0xd75a, 0xd75b, 0xd75c, 0xd75d, 0xd75e,
+ 0xd75f, 0xd760, 0x003f, 0xd761, 0xd762, 0xd763, 0xd764, 0xd765,
+ 0xd766, 0xd767, 0xd768, 0xd769, 0xd76a, 0xd76b, 0x003f, 0x003f,
+ 0x003f, 0xd76c, 0xd76d, 0xd76e, 0xd76f, 0xd770, 0xd771, 0xd772,
+ 0xd773, 0xd774, 0xd775, 0xd776, 0xd777, 0xd778, 0xd779, 0xd77a,
+ 0xd77b, 0xd77c, 0x003f, 0xd77d, 0xd77e, 0xd77f, 0xd780, 0xd781,
+ 0xd782, 0xd783, 0xd784, 0xd785, 0xd786, 0xd787, 0x003f, 0x003f,
+ 0x003f, 0xd788, 0xd789, 0xd78a, 0xd78b, 0xd78c, 0xd78d, 0xd78e,
+ 0xd78f, 0xd790, 0xd791, 0xd792, 0xd793, 0xd794, 0xd795, 0xd796,
+ 0xd797, 0xd798, 0x003f, 0xd799, 0xd79a, 0xd79b, 0xd79c, 0xd79d,
+ 0xd79e, 0xd79f, 0xd7a0, 0xd7a1, 0xd7a2, 0xd7a3, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte d9 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3000, 0x3001, 0x3002, 0x00b7, 0x2025, 0x2026, 0x00a8,
+ 0x3003, 0x00ad, 0x2015, 0x2225, 0xff3c, 0x223c, 0x2018, 0x2019,
+ 0x201c, 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b,
+ 0x300c, 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x00b1, 0x00d7,
+ 0x00f7, 0x2260, 0x2264, 0x2265, 0x221e, 0x2234, 0x00b0, 0x2032,
+ 0x2033, 0x2103, 0x212b, 0xffe0, 0xffe1, 0xffe5, 0x2642, 0x2640,
+ 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00a7,
+ 0x203b, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6,
+ 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x2192, 0x2190,
+ 0x2191, 0x2193, 0x2194, 0x3013, 0x226a, 0x226b, 0x221a, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x223d, 0x221d, 0x2235, 0x222b, 0x222c, 0x2208, 0x220b,
+ 0x2286, 0x2287, 0x2282, 0x2283, 0x222a, 0x2229, 0x2227, 0x2228,
+ 0xffe2, 0x21d2, 0x21d4, 0x2200, 0x2203, 0x00b4, 0xff5e, 0x02c7,
+ 0x02d8, 0x02dd, 0x02da, 0x02d9, 0x00b8, 0x02db, 0x00a1, 0x00bf,
+ 0x02d0, 0x222e, 0x2211, 0x220f, 0x00a4, 0x2109, 0x2030, 0x25c1,
+ 0x25c0, 0x25b7, 0x25b6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667,
+ 0x2663, 0x2299, 0x25c8, 0x25a3, 0x25d0, 0x25d1, 0x2592, 0x25a4,
+ 0x25a5, 0x25a8, 0x25a7, 0x25a6, 0x25a9, 0x2668, 0x260f, 0x260e,
+ 0x261c, 0x261e, 0x00b6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199,
+ 0x2196, 0x2198, 0x266d, 0x2669, 0x266a, 0x266c, 0x327f, 0x321c,
+ 0x2116, 0x33c7, 0x2122, 0x33c2, 0x33d8, 0x2121, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte da */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07,
+ 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f,
+ 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17,
+ 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f,
+ 0xff20, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27,
+ 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f,
+ 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37,
+ 0xff38, 0xff39, 0xff3a, 0xff3b, 0xffe6, 0xff3d, 0xff3e, 0xff3f,
+ 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47,
+ 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55,
+ 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d,
+ 0xffe3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x3164, 0x3165, 0x3166, 0x3167,
+ 0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f,
+ 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177,
+ 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x317f,
+ 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187,
+ 0x3188, 0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e, 0x003f,
+ /* lead byte db */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176,
+ 0x2177, 0x2178, 0x2179, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167,
+ 0x2168, 0x2169, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+ 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
+ 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8,
+ 0x03a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
+ 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6,
+ 0x03c7, 0x03c8, 0x03c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c,
+ 0x252c, 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513,
+ 0x251b, 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520,
+ 0x252f, 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538,
+ 0x2542, 0x2512, 0x2511, 0x251a, 0x2519, 0x2516, 0x2515, 0x250e,
+ 0x250d, 0x251e, 0x251f, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529,
+ 0x252a, 0x252d, 0x252e, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539,
+ 0x253a, 0x253d, 0x253e, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545,
+ 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte dc */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33c4, 0x33a3,
+ 0x33a4, 0x33a5, 0x33a6, 0x3399, 0x339a, 0x339b, 0x339c, 0x339d,
+ 0x339e, 0x339f, 0x33a0, 0x33a1, 0x33a2, 0x33ca, 0x338d, 0x338e,
+ 0x338f, 0x33cf, 0x3388, 0x3389, 0x33c8, 0x33a7, 0x33a8, 0x33b0,
+ 0x33b1, 0x33b2, 0x33b3, 0x33b4, 0x33b5, 0x33b6, 0x33b7, 0x33b8,
+ 0x33b9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33ba, 0x33bb,
+ 0x33bc, 0x33bd, 0x33be, 0x33bf, 0x3390, 0x3391, 0x3392, 0x3393,
+ 0x3394, 0x2126, 0x33c0, 0x33c1, 0x338a, 0x338b, 0x338c, 0x33d6,
+ 0x33c5, 0x33ad, 0x33ae, 0x33af, 0x33db, 0x33a9, 0x33aa, 0x33ab,
+ 0x33ac, 0x33dd, 0x33d0, 0x33d3, 0x33c3, 0x33c9, 0x33dc, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x33c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x00c6, 0x00d0, 0x00aa, 0x0126, 0x003f, 0x0132, 0x003f,
+ 0x013f, 0x0141, 0x00d8, 0x0152, 0x00ba, 0x00de, 0x0166, 0x014a,
+ 0x003f, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266,
+ 0x3267, 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e,
+ 0x326f, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276,
+ 0x3277, 0x3278, 0x3279, 0x327a, 0x327b, 0x24d0, 0x24d1, 0x24d2,
+ 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da,
+ 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2,
+ 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2460,
+ 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468,
+ 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x00bd, 0x2153,
+ 0x2154, 0x00bc, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e, 0x003f,
+ /* lead byte dd */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138,
+ 0x0140, 0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe, 0x0167, 0x014b,
+ 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206,
+ 0x3207, 0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e,
+ 0x320f, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216,
+ 0x3217, 0x3218, 0x3219, 0x321a, 0x321b, 0x249c, 0x249d, 0x249e,
+ 0x249f, 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6,
+ 0x24a7, 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae,
+ 0x24af, 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x2474,
+ 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x247c, 0x247d, 0x247e, 0x247f, 0x2480, 0x2481, 0x2482,
+ 0x00b9, 0x00b2, 0x00b3, 0x2074, 0x207f, 0x2081, 0x2082, 0x2083,
+ 0x2084, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047,
+ 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f,
+ 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057,
+ 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f,
+ 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067,
+ 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f,
+ 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077,
+ 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f,
+ 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087,
+ 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f,
+ 0x3090, 0x3091, 0x3092, 0x3093, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte de */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7,
+ 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af,
+ 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7,
+ 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf,
+ 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7,
+ 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf,
+ 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7,
+ 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df,
+ 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7,
+ 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5,
+ 0x30f6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401,
+ 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d,
+ 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425,
+ 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d,
+ 0x042e, 0x042f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451,
+ 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d,
+ 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445,
+ 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d,
+ 0x044e, 0x044f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* lead byte e0 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x4f3d, 0x4f73, 0x5047, 0x50f9, 0x52a0, 0x53ef, 0x5475,
+ 0x54e5, 0x5609, 0x5ac1, 0x5bb6, 0x6687, 0x67b6, 0x67b7, 0x67ef,
+ 0x6b4c, 0x73c2, 0x75c2, 0x7a3c, 0x82db, 0x8304, 0x8857, 0x8888,
+ 0x8a36, 0x8cc8, 0x8dcf, 0x8efb, 0x8fe6, 0x99d5, 0x523b, 0x5374,
+ 0x5404, 0x606a, 0x6164, 0x6bbc, 0x73cf, 0x811a, 0x89ba, 0x89d2,
+ 0x95a3, 0x4f83, 0x520a, 0x58be, 0x5978, 0x59e6, 0x5e72, 0x5e79,
+ 0x61c7, 0x63c0, 0x6746, 0x67ec, 0x687f, 0x6f97, 0x764e, 0x770b,
+ 0x78f5, 0x7a08, 0x7aff, 0x7c21, 0x809d, 0x826e, 0x8271, 0x8aeb,
+ 0x9593, 0x4e6b, 0x559d, 0x66f7, 0x6e34, 0x78a3, 0x7aed, 0x845b,
+ 0x8910, 0x874e, 0x97a8, 0x52d8, 0x574e, 0x582a, 0x5d4c, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x611f, 0x61be, 0x6221, 0x6562, 0x67d1, 0x6a44, 0x6e1b,
+ 0x7518, 0x75b3, 0x76e3, 0x77b0, 0x7d3a, 0x90af, 0x9451, 0x9452,
+ 0x9f95, 0x5323, 0x5cac, 0x7532, 0x80db, 0x9240, 0x9598, 0x525b,
+ 0x5808, 0x59dc, 0x5ca1, 0x5d17, 0x5eb7, 0x5f3a, 0x5f4a, 0x6177,
+ 0x6c5f, 0x757a, 0x7586, 0x7ce0, 0x7d73, 0x7db1, 0x7f8c, 0x8154,
+ 0x8221, 0x8591, 0x8941, 0x8b1b, 0x92fc, 0x964d, 0x9c47, 0x4ecb,
+ 0x4ef7, 0x500b, 0x51f1, 0x584f, 0x6137, 0x613e, 0x6168, 0x6539,
+ 0x69ea, 0x6f11, 0x75a5, 0x7686, 0x76d6, 0x7b87, 0x82a5, 0x84cb,
+ 0xf900, 0x93a7, 0x958b, 0x5580, 0x5ba2, 0x5751, 0xf901, 0x7cb3,
+ 0x7fb9, 0x91b5, 0x5028, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x636e,
+ 0x64da, 0x64e7, 0x6e20, 0x70ac, 0x795b, 0x8ddd, 0x8e1e, 0xf902,
+ 0x907d, 0x9245, 0x92f8, 0x4e7e, 0x4ef6, 0x5065, 0x5dfe, 0x5efa,
+ 0x6106, 0x6957, 0x8171, 0x8654, 0x8e47, 0x9375, 0x9a2b, 0x4e5e,
+ 0x5091, 0x6770, 0x6840, 0x5109, 0x528d, 0x5292, 0x6aa2, 0x003f,
+ /* lead byte e1 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x77bc, 0x9210, 0x9ed4, 0x52ab, 0x602f, 0x8ff2, 0x5048,
+ 0x61a9, 0x63ed, 0x64ca, 0x683c, 0x6a84, 0x6fc0, 0x8188, 0x89a1,
+ 0x9694, 0x5805, 0x727d, 0x72ac, 0x7504, 0x7d79, 0x7e6d, 0x80a9,
+ 0x898b, 0x8b74, 0x9063, 0x9d51, 0x6289, 0x6c7a, 0x6f54, 0x7d50,
+ 0x7f3a, 0x8a23, 0x517c, 0x614a, 0x7b9d, 0x8b19, 0x9257, 0x938c,
+ 0x4eac, 0x4fd3, 0x501e, 0x50be, 0x5106, 0x52c1, 0x52cd, 0x537f,
+ 0x5770, 0x5883, 0x5e9a, 0x5f91, 0x6176, 0x61ac, 0x64ce, 0x656c,
+ 0x666f, 0x66bb, 0x66f4, 0x6897, 0x6d87, 0x7085, 0x70f1, 0x749f,
+ 0x74a5, 0x74ca, 0x75d9, 0x786c, 0x78ec, 0x7adf, 0x7af6, 0x7d45,
+ 0x7d93, 0x8015, 0x803f, 0x811b, 0x8396, 0x8b66, 0x8f15, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x9015, 0x93e1, 0x9803, 0x9838, 0x9a5a, 0x9be8, 0x4fc2,
+ 0x5553, 0x583a, 0x5951, 0x5b63, 0x5c46, 0x60b8, 0x6212, 0x6842,
+ 0x68b0, 0x68e8, 0x6eaa, 0x754c, 0x7678, 0x78ce, 0x7a3d, 0x7cfb,
+ 0x7e6b, 0x7e7c, 0x8a08, 0x8aa1, 0x8c3f, 0x968e, 0x9dc4, 0x53e4,
+ 0x53e9, 0x544a, 0x5471, 0x56fa, 0x59d1, 0x5b64, 0x5c3b, 0x5eab,
+ 0x62f7, 0x6537, 0x6545, 0x6572, 0x66a0, 0x67af, 0x69c1, 0x6cbd,
+ 0x75fc, 0x7690, 0x777e, 0x7a3f, 0x7f94, 0x8003, 0x80a1, 0x818f,
+ 0x82e6, 0x82fd, 0x83f0, 0x85c1, 0x8831, 0x88b4, 0x8aa5, 0xf903,
+ 0x8f9c, 0x932e, 0x96c7, 0x9867, 0x9ad8, 0x9f13, 0x54ed, 0x659b,
+ 0x66f2, 0x688f, 0x7a40, 0x8c37, 0x9d60, 0x56f0, 0x5764, 0x5d11,
+ 0x6606, 0x68b1, 0x68cd, 0x6efe, 0x7428, 0x889e, 0x9be4, 0x6c68,
+ 0xf904, 0x9aa8, 0x4f9b, 0x516c, 0x5171, 0x529f, 0x5b54, 0x5de5,
+ 0x6050, 0x606d, 0x62f1, 0x63a7, 0x653b, 0x73d9, 0x7a7a, 0x86a3,
+ 0x8ca2, 0x978f, 0x4e32, 0x5be1, 0x6208, 0x679c, 0x74dc, 0x003f,
+ /* lead byte e2 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x79d1, 0x83d3, 0x8a87, 0x8ab2, 0x8de8, 0x904e, 0x934b,
+ 0x9846, 0x5ed3, 0x69e8, 0x85ff, 0x90ed, 0xf905, 0x51a0, 0x5b98,
+ 0x5bec, 0x6163, 0x68fa, 0x6b3e, 0x704c, 0x742f, 0x74d8, 0x7ba1,
+ 0x7f50, 0x83c5, 0x89c0, 0x8cab, 0x95dc, 0x9928, 0x522e, 0x605d,
+ 0x62ec, 0x9002, 0x4f8a, 0x5149, 0x5321, 0x58d9, 0x5ee3, 0x66e0,
+ 0x6d38, 0x709a, 0x72c2, 0x73d6, 0x7b50, 0x80f1, 0x945b, 0x5366,
+ 0x639b, 0x7f6b, 0x4e56, 0x5080, 0x584a, 0x58de, 0x602a, 0x6127,
+ 0x62d0, 0x69d0, 0x9b41, 0x5b8f, 0x7d18, 0x80b1, 0x8f5f, 0x4ea4,
+ 0x50d1, 0x54ac, 0x55ac, 0x5b0c, 0x5da0, 0x5de7, 0x652a, 0x654e,
+ 0x6821, 0x6a4b, 0x72e1, 0x768e, 0x77ef, 0x7d5e, 0x7ff9, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x81a0, 0x854e, 0x86df, 0x8f03, 0x8f4e, 0x90ca, 0x9903,
+ 0x9a55, 0x9bab, 0x4e18, 0x4e45, 0x4e5d, 0x4ec7, 0x4ff1, 0x5177,
+ 0x52fe, 0x5340, 0x53e3, 0x53e5, 0x548e, 0x5614, 0x5775, 0x57a2,
+ 0x5bc7, 0x5d87, 0x5ed0, 0x61fc, 0x62d8, 0x6551, 0x67b8, 0x67e9,
+ 0x69cb, 0x6b50, 0x6bc6, 0x6bec, 0x6c42, 0x6e9d, 0x7078, 0x72d7,
+ 0x7396, 0x7403, 0x77bf, 0x77e9, 0x7a76, 0x7d7f, 0x8009, 0x81fc,
+ 0x8205, 0x820a, 0x82df, 0x8862, 0x8b33, 0x8cfc, 0x8ec0, 0x9011,
+ 0x90b1, 0x9264, 0x92b6, 0x99d2, 0x9a45, 0x9ce9, 0x9dd7, 0x9f9c,
+ 0x570b, 0x5c40, 0x83ca, 0x97a0, 0x97ab, 0x9eb4, 0x541b, 0x7a98,
+ 0x7fa4, 0x88d9, 0x8ecd, 0x90e1, 0x5800, 0x5c48, 0x6398, 0x7a9f,
+ 0x5bae, 0x5f13, 0x7a79, 0x7aae, 0x828e, 0x8eac, 0x5026, 0x5238,
+ 0x52f8, 0x5377, 0x5708, 0x62f3, 0x6372, 0x6b0a, 0x6dc3, 0x7737,
+ 0x53a5, 0x7357, 0x8568, 0x8e76, 0x95d5, 0x673a, 0x6ac3, 0x6f70,
+ 0x8a6d, 0x8ecc, 0x994b, 0xf906, 0x6677, 0x6b78, 0x8cb4, 0x003f,
+ /* lead byte e3 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x9b3c, 0xf907, 0x53eb, 0x572d, 0x594e, 0x63c6, 0x69fb,
+ 0x73ea, 0x7845, 0x7aba, 0x7ac5, 0x7cfe, 0x8475, 0x898f, 0x8d73,
+ 0x9035, 0x95a8, 0x52fb, 0x5747, 0x7547, 0x7b60, 0x83cc, 0x921e,
+ 0xf908, 0x6a58, 0x514b, 0x524b, 0x5287, 0x621f, 0x68d8, 0x6975,
+ 0x9699, 0x50c5, 0x52a4, 0x52e4, 0x61c3, 0x65a4, 0x6839, 0x69ff,
+ 0x747e, 0x7b4b, 0x82b9, 0x83eb, 0x89b2, 0x8b39, 0x8fd1, 0x9949,
+ 0xf909, 0x4eca, 0x5997, 0x64d2, 0x6611, 0x6a8e, 0x7434, 0x7981,
+ 0x79bd, 0x82a9, 0x887e, 0x887f, 0x895f, 0xf90a, 0x9326, 0x4f0b,
+ 0x53ca, 0x6025, 0x6271, 0x6c72, 0x7d1a, 0x7d66, 0x4e98, 0x5162,
+ 0x77dc, 0x80af, 0x4f01, 0x4f0e, 0x5176, 0x5180, 0x55dc, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x5668, 0x573b, 0x57fa, 0x57fc, 0x5914, 0x5947, 0x5993,
+ 0x5bc4, 0x5c90, 0x5d0e, 0x5df1, 0x5e7e, 0x5fcc, 0x6280, 0x65d7,
+ 0x65e3, 0x671e, 0x671f, 0x675e, 0x68cb, 0x68c4, 0x6a5f, 0x6b3a,
+ 0x6c23, 0x6c7d, 0x6c82, 0x6dc7, 0x7398, 0x7426, 0x742a, 0x7482,
+ 0x74a3, 0x7578, 0x757f, 0x7881, 0x78ef, 0x7941, 0x7947, 0x7948,
+ 0x797a, 0x7b95, 0x7d00, 0x7dba, 0x7f88, 0x8006, 0x802d, 0x808c,
+ 0x8a18, 0x8b4f, 0x8c48, 0x8d77, 0x9321, 0x9324, 0x98e2, 0x9951,
+ 0x9a0e, 0x9a0f, 0x9a65, 0x9e92, 0x7dca, 0x4f76, 0x5409, 0x62ee,
+ 0x6854, 0x91d1, 0x55ab, 0x513a, 0xf90b, 0xf90c, 0x5a1c, 0x61e6,
+ 0xf90d, 0x62cf, 0x62ff, 0xf90e, 0xf90f, 0xf910, 0xf911, 0xf912,
+ 0xf913, 0x90a3, 0xf914, 0xf915, 0xf916, 0xf917, 0xf918, 0x8afe,
+ 0xf919, 0xf91a, 0xf91b, 0xf91c, 0x6696, 0xf91d, 0x7156, 0xf91e,
+ 0xf91f, 0x96e3, 0xf920, 0x634f, 0x637a, 0x5357, 0xf921, 0x678f,
+ 0x6960, 0x6e73, 0xf922, 0x7537, 0xf923, 0xf924, 0xf925, 0x003f,
+ /* lead byte e4 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x7d0d, 0xf926, 0xf927, 0x8872, 0x56ca, 0x5a18, 0xf928,
+ 0xf929, 0xf92a, 0xf92b, 0xf92c, 0x4e43, 0xf92d, 0x5167, 0x5948,
+ 0x67f0, 0x8010, 0xf92e, 0x5973, 0x5e74, 0x649a, 0x79ca, 0x5ff5,
+ 0x606c, 0x62c8, 0x637b, 0x5be7, 0x5bd7, 0x52aa, 0xf92f, 0x5974,
+ 0x5f29, 0x6012, 0xf930, 0xf931, 0xf932, 0x7459, 0xf933, 0xf934,
+ 0xf935, 0xf936, 0xf937, 0xf938, 0x99d1, 0xf939, 0xf93a, 0xf93b,
+ 0xf93c, 0xf93d, 0xf93e, 0xf93f, 0xf940, 0xf941, 0xf942, 0xf943,
+ 0x6fc3, 0xf944, 0xf945, 0x81bf, 0x8fb2, 0x60f1, 0xf946, 0xf947,
+ 0x8166, 0xf948, 0xf949, 0x5c3f, 0xf94a, 0xf94b, 0xf94c, 0xf94d,
+ 0xf94e, 0xf94f, 0xf950, 0xf951, 0x5ae9, 0x8a25, 0x677b, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x7d10, 0xf952, 0xf953, 0xf954, 0xf955, 0xf956, 0xf957,
+ 0x80fd, 0xf958, 0xf959, 0x5c3c, 0x6ce5, 0x533f, 0x6eba, 0x591a,
+ 0x8336, 0x4e39, 0x4eb6, 0x4f46, 0x55ae, 0x5718, 0x58c7, 0x5f56,
+ 0x65b7, 0x65e6, 0x6a80, 0x6bb5, 0x6e4d, 0x77ed, 0x7aef, 0x7c1e,
+ 0x7dde, 0x86cb, 0x8892, 0x9132, 0x935b, 0x64bb, 0x6fbe, 0x737a,
+ 0x75b8, 0x9054, 0x5556, 0x574d, 0x61ba, 0x64d4, 0x66c7, 0x6de1,
+ 0x6e5b, 0x6f6d, 0x6fb9, 0x75f0, 0x8043, 0x81bd, 0x8541, 0x8983,
+ 0x8ac7, 0x8b5a, 0x931f, 0x6c93, 0x7553, 0x7b54, 0x8e0f, 0x905d,
+ 0x5510, 0x5802, 0x5858, 0x5e62, 0x6207, 0x649e, 0x68e0, 0x7576,
+ 0x7cd6, 0x87b3, 0x9ee8, 0x4ee3, 0x5788, 0x576e, 0x5927, 0x5c0d,
+ 0x5cb1, 0x5e36, 0x5f85, 0x6234, 0x64e1, 0x73b3, 0x81fa, 0x888b,
+ 0x8cb8, 0x968a, 0x9edb, 0x5b85, 0x5fb7, 0x60b3, 0x5012, 0x5200,
+ 0x5230, 0x5716, 0x5835, 0x5857, 0x5c0e, 0x5c60, 0x5cf6, 0x5d8b,
+ 0x5ea6, 0x5f92, 0x60bc, 0x6311, 0x6389, 0x6417, 0x6843, 0x003f,
+ /* lead byte e5 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x68f9, 0x6ac2, 0x6dd8, 0x6e21, 0x6ed4, 0x6fe4, 0x71fe,
+ 0x76dc, 0x7779, 0x79b1, 0x7a3b, 0x8404, 0x89a9, 0x8ced, 0x8df3,
+ 0x8e48, 0x9003, 0x9014, 0x9053, 0x90fd, 0x934d, 0x9676, 0x97dc,
+ 0x6bd2, 0x7006, 0x7258, 0x72a2, 0x7368, 0x7763, 0x79bf, 0x7be4,
+ 0x7e9b, 0x8b80, 0x58a9, 0x60c7, 0x6566, 0x65fd, 0x66be, 0x6c8c,
+ 0x711e, 0x71c9, 0x8c5a, 0x9813, 0x4e6d, 0x7a81, 0x4edd, 0x51ac,
+ 0x51cd, 0x52d5, 0x540c, 0x61a7, 0x6771, 0x6850, 0x68df, 0x6d1e,
+ 0x6f7c, 0x75bc, 0x77b3, 0x7ae5, 0x80f4, 0x8463, 0x9285, 0x515c,
+ 0x6597, 0x675c, 0x6793, 0x75d8, 0x7ac7, 0x8373, 0xf95a, 0x8c46,
+ 0x9017, 0x982d, 0x5c6f, 0x81c0, 0x829a, 0x9041, 0x906f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x920d, 0x5f97, 0x5d9d, 0x6a59, 0x71c8, 0x767b, 0x7b49,
+ 0x85e4, 0x8b04, 0x9127, 0x9a30, 0x5587, 0x61f6, 0xf95b, 0x7669,
+ 0x7f85, 0x863f, 0x87ba, 0x88f8, 0x908f, 0xf95c, 0x6d1b, 0x70d9,
+ 0x73de, 0x7d61, 0x843d, 0xf95d, 0x916a, 0x99f1, 0xf95e, 0x4e82,
+ 0x5375, 0x6b04, 0x6b12, 0x703e, 0x721b, 0x862d, 0x9e1e, 0x524c,
+ 0x8fa3, 0x5d50, 0x64e5, 0x652c, 0x6b16, 0x6feb, 0x7c43, 0x7e9c,
+ 0x85cd, 0x8964, 0x89bd, 0x62c9, 0x81d8, 0x881f, 0x5eca, 0x6717,
+ 0x6d6a, 0x72fc, 0x7405, 0x746f, 0x8782, 0x90de, 0x4f86, 0x5d0d,
+ 0x5fa0, 0x840a, 0x51b7, 0x63a0, 0x7565, 0x4eae, 0x5006, 0x5169,
+ 0x51c9, 0x6881, 0x6a11, 0x7cae, 0x7cb1, 0x7ce7, 0x826f, 0x8ad2,
+ 0x8f1b, 0x91cf, 0x4fb6, 0x5137, 0x52f5, 0x5442, 0x5eec, 0x616e,
+ 0x623e, 0x65c5, 0x6ada, 0x6ffe, 0x792a, 0x85dc, 0x8823, 0x95ad,
+ 0x9a62, 0x9a6a, 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x701d,
+ 0x792b, 0x8f62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6f23, 0x003f,
+ /* lead byte e6 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x7149, 0x7489, 0x7df4, 0x806f, 0x84ee, 0x8f26, 0x9023,
+ 0x934a, 0x51bd, 0x5217, 0x52a3, 0x6d0c, 0x70c8, 0x88c2, 0x5ec9,
+ 0x6582, 0x6bae, 0x6fc2, 0x7c3e, 0x7375, 0x4ee4, 0x4f36, 0x56f9,
+ 0xf95f, 0x5cba, 0x5dba, 0x601c, 0x73b2, 0x7b2d, 0x7f9a, 0x7fce,
+ 0x8046, 0x901e, 0x9234, 0x96f6, 0x9748, 0x9818, 0x9f61, 0x4f8b,
+ 0x6fa7, 0x79ae, 0x91b4, 0x96b7, 0x52de, 0xf960, 0x6488, 0x64c4,
+ 0x6ad3, 0x6f5e, 0x7018, 0x7210, 0x76e7, 0x8001, 0x8606, 0x865c,
+ 0x8def, 0x8f05, 0x9732, 0x9b6f, 0x9dfa, 0x9e75, 0x788c, 0x797f,
+ 0x7da0, 0x83c9, 0x9304, 0x9e7f, 0x9e93, 0x8ad6, 0x58df, 0x5f04,
+ 0x6727, 0x7027, 0x74cf, 0x7c60, 0x807e, 0x5121, 0x7028, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x7262, 0x78ca, 0x8cc2, 0x8cda, 0x8cf4, 0x96f7, 0x4e86,
+ 0x50da, 0x5bee, 0x5ed6, 0x6599, 0x71ce, 0x7642, 0x77ad, 0x804a,
+ 0x84fc, 0x907c, 0x9b27, 0x9f8d, 0x58d8, 0x5a41, 0x5c62, 0x6a13,
+ 0x6dda, 0x6f0f, 0x763b, 0x7d2f, 0x7e37, 0x851e, 0x8938, 0x93e4,
+ 0x964b, 0x5289, 0x65d2, 0x67f3, 0x69b4, 0x6d41, 0x6e9c, 0x700f,
+ 0x7409, 0x7460, 0x7559, 0x7624, 0x786b, 0x8b2c, 0x985e, 0x516d,
+ 0x622e, 0x9678, 0x4f96, 0x502b, 0x5d19, 0x6dea, 0x7db8, 0x8f2a,
+ 0x5f8b, 0x6144, 0x6817, 0xf961, 0x9686, 0x52d2, 0x808b, 0x51dc,
+ 0x51cc, 0x695e, 0x7a1c, 0x7dbe, 0x83f1, 0x9675, 0x4fda, 0x5229,
+ 0x5398, 0x540f, 0x550e, 0x5c65, 0x60a7, 0x674e, 0x68a8, 0x6d6c,
+ 0x7281, 0x72f8, 0x7406, 0x7483, 0xf962, 0x75e2, 0x7c6c, 0x7f79,
+ 0x7fb8, 0x8389, 0x88cf, 0x88e1, 0x91cc, 0x91d0, 0x96e2, 0x9bc9,
+ 0x541d, 0x6f7e, 0x71d0, 0x7498, 0x85fa, 0x8eaa, 0x96a3, 0x9c57,
+ 0x9e9f, 0x6797, 0x6dcb, 0x7433, 0x81e8, 0x9716, 0x782c, 0x003f,
+ /* lead byte e7 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x7acb, 0x7b20, 0x7c92, 0x6469, 0x746a, 0x75f2, 0x78bc,
+ 0x78e8, 0x99ac, 0x9b54, 0x9ebb, 0x5bde, 0x5e55, 0x6f20, 0x819c,
+ 0x83ab, 0x9088, 0x4e07, 0x534d, 0x5a29, 0x5dd2, 0x5f4e, 0x6162,
+ 0x633d, 0x6669, 0x66fc, 0x6eff, 0x6f2b, 0x7063, 0x779e, 0x842c,
+ 0x8513, 0x883b, 0x8f13, 0x9945, 0x9c3b, 0x551c, 0x62b9, 0x672b,
+ 0x6cab, 0x8309, 0x896a, 0x977a, 0x4ea1, 0x5984, 0x5fd8, 0x5fd9,
+ 0x671b, 0x7db2, 0x7f54, 0x8292, 0x832b, 0x83bd, 0x8f1e, 0x9099,
+ 0x57cb, 0x59b9, 0x5a92, 0x5bd0, 0x6627, 0x679a, 0x6885, 0x6bcf,
+ 0x7164, 0x7f75, 0x8cb7, 0x8ce3, 0x9081, 0x9b45, 0x8108, 0x8c8a,
+ 0x964c, 0x9a40, 0x9ea5, 0x5b5f, 0x6c13, 0x731b, 0x76f2, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x76df, 0x840c, 0x51aa, 0x8993, 0x514d, 0x5195, 0x52c9,
+ 0x68c9, 0x6c94, 0x7704, 0x7720, 0x7dbf, 0x7dec, 0x9762, 0x9eb5,
+ 0x6ec5, 0x8511, 0x51a5, 0x540d, 0x547d, 0x660e, 0x669d, 0x6927,
+ 0x6e9f, 0x76bf, 0x7791, 0x8317, 0x84c2, 0x879f, 0x9169, 0x9298,
+ 0x9cf4, 0x8882, 0x4fae, 0x5192, 0x52df, 0x59c6, 0x5e3d, 0x6155,
+ 0x6478, 0x6479, 0x66ae, 0x67d0, 0x6a21, 0x6bcd, 0x6bdb, 0x725f,
+ 0x7261, 0x7441, 0x7738, 0x77db, 0x8017, 0x82bc, 0x8305, 0x8b00,
+ 0x8b28, 0x8c8c, 0x6728, 0x6c90, 0x7267, 0x76ee, 0x7766, 0x7a46,
+ 0x9da9, 0x6b7f, 0x6c92, 0x5922, 0x6726, 0x8499, 0x536f, 0x5893,
+ 0x5999, 0x5edf, 0x63cf, 0x6634, 0x6773, 0x6e3a, 0x732b, 0x7ad7,
+ 0x82d7, 0x9328, 0x52d9, 0x5deb, 0x61ae, 0x61cb, 0x620a, 0x62c7,
+ 0x64ab, 0x65e0, 0x6959, 0x6b66, 0x6bcb, 0x7121, 0x73f7, 0x755d,
+ 0x7e46, 0x821e, 0x8302, 0x856a, 0x8aa3, 0x8cbf, 0x9727, 0x9d61,
+ 0x58a8, 0x9ed8, 0x5011, 0x520e, 0x543b, 0x554f, 0x6587, 0x003f,
+ /* lead byte e8 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x6c76, 0x7d0a, 0x7d0b, 0x805e, 0x868a, 0x9580, 0x96ef,
+ 0x52ff, 0x6c95, 0x7269, 0x5473, 0x5a9a, 0x5c3e, 0x5d4b, 0x5f4c,
+ 0x5fae, 0x672a, 0x68b6, 0x6963, 0x6e3c, 0x6e44, 0x7709, 0x7c73,
+ 0x7f8e, 0x8587, 0x8b0e, 0x8ff7, 0x9761, 0x9ef4, 0x5cb7, 0x60b6,
+ 0x610d, 0x61ab, 0x654f, 0x65fb, 0x65fc, 0x6c11, 0x6cef, 0x739f,
+ 0x73c9, 0x7de1, 0x9594, 0x5bc6, 0x871c, 0x8b10, 0x525d, 0x535a,
+ 0x62cd, 0x640f, 0x64b2, 0x6734, 0x6a38, 0x6cca, 0x73c0, 0x749e,
+ 0x7b94, 0x7c95, 0x7e1b, 0x818a, 0x8236, 0x8584, 0x8feb, 0x96f9,
+ 0x99c1, 0x4f34, 0x534a, 0x53cd, 0x53db, 0x62cc, 0x642c, 0x6500,
+ 0x6591, 0x69c3, 0x6cee, 0x6f58, 0x73ed, 0x7554, 0x7622, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x76e4, 0x76fc, 0x78d0, 0x78fb, 0x792c, 0x7d46, 0x822c,
+ 0x87e0, 0x8fd4, 0x9812, 0x98ef, 0x52c3, 0x62d4, 0x64a5, 0x6e24,
+ 0x6f51, 0x767c, 0x8dcb, 0x91b1, 0x9262, 0x9aee, 0x9b43, 0x5023,
+ 0x508d, 0x574a, 0x59a8, 0x5c28, 0x5e47, 0x5f77, 0x623f, 0x653e,
+ 0x65b9, 0x65c1, 0x6609, 0x678b, 0x699c, 0x6ec2, 0x78c5, 0x7d21,
+ 0x80aa, 0x8180, 0x822b, 0x82b3, 0x84a1, 0x868c, 0x8a2a, 0x8b17,
+ 0x90a6, 0x9632, 0x9f90, 0x500d, 0x4ff3, 0xf963, 0x57f9, 0x5f98,
+ 0x62dc, 0x6392, 0x676f, 0x6e43, 0x7119, 0x76c3, 0x80cc, 0x80da,
+ 0x88f4, 0x88f5, 0x8919, 0x8ce0, 0x8f29, 0x914d, 0x966a, 0x4f2f,
+ 0x4f70, 0x5e1b, 0x67cf, 0x6822, 0x767d, 0x767e, 0x9b44, 0x5e61,
+ 0x6a0a, 0x7169, 0x71d4, 0x756a, 0xf964, 0x7e41, 0x8543, 0x85e9,
+ 0x98dc, 0x4f10, 0x7b4f, 0x7f70, 0x95a5, 0x51e1, 0x5e06, 0x68b5,
+ 0x6c3e, 0x6c4e, 0x6cdb, 0x72af, 0x7bc4, 0x8303, 0x6cd5, 0x743a,
+ 0x50fb, 0x5288, 0x58c1, 0x64d8, 0x6a97, 0x74a7, 0x7656, 0x003f,
+ /* lead byte e9 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x78a7, 0x8617, 0x95e2, 0x9739, 0xf965, 0x535e, 0x5f01,
+ 0x8b8a, 0x8fa8, 0x8faf, 0x908a, 0x5225, 0x77a5, 0x9c49, 0x9f08,
+ 0x4e19, 0x5002, 0x5175, 0x5c5b, 0x5e77, 0x661e, 0x663a, 0x67c4,
+ 0x68c5, 0x70b3, 0x7501, 0x75c5, 0x79c9, 0x7add, 0x8f27, 0x9920,
+ 0x9a08, 0x4fdd, 0x5821, 0x5831, 0x5bf6, 0x666e, 0x6b65, 0x6d11,
+ 0x6e7a, 0x6f7d, 0x73e4, 0x752b, 0x83e9, 0x88dc, 0x8913, 0x8b5c,
+ 0x8f14, 0x4f0f, 0x50d5, 0x5310, 0x535c, 0x5b93, 0x5fa9, 0x670d,
+ 0x798f, 0x8179, 0x832f, 0x8514, 0x8907, 0x8986, 0x8f39, 0x8f3b,
+ 0x99a5, 0x9c12, 0x672c, 0x4e76, 0x4ff8, 0x5949, 0x5c01, 0x5cef,
+ 0x5cf0, 0x6367, 0x68d2, 0x70fd, 0x71a2, 0x742b, 0x7e2b, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x84ec, 0x8702, 0x9022, 0x92d2, 0x9cf3, 0x4e0d, 0x4ed8,
+ 0x4fef, 0x5085, 0x5256, 0x526f, 0x5426, 0x5490, 0x57e0, 0x592b,
+ 0x5a66, 0x5b5a, 0x5b75, 0x5bcc, 0x5e9c, 0xf966, 0x6276, 0x6577,
+ 0x65a7, 0x6d6e, 0x6ea5, 0x7236, 0x7b26, 0x7c3f, 0x7f36, 0x8150,
+ 0x8151, 0x819a, 0x8240, 0x8299, 0x83a9, 0x8a03, 0x8ca0, 0x8ce6,
+ 0x8cfb, 0x8d74, 0x8dba, 0x90e8, 0x91dc, 0x961c, 0x9644, 0x99d9,
+ 0x9ce7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58b3, 0x5954, 0x596e,
+ 0x5fff, 0x61a4, 0x626e, 0x6610, 0x6c7e, 0x711a, 0x76c6, 0x7c89,
+ 0x7cde, 0x7d1b, 0x82ac, 0x8cc1, 0x96f0, 0xf967, 0x4f5b, 0x5f17,
+ 0x5f7f, 0x62c2, 0x5d29, 0x670b, 0x68da, 0x787c, 0x7e43, 0x9d6c,
+ 0x4e15, 0x5099, 0x5315, 0x532a, 0x5351, 0x5983, 0x5a62, 0x5e87,
+ 0x60b2, 0x618a, 0x6249, 0x6279, 0x6590, 0x6787, 0x69a7, 0x6bd4,
+ 0x6bd6, 0x6bd7, 0x6bd8, 0x6cb8, 0xf968, 0x7435, 0x75fa, 0x7812,
+ 0x7891, 0x79d5, 0x79d8, 0x7c83, 0x7dcb, 0x7fe1, 0x80a5, 0x003f,
+ /* lead byte ea */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x813e, 0x81c2, 0x83f2, 0x871a, 0x88e8, 0x8ab9, 0x8b6c,
+ 0x8cbb, 0x9119, 0x975e, 0x98db, 0x9f3b, 0x56ac, 0x5b2a, 0x5f6c,
+ 0x658c, 0x6ab3, 0x6baf, 0x6d5c, 0x6ff1, 0x7015, 0x725d, 0x73ad,
+ 0x8ca7, 0x8cd3, 0x983b, 0x6191, 0x6c37, 0x8058, 0x9a01, 0x4e4d,
+ 0x4e8b, 0x4e9b, 0x4ed5, 0x4f3a, 0x4f3c, 0x4f7f, 0x4fdf, 0x50ff,
+ 0x53f2, 0x53f8, 0x5506, 0x55e3, 0x56db, 0x58eb, 0x5962, 0x5a11,
+ 0x5beb, 0x5bfa, 0x5c04, 0x5df3, 0x5e2b, 0x5f99, 0x601d, 0x6368,
+ 0x659c, 0x65af, 0x67f6, 0x67fb, 0x68ad, 0x6b7b, 0x6c99, 0x6cd7,
+ 0x6e23, 0x7009, 0x7345, 0x7802, 0x793e, 0x7940, 0x7960, 0x79c1,
+ 0x7be9, 0x7d17, 0x7d72, 0x8086, 0x820d, 0x838e, 0x84d1, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x86c7, 0x88df, 0x8a50, 0x8a5e, 0x8b1d, 0x8cdc, 0x8d66,
+ 0x8fad, 0x90aa, 0x98fc, 0x99df, 0x9e9d, 0x524a, 0xf969, 0x6714,
+ 0xf96a, 0x5098, 0x522a, 0x5c71, 0x6563, 0x6c55, 0x73ca, 0x7523,
+ 0x759d, 0x7b97, 0x849c, 0x9178, 0x9730, 0x4e77, 0x6492, 0x6bba,
+ 0x715e, 0x85a9, 0x4e09, 0xf96b, 0x6749, 0x68ee, 0x6e17, 0x829f,
+ 0x8518, 0x886b, 0x63f7, 0x6f81, 0x9212, 0x98af, 0x4e0a, 0x50b7,
+ 0x50cf, 0x511f, 0x5546, 0x55aa, 0x5617, 0x5b40, 0x5c19, 0x5ce0,
+ 0x5e38, 0x5e8a, 0x5ea0, 0x5ec2, 0x60f3, 0x6851, 0x6a61, 0x6e58,
+ 0x723d, 0x7240, 0x72c0, 0x76f8, 0x7965, 0x7bb1, 0x7fd4, 0x88f3,
+ 0x89f4, 0x8a73, 0x8c61, 0x8cde, 0x971c, 0x585e, 0x74bd, 0x8cfd,
+ 0x55c7, 0xf96c, 0x7a61, 0x7d22, 0x8272, 0x7272, 0x751f, 0x7525,
+ 0xf96d, 0x7b19, 0x5885, 0x58fb, 0x5dbc, 0x5e8f, 0x5eb6, 0x5f90,
+ 0x6055, 0x6292, 0x637f, 0x654d, 0x6691, 0x66d9, 0x66f8, 0x6816,
+ 0x68f2, 0x7280, 0x745e, 0x7b6e, 0x7d6e, 0x7dd6, 0x7f72, 0x003f,
+ /* lead byte eb */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x80e5, 0x8212, 0x85af, 0x897f, 0x8a93, 0x901d, 0x92e4,
+ 0x9ecd, 0x9f20, 0x5915, 0x596d, 0x5e2d, 0x60dc, 0x6614, 0x6673,
+ 0x6790, 0x6c50, 0x6dc5, 0x6f5f, 0x77f3, 0x78a9, 0x84c6, 0x91cb,
+ 0x932b, 0x4ed9, 0x50ca, 0x5148, 0x5584, 0x5b0b, 0x5ba3, 0x6247,
+ 0x657e, 0x65cb, 0x6e32, 0x717d, 0x7401, 0x7444, 0x7487, 0x74bf,
+ 0x766c, 0x79aa, 0x7dda, 0x7e55, 0x7fa8, 0x817a, 0x81b3, 0x8239,
+ 0x861a, 0x87ec, 0x8a75, 0x8de3, 0x9078, 0x9291, 0x9425, 0x994d,
+ 0x9bae, 0x5368, 0x5c51, 0x6954, 0x6cc4, 0x6d29, 0x6e2b, 0x820c,
+ 0x859b, 0x893b, 0x8a2d, 0x8aaa, 0x96ea, 0x9f67, 0x5261, 0x66b9,
+ 0x6bb2, 0x7e96, 0x87fe, 0x8d0d, 0x9583, 0x965d, 0x651d, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x6d89, 0x71ee, 0xf96e, 0x57ce, 0x59d3, 0x5bac, 0x6027,
+ 0x60fa, 0x6210, 0x661f, 0x665f, 0x7329, 0x73f9, 0x76db, 0x7701,
+ 0x7b6c, 0x8056, 0x8072, 0x8165, 0x8aa0, 0x9192, 0x4e16, 0x52e2,
+ 0x6b72, 0x6d17, 0x7a05, 0x7b39, 0x7d30, 0xf96f, 0x8cb0, 0x53ec,
+ 0x562f, 0x5851, 0x5bb5, 0x5c0f, 0x5c11, 0x5de2, 0x6240, 0x6383,
+ 0x6414, 0x662d, 0x68b3, 0x6cbc, 0x6d88, 0x6eaf, 0x701f, 0x70a4,
+ 0x71d2, 0x7526, 0x758f, 0x758e, 0x7619, 0x7b11, 0x7be0, 0x7c2b,
+ 0x7d20, 0x7d39, 0x852c, 0x856d, 0x8607, 0x8a34, 0x900d, 0x9061,
+ 0x90b5, 0x92b7, 0x97f6, 0x9a37, 0x4fd7, 0x5c6c, 0x675f, 0x6d91,
+ 0x7c9f, 0x7e8c, 0x8b16, 0x8d16, 0x901f, 0x5b6b, 0x5dfd, 0x640d,
+ 0x84c0, 0x905c, 0x98e1, 0x7387, 0x5b8b, 0x609a, 0x677e, 0x6dde,
+ 0x8a1f, 0x8aa6, 0x9001, 0x980c, 0x5237, 0xf970, 0x7051, 0x788e,
+ 0x9396, 0x8870, 0x91d7, 0x4fee, 0x53d7, 0x55fd, 0x56da, 0x5782,
+ 0x58fd, 0x5ac2, 0x5b88, 0x5cab, 0x5cc0, 0x5e25, 0x6101, 0x003f,
+ /* lead byte ec */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x620d, 0x624b, 0x6388, 0x641c, 0x6536, 0x6578, 0x6a39,
+ 0x6b8a, 0x6c34, 0x6d19, 0x6f31, 0x71e7, 0x72e9, 0x7378, 0x7407,
+ 0x74b2, 0x7626, 0x7761, 0x79c0, 0x7a57, 0x7aea, 0x7cb9, 0x7d8f,
+ 0x7dac, 0x7e61, 0x7f9e, 0x8129, 0x8331, 0x8490, 0x84da, 0x85ea,
+ 0x8896, 0x8ab0, 0x8b90, 0x8f38, 0x9042, 0x9083, 0x916c, 0x9296,
+ 0x92b9, 0x968b, 0x96a7, 0x96a8, 0x96d6, 0x9700, 0x9808, 0x9996,
+ 0x9ad3, 0x9b1a, 0x53d4, 0x587e, 0x5919, 0x5b70, 0x5bbf, 0x6dd1,
+ 0x6f5a, 0x719f, 0x7421, 0x74b9, 0x8085, 0x83fd, 0x5de1, 0x5f87,
+ 0x5faa, 0x6042, 0x65ec, 0x6812, 0x696f, 0x6a53, 0x6b89, 0x6d35,
+ 0x6df3, 0x73e3, 0x76fe, 0x77ac, 0x7b4d, 0x7d14, 0x8123, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x821c, 0x8340, 0x84f4, 0x8563, 0x8a62, 0x8ac4, 0x9187,
+ 0x931e, 0x9806, 0x99b4, 0x620c, 0x8853, 0x8ff0, 0x9265, 0x5d07,
+ 0x5d27, 0x5d69, 0x745f, 0x819d, 0x8768, 0x6fd5, 0x62fe, 0x7fd2,
+ 0x8936, 0x8972, 0x4e1e, 0x4e58, 0x50e7, 0x52dd, 0x5347, 0x627f,
+ 0x6607, 0x7e69, 0x8805, 0x965e, 0x4f8d, 0x5319, 0x5636, 0x59cb,
+ 0x5aa4, 0x5c38, 0x5c4e, 0x5c4d, 0x5e02, 0x5f11, 0x6043, 0x65bd,
+ 0x662f, 0x6642, 0x67be, 0x67f4, 0x731c, 0x77e2, 0x793a, 0x7fc5,
+ 0x8494, 0x84cd, 0x8996, 0x8a66, 0x8a69, 0x8ae1, 0x8c55, 0x8c7a,
+ 0x57f4, 0x5bd4, 0x5f0f, 0x606f, 0x62ed, 0x690d, 0x6b96, 0x6e5c,
+ 0x7184, 0x7bd2, 0x8755, 0x8b58, 0x8efe, 0x98df, 0x98fe, 0x4f38,
+ 0x4f81, 0x4fe1, 0x547b, 0x5a20, 0x5bb8, 0x613c, 0x65b0, 0x6668,
+ 0x71fc, 0x7533, 0x795e, 0x7d33, 0x814e, 0x81e3, 0x8398, 0x85aa,
+ 0x85ce, 0x8703, 0x8a0a, 0x8eab, 0x8f9b, 0xf971, 0x8fc5, 0x5931,
+ 0x5ba4, 0x5be6, 0x6089, 0x5be9, 0x5c0b, 0x5fc3, 0x6c81, 0x003f,
+ /* lead byte ed */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf972, 0x6df1, 0x700b, 0x751a, 0x82af, 0x8af6, 0x4ec0,
+ 0x5341, 0xf973, 0x96d9, 0x6c0f, 0x4e9e, 0x4fc4, 0x5152, 0x555e,
+ 0x5a25, 0x5ce8, 0x6211, 0x7259, 0x82bd, 0x83aa, 0x86fe, 0x8859,
+ 0x8a1d, 0x963f, 0x96c5, 0x9913, 0x9d09, 0x9d5d, 0x580a, 0x5cb3,
+ 0x5dbd, 0x5e44, 0x60e1, 0x6115, 0x63e1, 0x6a02, 0x6e25, 0x9102,
+ 0x9354, 0x984e, 0x9c10, 0x9f77, 0x5b89, 0x5cb8, 0x6309, 0x664f,
+ 0x6848, 0x773c, 0x96c1, 0x978d, 0x9854, 0x9b9f, 0x65a1, 0x8b01,
+ 0x8ecb, 0x95bc, 0x5535, 0x5ca9, 0x5dd6, 0x5eb5, 0x6697, 0x764c,
+ 0x83f4, 0x95c7, 0x58d3, 0x62bc, 0x72ce, 0x9d28, 0x4ef0, 0x592e,
+ 0x600f, 0x663b, 0x6b83, 0x79e7, 0x9d26, 0x5393, 0x54c0, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x57c3, 0x5d16, 0x611b, 0x66d6, 0x6daf, 0x788d, 0x827e,
+ 0x9698, 0x9744, 0x5384, 0x627c, 0x6396, 0x6db2, 0x7e0a, 0x814b,
+ 0x984d, 0x6afb, 0x7f4c, 0x9daf, 0x9e1a, 0x4e5f, 0x503b, 0x51b6,
+ 0x591c, 0x60f9, 0x63f6, 0x6930, 0x723a, 0x8036, 0xf974, 0x91ce,
+ 0x5f31, 0xf975, 0xf976, 0x7d04, 0x82e5, 0x846f, 0x84bb, 0x85e5,
+ 0x8e8d, 0xf977, 0x4f6f, 0xf978, 0xf979, 0x58e4, 0x5b43, 0x6059,
+ 0x63da, 0x6518, 0x656d, 0x6698, 0xf97a, 0x694a, 0x6a23, 0x6d0b,
+ 0x7001, 0x716c, 0x75d2, 0x760d, 0x79b3, 0x7a70, 0xf97b, 0x7f8a,
+ 0xf97c, 0x8944, 0xf97d, 0x8b93, 0x91c0, 0x967d, 0xf97e, 0x990a,
+ 0x5704, 0x5fa1, 0x65bc, 0x6f01, 0x7600, 0x79a6, 0x8a9e, 0x99ad,
+ 0x9b5a, 0x9f6c, 0x5104, 0x61b6, 0x6291, 0x6a8d, 0x81c6, 0x5043,
+ 0x5830, 0x5f66, 0x7109, 0x8a00, 0x8afa, 0x5b7c, 0x8616, 0x4ffa,
+ 0x513c, 0x56b4, 0x5944, 0x63a9, 0x6df9, 0x5daa, 0x696d, 0x5186,
+ 0x4e88, 0x4f59, 0xf97f, 0xf980, 0xf981, 0x5982, 0xf982, 0x003f,
+ /* lead byte ee */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf983, 0x6b5f, 0x6c5d, 0xf984, 0x74b5, 0x7916, 0xf985,
+ 0x8207, 0x8245, 0x8339, 0x8f3f, 0x8f5d, 0xf986, 0x9918, 0xf987,
+ 0xf988, 0xf989, 0x4ea6, 0xf98a, 0x57df, 0x5f79, 0x6613, 0xf98b,
+ 0xf98c, 0x75ab, 0x7e79, 0x8b6f, 0xf98d, 0x9006, 0x9a5b, 0x56a5,
+ 0x5827, 0x59f8, 0x5a1f, 0x5bb4, 0xf98e, 0x5ef6, 0xf98f, 0xf990,
+ 0x6350, 0x633b, 0xf991, 0x693d, 0x6c87, 0x6cbf, 0x6d8e, 0x6d93,
+ 0x6df5, 0x6f14, 0xf992, 0x70df, 0x7136, 0x7159, 0xf993, 0x71c3,
+ 0x71d5, 0xf994, 0x784f, 0x786f, 0xf995, 0x7b75, 0x7de3, 0xf996,
+ 0x7e2f, 0xf997, 0x884d, 0x8edf, 0xf998, 0xf999, 0xf99a, 0x925b,
+ 0xf99b, 0x9cf6, 0xf99c, 0xf99d, 0xf99e, 0x6085, 0x6d85, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf99f, 0x71b1, 0xf9a0, 0xf9a1, 0x95b1, 0x53ad, 0xf9a2,
+ 0xf9a3, 0xf9a4, 0x67d3, 0xf9a5, 0x708e, 0x7130, 0x7430, 0x8276,
+ 0x82d2, 0xf9a6, 0x95bb, 0x9ae5, 0x9e7d, 0x66c4, 0xf9a7, 0x71c1,
+ 0x8449, 0xf9a8, 0xf9a9, 0x584b, 0xf9aa, 0xf9ab, 0x5db8, 0x5f71,
+ 0xf9ac, 0x6620, 0x668e, 0x6979, 0x69ae, 0x6c38, 0x6cf3, 0x6e36,
+ 0x6f41, 0x6fda, 0x701b, 0x702f, 0x7150, 0x71df, 0x7370, 0xf9ad,
+ 0x745b, 0xf9ae, 0x74d4, 0x76c8, 0x7a4e, 0x7e93, 0xf9af, 0xf9b0,
+ 0x82f1, 0x8a60, 0x8fce, 0xf9b1, 0x9348, 0xf9b2, 0x9719, 0xf9b3,
+ 0xf9b4, 0x4e42, 0x502a, 0xf9b5, 0x5208, 0x53e1, 0x66f3, 0x6c6d,
+ 0x6fca, 0x730a, 0x777f, 0x7a62, 0x82ae, 0x85dd, 0x8602, 0xf9b6,
+ 0x88d4, 0x8a63, 0x8b7d, 0x8c6b, 0xf9b7, 0x92b3, 0xf9b8, 0x9713,
+ 0x9810, 0x4e94, 0x4f0d, 0x4fc9, 0x50b2, 0x5348, 0x543e, 0x5433,
+ 0x55da, 0x5862, 0x58ba, 0x5967, 0x5a1b, 0x5be4, 0x609f, 0xf9b9,
+ 0x61ca, 0x6556, 0x65ff, 0x6664, 0x68a7, 0x6c5a, 0x6fb3, 0x003f,
+ /* lead byte ef */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x70cf, 0x71ac, 0x7352, 0x7b7d, 0x8708, 0x8aa4, 0x9c32,
+ 0x9f07, 0x5c4b, 0x6c83, 0x7344, 0x7389, 0x923a, 0x6eab, 0x7465,
+ 0x761f, 0x7a69, 0x7e15, 0x860a, 0x5140, 0x58c5, 0x64c1, 0x74ee,
+ 0x7515, 0x7670, 0x7fc1, 0x9095, 0x96cd, 0x9954, 0x6e26, 0x74e6,
+ 0x7aa9, 0x7aaa, 0x81e5, 0x86d9, 0x8778, 0x8a1b, 0x5a49, 0x5b8c,
+ 0x5b9b, 0x68a1, 0x6900, 0x6d63, 0x73a9, 0x7413, 0x742c, 0x7897,
+ 0x7de9, 0x7feb, 0x8118, 0x8155, 0x839e, 0x8c4c, 0x962e, 0x9811,
+ 0x66f0, 0x5f80, 0x65fa, 0x6789, 0x6c6a, 0x738b, 0x502d, 0x5a03,
+ 0x6b6a, 0x77ee, 0x5916, 0x5d6c, 0x5dcd, 0x7325, 0x754f, 0xf9ba,
+ 0xf9bb, 0x50e5, 0x51f9, 0x582f, 0x592d, 0x5996, 0x59da, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x5be5, 0xf9bc, 0xf9bd, 0x5da2, 0x62d7, 0x6416, 0x6493,
+ 0x64fe, 0xf9be, 0x66dc, 0xf9bf, 0x6a48, 0xf9c0, 0x71ff, 0x7464,
+ 0xf9c1, 0x7a88, 0x7aaf, 0x7e47, 0x7e5e, 0x8000, 0x8170, 0xf9c2,
+ 0x87ef, 0x8981, 0x8b20, 0x9059, 0xf9c3, 0x9080, 0x9952, 0x617e,
+ 0x6b32, 0x6d74, 0x7e1f, 0x8925, 0x8fb1, 0x4fd1, 0x50ad, 0x5197,
+ 0x52c7, 0x57c7, 0x5889, 0x5bb9, 0x5eb8, 0x6142, 0x6995, 0x6d8c,
+ 0x6e67, 0x6eb6, 0x7194, 0x7462, 0x7528, 0x752c, 0x8073, 0x8338,
+ 0x84c9, 0x8e0a, 0x9394, 0x93de, 0xf9c4, 0x4e8e, 0x4f51, 0x5076,
+ 0x512a, 0x53c8, 0x53cb, 0x53f3, 0x5b87, 0x5bd3, 0x5c24, 0x611a,
+ 0x6182, 0x65f4, 0x725b, 0x7397, 0x7440, 0x76c2, 0x7950, 0x7991,
+ 0x79b9, 0x7d06, 0x7fbd, 0x828b, 0x85d5, 0x865e, 0x8fc2, 0x9047,
+ 0x90f5, 0x91ea, 0x9685, 0x96e8, 0x96e9, 0x52d6, 0x5f67, 0x65ed,
+ 0x6631, 0x682f, 0x715c, 0x7a36, 0x90c1, 0x980a, 0x4e91, 0xf9c5,
+ 0x6a52, 0x6b9e, 0x6f90, 0x7189, 0x8018, 0x82b8, 0x8553, 0x003f,
+ /* lead byte f0 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x904b, 0x9695, 0x96f2, 0x97fb, 0x851a, 0x9b31, 0x4e90,
+ 0x718a, 0x96c4, 0x5143, 0x539f, 0x54e1, 0x5713, 0x5712, 0x57a3,
+ 0x5a9b, 0x5ac4, 0x5bc3, 0x6028, 0x613f, 0x63f4, 0x6c85, 0x6d39,
+ 0x6e72, 0x6e90, 0x7230, 0x733f, 0x7457, 0x82d1, 0x8881, 0x8f45,
+ 0x9060, 0xf9c6, 0x9662, 0x9858, 0x9d1b, 0x6708, 0x8d8a, 0x925e,
+ 0x4f4d, 0x5049, 0x50de, 0x5371, 0x570d, 0x59d4, 0x5a01, 0x5c09,
+ 0x6170, 0x6690, 0x6e2d, 0x7232, 0x744b, 0x7def, 0x80c3, 0x840e,
+ 0x8466, 0x853f, 0x875f, 0x885b, 0x8918, 0x8b02, 0x9055, 0x97cb,
+ 0x9b4f, 0x4e73, 0x4f91, 0x5112, 0x516a, 0xf9c7, 0x552f, 0x55a9,
+ 0x5b7a, 0x5ba5, 0x5e7c, 0x5e7d, 0x5ebe, 0x60a0, 0x60df, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x6108, 0x6109, 0x63c4, 0x6538, 0x6709, 0xf9c8, 0x67d4,
+ 0x67da, 0xf9c9, 0x6961, 0x6962, 0x6cb9, 0x6d27, 0xf9ca, 0x6e38,
+ 0xf9cb, 0x6fe1, 0x7336, 0x7337, 0xf9cc, 0x745c, 0x7531, 0xf9cd,
+ 0x7652, 0xf9ce, 0xf9cf, 0x7dad, 0x81fe, 0x8438, 0x88d5, 0x8a98,
+ 0x8adb, 0x8aed, 0x8e30, 0x8e42, 0x904a, 0x903e, 0x907a, 0x9149,
+ 0x91c9, 0x936e, 0xf9d0, 0xf9d1, 0x5809, 0xf9d2, 0x6bd3, 0x8089,
+ 0x80b2, 0xf9d3, 0xf9d4, 0x5141, 0x596b, 0x5c39, 0xf9d5, 0xf9d6,
+ 0x6f64, 0x73a7, 0x80e4, 0x8d07, 0xf9d7, 0x9217, 0x958f, 0xf9d8,
+ 0xf9d9, 0xf9da, 0xf9db, 0x807f, 0x620e, 0x701c, 0x7d68, 0x878d,
+ 0xf9dc, 0x57a0, 0x6069, 0x6147, 0x6bb7, 0x8abe, 0x9280, 0x96b1,
+ 0x4e59, 0x541f, 0x6deb, 0x852d, 0x9670, 0x97f3, 0x98ee, 0x63d6,
+ 0x6ce3, 0x9091, 0x51dd, 0x61c9, 0x81ba, 0x9df9, 0x4f9d, 0x501a,
+ 0x5100, 0x5b9c, 0x610f, 0x61ff, 0x64ec, 0x6905, 0x6bc5, 0x7591,
+ 0x77e3, 0x7fa9, 0x8264, 0x858f, 0x87fb, 0x8863, 0x8abc, 0x003f,
+ /* lead byte f1 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x8b70, 0x91ab, 0x4e8c, 0x4ee5, 0x4f0a, 0xf9dd, 0xf9de,
+ 0x5937, 0x59e8, 0xf9df, 0x5df2, 0x5f1b, 0x5f5b, 0x6021, 0xf9e0,
+ 0xf9e1, 0xf9e2, 0xf9e3, 0x723e, 0x73e5, 0xf9e4, 0x7570, 0x75cd,
+ 0xf9e5, 0x79fb, 0xf9e6, 0x800c, 0x8033, 0x8084, 0x82e1, 0x8351,
+ 0xf9e7, 0xf9e8, 0x8cbd, 0x8cb3, 0x9087, 0xf9e9, 0xf9ea, 0x98f4,
+ 0x990c, 0xf9eb, 0xf9ec, 0x7037, 0x76ca, 0x7fca, 0x7fcc, 0x7ffc,
+ 0x8b1a, 0x4eba, 0x4ec1, 0x5203, 0x5370, 0xf9ed, 0x54bd, 0x56e0,
+ 0x59fb, 0x5bc5, 0x5f15, 0x5fcd, 0x6e6e, 0xf9ee, 0xf9ef, 0x7d6a,
+ 0x8335, 0xf9f0, 0x8693, 0x8a8d, 0xf9f1, 0x976d, 0x9777, 0xf9f2,
+ 0xf9f3, 0x4e00, 0x4f5a, 0x4f7e, 0x58f9, 0x65e5, 0x6ea2, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x9038, 0x93b0, 0x99b9, 0x4efb, 0x58ec, 0x598a, 0x59d9,
+ 0x6041, 0xf9f4, 0xf9f5, 0x7a14, 0xf9f6, 0x834f, 0x8cc3, 0x5165,
+ 0x5344, 0xf9f7, 0xf9f8, 0xf9f9, 0x4ecd, 0x5269, 0x5b55, 0x82bf,
+ 0x4ed4, 0x523a, 0x54a8, 0x59c9, 0x59ff, 0x5b50, 0x5b57, 0x5b5c,
+ 0x6063, 0x6148, 0x6ecb, 0x7099, 0x716e, 0x7386, 0x74f7, 0x75b5,
+ 0x78c1, 0x7d2b, 0x8005, 0x81ea, 0x8328, 0x8517, 0x85c9, 0x8aee,
+ 0x8cc7, 0x96cc, 0x4f5c, 0x52fa, 0x56bc, 0x65ab, 0x6628, 0x707c,
+ 0x70b8, 0x7235, 0x7dbd, 0x828d, 0x914c, 0x96c0, 0x9d72, 0x5b71,
+ 0x68e7, 0x6b98, 0x6f7a, 0x76de, 0x5c91, 0x66ab, 0x6f5b, 0x7bb4,
+ 0x7c2a, 0x8836, 0x96dc, 0x4e08, 0x4ed7, 0x5320, 0x5834, 0x58bb,
+ 0x58ef, 0x596c, 0x5c07, 0x5e33, 0x5e84, 0x5f35, 0x638c, 0x66b2,
+ 0x6756, 0x6a1f, 0x6aa3, 0x6b0c, 0x6f3f, 0x7246, 0xf9fa, 0x7350,
+ 0x748b, 0x7ae0, 0x7ca7, 0x8178, 0x81df, 0x81e7, 0x838a, 0x846c,
+ 0x8523, 0x8594, 0x85cf, 0x88dd, 0x8d13, 0x91ac, 0x9577, 0x003f,
+ /* lead byte f2 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x969c, 0x518d, 0x54c9, 0x5728, 0x5bb0, 0x624d, 0x6750,
+ 0x683d, 0x6893, 0x6e3d, 0x6ed3, 0x707d, 0x7e21, 0x88c1, 0x8ca1,
+ 0x8f09, 0x9f4b, 0x9f4e, 0x722d, 0x7b8f, 0x8acd, 0x931a, 0x4f47,
+ 0x4f4e, 0x5132, 0x5480, 0x59d0, 0x5e95, 0x62b5, 0x6775, 0x696e,
+ 0x6a17, 0x6cae, 0x6e1a, 0x72d9, 0x732a, 0x75bd, 0x7bb8, 0x7d35,
+ 0x82e7, 0x83f9, 0x8457, 0x85f7, 0x8a5b, 0x8caf, 0x8e87, 0x9019,
+ 0x90b8, 0x96ce, 0x9f5f, 0x52e3, 0x540a, 0x5ae1, 0x5bc2, 0x6458,
+ 0x6575, 0x6ef4, 0x72c4, 0xf9fb, 0x7684, 0x7a4d, 0x7b1b, 0x7c4d,
+ 0x7e3e, 0x7fdf, 0x837b, 0x8b2b, 0x8cca, 0x8d64, 0x8de1, 0x8e5f,
+ 0x8fea, 0x8ff9, 0x9069, 0x93d1, 0x4f43, 0x4f7a, 0x50b3, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x5168, 0x5178, 0x524d, 0x526a, 0x5861, 0x587c, 0x5960,
+ 0x5c08, 0x5c55, 0x5edb, 0x609b, 0x6230, 0x6813, 0x6bbf, 0x6c08,
+ 0x6fb1, 0x714e, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7b4c,
+ 0x7b8b, 0x7bad, 0x7bc6, 0x7e8f, 0x8a6e, 0x8f3e, 0x8f49, 0x923f,
+ 0x9293, 0x9322, 0x942b, 0x96fb, 0x985a, 0x986b, 0x991e, 0x5207,
+ 0x622a, 0x6298, 0x6d59, 0x7664, 0x7aca, 0x7bc0, 0x7d76, 0x5360,
+ 0x5cbe, 0x5e97, 0x6f38, 0x70b9, 0x7c98, 0x9711, 0x9b8e, 0x9ede,
+ 0x63a5, 0x647a, 0x8776, 0x4e01, 0x4e95, 0x4ead, 0x505c, 0x5075,
+ 0x5448, 0x59c3, 0x5b9a, 0x5e40, 0x5ead, 0x5ef7, 0x5f81, 0x60c5,
+ 0x633a, 0x653f, 0x6574, 0x65cc, 0x6676, 0x6678, 0x67fe, 0x6968,
+ 0x6a89, 0x6b63, 0x6c40, 0x6dc0, 0x6de8, 0x6e1f, 0x6e5e, 0x701e,
+ 0x70a1, 0x738e, 0x73fd, 0x753a, 0x775b, 0x7887, 0x798e, 0x7a0b,
+ 0x7a7d, 0x7cbe, 0x7d8e, 0x8247, 0x8a02, 0x8aea, 0x8c9e, 0x912d,
+ 0x914a, 0x91d8, 0x9266, 0x92cc, 0x9320, 0x9706, 0x9756, 0x003f,
+ /* lead byte f3 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x975c, 0x9802, 0x9f0e, 0x5236, 0x5291, 0x557c, 0x5824,
+ 0x5e1d, 0x5f1f, 0x608c, 0x63d0, 0x68af, 0x6fdf, 0x796d, 0x7b2c,
+ 0x81cd, 0x85ba, 0x88fd, 0x8af8, 0x8e44, 0x918d, 0x9664, 0x969b,
+ 0x973d, 0x984c, 0x9f4a, 0x4fce, 0x5146, 0x51cb, 0x52a9, 0x5632,
+ 0x5f14, 0x5f6b, 0x63aa, 0x64cd, 0x65e9, 0x6641, 0x66fa, 0x66f9,
+ 0x671d, 0x689d, 0x68d7, 0x69fd, 0x6f15, 0x6f6e, 0x7167, 0x71e5,
+ 0x722a, 0x74aa, 0x773a, 0x7956, 0x795a, 0x79df, 0x7a20, 0x7a95,
+ 0x7c97, 0x7cdf, 0x7d44, 0x7e70, 0x8087, 0x85fb, 0x86a4, 0x8a54,
+ 0x8abf, 0x8d99, 0x8e81, 0x9020, 0x906d, 0x91e3, 0x963b, 0x96d5,
+ 0x9ce5, 0x65cf, 0x7c07, 0x8db3, 0x93c3, 0x5b58, 0x5c0a, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x5352, 0x62d9, 0x731d, 0x5027, 0x5b97, 0x5f9e, 0x60b0,
+ 0x616b, 0x68d5, 0x6dd9, 0x742e, 0x7a2e, 0x7d42, 0x7d9c, 0x7e31,
+ 0x816b, 0x8e2a, 0x8e35, 0x937e, 0x9418, 0x4f50, 0x5750, 0x5de6,
+ 0x5ea7, 0x632b, 0x7f6a, 0x4e3b, 0x4f4f, 0x4f8f, 0x505a, 0x59dd,
+ 0x80c4, 0x546a, 0x5468, 0x55fe, 0x594f, 0x5b99, 0x5dde, 0x5eda,
+ 0x665d, 0x6731, 0x67f1, 0x682a, 0x6ce8, 0x6d32, 0x6e4a, 0x6f8d,
+ 0x70b7, 0x73e0, 0x7587, 0x7c4c, 0x7d02, 0x7d2c, 0x7da2, 0x821f,
+ 0x86db, 0x8a3b, 0x8a85, 0x8d70, 0x8e8a, 0x8f33, 0x9031, 0x914e,
+ 0x9152, 0x9444, 0x99d0, 0x7af9, 0x7ca5, 0x4fca, 0x5101, 0x51c6,
+ 0x57c8, 0x5bef, 0x5cfb, 0x6659, 0x6a3d, 0x6d5a, 0x6e96, 0x6fec,
+ 0x710c, 0x756f, 0x7ae3, 0x8822, 0x9021, 0x9075, 0x96cb, 0x99ff,
+ 0x8301, 0x4e2d, 0x4ef2, 0x8846, 0x91cd, 0x537d, 0x6adb, 0x696b,
+ 0x6c41, 0x847a, 0x589e, 0x618e, 0x66fe, 0x62ef, 0x70dd, 0x7511,
+ 0x75c7, 0x7e52, 0x84b8, 0x8b49, 0x8d08, 0x4e4b, 0x53ea, 0x003f,
+ /* lead byte f4 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x54ab, 0x5730, 0x5740, 0x5fd7, 0x6301, 0x6307, 0x646f,
+ 0x652f, 0x65e8, 0x667a, 0x679d, 0x67b3, 0x6b62, 0x6c60, 0x6c9a,
+ 0x6f2c, 0x77e5, 0x7825, 0x7949, 0x7957, 0x7d19, 0x80a2, 0x8102,
+ 0x81f3, 0x829d, 0x82b7, 0x8718, 0x8a8c, 0xf9fc, 0x8d04, 0x8dbe,
+ 0x9072, 0x76f4, 0x7a19, 0x7a37, 0x7e54, 0x8077, 0x5507, 0x55d4,
+ 0x5875, 0x632f, 0x6422, 0x6649, 0x664b, 0x686d, 0x699b, 0x6b84,
+ 0x6d25, 0x6eb1, 0x73cd, 0x7468, 0x74a1, 0x755b, 0x75b9, 0x76e1,
+ 0x771e, 0x778b, 0x79e6, 0x7e09, 0x7e1d, 0x81fb, 0x852f, 0x8897,
+ 0x8a3a, 0x8cd1, 0x8eeb, 0x8fb0, 0x9032, 0x93ad, 0x9663, 0x9673,
+ 0x9707, 0x4f84, 0x53f1, 0x59ea, 0x5ac9, 0x5e19, 0x684e, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x74c6, 0x75be, 0x79e9, 0x7a92, 0x81a3, 0x86ed, 0x8cea,
+ 0x8dcc, 0x8fed, 0x659f, 0x6715, 0xf9fd, 0x57f7, 0x6f57, 0x7ddd,
+ 0x8f2f, 0x93f6, 0x96c6, 0x5fb5, 0x61f2, 0x6f84, 0x4e14, 0x4f98,
+ 0x501f, 0x53c9, 0x55df, 0x5d6f, 0x5dee, 0x6b21, 0x6b64, 0x78cb,
+ 0x7b9a, 0xf9fe, 0x8e49, 0x8eca, 0x906e, 0x6349, 0x643e, 0x7740,
+ 0x7a84, 0x932f, 0x947f, 0x9f6a, 0x64b0, 0x6faf, 0x71e6, 0x74a8,
+ 0x74da, 0x7ac4, 0x7c12, 0x7e82, 0x7cb2, 0x7e98, 0x8b9a, 0x8d0a,
+ 0x947d, 0x9910, 0x994c, 0x5239, 0x5bdf, 0x64e6, 0x672d, 0x7d2e,
+ 0x50ed, 0x53c3, 0x5879, 0x6158, 0x6159, 0x61fa, 0x65ac, 0x7ad9,
+ 0x8b92, 0x8b96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5a3c, 0x5ee0,
+ 0x5f70, 0x6134, 0x655e, 0x660c, 0x6636, 0x66a2, 0x69cd, 0x6ec4,
+ 0x6f32, 0x7316, 0x7621, 0x7a93, 0x8139, 0x8259, 0x83d6, 0x84bc,
+ 0x50b5, 0x57f0, 0x5bc0, 0x5be8, 0x5f69, 0x63a1, 0x7826, 0x7db5,
+ 0x83dc, 0x8521, 0x91c7, 0x91f5, 0x518a, 0x67f5, 0x7b56, 0x003f,
+ /* lead byte f5 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x8cac, 0x51c4, 0x59bb, 0x60bd, 0x8655, 0x501c, 0xf9ff,
+ 0x5254, 0x5c3a, 0x617d, 0x621a, 0x62d3, 0x64f2, 0x65a5, 0x6ecc,
+ 0x7620, 0x810a, 0x8e60, 0x965f, 0x96bb, 0x4edf, 0x5343, 0x5598,
+ 0x5929, 0x5ddd, 0x64c5, 0x6cc9, 0x6dfa, 0x7394, 0x7a7f, 0x821b,
+ 0x85a6, 0x8ce4, 0x8e10, 0x9077, 0x91e7, 0x95e1, 0x9621, 0x97c6,
+ 0x51f8, 0x54f2, 0x5586, 0x5fb9, 0x64a4, 0x6f88, 0x7db4, 0x8f1f,
+ 0x8f4d, 0x9435, 0x50c9, 0x5c16, 0x6cbe, 0x6dfb, 0x751b, 0x77bb,
+ 0x7c3d, 0x7c64, 0x8a79, 0x8ac2, 0x581e, 0x59be, 0x5e16, 0x6377,
+ 0x7252, 0x758a, 0x776b, 0x8adc, 0x8cbc, 0x8f12, 0x5ef3, 0x6674,
+ 0x6df8, 0x807d, 0x83c1, 0x8acb, 0x9751, 0x9bd6, 0xfa00, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x5243, 0x66ff, 0x6d95, 0x6eef, 0x7de0, 0x8ae6, 0x902e,
+ 0x905e, 0x9ad4, 0x521d, 0x527f, 0x54e8, 0x6194, 0x6284, 0x62db,
+ 0x68a2, 0x6912, 0x695a, 0x6a35, 0x7092, 0x7126, 0x785d, 0x7901,
+ 0x790e, 0x79d2, 0x7a0d, 0x8096, 0x8278, 0x82d5, 0x8349, 0x8549,
+ 0x8c82, 0x8d85, 0x9162, 0x918b, 0x91ae, 0x4fc3, 0x56d1, 0x71ed,
+ 0x77d7, 0x8700, 0x89f8, 0x5bf8, 0x5fd6, 0x6751, 0x90a8, 0x53e2,
+ 0x585a, 0x5bf5, 0x60a4, 0x6181, 0x6460, 0x7e3d, 0x8070, 0x8525,
+ 0x9283, 0x64ae, 0x50ac, 0x5d14, 0x6700, 0x589c, 0x62bd, 0x63a8,
+ 0x690e, 0x6978, 0x6a1e, 0x6e6b, 0x76ba, 0x79cb, 0x82bb, 0x8429,
+ 0x8acf, 0x8da8, 0x8ffd, 0x9112, 0x914b, 0x919c, 0x9310, 0x9318,
+ 0x939a, 0x96db, 0x9a36, 0x9c0d, 0x4e11, 0x755c, 0x795d, 0x7afa,
+ 0x7b51, 0x7bc9, 0x7e2e, 0x84c4, 0x8e59, 0x8e74, 0x8ef8, 0x9010,
+ 0x6625, 0x693f, 0x7443, 0x51fa, 0x672e, 0x9edc, 0x5145, 0x5fe0,
+ 0x6c96, 0x87f2, 0x885d, 0x8877, 0x60b4, 0x81b5, 0x8403, 0x003f,
+ /* lead byte f6 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x8d05, 0x53d6, 0x5439, 0x5634, 0x5a36, 0x5c31, 0x708a,
+ 0x7fe0, 0x805a, 0x8106, 0x81ed, 0x8da3, 0x9189, 0x9a5f, 0x9df2,
+ 0x5074, 0x4ec4, 0x53a0, 0x60fb, 0x6e2c, 0x5c64, 0x4f88, 0x5024,
+ 0x55e4, 0x5cd9, 0x5e5f, 0x6065, 0x6894, 0x6cbb, 0x6dc4, 0x71be,
+ 0x75d4, 0x75f4, 0x7661, 0x7a1a, 0x7a49, 0x7dc7, 0x7dfb, 0x7f6e,
+ 0x81f4, 0x86a9, 0x8f1c, 0x96c9, 0x99b3, 0x9f52, 0x5247, 0x52c5,
+ 0x98ed, 0x89aa, 0x4e03, 0x67d2, 0x6f06, 0x4fb5, 0x5be2, 0x6795,
+ 0x6c88, 0x6d78, 0x741b, 0x7827, 0x91dd, 0x937c, 0x87c4, 0x79e4,
+ 0x7a31, 0x5feb, 0x4ed6, 0x54a4, 0x553e, 0x58ae, 0x59a5, 0x60f0,
+ 0x6253, 0x62d6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99b1, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x99dd, 0x502c, 0x5353, 0x5544, 0x577c, 0xfa01, 0x6258,
+ 0xfa02, 0x64e2, 0x666b, 0x67dd, 0x6fc1, 0x6fef, 0x7422, 0x7438,
+ 0x8a17, 0x9438, 0x5451, 0x5606, 0x5766, 0x5f48, 0x619a, 0x6b4e,
+ 0x7058, 0x70ad, 0x7dbb, 0x8a95, 0x596a, 0x812b, 0x63a2, 0x7708,
+ 0x803d, 0x8caa, 0x5854, 0x642d, 0x69bb, 0x5b95, 0x5e11, 0x6e6f,
+ 0xfa03, 0x8569, 0x514c, 0x53f0, 0x592a, 0x6020, 0x614b, 0x6b86,
+ 0x6c70, 0x6cf0, 0x7b1e, 0x80ce, 0x82d4, 0x8dc6, 0x90b0, 0x98b1,
+ 0xfa04, 0x64c7, 0x6fa4, 0x6491, 0x6504, 0x514e, 0x5410, 0x571f,
+ 0x8a0e, 0x615f, 0x6876, 0xfa05, 0x75db, 0x7b52, 0x7d71, 0x901a,
+ 0x5806, 0x69cc, 0x817f, 0x892a, 0x9000, 0x9839, 0x5078, 0x5957,
+ 0x59ac, 0x6295, 0x900f, 0x9b2a, 0x615d, 0x7279, 0x95d6, 0x5761,
+ 0x5a46, 0x5df4, 0x628a, 0x64ad, 0x64fa, 0x6777, 0x6ce2, 0x6d3e,
+ 0x722c, 0x7436, 0x7834, 0x7f77, 0x82ad, 0x8ddb, 0x9817, 0x5224,
+ 0x5742, 0x677f, 0x7248, 0x74e3, 0x8ca9, 0x8fa6, 0x9211, 0x003f,
+ /* lead byte f7 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x962a, 0x516b, 0x53ed, 0x634c, 0x4f69, 0x5504, 0x6096,
+ 0x6557, 0x6c9b, 0x6d7f, 0x724c, 0x72fd, 0x7a17, 0x8987, 0x8c9d,
+ 0x5f6d, 0x6f8e, 0x70f9, 0x81a8, 0x610e, 0x4fbf, 0x504f, 0x6241,
+ 0x7247, 0x7bc7, 0x7de8, 0x7fe9, 0x904d, 0x97ad, 0x9a19, 0x8cb6,
+ 0x576a, 0x5e73, 0x67b0, 0x840d, 0x8a55, 0x5420, 0x5b16, 0x5e63,
+ 0x5ee2, 0x5f0a, 0x6583, 0x80ba, 0x853d, 0x9589, 0x965b, 0x4f48,
+ 0x5305, 0x530d, 0x530f, 0x5486, 0x54fa, 0x5703, 0x5e03, 0x6016,
+ 0x629b, 0x62b1, 0x6355, 0xfa06, 0x6ce1, 0x6d66, 0x75b1, 0x7832,
+ 0x80de, 0x812f, 0x82de, 0x8461, 0x84b2, 0x888d, 0x8912, 0x900b,
+ 0x92ea, 0x98fd, 0x9b91, 0x5e45, 0x66b4, 0x66dd, 0x7011, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x7206, 0xfa07, 0x4ff5, 0x527d, 0x5f6a, 0x6153, 0x6753,
+ 0x6a19, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8c79, 0x98c7, 0x98c4,
+ 0x9a43, 0x54c1, 0x7a1f, 0x6953, 0x8af7, 0x8c4a, 0x98a8, 0x99ae,
+ 0x5f7c, 0x62ab, 0x75b2, 0x76ae, 0x88ab, 0x907f, 0x9642, 0x5339,
+ 0x5f3c, 0x5fc5, 0x6ccc, 0x73cc, 0x7562, 0x758b, 0x7b46, 0x82fe,
+ 0x999d, 0x4e4f, 0x903c, 0x4e0b, 0x4f55, 0x53a6, 0x590f, 0x5ec8,
+ 0x6630, 0x6cb3, 0x7455, 0x8377, 0x8766, 0x8cc0, 0x9050, 0x971e,
+ 0x9c15, 0x58d1, 0x5b78, 0x8650, 0x8b14, 0x9db4, 0x5bd2, 0x6068,
+ 0x608d, 0x65f1, 0x6c57, 0x6f22, 0x6fa3, 0x701a, 0x7f55, 0x7ff0,
+ 0x9591, 0x9592, 0x9650, 0x97d3, 0x5272, 0x8f44, 0x51fd, 0x542b,
+ 0x54b8, 0x5563, 0x558a, 0x6abb, 0x6db5, 0x7dd8, 0x8266, 0x929c,
+ 0x9677, 0x9e79, 0x5408, 0x54c8, 0x76d2, 0x86e4, 0x95a4, 0x95d4,
+ 0x965c, 0x4ea2, 0x4f09, 0x59ee, 0x5ae6, 0x5df7, 0x6052, 0x6297,
+ 0x676d, 0x6841, 0x6c86, 0x6e2f, 0x7f38, 0x809b, 0x822a, 0x003f,
+ /* lead byte f8 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xfa08, 0xfa09, 0x9805, 0x4ea5, 0x5055, 0x54b3, 0x5793,
+ 0x595a, 0x5b69, 0x5bb3, 0x61c8, 0x6977, 0x6d77, 0x7023, 0x87f9,
+ 0x89e3, 0x8a72, 0x8ae7, 0x9082, 0x99ed, 0x9ab8, 0x52be, 0x6838,
+ 0x5016, 0x5e78, 0x674f, 0x8347, 0x884c, 0x4eab, 0x5411, 0x56ae,
+ 0x73e6, 0x9115, 0x97ff, 0x9909, 0x9957, 0x9999, 0x5653, 0x589f,
+ 0x865b, 0x8a31, 0x61b2, 0x6af6, 0x737b, 0x8ed2, 0x6b47, 0x96aa,
+ 0x9a57, 0x5955, 0x7200, 0x8d6b, 0x9769, 0x4fd4, 0x5cf4, 0x5f26,
+ 0x61f8, 0x665b, 0x6ceb, 0x70ab, 0x7384, 0x73b9, 0x73fe, 0x7729,
+ 0x774d, 0x7d43, 0x7d62, 0x7e23, 0x8237, 0x8852, 0xfa0a, 0x8ce2,
+ 0x9249, 0x986f, 0x5b51, 0x7a74, 0x8840, 0x9801, 0x5acc, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x4fe0, 0x5354, 0x593e, 0x5cfd, 0x633e, 0x6d79, 0x72f9,
+ 0x8105, 0x8107, 0x83a2, 0x92cf, 0x9830, 0x4ea8, 0x5144, 0x5211,
+ 0x578b, 0x5f62, 0x6cc2, 0x6ece, 0x7005, 0x7050, 0x70af, 0x7192,
+ 0x73e9, 0x7469, 0x834a, 0x87a2, 0x8861, 0x9008, 0x90a2, 0x93a3,
+ 0x99a8, 0x516e, 0x5f57, 0x60e0, 0x6167, 0x66b3, 0x8559, 0x8e4a,
+ 0x91af, 0x978b, 0x4e4e, 0x4e92, 0x547c, 0x58d5, 0x58fa, 0x597d,
+ 0x5cb5, 0x5f27, 0x6236, 0x6248, 0x660a, 0x6667, 0x6beb, 0x6d69,
+ 0x6dcf, 0x6e56, 0x6ef8, 0x6f94, 0x6fe0, 0x6fe9, 0x705d, 0x72d0,
+ 0x7425, 0x745a, 0x74e0, 0x7693, 0x795c, 0x7cca, 0x7e1e, 0x80e1,
+ 0x82a6, 0x846b, 0x84bf, 0x864e, 0x865f, 0x8774, 0x8b77, 0x8c6a,
+ 0x93ac, 0x9800, 0x9865, 0x60d1, 0x6216, 0x9177, 0x5a5a, 0x660f,
+ 0x6df7, 0x6e3e, 0x743f, 0x9b42, 0x5ffd, 0x60da, 0x7b0f, 0x54c4,
+ 0x5f18, 0x6c5e, 0x6cd3, 0x6d2a, 0x70d8, 0x7d05, 0x8679, 0x8a0c,
+ 0x9d3b, 0x5316, 0x548c, 0x5b05, 0x6a3a, 0x706b, 0x7575, 0x003f,
+ /* lead byte f9 */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x798d, 0x79be, 0x82b1, 0x83ef, 0x8a71, 0x8b41, 0x8ca8,
+ 0x9774, 0xfa0b, 0x64f4, 0x652b, 0x78ba, 0x78bb, 0x7a6b, 0x4e38,
+ 0x559a, 0x5950, 0x5ba6, 0x5e7b, 0x60a3, 0x63db, 0x6b61, 0x6665,
+ 0x6853, 0x6e19, 0x7165, 0x74b0, 0x7d08, 0x9084, 0x9a69, 0x9c25,
+ 0x6d3b, 0x6ed1, 0x733e, 0x8c41, 0x95ca, 0x51f0, 0x5e4c, 0x5fa8,
+ 0x604d, 0x60f6, 0x6130, 0x614c, 0x6643, 0x6644, 0x69a5, 0x6cc1,
+ 0x6e5f, 0x6ec9, 0x6f62, 0x714c, 0x749c, 0x7687, 0x7bc1, 0x7c27,
+ 0x8352, 0x8757, 0x9051, 0x968d, 0x9ec3, 0x532f, 0x56de, 0x5efb,
+ 0x5f8a, 0x6062, 0x6094, 0x61f7, 0x6666, 0x6703, 0x6a9c, 0x6dee,
+ 0x6fae, 0x7070, 0x736a, 0x7e6a, 0x81be, 0x8334, 0x86d4, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x8aa8, 0x8cc4, 0x5283, 0x7372, 0x5b96, 0x6a6b, 0x9404,
+ 0x54ee, 0x5686, 0x5b5d, 0x6548, 0x6585, 0x66c9, 0x689f, 0x6d8d,
+ 0x6dc6, 0x723b, 0x80b4, 0x9175, 0x9a4d, 0x4faf, 0x5019, 0x539a,
+ 0x540e, 0x543c, 0x5589, 0x55c5, 0x5e3f, 0x5f8c, 0x673d, 0x7166,
+ 0x73dd, 0x9005, 0x52db, 0x52f3, 0x5864, 0x58ce, 0x7104, 0x718f,
+ 0x71fb, 0x85b0, 0x8a13, 0x6688, 0x85a8, 0x55a7, 0x6684, 0x714a,
+ 0x8431, 0x5349, 0x5599, 0x6bc1, 0x5f59, 0x5fbd, 0x63ee, 0x6689,
+ 0x7147, 0x8af1, 0x8f1d, 0x9ebe, 0x4f11, 0x643a, 0x70cb, 0x7566,
+ 0x8667, 0x6064, 0x8b4e, 0x9df8, 0x5147, 0x51f6, 0x5308, 0x6d36,
+ 0x80f8, 0x9ed1, 0x6615, 0x6b23, 0x7098, 0x75d5, 0x5403, 0x5c79,
+ 0x7d07, 0x8a16, 0x6b20, 0x6b3d, 0x6b46, 0x5438, 0x6070, 0x6d3d,
+ 0x7fd5, 0x8208, 0x50d6, 0x51de, 0x559c, 0x566b, 0x56cd, 0x59ec,
+ 0x5b09, 0x5e0c, 0x6199, 0x6198, 0x6231, 0x665e, 0x66e6, 0x7199,
+ 0x71b9, 0x71ba, 0x72a7, 0x79a7, 0x7a00, 0x7fb2, 0x8a70, 0x003f
+};
+
+static const unsigned char cp2uni_leadbytes[256] =
+{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
+ 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,
+ 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
+ 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c,
+ 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24,
+ 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c,
+ 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34,
+ 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c,
+ 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44,
+ 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c,
+ 0x4d, 0x4e, 0x4f, 0x50, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x00,
+ 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
+ 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
+ 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e,
+ 0x6f, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned short uni2cp_low[39168] =
+{
+ /* 0x0000 .. 0x00ff */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x003f, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x0020, 0xd9ae, 0x0063, 0x004c, 0xd9b4, 0x0059, 0x007c, 0xd967,
+ 0xd937, 0x0063, 0xdca3, 0xd946, 0x003f, 0xd939, 0x0072, 0xd93a,
+ 0xd956, 0xd94e, 0xdd99, 0xdd9a, 0xd9a5, 0xdb7c, 0xd9d2, 0xd934,
+ 0xd9ac, 0xdd98, 0xdcac, 0xd947, 0xdcf9, 0xdcf6, 0xdcfa, 0xd9af,
+ 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0xdca1, 0x0043,
+ 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049,
+ 0xdca2, 0x004e, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0xd94f,
+ 0xdcaa, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0xdcad, 0xdd3c,
+ 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0xdd31, 0x0063,
+ 0x0065, 0x0065, 0x0065, 0x0065, 0x0069, 0x0069, 0x0069, 0x0069,
+ 0xdd33, 0x006e, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0xd950,
+ 0xdd3a, 0x0075, 0x0075, 0x0075, 0x0075, 0x0079, 0xdd3d, 0x0079,
+ /* 0x0100 .. 0x01ff */
+ 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0043, 0x0063,
+ 0x0043, 0x0063, 0x0043, 0x0063, 0x0043, 0x0063, 0x0044, 0x0064,
+ 0xdca2, 0xdd32, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065,
+ 0x0045, 0x0065, 0x0045, 0x0065, 0x0047, 0x0067, 0x0047, 0x0067,
+ 0x0047, 0x0067, 0x0047, 0x0067, 0x0048, 0x0068, 0xdca4, 0xdd34,
+ 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069,
+ 0x0049, 0xdd35, 0xdca6, 0xdd36, 0x004a, 0x006a, 0x004b, 0x006b,
+ 0xdd37, 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0xdca8,
+ 0xdd38, 0xdca9, 0xdd39, 0x004e, 0x006e, 0x004e, 0x006e, 0x004e,
+ 0x006e, 0xdd40, 0xdcaf, 0xdd3f, 0x004f, 0x006f, 0x004f, 0x006f,
+ 0x004f, 0x006f, 0xdcab, 0xdd3b, 0x0052, 0x0072, 0x0052, 0x0072,
+ 0x0052, 0x0072, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073,
+ 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0xdcae, 0xdd3e,
+ 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075,
+ 0x0055, 0x0075, 0x0055, 0x0075, 0x0057, 0x0077, 0x0059, 0x0079,
+ 0x0059, 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0073,
+ 0x0062, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xdca2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x0045, 0x0046, 0x0066, 0x003f, 0x003f, 0x003f, 0x003f, 0x0049,
+ 0x003f, 0x003f, 0x006c, 0x003f, 0x003f, 0x003f, 0x003f, 0x004f,
+ 0x004f, 0x006f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, 0x0054, 0x0055,
+ 0x0075, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x007a, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xdba2, 0x003f, 0x003f, 0x0021, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061, 0x0049,
+ 0x0069, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055,
+ 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x003f, 0x0041, 0x0061,
+ 0x0041, 0x0061, 0xdca1, 0xdd31, 0x0047, 0x0067, 0x0047, 0x0067,
+ 0x004b, 0x006b, 0x004f, 0x006f, 0x004f, 0x006f, 0x003f, 0x003f,
+ 0x006a, 0x003f, 0x003f, 0x003f, 0x0047, 0x0067, 0x003f, 0x003f,
+ 0x004e, 0x006e, 0x0041, 0x0061, 0xdca1, 0xdd31, 0xdcaa, 0xdd3a,
+ /* 0x0200 .. 0x02ff */
+ 0x0041, 0x0061, 0x0041, 0x0061, 0x0045, 0x0065, 0x0045, 0x0065,
+ 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f,
+ 0x0052, 0x0072, 0x0052, 0x0072, 0x0055, 0x0075, 0x0055, 0x0075,
+ 0x0053, 0x0073, 0x0054, 0x0074, 0x003f, 0x003f, 0x0048, 0x0068,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061,
+ 0x0045, 0x0065, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f,
+ 0x004f, 0x006f, 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x0067, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x0068, 0x003f, 0x006a, 0x0072, 0x003f, 0x003f, 0x003f, 0x0077,
+ 0x0079, 0xd9a5, 0xd9a9, 0xd93e, 0xd93f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x005e, 0xd9a7,
+ 0x0027, 0xd93a, 0xd9a5, 0x0060, 0x003f, 0x005f, 0x003f, 0x003f,
+ 0xd9b0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xd9a8, 0xd9ab, 0xd9aa, 0xd9ad, 0x007e, 0xd9a9, 0x003f, 0x003f,
+ 0x003f, 0x006c, 0x0073, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x0300 .. 0x03ff */
+ 0x0060, 0xd9a5, 0x005e, 0x007e, 0xd93a, 0xd93a, 0xd9a8, 0xd9ab,
+ 0xd937, 0x003f, 0xd9aa, 0xd9a9, 0xd9a7, 0x003f, 0x0022, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9ac,
+ 0xd9ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x005f, 0x005f, 0x005f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x0060, 0xd9a5, 0x003f, 0x003f, 0xd937, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xd9a5, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003b, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xd9a5, 0xd937, 0xdb51, 0xd934,
+ 0xdb55, 0xdb57, 0xdb59, 0x003f, 0xdb5f, 0x003f, 0xdb64, 0xdb68,
+ 0xdb79, 0xdb51, 0xdb52, 0xdb53, 0xdb54, 0xdb55, 0xdb56, 0xdb57,
+ 0xdb58, 0xdb59, 0xdb5a, 0xdb5b, 0xdb5c, 0xdb5d, 0xdb5e, 0xdb5f,
+ 0xdb60, 0xdb61, 0x003f, 0xdb62, 0xdb63, 0xdb64, 0xdb65, 0xdb66,
+ 0xdb67, 0xdb68, 0xdb59, 0xdb64, 0xdb71, 0xdb75, 0xdb77, 0xdb79,
+ 0xdb96, 0xdb71, 0xdb72, 0xdb73, 0xdb74, 0xdb75, 0xdb76, 0xdb77,
+ 0xdb78, 0xdb79, 0xdb7a, 0xdb7b, 0xdb7c, 0xdb7d, 0xdb7e, 0xdb91,
+ 0xdb92, 0xdb93, 0x003f, 0xdb94, 0xdb95, 0xdb96, 0xdb97, 0xdb98,
+ 0xdb99, 0xdb9a, 0xdb79, 0xdb96, 0xdb91, 0xdb96, 0xdb9a, 0x003f,
+ 0xdb72, 0xdb78, 0xdb64, 0xdb64, 0xdb64, 0xdb97, 0xdb92, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xdb7a, 0xdb93, 0x003f, 0x003f, 0xdb58, 0xdb75, 0x003f, 0x003f,
+ 0x003f, 0xdb62, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x0400 .. 0x04ff */
+ 0xdea6, 0xdea7, 0x003f, 0xdea4, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xdeac, 0xdeaa, 0xdeb5, 0x003f,
+ 0xdea1, 0xdea2, 0xdea3, 0xdea4, 0xdea5, 0xdea6, 0xdea8, 0xdea9,
+ 0xdeaa, 0xdeab, 0xdeac, 0xdead, 0xdeae, 0xdeaf, 0xdeb0, 0xdeb1,
+ 0xdeb2, 0xdeb3, 0xdeb4, 0xdeb5, 0xdeb6, 0xdeb7, 0xdeb8, 0xdeb9,
+ 0xdeba, 0xdebb, 0xdebc, 0xdebd, 0xdebe, 0xdebf, 0xdec0, 0xdec1,
+ 0xded1, 0xded2, 0xded3, 0xded4, 0xded5, 0xded6, 0xded8, 0xded9,
+ 0xdeda, 0xdedb, 0xdedc, 0xdedd, 0xdede, 0xdedf, 0xdee0, 0xdee1,
+ 0xdee2, 0xdee3, 0xdee4, 0xdee5, 0xdee6, 0xdee7, 0xdee8, 0xdee9,
+ 0xdeea, 0xdeeb, 0xdeec, 0xdeed, 0xdeee, 0xdeef, 0xdef0, 0xdef1,
+ 0xded6, 0xded7, 0x003f, 0xded4, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xdedc, 0xdeda, 0xdee5, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xdea8, 0xded8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xdea1, 0xded1, 0xdea1, 0xded1, 0x003f, 0x003f, 0xdea6, 0xded6,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xdea8, 0xded8, 0xdea9, 0xded9,
+ 0x003f, 0x003f, 0xdeaa, 0xdeda, 0xdeaa, 0xdeda, 0xdeb0, 0xdee0,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xdebf, 0xdeef, 0xdeb5, 0xdee5,
+ 0xdeb5, 0xdee5, 0xdeb5, 0xdee5, 0xdeb9, 0xdee9, 0x003f, 0x003f,
+ 0xdebd, 0xdeed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x1d00 .. 0x1dff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0xdca1, 0x0042, 0x003f,
+ 0x0044, 0x0045, 0x003f, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b,
+ 0x004c, 0x004d, 0x004e, 0x003f, 0x004f, 0x003f, 0x0050, 0x0052,
+ 0x0054, 0x0055, 0x0057, 0x0061, 0x003f, 0x003f, 0x003f, 0x0062,
+ 0x0064, 0x0065, 0x003f, 0x003f, 0x003f, 0x0067, 0x003f, 0x006b,
+ 0x006d, 0xdd3f, 0x006f, 0x003f, 0x003f, 0x003f, 0x0070, 0x0074,
+ 0x0075, 0x003f, 0x003f, 0x0076, 0x003f, 0xdb72, 0xdb73, 0xdb74,
+ 0xdb97, 0xdb98, 0x0069, 0x0072, 0x0075, 0x0076, 0xdb72, 0xdb73,
+ 0xdb93, 0xdb97, 0xdb98, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xdedf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x0063, 0x003f, 0xdd33, 0x003f,
+ 0x0066, 0x003f, 0x0067, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, 0x003f, 0x003f, 0xdb78,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x1e00 .. 0x1eff */
+ 0x0041, 0x0061, 0x0042, 0x0062, 0x0042, 0x0062, 0x0042, 0x0062,
+ 0x0043, 0x0063, 0x0044, 0x0064, 0x0044, 0x0064, 0x0044, 0x0064,
+ 0x0044, 0x0064, 0x0044, 0x0064, 0x0045, 0x0065, 0x0045, 0x0065,
+ 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0046, 0x0066,
+ 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068, 0x0048, 0x0068,
+ 0x0048, 0x0068, 0x0048, 0x0068, 0x0049, 0x0069, 0x0049, 0x0069,
+ 0x004b, 0x006b, 0x004b, 0x006b, 0x004b, 0x006b, 0x004c, 0x006c,
+ 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x004d, 0x006d,
+ 0x004d, 0x006d, 0x004d, 0x006d, 0x004e, 0x006e, 0x004e, 0x006e,
+ 0x004e, 0x006e, 0x004e, 0x006e, 0x004f, 0x006f, 0x004f, 0x006f,
+ 0x004f, 0x006f, 0x004f, 0x006f, 0x0050, 0x0070, 0x0050, 0x0070,
+ 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072,
+ 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073,
+ 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074,
+ 0x0054, 0x0074, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075,
+ 0x0055, 0x0075, 0x0055, 0x0075, 0x0056, 0x0076, 0x0056, 0x0076,
+ 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077,
+ 0x0057, 0x0077, 0x0058, 0x0078, 0x0058, 0x0078, 0x0059, 0x0079,
+ 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0068, 0x0074,
+ 0x0077, 0x0079, 0x003f, 0x0073, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061,
+ 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061,
+ 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061,
+ 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065,
+ 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065,
+ 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f,
+ 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f,
+ 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f,
+ 0x004f, 0x006f, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075,
+ 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075,
+ 0x0055, 0x0075, 0x0059, 0x0079, 0x0059, 0x0079, 0x0059, 0x0079,
+ 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x1f00 .. 0x1fff */
+ 0xdb71, 0xdb71, 0xdb71, 0xdb71, 0xdb71, 0xdb71, 0xdb71, 0xdb71,
+ 0xdb51, 0xdb51, 0xdb51, 0xdb51, 0xdb51, 0xdb51, 0xdb51, 0xdb51,
+ 0xdb75, 0xdb75, 0xdb75, 0xdb75, 0xdb75, 0xdb75, 0x003f, 0x003f,
+ 0xdb55, 0xdb55, 0xdb55, 0xdb55, 0xdb55, 0xdb55, 0x003f, 0x003f,
+ 0xdb77, 0xdb77, 0xdb77, 0xdb77, 0xdb77, 0xdb77, 0xdb77, 0xdb77,
+ 0xdb57, 0xdb57, 0xdb57, 0xdb57, 0xdb57, 0xdb57, 0xdb57, 0xdb57,
+ 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79,
+ 0xdb59, 0xdb59, 0xdb59, 0xdb59, 0xdb59, 0xdb59, 0xdb59, 0xdb59,
+ 0xdb91, 0xdb91, 0xdb91, 0xdb91, 0xdb91, 0xdb91, 0x003f, 0x003f,
+ 0xdb5f, 0xdb5f, 0xdb5f, 0xdb5f, 0xdb5f, 0xdb5f, 0x003f, 0x003f,
+ 0xdb96, 0xdb96, 0xdb96, 0xdb96, 0xdb96, 0xdb96, 0xdb96, 0xdb96,
+ 0x003f, 0xdb64, 0x003f, 0xdb64, 0x003f, 0xdb64, 0x003f, 0xdb64,
+ 0xdb9a, 0xdb9a, 0xdb9a, 0xdb9a, 0xdb9a, 0xdb9a, 0xdb9a, 0xdb9a,
+ 0xdb68, 0xdb68, 0xdb68, 0xdb68, 0xdb68, 0xdb68, 0xdb68, 0xdb68,
+ 0xdb71, 0xdb71, 0xdb75, 0xdb75, 0xdb77, 0xdb77, 0xdb79, 0xdb79,
+ 0xdb91, 0xdb91, 0xdb96, 0xdb96, 0xdb9a, 0xdb9a, 0x003f, 0x003f,
+ 0xdb71, 0xdb71, 0xdb71, 0xdb71, 0xdb71, 0xdb71, 0xdb71, 0xdb71,
+ 0xdb51, 0xdb51, 0xdb51, 0xdb51, 0xdb51, 0xdb51, 0xdb51, 0xdb51,
+ 0xdb77, 0xdb77, 0xdb77, 0xdb77, 0xdb77, 0xdb77, 0xdb77, 0xdb77,
+ 0xdb57, 0xdb57, 0xdb57, 0xdb57, 0xdb57, 0xdb57, 0xdb57, 0xdb57,
+ 0xdb9a, 0xdb9a, 0xdb9a, 0xdb9a, 0xdb9a, 0xdb9a, 0xdb9a, 0xdb9a,
+ 0xdb68, 0xdb68, 0xdb68, 0xdb68, 0xdb68, 0xdb68, 0xdb68, 0xdb68,
+ 0xdb71, 0xdb71, 0xdb71, 0xdb71, 0xdb71, 0x003f, 0xdb71, 0xdb71,
+ 0xdb51, 0xdb51, 0xdb51, 0xdb51, 0xdb51, 0x003f, 0xdb79, 0x003f,
+ 0x003f, 0xd937, 0xdb77, 0xdb77, 0xdb77, 0x003f, 0xdb77, 0xdb77,
+ 0xdb55, 0xdb55, 0xdb57, 0xdb57, 0xdb57, 0x003f, 0x003f, 0x003f,
+ 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0x003f, 0x003f, 0xdb79, 0xdb79,
+ 0xdb59, 0xdb59, 0xdb59, 0xdb59, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xdb96, 0xdb96, 0xdb96, 0xdb96, 0xdb93, 0xdb93, 0xdb96, 0xdb96,
+ 0xdb64, 0xdb64, 0xdb64, 0xdb64, 0xdb61, 0xd937, 0xd937, 0x0060,
+ 0x003f, 0x003f, 0xdb9a, 0xdb9a, 0xdb9a, 0x003f, 0xdb9a, 0xdb9a,
+ 0xdb5f, 0xdb5f, 0xdb68, 0xdb68, 0xdb68, 0xd9a5, 0x003f, 0x003f,
+ /* 0x2000 .. 0x20ff */
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x002d, 0x002d, 0x003f, 0xd93a, 0xd93a, 0xd93a, 0x003f, 0x005f,
+ 0xd93e, 0xd93f, 0x002c, 0xd93e, 0xd940, 0xd941, 0x002c, 0x003f,
+ 0xd9d3, 0xd9d4, 0x003f, 0x003f, 0x002e, 0xd935, 0xd936, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020,
+ 0xd9b6, 0x003f, 0xd957, 0xd958, 0x003f, 0xd93e, 0x003f, 0x003f,
+ 0x003f, 0xd944, 0xd945, 0xd968, 0x0021, 0x003f, 0xd93a, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x002f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xd9aa, 0x0069, 0x003f, 0x003f, 0xdd9b, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x002b, 0x002d, 0x003d, 0x0028, 0x0029, 0xdd9c,
+ 0x0030, 0xdd9d, 0xdd9e, 0xdd9f, 0xdda0, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x002b, 0x002d, 0x003d, 0x0028, 0x0029, 0x003f,
+ 0x0061, 0x0065, 0x006f, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x0063, 0x003f, 0x003f, 0x004c, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x005c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x2100 .. 0x21ff */
+ 0x003f, 0x003f, 0x0043, 0xd959, 0x003f, 0x003f, 0x003f, 0x0045,
+ 0x003f, 0xd9b5, 0x0067, 0x0048, 0x0048, 0x0048, 0x0068, 0xdd34,
+ 0x0049, 0x0049, 0x004c, 0xdc34, 0x003f, 0x004e, 0xd9e0, 0x003f,
+ 0x0050, 0x0050, 0x0051, 0x0052, 0x0052, 0x0052, 0x003f, 0x003f,
+ 0x003f, 0xd9e5, 0xd9e2, 0x003f, 0x005a, 0x003f, 0xdc69, 0x003f,
+ 0x005a, 0x003f, 0x004b, 0xd95a, 0x0042, 0x0043, 0x0065, 0x0065,
+ 0x0045, 0x0046, 0x003f, 0x004d, 0x006f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x0069, 0x003f, 0x003f, 0xdb92, 0xdb73, 0xdb53, 0xdb60,
+ 0xd9b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x0044, 0x0064, 0x0065,
+ 0x0069, 0x006a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xdcf7, 0xdcf8, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xdcfb, 0xdcfc, 0xdcfd, 0xdcfe, 0x003f,
+ 0xdb40, 0xdb41, 0xdb42, 0xdb43, 0xdb44, 0xdb45, 0xdb46, 0xdb47,
+ 0xdb48, 0xdb49, 0x003f, 0x003f, 0x004c, 0x0043, 0x0044, 0x004d,
+ 0xdb31, 0xdb32, 0xdb33, 0xdb34, 0xdb35, 0xdb36, 0xdb37, 0xdb38,
+ 0xdb39, 0xdb3a, 0x003f, 0x003f, 0x006c, 0x0063, 0x0064, 0x006d,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xd977, 0xd978, 0xd976, 0xd979, 0xd97a, 0xd9d5, 0xd9d8, 0xd9d6,
+ 0xd9d9, 0xd9d7, 0xd977, 0xd976, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd97a, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9a2, 0xd9a1,
+ 0x003f, 0x003f, 0xd9a1, 0x003f, 0xd9a2, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x2200 .. 0x22ff */
+ 0xd9a3, 0x003f, 0xd963, 0xd9a4, 0xd9a4, 0xdcaa, 0x003f, 0xd964,
+ 0xd996, 0xd996, 0x003f, 0xd997, 0xd997, 0x003f, 0x003f, 0xd9b3,
+ 0x003f, 0xd9b2, 0x002d, 0xd94e, 0x003f, 0x002f, 0x003f, 0x002a,
+ 0xd9aa, 0x003f, 0xd97e, 0x003f, 0x003f, 0xd992, 0xd954, 0x004c,
+ 0xd960, 0x003f, 0x003f, 0x007c, 0x007c, 0xd93b, 0xd93b, 0xd99e,
+ 0xd99f, 0xd99d, 0xd99c, 0xd994, 0xd995, 0x003f, 0xd9b1, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xd955, 0xd993, 0x003a, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xd93d, 0xd991, 0x003f, 0x003f,
+ 0x003f, 0xd93d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x007e, 0x007e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xd966, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xd951, 0xd965, 0xd965, 0xd965, 0xd952, 0xd953, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xd97c, 0xd97d, 0x003f, 0x003f, 0x003c, 0x003e,
+ 0xd952, 0xd953, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xd99a, 0xd99b, 0xd99a, 0xd99b, 0xd998, 0xd999,
+ 0xd998, 0xd999, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd9c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd961, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd934, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x2300 .. 0x23ff */
+ 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xd962, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd944, 0xd945, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x2400 .. 0x24ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xdce7, 0xdce8, 0xdce9, 0xdcea, 0xdceb, 0xdcec, 0xdced, 0xdcee,
+ 0xdcef, 0xdcf0, 0xdcf1, 0xdcf2, 0xdcf3, 0xdcf4, 0xdcf5, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xdd77, 0xdd78, 0xdd79, 0xdd7a,
+ 0xdd7b, 0xdd7c, 0xdd7d, 0xdd7e, 0xdd91, 0xdd92, 0xdd93, 0xdd94,
+ 0xdd95, 0xdd96, 0xdd97, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xdd5d, 0xdd5e, 0xdd5f, 0xdd60,
+ 0xdd61, 0xdd62, 0xdd63, 0xdd64, 0xdd65, 0xdd66, 0xdd67, 0xdd68,
+ 0xdd69, 0xdd6a, 0xdd6b, 0xdd6c, 0xdd6d, 0xdd6e, 0xdd6f, 0xdd70,
+ 0xdd71, 0xdd72, 0xdd73, 0xdd74, 0xdd75, 0xdd76, 0x0041, 0x0042,
+ 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a,
+ 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052,
+ 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a,
+ 0xdccd, 0xdcce, 0xdccf, 0xdcd0, 0xdcd1, 0xdcd2, 0xdcd3, 0xdcd4,
+ 0xdcd5, 0xdcd6, 0xdcd7, 0xdcd8, 0xdcd9, 0xdcda, 0xdcdb, 0xdcdc,
+ 0xdcdd, 0xdcde, 0xdcdf, 0xdce0, 0xdce1, 0xdce2, 0xdce3, 0xdce4,
+ 0xdce5, 0xdce6, 0x0030, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x2500 .. 0x25ff */
+ 0xdba1, 0xdbac, 0xdba2, 0xdbad, 0x002d, 0x002d, 0x007c, 0x007c,
+ 0x002d, 0x002d, 0x007c, 0x007c, 0xdba3, 0xdbc8, 0xdbc7, 0xdbae,
+ 0xdba4, 0xdbc2, 0xdbc1, 0xdbaf, 0xdba6, 0xdbc6, 0xdbc5, 0xdbb1,
+ 0xdba5, 0xdbc4, 0xdbc3, 0xdbb0, 0xdba7, 0xdbbc, 0xdbc9, 0xdbca,
+ 0xdbb7, 0xdbcb, 0xdbcc, 0xdbb2, 0xdba9, 0xdbbe, 0xdbcd, 0xdbce,
+ 0xdbb9, 0xdbcf, 0xdbd0, 0xdbb4, 0xdba8, 0xdbd1, 0xdbd2, 0xdbb8,
+ 0xdbbd, 0xdbd3, 0xdbd4, 0xdbb3, 0xdbaa, 0xdbd5, 0xdbd6, 0xdbba,
+ 0xdbbf, 0xdbd7, 0xdbd8, 0xdbb5, 0xdbab, 0xdbd9, 0xdbda, 0xdbbb,
+ 0xdbdb, 0xdbdc, 0xdbc0, 0xdbdd, 0xdbde, 0xdbdf, 0xdbe0, 0xdbe1,
+ 0xdbe2, 0xdbe3, 0xdbe4, 0xdbb6, 0x002d, 0x002d, 0x007c, 0x007c,
+ 0x003d, 0x007c, 0x002b, 0x002b, 0x002b, 0x003f, 0x003f, 0x003f,
+ 0x004c, 0x004c, 0x004c, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b,
+ 0x002b, 0x002b, 0x002b, 0x002b, 0x0054, 0x0054, 0x0054, 0x002b,
+ 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x002f, 0x003f, 0x0058, 0x002d, 0x007c, 0x002d, 0x007c,
+ 0x002d, 0x007c, 0x002d, 0x007c, 0x002d, 0x007c, 0x002d, 0x007c,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xd9c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xd971, 0xd970, 0x003f, 0xd9c3, 0xd9c7, 0xd9c8, 0xd9cb, 0xd9ca,
+ 0xd9c9, 0xd9cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xd973, 0xd972, 0x003f, 0x003f, 0xd9ba, 0xd9b9,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xd975, 0xd974, 0x003f, 0x003f,
+ 0xd9b8, 0xd9b7, 0x003f, 0x003f, 0x003f, 0x003f, 0xd96f, 0xd96e,
+ 0xd9c2, 0x003f, 0x003f, 0xd96b, 0x003f, 0x003f, 0xd96d, 0xd96c,
+ 0xd9c4, 0xd9c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd96b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x2600 .. 0x26ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd96a, 0xd969, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9cf, 0xd9ce,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xd9d0, 0x003f, 0xd9d1, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xd95f, 0x003f, 0xd95e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xd9bc, 0xd9bd, 0x003f, 0xd9c0, 0xd9bb, 0xd9be, 0x003f, 0xd9bf,
+ 0xd9cd, 0xd9db, 0xd9dc, 0x003f, 0xd9dd, 0xd9da, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x2e00 .. 0x2eff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7bd,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x2f00 .. 0x2fff */
+ 0xf179, 0x003f, 0x003f, 0x003f, 0xf0e0, 0x003f, 0xf133, 0x003f,
+ 0xf161, 0x003f, 0xf19f, 0xf732, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe4ef, 0xe5f4, 0x003f, 0xe9e2, 0x003f, 0x003f, 0xed38,
+ 0xe964, 0x003f, 0x003f, 0x003f, 0xefd1, 0xe2a2, 0x003f, 0xf6cf,
+ 0xea5d, 0x003f, 0x003f, 0xeb3a, 0xe4de, 0xe443, 0xf1ad, 0x003f,
+ 0xf5bb, 0xebb3, 0x003f, 0xecb9, 0x003f, 0xeaa3, 0x003f, 0xe1ef,
+ 0xe39b, 0xe0ee, 0xe05e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe2e1, 0x003f, 0x003f, 0x003f, 0xecfd, 0xe1fc, 0xf8c2, 0xec32,
+ 0xf438, 0x003f, 0xe7fe, 0xe570, 0xe355, 0xe8b0, 0xe7e9, 0xf17d,
+ 0xef68, 0xf055, 0xe7ca, 0xf9e2, 0xf43d, 0x003f, 0x003f, 0xe7ec,
+ 0xe9ef, 0xe7be, 0xed3b, 0x003f, 0xec39, 0xf8fd, 0xf360, 0xe9ab,
+ 0xf9a1, 0x003f, 0xf748, 0xed43, 0xefda, 0xe143, 0xf86c, 0xef3c,
+ 0xe1fe, 0xef4f, 0xe098, 0xeae6, 0xefc4, 0xf2a3, 0xf7b5, 0x003f,
+ 0x003f, 0xe8dc, 0xf7ab, 0xe7a9, 0xe7cd, 0xe7c3, 0xecc5, 0xeb44,
+ 0xecc6, 0x003f, 0xf932, 0xf87b, 0xe731, 0xf3d3, 0xe847, 0x003f,
+ 0xe9ae, 0x003f, 0xedcf, 0xefe2, 0xe665, 0xf14b, 0x003f, 0xf14c,
+ 0xf0d3, 0xf0bf, 0xeced, 0xf1bb, 0xf448, 0xe2bf, 0xeb6f, 0xf54f,
+ 0xf3c7, 0xe06d, 0xeae4, 0xf5ac, 0x003f, 0x003f, 0xf87c, 0xf84c,
+ 0xf0fd, 0x003f, 0xe148, 0xe057, 0xedeb, 0xe1db, 0xe577, 0xecce,
+ 0x003f, 0xf73f, 0xf275, 0xf3cb, 0xf37b, 0xecf3, 0xf4b3, 0xecf4,
+ 0xf473, 0x003f, 0xf0e9, 0xf0b7, 0x003f, 0xe6ec, 0xe3d1, 0xf1fe,
+ 0xe836, 0xe9bd, 0x003f, 0x003f, 0xefeb, 0xf57c, 0xea3a, 0xe79e,
+ 0xf864, 0xf06f, 0x003f, 0xf0e5, 0xf87d, 0xf7a6, 0xea3b, 0xecdd,
+ 0xec5f, 0xf855, 0xe739, 0xe1e9, 0xe1d4, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe331, 0xede0, 0xf378, 0xe66d, 0xe673, 0xe77a, 0xe73b,
+ 0xf96c, 0xeb38, 0xf9d9, 0x003f, 0x003f, 0xf333, 0xe1d5, 0xeb39,
+ 0xea3c, 0xf34a, 0xf65d, 0xe6a3, 0xe2cf, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x3000 .. 0x30ff */
+ 0xd931, 0xd932, 0xd933, 0xd938, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xd944, 0xd945, 0xd946, 0xd947, 0xd948, 0xd949, 0xd94a, 0xd94b,
+ 0xd94c, 0xd94d, 0x003f, 0xd97b, 0xd942, 0xd943, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x005b, 0x005d, 0x003f, 0xd940, 0xd941, 0x002c,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xed38, 0xf1a0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xdda1, 0xdda2, 0xdda3, 0xdda4, 0xdda5, 0xdda6, 0xdda7,
+ 0xdda8, 0xdda9, 0xddaa, 0xddab, 0xddac, 0xddad, 0xddae, 0xddaf,
+ 0xddb0, 0xddb1, 0xddb2, 0xddb3, 0xddb4, 0xddb5, 0xddb6, 0xddb7,
+ 0xddb8, 0xddb9, 0xddba, 0xddbb, 0xddbc, 0xddbd, 0xddbe, 0xddbf,
+ 0xddc0, 0xddc1, 0xddc2, 0xddc3, 0xddc4, 0xddc5, 0xddc6, 0xddc7,
+ 0xddc8, 0xddc9, 0xddca, 0xddcb, 0xddcc, 0xddcd, 0xddce, 0xddcf,
+ 0xddd0, 0xddd1, 0xddd2, 0xddd3, 0xddd4, 0xddd5, 0xddd6, 0xddd7,
+ 0xddd8, 0xddd9, 0xddda, 0xdddb, 0xdddc, 0xdddd, 0xddde, 0xdddf,
+ 0xdde0, 0xdde1, 0xdde2, 0xdde3, 0xdde4, 0xdde5, 0xdde6, 0xdde7,
+ 0xdde8, 0xdde9, 0xddea, 0xddeb, 0xddec, 0xdded, 0xddee, 0xddef,
+ 0xddf0, 0xddf1, 0xddf2, 0xddf3, 0xdda6, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xde31, 0xde32, 0xde33, 0xde34, 0xde35, 0xde36, 0xde37,
+ 0xde38, 0xde39, 0xde3a, 0xde3b, 0xde3c, 0xde3d, 0xde3e, 0xde3f,
+ 0xde40, 0xde41, 0xde42, 0xde43, 0xde44, 0xde45, 0xde46, 0xde47,
+ 0xde48, 0xde49, 0xde4a, 0xde4b, 0xde4c, 0xde4d, 0xde4e, 0xde4f,
+ 0xde50, 0xde51, 0xde52, 0xde53, 0xde54, 0xde55, 0xde56, 0xde57,
+ 0xde58, 0xde59, 0xde5a, 0xde5b, 0xde5c, 0xde5d, 0xde5e, 0xde5f,
+ 0xde60, 0xde61, 0xde62, 0xde63, 0xde64, 0xde65, 0xde66, 0xde67,
+ 0xde68, 0xde69, 0xde6a, 0xde6b, 0xde6c, 0xde6d, 0xde6e, 0xde6f,
+ 0xde70, 0xde71, 0xde72, 0xde73, 0xde74, 0xde75, 0xde76, 0xde77,
+ 0xde78, 0xde79, 0xde7a, 0xde7b, 0xde7c, 0xde7d, 0xde7e, 0xde91,
+ 0xde92, 0xde93, 0xde94, 0xde95, 0xde96, 0xde97, 0xde98, 0xde91,
+ 0xde92, 0xde93, 0xde94, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x3100 .. 0x31ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x8841, 0x8c41, 0x8444, 0x9041, 0x8446, 0x8447, 0x9441,
+ 0x9841, 0x9c41, 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f,
+ 0x8450, 0xa041, 0xa441, 0xa841, 0x8454, 0xac41, 0xb041, 0xb441,
+ 0xb841, 0xbc41, 0xc041, 0xc441, 0xc841, 0xcc41, 0xd041, 0x8461,
+ 0x8481, 0x84a1, 0x84c1, 0x84e1, 0x8541, 0x8561, 0x8581, 0x85a1,
+ 0x85c1, 0x85e1, 0x8641, 0x8661, 0x8681, 0x86a1, 0x86c1, 0x86e1,
+ 0x8741, 0x8761, 0x8781, 0x87a1, 0xdad4, 0xdad5, 0xdad6, 0xdad7,
+ 0xdad8, 0xdad9, 0xdada, 0xdadb, 0xdadc, 0xdadd, 0xdade, 0xdadf,
+ 0xdae0, 0xdae1, 0xdae2, 0xdae3, 0xdae4, 0xdae5, 0xdae6, 0xdae7,
+ 0xdae8, 0xdae9, 0xdaea, 0xdaeb, 0xdaec, 0xdaed, 0xdaee, 0xdaef,
+ 0xdaf0, 0xdaf1, 0xdaf2, 0xdaf3, 0xdaf4, 0xdaf5, 0xdaf6, 0xdaf7,
+ 0xdaf8, 0xdaf9, 0xdafa, 0xdafb, 0xdafc, 0xdafd, 0xdafe, 0x003f,
+ 0x003f, 0x003f, 0xf179, 0xf133, 0xeab2, 0xea5c, 0xeabe, 0xf3e9,
+ 0xf7bb, 0xe0a3, 0xf0e0, 0xe940, 0xf2cb, 0xf548, 0xf432, 0xf161,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x3200 .. 0x32ff */
+ 0xdd41, 0xdd42, 0xdd43, 0xdd44, 0xdd45, 0xdd46, 0xdd47, 0xdd48,
+ 0xdd49, 0xdd4a, 0xdd4b, 0xdd4c, 0xdd4d, 0xdd4e, 0xdd4f, 0xdd50,
+ 0xdd51, 0xdd52, 0xdd53, 0xdd54, 0xdd55, 0xdd56, 0xdd57, 0xdd58,
+ 0xdd59, 0xdd5a, 0xdd5b, 0xdd5c, 0xd9df, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xdcb1, 0xdcb2, 0xdcb3, 0xdcb4, 0xdcb5, 0xdcb6, 0xdcb7, 0xdcb8,
+ 0xdcb9, 0xdcba, 0xdcbb, 0xdcbc, 0xdcbd, 0xdcbe, 0xdcbf, 0xdcc0,
+ 0xdcc1, 0xdcc2, 0xdcc3, 0xdcc4, 0xdcc5, 0xdcc6, 0xdcc7, 0xdcc8,
+ 0xdcc9, 0xdcca, 0xdccb, 0xdccc, 0x003f, 0x003f, 0x003f, 0xd9de,
+ 0xf179, 0xf133, 0xeab2, 0xea5c, 0xeee9, 0xe6bf, 0xf662, 0xf732,
+ 0xe29c, 0xed38, 0xf055, 0xf8fd, 0xec39, 0xe7ca, 0xe3d1, 0xf6cf,
+ 0xf17d, 0xf3bb, 0xf095, 0xea74, 0xe7a3, 0xf6e5, 0xf23f, 0xf5e6,
+ 0x003f, 0xe9fa, 0xe3fb, 0xe443, 0xf27a, 0xefd0, 0xf164, 0xf3bc,
+ 0xf833, 0xf9cc, 0x003f, 0xf2e1, 0xeabe, 0xf3e9, 0xf7bb, 0xf3a7,
+ 0xefd3, 0x003f, 0xf395, 0x003f, 0xe09a, 0xe37a, 0xf1c0, 0xf892,
+ 0xeda8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xde32, 0xde34, 0xde36, 0xde38, 0xde3a, 0xde3b, 0xde3d, 0xde3f,
+ 0xde41, 0xde43, 0xde45, 0xde47, 0xde49, 0xde4b, 0xde4d, 0xde4f,
+ 0xde51, 0xde54, 0xde56, 0xde58, 0xde5a, 0xde5b, 0xde5c, 0xde5d,
+ 0xde5e, 0xde5f, 0xde62, 0xde65, 0xde68, 0xde6b, 0xde6e, 0xde6f,
+ 0xde70, 0xde71, 0xde72, 0xde74, 0xde76, 0xde78, 0xde79, 0xde7a,
+ 0xde7b, 0xde7c, 0xde7d, 0xde91, 0xde92, 0xde93, 0xde94, 0x003f,
+ /* 0x3300 .. 0x33ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xdc59, 0xdc5a, 0xdc5b, 0xdc5c, 0xdc5d, 0x003f, 0x003f, 0x003f,
+ 0xdc4a, 0xdc4b, 0xdc6c, 0xdc6d, 0xdc6e, 0xdc46, 0xdc47, 0xdc48,
+ 0xdc64, 0xdc65, 0xdc66, 0xdc67, 0xdc68, 0xdc31, 0xdc32, 0xdc33,
+ 0xdc35, 0xdc3b, 0xdc3c, 0xdc3d, 0xdc3e, 0xdc3f, 0xdc40, 0xdc41,
+ 0xdc42, 0xdc43, 0xdc44, 0xdc37, 0xdc38, 0xdc39, 0xdc3a, 0xdc4d,
+ 0xdc4e, 0xdc75, 0xdc76, 0xdc77, 0xdc78, 0xdc71, 0xdc72, 0xdc73,
+ 0xdc4f, 0xdc50, 0xdc51, 0xdc52, 0xdc53, 0xdc54, 0xdc55, 0xdc56,
+ 0xdc57, 0xdc58, 0xdc5e, 0xdc5f, 0xdc60, 0xdc61, 0xdc62, 0xdc63,
+ 0xdc6a, 0xdc6b, 0xd9e3, 0xdc7c, 0xdc36, 0xdc70, 0xdc91, 0xd9e1,
+ 0xdc4c, 0xdc7d, 0xdc45, 0x003f, 0x003f, 0x003f, 0x003f, 0xdc49,
+ 0xdc7a, 0x003f, 0x003f, 0xdc7b, 0x003f, 0x003f, 0xdc6f, 0x003f,
+ 0xd9e4, 0x003f, 0x003f, 0xdc74, 0xdc7e, 0xdc79, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x4e00 .. 0x4eff */
+ 0xf179, 0xf2cb, 0x003f, 0xf662, 0x003f, 0x003f, 0x003f, 0xe742,
+ 0xf1db, 0xeab2, 0xeabe, 0xf7bb, 0x003f, 0xe996, 0x003f, 0x003f,
+ 0x003f, 0xf5e4, 0x003f, 0x003f, 0xf4a6, 0xe9e0, 0xeba6, 0x003f,
+ 0xe29a, 0xe940, 0x003f, 0x003f, 0x003f, 0x003f, 0xecaa, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3e9, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe1fa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf93f, 0xe4a1, 0x003f, 0xf3ab, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeed1, 0xe43c, 0x003f, 0xe29b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf3fd, 0x003f, 0xea4f, 0xf8ba, 0xf7b9,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe262, 0x003f,
+ 0xecab, 0xf0e0, 0x003f, 0x003f, 0x003f, 0xe29c, 0xe0f7, 0xeda5,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe071, 0x003f, 0xe55c, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf071, 0x003f, 0x003f, 0xe973, 0xeaad,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0eb, 0x003f,
+ 0x003f, 0x003f, 0xe5af, 0x003f, 0x003f, 0x003f, 0xe697, 0x003f,
+ 0xedf8, 0x003f, 0x003f, 0xea50, 0xf133, 0x003f, 0xefcd, 0x003f,
+ 0xf037, 0xeff6, 0xf8bb, 0x003f, 0xeee9, 0xf2cc, 0x003f, 0x003f,
+ 0xe376, 0x003f, 0x003f, 0xea51, 0x003f, 0x003f, 0xed3c, 0x003f,
+ 0x003f, 0xe75c, 0xf7f1, 0x003f, 0xe26f, 0xf834, 0xee42, 0x003f,
+ 0xf89d, 0x003f, 0x003f, 0xf84d, 0xe158, 0xf2cd, 0xe5d5, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4a2, 0x003f,
+ 0x003f, 0x003f, 0xf161, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xed37, 0xf162, 0x003f, 0x003f, 0xf641, 0x003f, 0x003f, 0xe29d,
+ 0x003f, 0x003f, 0xe361, 0xe0bf, 0x003f, 0xf1a4, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf1a8, 0xea52, 0xf672, 0xf1dc,
+ 0xe997, 0xeb49, 0x003f, 0x003f, 0x003f, 0xe55e, 0x003f, 0xf545,
+ 0x003f, 0x003f, 0x003f, 0xe4db, 0xe645, 0xf134, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xed76, 0x003f, 0xf3ea, 0x003f, 0x003f, 0x003f, 0xe0ec, 0xe0c0,
+ 0x003f, 0x003f, 0x003f, 0xf194, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x4f00 .. 0x4fff */
+ 0x003f, 0xe37a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf7f2, 0xf135, 0xe36f, 0x003f, 0xeeea, 0xe37b, 0xe961,
+ 0xe8e9, 0xf9cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8d7,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe871, 0x003f, 0xe646, 0x003f,
+ 0xecdf, 0x003f, 0xea53, 0x003f, 0xea54, 0xe031, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf27c, 0x003f, 0x003f, 0xe4a3, 0xf247,
+ 0xf75f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf058, 0xf248, 0xf3ac,
+ 0xf3a5, 0xefce, 0x003f, 0x003f, 0x003f, 0xf7bc, 0x003f, 0x003f,
+ 0x003f, 0xedf9, 0xf17a, 0xe9d6, 0xf1c2, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf735, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedba,
+ 0xe8d8, 0x003f, 0x003f, 0xe032, 0x003f, 0x003f, 0xe3cd, 0x003f,
+ 0x003f, 0x003f, 0xf27d, 0x003f, 0x003f, 0x003f, 0xf17b, 0xea55,
+ 0x003f, 0xece0, 0x003f, 0xe059, 0xf479, 0x003f, 0xe5ce, 0x003f,
+ 0xf646, 0x003f, 0xe252, 0xe657, 0x003f, 0xecb4, 0x003f, 0xf3ad,
+ 0x003f, 0xf072, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6c2, 0x003f,
+ 0xf4a7, 0x003f, 0x003f, 0xe1ea, 0x003f, 0xf0ee, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7b2, 0xf9a5,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf665, 0xe5e2, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf745,
+ 0x003f, 0x003f, 0xe197, 0xf5b5, 0xed3d, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeeeb, 0xf3d5, 0x003f, 0x003f, 0x003f, 0xf34b, 0x003f,
+ 0x003f, 0xefb5, 0x003f, 0xe159, 0xf865, 0x003f, 0x003f, 0xebd4,
+ 0x003f, 0x003f, 0xe6d6, 0x003f, 0x003f, 0xe951, 0x003f, 0xea56,
+ 0xf891, 0xece1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebf3, 0xe998,
+ 0x003f, 0xe29e, 0x003f, 0xe8c4, 0x003f, 0xf793, 0x003f, 0x003f,
+ 0xe974, 0x003f, 0xedef, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x5000 .. 0x50ff */
+ 0x003f, 0x003f, 0xe941, 0x003f, 0x003f, 0x003f, 0xe5d6, 0x003f,
+ 0x003f, 0xf4da, 0x003f, 0xe0c1, 0x003f, 0xe8c3, 0x003f, 0x003f,
+ 0x003f, 0xe7fa, 0xe4ee, 0x003f, 0x003f, 0x003f, 0xf848, 0x003f,
+ 0x003f, 0xf9a6, 0xf0ef, 0x003f, 0xf536, 0x003f, 0xe15a, 0xf4a8,
+ 0x003f, 0xf4db, 0x003f, 0xe8a7, 0xf647, 0x003f, 0xe2e6, 0xf394,
+ 0xe0da, 0x003f, 0xeed2, 0xe6c3, 0xf692, 0xef6e, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeda6, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xede7, 0x003f, 0x003f, 0x003f, 0xe033,
+ 0xe137, 0xf059, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf746,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf835, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf3ae, 0x003f, 0xf2ce, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0ed, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf640, 0xf2cf, 0xefcf, 0x003f,
+ 0xf6de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe263, 0x003f, 0x003f, 0x003f, 0x003f, 0xe999, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8a8, 0x003f, 0x003f,
+ 0x003f, 0xe0f8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xeaa1, 0xe9e1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf5ca, 0xefb6, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeeec, 0xf27e, 0x003f, 0xf4f0, 0x003f, 0xeabf,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe15b, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe351, 0x003f, 0x003f,
+ 0x003f, 0xf562, 0xeb4a, 0x003f, 0x003f, 0x003f, 0x003f, 0xeac0,
+ 0x003f, 0xe270, 0x003f, 0x003f, 0x003f, 0xe962, 0xf9ea, 0x003f,
+ 0x003f, 0x003f, 0xe698, 0x003f, 0x003f, 0x003f, 0xf05a, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef79, 0x003f, 0xecac,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4d0, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe034, 0x003f, 0xe8f8, 0x003f, 0x003f, 0x003f, 0xea57,
+ /* 0x5100 .. 0x51ff */
+ 0xf0f0, 0xf3d6, 0x003f, 0x003f, 0xede2, 0x003f, 0xe15c, 0x003f,
+ 0x003f, 0xe0fb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf073, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeac1,
+ 0x003f, 0xe67d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xefd0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf249, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5e3,
+ 0x003f, 0x003f, 0xe3d3, 0x003f, 0xedf0, 0x003f, 0x003f, 0x003f,
+ 0xef44, 0xf0c3, 0x003f, 0xf03a, 0xf89e, 0xf5f6, 0xf34c, 0xf9d4,
+ 0xeb4b, 0xe253, 0x003f, 0xe34a, 0xf6ba, 0xe795, 0xf6cd, 0x003f,
+ 0x003f, 0x003f, 0xed3e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe56f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe377, 0x003f, 0x003f, 0xf19f, 0x003f, 0xe43e,
+ 0xf291, 0xe5d7, 0xf074, 0xf732, 0xe1eb, 0xe6bf, 0xf8b1, 0x003f,
+ 0x003f, 0xe1ec, 0x003f, 0x003f, 0x003f, 0xe942, 0xe37c, 0xe29f,
+ 0xf292, 0x003f, 0x003f, 0x003f, 0xe152, 0x003f, 0x003f, 0x003f,
+ 0xe37d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedf7, 0x003f,
+ 0x003f, 0x003f, 0xf4fc, 0x003f, 0x003f, 0xf232, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe7b3, 0x003f, 0x003f, 0xe796, 0x003f, 0xefb7,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe23e, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7a2, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe793, 0x003f, 0xe55f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeda7, 0xe5d2,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe639, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf532, 0x003f, 0xf3d7, 0x003f,
+ 0x003f, 0xe5d8, 0x003f, 0xf34d, 0xe6d0, 0xe560, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe6cf, 0xf0ea, 0xf9eb, 0x003f,
+ 0x003f, 0xe8ed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf955, 0xe0c2, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9d5, 0x003f,
+ 0xf558, 0xef7a, 0xf5f3, 0x003f, 0x003f, 0xf7de, 0x003f, 0x003f,
+ /* 0x5200 .. 0x52ff */
+ 0xe4ef, 0x003f, 0x003f, 0xf163, 0x003f, 0x003f, 0xe9c2, 0xf2b7,
+ 0xeed4, 0x003f, 0xe05a, 0x003f, 0x003f, 0x003f, 0xe7fb, 0x003f,
+ 0x003f, 0xf89f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe63a,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf59a, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf6f7, 0xe93c, 0x003f, 0x003f,
+ 0x003f, 0xe6d7, 0xeaa2, 0x003f, 0x003f, 0x003f, 0xe24e, 0x003f,
+ 0xe4f0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf334, 0xebec,
+ 0xe2e7, 0xf4cb, 0xf1a9, 0xe04e, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf591, 0x003f, 0x003f, 0x003f, 0xf65e,
+ 0x003f, 0x003f, 0xea9d, 0xe34b, 0xe5b7, 0xf293, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf538, 0x003f, 0xe99a, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe0a7, 0x003f, 0xe85e, 0x003f, 0x003f,
+ 0x003f, 0xeb76, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf1a5, 0xf294, 0x003f, 0x003f, 0x003f, 0x003f, 0xe99b,
+ 0x003f, 0x003f, 0xf7dc, 0x003f, 0x003f, 0xf4dc, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf794, 0x003f, 0xf59b,
+ 0x003f, 0x003f, 0x003f, 0xf993, 0x003f, 0x003f, 0x003f, 0xe34c,
+ 0xe8f9, 0xe6b1, 0x003f, 0x003f, 0x003f, 0xe0fc, 0x003f, 0x003f,
+ 0x003f, 0xf335, 0xe0fd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe5f4, 0x003f, 0x003f, 0x003f, 0xe1ed,
+ 0xe035, 0x003f, 0x003f, 0xe63b, 0xe352, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf34e, 0xe44d, 0xe134, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf846, 0x003f,
+ 0x003f, 0xe15d, 0x003f, 0xe89c, 0x003f, 0xf65f, 0x003f, 0xefb8,
+ 0x003f, 0xe797, 0x003f, 0x003f, 0x003f, 0xe15e, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe6cd, 0x003f, 0x003f, 0xe561, 0xefed, 0x003f,
+ 0xe07b, 0xe7e2, 0x003f, 0xf9b2, 0x003f, 0xecad, 0xe65c, 0xe7b4,
+ 0x003f, 0x003f, 0xeba7, 0xf263, 0xe353, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf9b3, 0x003f, 0xe5e4, 0x003f, 0x003f,
+ 0xe2e8, 0x003f, 0xf1c3, 0xe342, 0x003f, 0x003f, 0xe2a0, 0xe838,
+ /* 0x5300 .. 0x53ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf760, 0x003f, 0x003f,
+ 0xf9d6, 0x003f, 0x003f, 0x003f, 0x003f, 0xf761, 0x003f, 0xf762,
+ 0xe963, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9e2, 0xf8f9, 0xe9c1,
+ 0x003f, 0xecb5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf1dd, 0xe254, 0x003f, 0xe0a1, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe9e3, 0x003f, 0x003f, 0x003f, 0x003f, 0xf96d,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf7af, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe49d,
+ 0xe2a1, 0xed38, 0x003f, 0xf546, 0xf1a0, 0x003f, 0x003f, 0xecae,
+ 0xeeed, 0xf9c1, 0xe872, 0x003f, 0x003f, 0xe743, 0x003f, 0x003f,
+ 0x003f, 0xe9e4, 0xf391, 0xf693, 0xf892, 0x003f, 0x003f, 0xe3f5,
+ 0x003f, 0x003f, 0xe85f, 0x003f, 0xe964, 0x003f, 0xe936, 0x003f,
+ 0xf2bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe25f, 0x003f,
+ 0xeb69, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7d6,
+ 0xf164, 0xf05b, 0x003f, 0x003f, 0xe04f, 0xe5b0, 0x003f, 0xe2e9,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3ed, 0x003f, 0xe15f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xed9a, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xed7d, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe6d8, 0x003f, 0xf9a7, 0x003f, 0x003f, 0x003f, 0x003f, 0xf03b,
+ 0xf642, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2f0, 0xf7bd, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee96, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe0db, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf4d1, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xefd1, 0xf4a9, 0xe370, 0xefd2, 0x003f, 0xe873, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xec62, 0x003f, 0xf632, 0xebf4,
+ 0x003f, 0x003f, 0x003f, 0xe874, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeed5, 0xf5bf, 0xe2a2, 0xe1af, 0xe2a3, 0x003f, 0x003f,
+ 0x003f, 0xe1b0, 0xf3fe, 0xe333, 0xebaf, 0xf733, 0x003f, 0xe036,
+ 0xf6bb, 0xf47a, 0xea58, 0xefd3, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xea59, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x5400 .. 0x54ff */
+ 0x003f, 0x003f, 0x003f, 0xf9de, 0xe050, 0x003f, 0x003f, 0x003f,
+ 0xf7ea, 0xe3ce, 0xf264, 0x003f, 0xe562, 0xe7a3, 0xf9a8, 0xe6d9,
+ 0xf6ce, 0xf84e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe2d6, 0x003f, 0xe6f0, 0x003f, 0xf0e1,
+ 0xf755, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe99c, 0x003f,
+ 0x003f, 0xe9c3, 0x003f, 0xf7df, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeeef, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf9e5, 0xf633, 0x003f, 0xe7fc, 0xf9a9, 0x003f, 0xeeee, 0x003f,
+ 0x003f, 0x003f, 0xe5e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf2d0, 0x003f, 0xe1b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf6a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf3b2, 0x003f, 0xf3b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe1b2, 0x003f, 0xe83b, 0x003f, 0xe037, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xece2, 0xf8bc, 0xe7a4, 0x003f, 0x003f,
+ 0xf24a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf763, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf8fa, 0x003f, 0xe2a4, 0x003f,
+ 0xe99d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf673, 0x003f, 0x003f, 0x003f,
+ 0xf1aa, 0x003f, 0x003f, 0xf431, 0xe271, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf836, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf7e0, 0x003f, 0x003f, 0x003f, 0x003f, 0xf166, 0x003f, 0x003f,
+ 0xed7e, 0xf7a1, 0x003f, 0x003f, 0xf8ef, 0x003f, 0x003f, 0x003f,
+ 0xf7eb, 0xf233, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf03c, 0x003f, 0x003f, 0x003f, 0xe038, 0x003f, 0x003f,
+ 0xf59c, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1d6, 0xf998, 0x003f,
+ 0x003f, 0x003f, 0xf559, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf764, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x5500 .. 0x55ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf736, 0x003f, 0xea5a, 0xf456,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6da, 0x003f,
+ 0xe4d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe755, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf076,
+ 0x003f, 0xf4dd, 0x003f, 0x003f, 0x003f, 0xed6a, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf674, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf694, 0x003f, 0xeac2, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7fd,
+ 0x003f, 0x003f, 0x003f, 0xe198, 0x003f, 0x003f, 0xe4ba, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed3f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf7e1, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf336, 0x003f, 0x003f, 0x003f,
+ 0xe0d3, 0x003f, 0x003f, 0x003f, 0xeb4c, 0x003f, 0xf55a, 0xe59c,
+ 0x003f, 0xf9aa, 0xf7e2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf547, 0xf9c2, 0xf940, 0x003f, 0xf9ec, 0xe072, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9bd,
+ 0x003f, 0xf077, 0xeac3, 0xe3d2, 0xe272, 0x003f, 0xe4a4, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9ab, 0x003f, 0xeae0,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf457, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeef0, 0x003f, 0xe37e, 0x003f, 0x003f, 0xf4aa,
+ 0x003f, 0x003f, 0x003f, 0xea5b, 0xf648, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebf5, 0xf3b3, 0x003f,
+ /* 0x5600 .. 0x56ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6a3, 0x003f,
+ 0x003f, 0xe039, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe2a5, 0x003f, 0x003f, 0xeac4,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebb0,
+ 0x003f, 0x003f, 0xf34f, 0x003f, 0xf634, 0x003f, 0xecb6, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf856, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe391, 0x003f, 0x003f, 0xf9ed, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe9c4, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf999, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee4f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xea3d, 0x003f, 0xf84f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xedf1, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf1c4, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe435, 0x003f, 0x003f, 0xf9ee, 0x003f, 0x003f,
+ 0x003f, 0xf5b6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xebf6, 0xea5c, 0x003f, 0x003f, 0xf96e, 0x003f,
+ 0xf167, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe1dd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe647, 0xe1b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x5700 .. 0x57ff */
+ 0x003f, 0x003f, 0x003f, 0xf765, 0xedd8, 0x003f, 0x003f, 0x003f,
+ 0xe2ea, 0x003f, 0x003f, 0xe2d0, 0x003f, 0xf05c, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf03e, 0xf03d, 0x003f, 0x003f, 0xe4f1, 0x003f,
+ 0xe4a5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6cf,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf234, 0x003f, 0x003f, 0x003f, 0x003f, 0xe334, 0x003f, 0x003f,
+ 0xf432, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe392, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf433, 0x003f, 0xf6f8, 0x003f, 0x003f, 0x003f, 0x003f, 0xe343,
+ 0x003f, 0x003f, 0xe8a9, 0x003f, 0x003f, 0xe4bb, 0xe07c, 0x003f,
+ 0xf3a6, 0xe0d5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf6e7, 0x003f, 0x003f, 0xe1de, 0x003f, 0xf6a4, 0x003f,
+ 0x003f, 0x003f, 0xf750, 0x003f, 0x003f, 0x003f, 0xe4dd, 0x003f,
+ 0xe160, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2a6, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf695, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xebf7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe4dc, 0x003f, 0x003f, 0xf8a0, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf837, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf0d9, 0x003f, 0xe2a7, 0xf03f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xed91, 0x003f, 0x003f, 0x003f, 0xefb9,
+ 0xf3d8, 0x003f, 0x003f, 0xe768, 0x003f, 0x003f, 0xeb94, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee44,
+ 0xe99e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf4f1, 0x003f, 0x003f, 0x003f, 0xecd0, 0x003f, 0x003f, 0xf49d,
+ 0x003f, 0xe8c6, 0xe393, 0x003f, 0xe394, 0x003f, 0x003f, 0x003f,
+ /* 0x5800 .. 0x58ff */
+ 0xe2dc, 0x003f, 0xe4d1, 0x003f, 0x003f, 0xe141, 0xf6d8, 0x003f,
+ 0xe0a8, 0xf0bc, 0xed4e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf56c, 0x003f,
+ 0x003f, 0xe952, 0x003f, 0x003f, 0xf337, 0x003f, 0x003f, 0xee50,
+ 0x003f, 0x003f, 0xe07d, 0x003f, 0x003f, 0x003f, 0x003f, 0xef7b,
+ 0xede8, 0xe953, 0x003f, 0x003f, 0xf1de, 0xe4f2, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe199, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe264, 0xeeab, 0x003f, 0x003f, 0x003f, 0xe0c3,
+ 0x003f, 0xebb1, 0x003f, 0x003f, 0xf6b2, 0x003f, 0x003f, 0xe4f3,
+ 0xe4d2, 0x003f, 0xf5c0, 0x003f, 0x003f, 0x003f, 0xeadd, 0x003f,
+ 0x003f, 0xf295, 0xeef1, 0x003f, 0xf9b4, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf458, 0x003f, 0x003f,
+ 0x003f, 0xf4d2, 0x003f, 0x003f, 0xf296, 0x003f, 0xec63, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe161, 0x003f, 0xeaea, 0x003f, 0x003f,
+ 0x003f, 0xefba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe7d7, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf5cd, 0x003f, 0xf3f2, 0xf857,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe7f8, 0xe552, 0x003f, 0x003f, 0x003f, 0x003f, 0xf675, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe9c5, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeef2, 0xf1df, 0x003f, 0x003f, 0xe05b, 0x003f,
+ 0x003f, 0xe8fa, 0x003f, 0x003f, 0x003f, 0xef45, 0x003f, 0xe4a6,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9b5, 0x003f,
+ 0x003f, 0xf7c9, 0x003f, 0xed72, 0x003f, 0xf8bd, 0x003f, 0x003f,
+ 0xe6a4, 0xe255, 0x003f, 0x003f, 0x003f, 0x003f, 0xe265, 0xe676,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xedbd, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xea5d, 0xf195, 0x003f, 0x003f, 0xf1e0,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf17c, 0xf8be, 0xeaeb, 0x003f, 0xebf8, 0x003f, 0x003f,
+ /* 0x5900 .. 0x59ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7be,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe395, 0xeb3a, 0xef72, 0x003f,
+ 0x003f, 0xec64, 0xe49f, 0x003f, 0xeda8, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe7d3, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4de,
+ 0x003f, 0xf548, 0xf6bc, 0xe99f, 0x003f, 0xef7c, 0xed77, 0x003f,
+ 0x003f, 0xecf7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf138,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf893, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xedf2, 0x003f, 0x003f, 0xe396,
+ 0xe43f, 0xe975, 0x003f, 0x003f, 0x003f, 0x003f, 0xe335, 0xf3b4,
+ 0xf941, 0xe19a, 0x003f, 0x003f, 0xe9c6, 0xf861, 0x003f, 0xf6df,
+ 0x003f, 0x003f, 0xf838, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf297, 0x003f, 0xea5e, 0x003f, 0x003f, 0x003f, 0x003f, 0xeef3,
+ 0x003f, 0x003f, 0xf6ac, 0xf0c4, 0xf1e1, 0xeb3b, 0xe9c7, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe443, 0xe44f, 0x003f, 0x003f, 0x003f,
+ 0xe05c, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8bf, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xedfd, 0xe9e5, 0xe75d, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf196, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe397, 0x003f, 0x003f, 0xef7d, 0xe362,
+ 0x003f, 0xe7d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf676, 0x003f, 0x003f,
+ 0xe8aa, 0x003f, 0x003f, 0x003f, 0xf6e0, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe769, 0x003f, 0xf533, 0x003f, 0x003f, 0xf56d, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf2d1, 0x003f, 0x003f, 0xe7b5, 0x003f,
+ 0x003f, 0xf1ab, 0x003f, 0xecb7, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf24b, 0xe1b4, 0x003f, 0xeb95, 0xf05d, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf197, 0xef7e, 0x003f, 0xe0a9, 0xf3af, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe05d, 0x003f,
+ 0xf139, 0x003f, 0xf47b, 0x003f, 0xf9ef, 0x003f, 0xf7f3, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xee51, 0x003f, 0x003f, 0xf168, 0x003f, 0x003f, 0x003f, 0xf1ac,
+ /* 0x5a00 .. 0x5aff */
+ 0x003f, 0xf05e, 0x003f, 0xef6f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xea5f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe436, 0x003f, 0x003f, 0xeef4, 0xe3d6, 0x003f, 0x003f, 0xee52,
+ 0xece3, 0x003f, 0x003f, 0x003f, 0x003f, 0xed40, 0x003f, 0x003f,
+ 0x003f, 0xe744, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf635, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf4de, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe6a5, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6e8, 0x003f,
+ 0x003f, 0xef56, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf8e6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe9e6, 0x003f, 0x003f, 0x003f, 0xe9a0, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe76a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe83c, 0xf040, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xecb8, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe03a, 0xebf9, 0x003f, 0xf041, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf47c, 0x003f, 0x003f, 0xf87e, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf265, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7f4, 0x003f,
+ 0x003f, 0xe47c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x5b00 .. 0x5bff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8fb, 0x003f, 0x003f,
+ 0x003f, 0xf9f0, 0x003f, 0xeb4d, 0xe273, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf756, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xea3e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xeac5, 0x003f, 0x003f, 0xedbe, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf1ad, 0xf87a, 0x003f, 0x003f, 0xe1ee, 0xf1a6, 0x003f, 0xf1ae,
+ 0xf37d, 0x003f, 0xe9a1, 0x003f, 0xf1af, 0xf99a, 0x003f, 0xe77b,
+ 0x003f, 0x003f, 0x003f, 0xe19b, 0xe1b5, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf839, 0x003f, 0xebdd, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xec65, 0xf1cf, 0x003f, 0x003f, 0x003f, 0xe9a2, 0x003f, 0x003f,
+ 0xf7ca, 0x003f, 0xf078, 0x003f, 0xeded, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4eb, 0x003f, 0xefd4,
+ 0xebfa, 0xed5c, 0x003f, 0xebe4, 0xef57, 0x003f, 0x003f, 0xe26b,
+ 0x003f, 0x003f, 0x003f, 0xe965, 0x003f, 0xf6b5, 0xf995, 0xf395,
+ 0xe23f, 0xf3b5, 0xf2d2, 0xef58, 0xf0f1, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe0d4, 0xeb4e, 0xecf8, 0xf079, 0xf942, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xeb96, 0x003f, 0xe2e0, 0x003f,
+ 0xf235, 0x003f, 0x003f, 0xf83a, 0xee53, 0xebb2, 0xe03b, 0x003f,
+ 0xece4, 0xefbb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xec66,
+ 0xf4f2, 0x003f, 0xf266, 0xf042, 0xe398, 0xf169, 0xe85b, 0xe2a8,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe9a3, 0x003f, 0x003f, 0x003f,
+ 0xe76b, 0x003f, 0xf7ce, 0xefd5, 0xecd1, 0x003f, 0x003f, 0xe44c,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe73c, 0xf4cc,
+ 0x003f, 0xe1fb, 0xf666, 0x003f, 0xeef5, 0xef91, 0xecf9, 0xe44b,
+ 0xf4f3, 0xecfb, 0x003f, 0xea60, 0xe240, 0x003f, 0xe699, 0xf3d9,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5c1, 0xe954, 0x003f,
+ 0xf5bb, 0x003f, 0xea61, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x5c00 .. 0x5cff */
+ 0x003f, 0xe976, 0x003f, 0x003f, 0xea62, 0x003f, 0x003f, 0xf1e2,
+ 0xf298, 0xf05f, 0xf37e, 0xecfc, 0x003f, 0xe4df, 0xe4f4, 0xebb3,
+ 0x003f, 0xebb4, 0x003f, 0x003f, 0x003f, 0x003f, 0xf563, 0x003f,
+ 0x003f, 0xeac6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xefd6, 0x003f, 0x003f, 0x003f,
+ 0xe8ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf636, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xecb9, 0xf0c5, 0xf539, 0xe1b6, 0xe49b, 0x003f, 0xe83d, 0xe473,
+ 0xe2d1, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0dc, 0xe19c, 0x003f,
+ 0xe2dd, 0x003f, 0x003f, 0xef39, 0x003f, 0xecbb, 0xecba, 0x003f,
+ 0x003f, 0xeb6a, 0x003f, 0x003f, 0x003f, 0xf299, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe943, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe4f5, 0x003f, 0xe6a6, 0x003f, 0xf645, 0xe6db, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xebd5, 0x003f, 0x003f, 0xe57a,
+ 0x003f, 0xeaa3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf9df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe399, 0xf1d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe0aa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xed6b, 0x003f, 0xebfb, 0xe0a2, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe4e0, 0x003f, 0xed4f, 0x003f, 0xf8c0, 0x003f, 0xe84e,
+ 0xed5d, 0x003f, 0xe649, 0x003f, 0x003f, 0x003f, 0xf2c0, 0x003f,
+ 0xebfc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf649, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xeac7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xed41, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe977,
+ 0xe978, 0x003f, 0x003f, 0x003f, 0xf866, 0x003f, 0xe4f6, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf3da, 0x003f, 0xf894, 0x003f, 0x003f,
+ /* 0x5d00 .. 0x5dff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xec9f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5cf, 0xe39a, 0x003f,
+ 0x003f, 0xe1df, 0x003f, 0x003f, 0xf5cb, 0x003f, 0xed92, 0xe0ab,
+ 0x003f, 0xe6c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeca0,
+ 0x003f, 0xe9da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe83e, 0xe07e, 0x003f, 0x003f, 0x003f,
+ 0xe5b9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeca1, 0x003f, 0x003f, 0xef73, 0x003f, 0x003f, 0xf4ab,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2a9,
+ 0x003f, 0x003f, 0x003f, 0xe4f7, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe593, 0x003f, 0x003f,
+ 0xe274, 0x003f, 0xef94, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xedf5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xeeae, 0x003f, 0xe64a, 0x003f, 0xeaec, 0xed50, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef74, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe745, 0x003f, 0x003f, 0x003f, 0xed6c, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf549, 0xf3b6, 0x003f,
+ 0x003f, 0xec6e, 0xebb5, 0x003f, 0x003f, 0xe1ef, 0xf3a7, 0xe275,
+ 0xe0dd, 0x003f, 0x003f, 0xe7e3, 0x003f, 0x003f, 0xf4ac, 0x003f,
+ 0x003f, 0xe39b, 0xf13b, 0xea63, 0xf6e9, 0x003f, 0x003f, 0xf7f5,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebde, 0xe0ee, 0x003f,
+ /* 0x5e00 .. 0x5eff */
+ 0x003f, 0x003f, 0xecbc, 0xf766, 0x003f, 0x003f, 0xe8ee, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf9f1, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf6b6, 0x003f, 0x003f, 0x003f, 0x003f, 0xf56e, 0x003f,
+ 0x003f, 0xf47d, 0x003f, 0xe8d9, 0x003f, 0xf338, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebfd, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xea64, 0x003f, 0xeb3c, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf1e3, 0x003f, 0x003f, 0xe4e1, 0x003f,
+ 0xeac8, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7b6, 0x003f, 0xf9ac,
+ 0xf2d3, 0x003f, 0x003f, 0x003f, 0xed51, 0xf77b, 0x003f, 0xe8ac,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf956, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe73d, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf64a,
+ 0x003f, 0xe8df, 0xe4d3, 0xf757, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe05e, 0xf751, 0xe444, 0x003f, 0x003f, 0xe944,
+ 0xf849, 0xe05f, 0x003f, 0xf943, 0xf07a, 0xf07b, 0xe39c, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf1e4, 0x003f, 0x003f, 0xe9e7,
+ 0x003f, 0x003f, 0xeac9, 0x003f, 0x003f, 0x003f, 0x003f, 0xeaed,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf24c, 0x003f, 0xf2c1,
+ 0x003f, 0x003f, 0xe162, 0x003f, 0xe9a4, 0x003f, 0x003f, 0x003f,
+ 0xeaca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4f8, 0xf3a8,
+ 0x003f, 0x003f, 0x003f, 0xe1b7, 0x003f, 0xf2d4, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed6d, 0xeaee, 0xe0ac,
+ 0xefbc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf07c, 0x003f,
+ 0x003f, 0x003f, 0xeacb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf7bf, 0xe63f, 0xe5c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe2aa, 0x003f, 0x003f, 0xe239, 0x003f, 0x003f, 0xe69a, 0x003f,
+ 0x003f, 0x003f, 0xf3b7, 0xf29a, 0x003f, 0x003f, 0x003f, 0xe7d9,
+ 0xf4df, 0x003f, 0xf758, 0xe256, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe5e6, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf576, 0x003f, 0x003f, 0xee55, 0xf2d5,
+ 0x003f, 0x003f, 0xe0ef, 0xf96f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x5f00 .. 0x5fff */
+ 0x003f, 0xe937, 0x003f, 0x003f, 0xe677, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf759, 0x003f, 0x003f, 0x003f, 0x003f, 0xecd2,
+ 0x003f, 0xecbd, 0x003f, 0xe2e1, 0xf350, 0xf16a, 0x003f, 0xe9d7,
+ 0xf8f0, 0x003f, 0x003f, 0xf13c, 0x003f, 0x003f, 0x003f, 0xf339,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf867, 0xf8c1,
+ 0x003f, 0xe450, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xedb0, 0x003f, 0x003f, 0x003f, 0xf1e5, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe0ad, 0x003f, 0xf7b0, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf6a5, 0x003f, 0xe0ae, 0x003f, 0xe83f, 0x003f, 0xe746, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4a7, 0xf8b2,
+ 0x003f, 0xf9c4, 0x003f, 0xf13d, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf8a1, 0x003f, 0x003f, 0x003f, 0xede9, 0xefee,
+ 0x003f, 0xf4f4, 0xf795, 0xf351, 0xea3f, 0xf740, 0x003f, 0x003f,
+ 0xf4e0, 0xeeaf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8ad,
+ 0x003f, 0xee45, 0x003f, 0x003f, 0xf7a8, 0x003f, 0x003f, 0xe9d8,
+ 0xef69, 0xf2d6, 0x003f, 0x003f, 0x003f, 0xe4e2, 0x003f, 0xec6f,
+ 0x003f, 0x003f, 0xf970, 0xe6c8, 0xf9ad, 0x003f, 0x003f, 0x003f,
+ 0xeaef, 0xe163, 0xe4f9, 0x003f, 0x003f, 0x003f, 0x003f, 0xe592,
+ 0xe8c7, 0xea65, 0x003f, 0x003f, 0x003f, 0x003f, 0xf396, 0x003f,
+ 0xe5d0, 0xedd9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf957, 0xe966, 0xec70, 0x003f, 0x003f, 0x003f, 0xe840, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4a3, 0x003f, 0xe4ec,
+ 0x003f, 0xf55b, 0x003f, 0x003f, 0x003f, 0xf9c5, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xecfd, 0x003f, 0xf7b1, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe39d, 0xf16b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5bc, 0xf434,
+ 0xe75e, 0xe75f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf5f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf671, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe447, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8ec, 0x003f, 0xe9c8,
+ /* 0x6000 .. 0x60ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed78,
+ 0x003f, 0x003f, 0xe451, 0x003f, 0x003f, 0x003f, 0xf767, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe64b, 0xea66, 0x003f, 0x003f,
+ 0xf6bd, 0xf13e, 0x003f, 0x003f, 0x003f, 0xe371, 0x003f, 0xeb97,
+ 0xf043, 0x003f, 0xe266, 0x003f, 0x003f, 0x003f, 0x003f, 0xe135,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf198, 0xec71, 0xecbe, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf958, 0x003f, 0x003f,
+ 0xe1f0, 0x003f, 0xf7f6, 0x003f, 0x003f, 0xeaf0, 0x003f, 0x003f,
+ 0x003f, 0xedbf, 0x003f, 0x003f, 0x003f, 0xe24f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf971, 0xf1b0, 0xf9d1, 0xf64b, 0x003f, 0x003f,
+ 0xf7cf, 0xf0da, 0xe051, 0x003f, 0xe448, 0xe1f1, 0x003f, 0xecd3,
+ 0xf9e6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee7d, 0x003f, 0x003f,
+ 0x003f, 0xecfa, 0x003f, 0x003f, 0xf33a, 0xf7d0, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf972, 0x003f, 0xf737, 0x003f,
+ 0x003f, 0x003f, 0xebe5, 0xf29b, 0x003f, 0x003f, 0x003f, 0xeef6,
+ 0xf07d, 0x003f, 0x003f, 0xf944, 0xf5c2, 0x003f, 0x003f, 0xe6dc,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf397, 0x003f, 0xe9e8, 0xe4ed, 0xf5fc, 0x003f, 0xe84f, 0x003f,
+ 0xe19d, 0x003f, 0x003f, 0x003f, 0xe4fa, 0xf534, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2d7, 0x003f, 0xe553,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf8e3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf8ed, 0x003f, 0xeb3d, 0x003f, 0x003f, 0xf07e,
+ 0xf8b3, 0xed52, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf677, 0xe46d, 0x003f, 0xeacc, 0x003f, 0x003f, 0xf959, 0x003f,
+ 0x003f, 0xeda9, 0xeb98, 0xf643, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x6100 .. 0x61ff */
+ 0x003f, 0xebfe, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0f0, 0x003f,
+ 0xf091, 0xf092, 0x003f, 0x003f, 0x003f, 0xe850, 0xf744, 0xf0f2,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed53, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xefd7, 0xed93, 0x003f, 0x003f, 0x003f, 0xe091,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe267,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf95a, 0x003f, 0x003f, 0x003f, 0xf4e1, 0x003f, 0x003f, 0xe0c4,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xece5, 0x003f, 0xe0c5, 0xf044,
+ 0x003f, 0x003f, 0xefbd, 0x003f, 0xe6c9, 0x003f, 0x003f, 0xf0db,
+ 0xf1b1, 0x003f, 0xe153, 0xf6be, 0xf95b, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf796, 0x003f, 0xe7b7, 0x003f, 0x003f,
+ 0xf4d3, 0xf4d4, 0x003f, 0x003f, 0x003f, 0xf6e4, 0x003f, 0xf6d1,
+ 0x003f, 0x003f, 0xe747, 0xe241, 0xe052, 0x003f, 0x003f, 0xf8b4,
+ 0xe0c6, 0x003f, 0x003f, 0xf398, 0x003f, 0x003f, 0xe5e7, 0x003f,
+ 0xf060, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe164, 0xe0af,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf53a, 0xefaf, 0x003f,
+ 0x003f, 0xf5c3, 0xefd8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe9e9, 0x003f, 0x003f, 0x003f, 0xf3f3, 0x003f,
+ 0xe5fb, 0xea4b, 0x003f, 0x003f, 0xf59d, 0x003f, 0x003f, 0x003f,
+ 0xf9f3, 0xf9f2, 0xf6a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe9c9, 0x003f, 0x003f, 0xe563,
+ 0x003f, 0xe138, 0x003f, 0xe851, 0xe165, 0x003f, 0xe7e4, 0x003f,
+ 0x003f, 0x003f, 0xf85a, 0x003f, 0x003f, 0x003f, 0xede3, 0x003f,
+ 0x003f, 0x003f, 0xe4bc, 0x003f, 0x003f, 0x003f, 0xe092, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe354, 0x003f, 0x003f, 0x003f, 0xe060,
+ 0xf83b, 0xf0eb, 0xeef8, 0xe7e5, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3d7, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf4a4, 0x003f, 0x003f, 0x003f, 0xe59d, 0xf973,
+ 0xf868, 0x003f, 0xf4d5, 0x003f, 0xe2ab, 0x003f, 0x003f, 0xf0f3,
+ /* 0x6200 .. 0x62ff */
+ 0xe5fc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4d4,
+ 0xe1fc, 0x003f, 0xe7e6, 0x003f, 0xec9b, 0xec31, 0xf0d4, 0x003f,
+ 0xeb99, 0xed42, 0xe19e, 0x003f, 0x003f, 0x003f, 0xf8e4, 0x003f,
+ 0x003f, 0x003f, 0xf53b, 0x003f, 0x003f, 0x003f, 0x003f, 0xe34d,
+ 0x003f, 0xe093, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf2b8, 0x003f, 0x003f, 0x003f, 0xe6c0, 0x003f,
+ 0xf29c, 0xf9f4, 0x003f, 0x003f, 0xe4e3, 0x003f, 0xf8c2, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5e8, 0xe8ae,
+ 0xebb6, 0xf747, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeb4f,
+ 0xf8c3, 0xe9ea, 0x003f, 0xec32, 0x003f, 0xf236, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf678, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf697, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9ca, 0x003f,
+ 0x003f, 0xe372, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9a6, 0x003f,
+ 0x003f, 0xe9eb, 0x003f, 0x003f, 0xed9b, 0x003f, 0x003f, 0xecaf,
+ 0xe39e, 0x003f, 0x003f, 0x003f, 0xf59e, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe14c, 0xf6ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xede4, 0xeaf1, 0x003f, 0x003f, 0xf6e1, 0x003f, 0xf7f7,
+ 0xf2b9, 0x003f, 0x003f, 0xf768, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf7a9, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf769, 0x003f, 0x003f, 0x003f, 0xf24d, 0x003f, 0x003f,
+ 0x003f, 0xe756, 0x003f, 0x003f, 0xed73, 0xf5ce, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe9d9, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7e7,
+ 0xe449, 0xe5c3, 0x003f, 0x003f, 0xe875, 0xe860, 0x003f, 0xe3d9,
+ 0xe268, 0x003f, 0xe0de, 0xf53c, 0xe89d, 0x003f, 0xf679, 0xef95,
+ 0xe2ac, 0xf392, 0x003f, 0xf59f, 0xe8c8, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe250, 0xecd4, 0xe3cf, 0xf3f5,
+ 0x003f, 0xe1f2, 0x003f, 0xe2eb, 0x003f, 0x003f, 0x003f, 0xe1b8,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeca6, 0xe3da,
+ /* 0x6300 .. 0x63ff */
+ 0x003f, 0xf435, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf436,
+ 0x003f, 0xed5e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe4fb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf3a9, 0x003f, 0x003f, 0x003f, 0xf459,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf2d8, 0xee59, 0x003f, 0xe748, 0xf895, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf4b5, 0x003f, 0x003f, 0xf734, 0x003f, 0x003f, 0xe3f3,
+ 0xee58, 0x003f, 0x003f, 0x003f, 0x003f, 0xf76a, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe979,
+ 0xea67, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0df, 0x003f,
+ 0x003f, 0x003f, 0xe2ec, 0x003f, 0x003f, 0x003f, 0x003f, 0xf56f,
+ 0x003f, 0x003f, 0xe3f4, 0xe44a, 0x003f, 0x003f, 0x003f, 0xeaf2,
+ 0x003f, 0x003f, 0x003f, 0xebb7, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xec33, 0xe4fc, 0x003f, 0x003f, 0xf1e6, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe8c9, 0x003f, 0x003f, 0x003f, 0xed9c, 0x003f,
+ 0xe2de, 0x003f, 0x003f, 0xe260, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe5d3, 0xf4f5, 0xf6ae, 0x003f, 0x003f, 0xf2c8, 0x003f, 0xe1f3,
+ 0xf5cf, 0xedf3, 0xf352, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe061, 0x003f, 0x003f, 0x003f, 0xf093, 0x003f, 0xe336, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7da,
+ 0xf33b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0e7, 0x003f,
+ 0x003f, 0x003f, 0xedc0, 0xf945, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xed54, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe139, 0xf9c6, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf045, 0x003f, 0xedaa, 0xeaba,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x6400 .. 0x64ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebdf, 0x003f, 0xe861,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xebb8, 0x003f, 0xef96, 0xe4fd,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xec34, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf45a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe876, 0xf6b3, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf9cd, 0x003f, 0x003f, 0x003f, 0xf4b6, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf267, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf5c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe734, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf437,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe7b8, 0xe7b9, 0xf2c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe65e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf6cb, 0xeaae, 0xef97, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe445, 0x003f, 0x003f, 0x003f, 0xe4d5, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf55c, 0xe89e, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe7e8, 0x003f, 0xf6eb, 0xf5c9, 0x003f,
+ 0xf4bc, 0x003f, 0xe862, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe4b5, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xef46, 0x003f, 0x003f, 0xe65f, 0xf54a, 0x003f, 0xf6c9,
+ 0x003f, 0x003f, 0xe13a, 0x003f, 0x003f, 0xf353, 0xe166, 0x003f,
+ 0x003f, 0x003f, 0xe363, 0x003f, 0xe4bd, 0x003f, 0x003f, 0x003f,
+ 0xe8fb, 0x003f, 0xe0e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe4e4, 0xf699, 0x003f, 0x003f, 0xe5ba, 0xf4cd, 0xe0e1,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf0f4, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf53d, 0x003f, 0xf93a, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf6ec, 0x003f, 0x003f, 0x003f, 0xef98, 0x003f,
+ /* 0x6500 .. 0x65ff */
+ 0xe877, 0x003f, 0x003f, 0x003f, 0xf6cc, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xedc1, 0x003f, 0x003f, 0x003f, 0x003f, 0xeb7e, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe5fd, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe276, 0xf93b, 0xe5bb, 0x003f, 0x003f, 0xf438,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xec35, 0xe1b9,
+ 0xf094, 0xe0c7, 0x003f, 0xe1f4, 0x003f, 0x003f, 0xe8af, 0xf2d9,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1ba, 0x003f, 0x003f,
+ 0xf99b, 0x003f, 0x003f, 0x003f, 0x003f, 0xeaf3, 0xe277, 0xe852,
+ 0x003f, 0xe2ad, 0x003f, 0x003f, 0x003f, 0x003f, 0xeef9, 0xf738,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4e2, 0x003f,
+ 0x003f, 0x003f, 0xe094, 0xeaa4, 0x003f, 0x003f, 0xe554, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe167, 0xedc2, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe1bb, 0x003f, 0xf2da, 0xf268, 0x003f, 0xe9a7,
+ 0xec36, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeb50, 0x003f,
+ 0x003f, 0x003f, 0xe640, 0xf75a, 0x003f, 0xf99c, 0x003f, 0xe7fe,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xea40, 0x003f, 0x003f, 0x003f,
+ 0xe9ec, 0xe878, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe570,
+ 0x003f, 0xe69b, 0x003f, 0xe1d7, 0xea68, 0x003f, 0x003f, 0xf49a,
+ 0x003f, 0xed66, 0x003f, 0x003f, 0xe355, 0xf53e, 0x003f, 0xe9a8,
+ 0x003f, 0x003f, 0x003f, 0xf1c5, 0xf4d6, 0x003f, 0x003f, 0xea69,
+ 0xece6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4a8,
+ 0x003f, 0xe8b0, 0x003f, 0x003f, 0xedda, 0xecbf, 0x003f, 0x003f,
+ 0x003f, 0xe8b1, 0x003f, 0x003f, 0x003f, 0xe5e9, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeb51, 0xf2db, 0x003f, 0x003f, 0xf379,
+ 0x003f, 0x003f, 0xe6b2, 0x003f, 0x003f, 0x003f, 0x003f, 0xe39f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe7e9, 0x003f, 0x003f, 0xe3a0, 0x003f, 0xf17d, 0xe4a9, 0x003f,
+ 0xf439, 0xf354, 0x003f, 0x003f, 0xec72, 0xefef, 0x003f, 0x003f,
+ 0x003f, 0xf7d1, 0x003f, 0x003f, 0xefd9, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xef6a, 0xe853, 0xe854, 0xe555, 0x003f, 0xeefa,
+ /* 0x6600 .. 0x66ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1e0, 0xecb0,
+ 0x003f, 0xe8b2, 0xf8c4, 0x003f, 0xf4e3, 0x003f, 0xe7a5, 0xf8e7,
+ 0xe9cb, 0xe364, 0x003f, 0xee46, 0xeb3e, 0xf9da, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe945, 0xeb9a,
+ 0xeeb1, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5f0, 0x003f, 0xe76c,
+ 0xf1c6, 0x003f, 0x003f, 0x003f, 0x003f, 0xebb9, 0x003f, 0xecc0,
+ 0xf7c0, 0xeff0, 0x003f, 0x003f, 0xe7db, 0x003f, 0xf4e4, 0x003f,
+ 0x003f, 0x003f, 0xe946, 0xed79, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf355, 0xecc1, 0xf95c, 0xf95d, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf45b, 0x003f, 0xf45c, 0x003f, 0x003f, 0x003f, 0xed5f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf3db, 0x003f, 0xf869, 0x003f, 0xf3b8, 0xf9f5, 0xeb9b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xeefb, 0xf947, 0xf974, 0xf8c5,
+ 0xece7, 0xe749, 0x003f, 0xf69a, 0x003f, 0x003f, 0xe955, 0xe168,
+ 0x003f, 0x003f, 0x003f, 0xeb3f, 0xf577, 0x003f, 0xf2dc, 0xe2fc,
+ 0xf2dd, 0x003f, 0xf43a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf9be, 0x003f, 0x003f, 0xe03c,
+ 0xf9bb, 0xf9c7, 0x003f, 0x003f, 0x003f, 0x003f, 0xeeb2, 0x003f,
+ 0xf061, 0xeaf4, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3ec, 0xed6e,
+ 0xedc3, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7a6, 0x003f, 0x003f,
+ 0xe1bc, 0x003f, 0xf4e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf1d5, 0x003f, 0x003f, 0xe7ba, 0x003f,
+ 0x003f, 0x003f, 0xf1e7, 0xf8b5, 0xf77c, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeb77, 0x003f, 0xe169, 0x003f, 0x003f, 0xe556, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xeea5, 0x003f, 0xe5f5, 0xe4be,
+ 0x003f, 0xf99d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed94, 0x003f,
+ 0x003f, 0xeaf5, 0x003f, 0x003f, 0xef9a, 0xf77d, 0x003f, 0x003f,
+ 0xe257, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9f6, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xef68, 0x003f, 0xe1d8, 0xeed6, 0xe16a, 0x003f, 0x003f, 0xe073,
+ 0xeaf6, 0xf357, 0xf356, 0x003f, 0xe74a, 0x003f, 0xf3f4, 0xf592,
+ /* 0x6700 .. 0x67ff */
+ 0xf5cc, 0x003f, 0x003f, 0xf975, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf055, 0xf095, 0x003f, 0xe9db, 0x003f, 0xe967, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xea9f, 0xf49b, 0x003f, 0xe5c7,
+ 0x003f, 0x003f, 0x003f, 0xe760, 0x003f, 0xf358, 0xe3a1, 0xe3a2,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7d4, 0xe678,
+ 0xe7ca, 0x003f, 0xe841, 0xe757, 0xe972, 0xf4ce, 0xf5f4, 0x003f,
+ 0x003f, 0xf3b9, 0x003f, 0x003f, 0xe863, 0x003f, 0xf67a, 0x003f,
+ 0x003f, 0x003f, 0xe2f5, 0x003f, 0x003f, 0xf9ae, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe062, 0x003f,
+ 0x003f, 0xeab4, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6dd, 0xf84a,
+ 0xf237, 0xf5bd, 0x003f, 0xf797, 0x003f, 0x003f, 0xf1e8, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe571, 0x003f, 0xe3a3, 0xebd6,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7f8, 0x003f, 0xe8ca,
+ 0xe0f9, 0xe564, 0x003f, 0xe7dc, 0x003f, 0xf24e, 0x003f, 0xf6ed,
+ 0x003f, 0x003f, 0x003f, 0xe47e, 0x003f, 0x003f, 0xebe6, 0xf6f9,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9ed,
+ 0x003f, 0xef6b, 0x003f, 0xe8b3, 0x003f, 0x003f, 0x003f, 0xe3f7,
+ 0xeb40, 0x003f, 0x003f, 0xe572, 0x003f, 0xf667, 0x003f, 0xe6f9,
+ 0x003f, 0x003f, 0xe76d, 0x003f, 0xe1fd, 0xf43b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1bd,
+ 0xf752, 0x003f, 0x003f, 0xf43c, 0x003f, 0x003f, 0xe03d, 0xe03e,
+ 0xe2ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xecc2, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe947, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8da,
+ 0xe7bb, 0xe095, 0xf663, 0xee9a, 0xf097, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf098, 0x003f, 0x003f, 0xf69b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe2af, 0x003f, 0x003f, 0xe063, 0x003f, 0x003f, 0xe03f,
+ 0xe440, 0xf3ba, 0x003f, 0xe6b3, 0xecc3, 0xf4fd, 0xea6a, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xea6b, 0x003f, 0x003f, 0xf2de, 0x003f,
+ /* 0x6800 .. 0x68ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xec73, 0xf29d, 0x003f, 0x003f, 0xeaf7, 0xe6ca,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe278, 0xe8db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf3bb, 0x003f, 0x003f, 0x003f, 0x003f, 0xeff1,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf847, 0xe356, 0x003f, 0x003f, 0xe13b, 0xf238, 0x003f, 0x003f,
+ 0xe0fa, 0xf7f9, 0xe19f, 0xe4fe, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xed60, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf47e, 0x003f,
+ 0xe565, 0xeacd, 0x003f, 0xf948, 0xe3d0, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf45d, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6d2, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe064,
+ 0x003f, 0xe5d9, 0x003f, 0x003f, 0x003f, 0xe76e, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1d9,
+ 0x003f, 0x003f, 0x003f, 0xf239, 0xf64c, 0x003f, 0x003f, 0xe16b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf359, 0x003f, 0xf99e,
+ 0x003f, 0xef59, 0xf5a0, 0x003f, 0x003f, 0x003f, 0x003f, 0xeefc,
+ 0xe6de, 0x003f, 0x003f, 0x003f, 0x003f, 0xea6c, 0x003f, 0xf33c,
+ 0xe1a0, 0xe1e1, 0x003f, 0xebba, 0x003f, 0xe8ef, 0xe842, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a5, 0xe948, 0x003f, 0x003f,
+ 0x003f, 0xe798, 0x003f, 0xe3a4, 0x003f, 0xe1e2, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe97a, 0x003f, 0x003f, 0xf399, 0x003f, 0xf35a,
+ 0xe34e, 0x003f, 0xe9dc, 0x003f, 0x003f, 0x003f, 0x003f, 0xe566,
+ 0xe4d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1d0,
+ 0xe1a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeab5, 0x003f,
+ 0x003f, 0x003f, 0xeaf8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe531, 0xe242, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x6900 .. 0x69ff */
+ 0xef5a, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0f5, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xecd5, 0xf5d0, 0x003f,
+ 0x003f, 0x003f, 0xf5a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7a7,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xedab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee5b, 0x003f, 0xf5f1,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xedc5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf7a3, 0xeb6b, 0xf67b, 0x003f, 0xe0f1,
+ 0x003f, 0xe7ea, 0xf5a2, 0x003f, 0x003f, 0x003f, 0xe6d1, 0x003f,
+ 0xe3f8, 0xf09a, 0xf09b, 0xe843, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf2df, 0x003f, 0x003f, 0xf3ef, 0x003f, 0xedf6, 0xf24f, 0xec74,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe34f, 0x003f, 0xf83c,
+ 0xf5d1, 0xeeb3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefbe, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf45e, 0xe8b4, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf95e, 0x003f, 0xe9ee,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeeb4, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe6b4, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf6b4, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe1be, 0x003f, 0xe879, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe2b0, 0xf6d9, 0xf4e6, 0x003f, 0x003f,
+ 0xe269, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe23a, 0x003f, 0xe0c8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe337, 0x003f, 0xf35b, 0x003f, 0xe357,
+ /* 0x6a00 .. 0x6aff */
+ 0x003f, 0x003f, 0xed55, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe8e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe5da, 0x003f, 0xe6a7, 0x003f, 0x003f, 0x003f, 0xf250,
+ 0x003f, 0xf798, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5d2, 0xf1e9,
+ 0x003f, 0xe7bc, 0x003f, 0xedc6, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5a3, 0x003f, 0x003f,
+ 0xe864, 0xec37, 0xf8fc, 0x003f, 0x003f, 0xf3dc, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe096, 0x003f, 0x003f, 0x003f,
+ 0xef9c, 0x003f, 0x003f, 0xe279, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeff8, 0xec75, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe349, 0xe594, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a6,
+ 0x003f, 0xeace, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf996, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe4aa, 0x003f, 0x003f, 0x003f, 0xe13c, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf2e0, 0x003f, 0x003f, 0x003f, 0xede5, 0xe365, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8fc,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf976, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe0fe, 0xf1ea, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xea41, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf7e3, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe532, 0xe2f6, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe660, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe5ea, 0xf3ee, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf85b, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeda1, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x6b00 .. 0x6bff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe5b1, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe2ed, 0x003f, 0xf1eb, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe5b2, 0x003f, 0x003f, 0x003f, 0xe5bc, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf9e2, 0xf4ad, 0x003f, 0xf9db, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xefb0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe3a7, 0x003f, 0x003f, 0xf9e3, 0xe243, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9e4, 0xf85e,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe040, 0x003f, 0xf6a7, 0x003f,
+ 0xe2b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee32,
+ 0x003f, 0xf946, 0xf43d, 0xf2e1, 0xf4ae, 0xe956, 0xe7eb, 0x003f,
+ 0x003f, 0x003f, 0xef70, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeba8, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5f6,
+ 0xe2fd, 0x003f, 0x003f, 0xea6d, 0x003f, 0x003f, 0x003f, 0xe7d1,
+ 0x003f, 0x003f, 0x003f, 0xed7a, 0xf45f, 0x003f, 0xf6bf, 0x003f,
+ 0x003f, 0xec76, 0xec38, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xecd6, 0x003f,
+ 0xf1d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeff9, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe641, 0xea42,
+ 0x003f, 0x003f, 0xeb78, 0x003f, 0x003f, 0xe4ab, 0x003f, 0xf0dc,
+ 0x003f, 0x003f, 0xeaaf, 0x003f, 0xe053, 0x003f, 0x003f, 0xf29e,
+ 0x003f, 0xf9c3, 0x003f, 0x003f, 0x003f, 0xf0f6, 0xe2b2, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe7ec, 0x003f, 0xe7bd, 0x003f, 0xe76f,
+ 0x003f, 0x003f, 0xe548, 0xf0be, 0xe9ef, 0x003f, 0xe9f0, 0xe9f1,
+ 0xe9f2, 0x003f, 0x003f, 0xe7be, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf8c6, 0xe2b3, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x6c00 .. 0x6cff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf29f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed3b,
+ 0x003f, 0xe855, 0x003f, 0xe77c, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe3a8, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xec39, 0x003f, 0x003f, 0xea4c,
+ 0xeeb5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8f0, 0x003f,
+ 0xf2e2, 0xf3f0, 0xe2b4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8f1, 0x003f,
+ 0xeb41, 0x003f, 0x003f, 0x003f, 0x003f, 0xeaa5, 0x003f, 0xf7d2,
+ 0x003f, 0x003f, 0xeefd, 0x003f, 0x003f, 0xee33, 0xf8f1, 0xe0b0,
+ 0xf43e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe1e7, 0x003f, 0xef6c, 0x003f, 0x003f, 0xeed7, 0x003f, 0x003f,
+ 0xf6c0, 0x003f, 0xe373, 0x003f, 0x003f, 0x003f, 0xe831, 0x003f,
+ 0x003f, 0x003f, 0xe14d, 0x003f, 0x003f, 0xe3a9, 0xe9cc, 0x003f,
+ 0x003f, 0xecfe, 0xe3aa, 0xef3a, 0x003f, 0xf046, 0xf7fa, 0xee5c,
+ 0xf668, 0x003f, 0x003f, 0x003f, 0xe557, 0x003f, 0x003f, 0x003f,
+ 0xe7cb, 0x003f, 0xe7d2, 0xe4cb, 0xe799, 0xe839, 0xf5f8, 0x003f,
+ 0x003f, 0xea6e, 0xf43f, 0xf739, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe758, 0x003f, 0x003f, 0xf251, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf7c1, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe9f3, 0xf09c, 0x003f, 0xf64d, 0xebbb, 0xe1bf, 0xf564, 0xee5d,
+ 0x003f, 0xf95f, 0xf8a2, 0x003f, 0xeb6c, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf54b, 0xe865, 0x003f, 0xf7b2, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf8f2, 0x003f, 0xe8f6, 0x003f, 0xea6f,
+ 0x003f, 0x003f, 0x003f, 0xe8f2, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf76c, 0xf6ee, 0xf0e8, 0x003f, 0xe49c, 0x003f, 0x003f,
+ 0xf3bc, 0x003f, 0x003f, 0xf86a, 0x003f, 0x003f, 0xe87a, 0xe856,
+ 0xf6c1, 0x003f, 0x003f, 0xeeb6, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x6d00 .. 0x6dff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xedc7, 0xe63c, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe957, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeba9,
+ 0x003f, 0xec3a, 0x003f, 0xe5a6, 0x003f, 0x003f, 0xe567, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf460, 0x003f, 0xf09d,
+ 0x003f, 0xeb6d, 0xf8f3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf3bd, 0x003f, 0x003f, 0xec77, 0xf9d7, 0x003f,
+ 0xe258, 0xf047, 0x003f, 0xf950, 0x003f, 0xf9e7, 0xf6ef, 0x003f,
+ 0x003f, 0xe6b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf2ba, 0xf3dd, 0x003f, 0xea43, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xef5b, 0x003f, 0x003f, 0xf76d, 0x003f,
+ 0x003f, 0xf8c7, 0xe5c8, 0x003f, 0xe6df, 0x003f, 0xe9a9, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xefb1, 0x003f, 0x003f, 0xf83d,
+ 0xf669, 0xf896, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf73a,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee7e, 0x003f, 0xe16c,
+ 0xebbc, 0xeb91, 0x003f, 0x003f, 0xefbf, 0xf99f, 0xee5e, 0x003f,
+ 0x003f, 0xebd7, 0x003f, 0xee5f, 0x003f, 0xf593, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed95,
+ 0x003f, 0x003f, 0xed9d, 0x003f, 0x003f, 0xf7e4, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf2e3, 0x003f, 0x003f, 0xe2ee, 0xf64e, 0xeb42, 0xf9a0, 0xe3ab,
+ 0x003f, 0x003f, 0x003f, 0xe6fa, 0x003f, 0x003f, 0x003f, 0xf8c8,
+ 0x003f, 0xec67, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe533, 0xf39a, 0xe6a8, 0x003f, 0x003f, 0x003f, 0xebe7, 0x003f,
+ 0x003f, 0xe4bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf2e4, 0x003f, 0xe6c5, 0xf0e2, 0x003f, 0x003f, 0xf977, 0x003f,
+ 0x003f, 0xed32, 0x003f, 0xec78, 0x003f, 0xee60, 0x003f, 0xf8e8,
+ 0xf578, 0xedf4, 0xf54c, 0xf565, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x6e00 .. 0x6eff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeab6,
+ 0x003f, 0xf949, 0xf252, 0xe097, 0x003f, 0x003f, 0x003f, 0xf2e5,
+ 0xe0e2, 0xe534, 0x003f, 0xea70, 0xe89f, 0xed56, 0xef4e, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeb6e, 0xf644, 0xf062, 0x003f, 0xf7fb,
+ 0x003f, 0x003f, 0xeb52, 0x003f, 0xe074, 0x003f, 0xeeb7, 0x003f,
+ 0xf09f, 0x003f, 0xe7dd, 0x003f, 0xe844, 0xf23a, 0xf8e9, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe8cb, 0xe845, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf3be, 0x003f, 0x003f, 0xe4ac, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8c9, 0x003f,
+ 0xeacf, 0x003f, 0x003f, 0xe4c0, 0xecd7, 0x003f, 0xf2e6, 0xf960,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefc0,
+ 0x003f, 0x003f, 0x003f, 0xf5d3, 0x003f, 0x003f, 0xf16c, 0xf6b7,
+ 0x003f, 0x003f, 0xf048, 0xe3f9, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe958, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf049, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3de, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe6b6, 0xe2b5, 0x003f, 0xe7a8,
+ 0x003f, 0x003f, 0xf17e, 0x003f, 0x003f, 0xe9aa, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe1a2, 0xef3e, 0x003f, 0x003f, 0x003f, 0xebbd,
+ 0x003f, 0xf461, 0x003f, 0x003f, 0x003f, 0x003f, 0xefc1, 0x003f,
+ 0x003f, 0x003f, 0xe49e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe8b5, 0x003f, 0xf4e7, 0xe7a0, 0x003f, 0x003f,
+ 0x003f, 0xf961, 0x003f, 0xf1b2, 0xf53f, 0x003f, 0xf8a3, 0x003f,
+ 0x003f, 0xf951, 0x003f, 0xf23b, 0xe535, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf594,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf269, 0x003f, 0x003f, 0x003f,
+ 0xf8ca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1e3, 0xe74b,
+ /* 0x6f00 .. 0x6fff */
+ 0x003f, 0xeddb, 0xf799, 0x003f, 0x003f, 0x003f, 0xf664, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6a9,
+ 0x003f, 0xe0c9, 0x003f, 0x003f, 0xee61, 0xf35c, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe73e, 0x003f, 0xf7d3, 0xe5fe, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe74c, 0xf440, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xec3b, 0xf4e8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf2c2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1ec,
+ 0x003f, 0xeeb8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe8a0, 0x003f, 0x003f, 0xe14e, 0x003f, 0x003f, 0xf49e,
+ 0xe87b, 0x003f, 0xec68, 0xf1d6, 0x003f, 0x003f, 0xe661, 0xeb43,
+ 0x003f, 0x003f, 0xf962, 0x003f, 0xf0c8, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4c1, 0xf35d, 0x003f,
+ 0xe2f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf1d2, 0x003f, 0xe568, 0xe959, 0xe6f1, 0x003f,
+ 0x003f, 0xeabb, 0x003f, 0x003f, 0xf4a5, 0x003f, 0x003f, 0x003f,
+ 0xf55d, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3bf, 0xf741, 0x003f,
+ 0xeffa, 0x003f, 0x003f, 0x003f, 0xf8cb, 0x003f, 0x003f, 0xe065,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf7d4, 0xf6ca, 0x003f, 0x003f, 0xe658,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf978, 0xf4bd,
+ 0x003f, 0xf2a0, 0x003f, 0xeefe, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe4c2, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4b6, 0x003f,
+ 0xe13d, 0xf69c, 0xe642, 0xe468, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeed8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeca5, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeeb9, 0x003f, 0x003f, 0x003f, 0x003f, 0xf33d,
+ 0xf8cc, 0xf0a1, 0x003f, 0x003f, 0xe536, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf8cd, 0x003f, 0xe5bd, 0xf3df, 0x003f, 0x003f, 0xf69d,
+ 0x003f, 0xea44, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5eb, 0x003f,
+ /* 0x7000 .. 0x70ff */
+ 0x003f, 0xedc8, 0x003f, 0x003f, 0x003f, 0xf8a4, 0xe549, 0x003f,
+ 0x003f, 0xea71, 0x003f, 0xed33, 0x003f, 0x003f, 0x003f, 0xe6b7,
+ 0x003f, 0xf77e, 0x003f, 0x003f, 0x003f, 0xea45, 0x003f, 0x003f,
+ 0xe662, 0x003f, 0xf7d5, 0xeeba, 0xf0d5, 0xe5f7, 0xf2e7, 0xebbe,
+ 0x003f, 0x003f, 0x003f, 0xf83e, 0x003f, 0x003f, 0x003f, 0xe679,
+ 0xe67e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeebb,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf15b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5b3, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe244, 0x003f, 0x003f, 0x003f,
+ 0xf8a5, 0xebee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf6a8, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8ce, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe74d, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf8fd, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf979, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe2b6, 0x003f, 0x003f, 0x003f, 0xf1c7, 0xf23c, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe16d, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf637, 0x003f, 0x003f, 0x003f, 0xee9c, 0x003f,
+ 0x003f, 0x003f, 0xf5a4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf9dc, 0xf1b3, 0xe259, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf2e8, 0x003f, 0x003f, 0xebbf, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf86b, 0xe0e3, 0xf6a9, 0x003f, 0xf8a6,
+ 0x003f, 0x003f, 0x003f, 0xe949, 0x003f, 0x003f, 0x003f, 0xf3c0,
+ 0xf1c8, 0xf2c3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe63d, 0x003f, 0x003f, 0xf9ce, 0x003f, 0x003f, 0x003f, 0xef31,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf8f4, 0xe5a7, 0x003f, 0x003f, 0x003f, 0xf3f6, 0x003f, 0xee63,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe16e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf742, 0x003f, 0x003f, 0x003f, 0xe97b, 0x003f, 0x003f,
+ /* 0x7100 .. 0x71ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf9b6, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xedea, 0x003f, 0x003f, 0xf3e0, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe8cc, 0xe9cd, 0x003f, 0x003f, 0x003f, 0xe558, 0x003f,
+ 0x003f, 0xe7ed, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5a5, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xee9d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee64, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9c8,
+ 0x003f, 0xe631, 0xf9bf, 0x003f, 0xf963, 0x003f, 0xf2a1, 0x003f,
+ 0xeebc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3ee, 0x003f,
+ 0x003f, 0xee65, 0x003f, 0x003f, 0xeff2, 0x003f, 0xeab0, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe770, 0xf94a, 0xf9af, 0xf35e,
+ 0x003f, 0xe8e1, 0x003f, 0x003f, 0xedc9, 0x003f, 0xf1b4, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeb53, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xecd8, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeffb, 0xf038, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9b7,
+ 0x003f, 0x003f, 0xf8a7, 0x003f, 0xefc2, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf9f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xec69,
+ 0x003f, 0x003f, 0xe97c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xef32, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xee92, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf9f8, 0xf9f9, 0x003f, 0x003f, 0x003f, 0xf64f, 0x003f,
+ 0x003f, 0xeea7, 0x003f, 0xee67, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe595, 0xe559, 0x003f, 0x003f, 0x003f, 0x003f, 0xe69c, 0x003f,
+ 0xe6f2, 0x003f, 0xebc0, 0x003f, 0xe8e2, 0xee68, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeebd,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf35f, 0xf4be, 0xec3c,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5b7, 0xeb92, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf9b8, 0xece8, 0x003f, 0xe537, 0xef9e,
+ /* 0x7200 .. 0x72ff */
+ 0xf862, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf791, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe663, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe5b4, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf360, 0x003f, 0xf6f0, 0xf243, 0x003f, 0x003f,
+ 0xf04a, 0x003f, 0xf063, 0x003f, 0x003f, 0xf1c9, 0xe9ab, 0x003f,
+ 0x003f, 0x003f, 0xedac, 0xf9a1, 0x003f, 0xead0, 0xf143, 0x003f,
+ 0xead1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1ed, 0xf748,
+ 0xf6fa, 0x003f, 0x003f, 0x003f, 0xf73b, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf570, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe54a, 0xed43, 0x003f, 0xefda, 0x003f, 0xea46, 0x003f, 0xe7bf,
+ 0x003f, 0xe7c0, 0xe691, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7cc,
+ 0x003f, 0xe83a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeae5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf6e5, 0x003f, 0x003f, 0x003f, 0xe142, 0x003f, 0x003f,
+ 0xeaf9, 0xe6e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe54b, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9fa,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe143, 0x003f, 0x003f, 0xe8f3,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xead2, 0x003f, 0xe25a, 0x003f, 0xf26a, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed74, 0x003f,
+ 0xf8cf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2b7,
+ 0x003f, 0xf253, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe27a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xec3d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe6e1, 0xf897, 0x003f, 0x003f, 0xe5c9, 0xf73c, 0x003f, 0x003f,
+ /* 0x7300 .. 0x73ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeed9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4e9, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe77d, 0xecc4, 0xf393, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef75, 0x003f, 0x003f,
+ 0x003f, 0xeb9c, 0xf254, 0xe7de, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0a2, 0xf0a3,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf952, 0xf04b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xef3b, 0xea72, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf1ef, 0x003f, 0xef33, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2f1,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe54c, 0x003f, 0xf97a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xeebe, 0x003f, 0xf994, 0x003f, 0x003f, 0xe644, 0x003f, 0x003f,
+ 0xec3e, 0x003f, 0xe4b7, 0xf85c, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf86c, 0x003f, 0xf1b5, 0xebe3,
+ 0x003f, 0xef3c, 0x003f, 0xef6d, 0x003f, 0x003f, 0xf2e9, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf54d, 0x003f, 0xe2b8, 0xefdb,
+ 0xe3ac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe857,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0c9,
+ 0x003f, 0xef5c, 0x003f, 0x003f, 0x003f, 0xea47, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe64c, 0xe4e5, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf86d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe866, 0x003f, 0xe041, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe858, 0xeaa6, 0x003f, 0xf7b3, 0xf462, 0x003f, 0xe054,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe25b, 0x003f,
+ 0x003f, 0xe1f5, 0x003f, 0x003f, 0x003f, 0xf9b0, 0xe5a8, 0x003f,
+ 0xf3c1, 0x003f, 0x003f, 0xec79, 0xe95a, 0xf144, 0xf850, 0x003f,
+ 0x003f, 0xf8a8, 0xe338, 0x003f, 0x003f, 0xe87c, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7ee,
+ 0x003f, 0xeb9d, 0x003f, 0x003f, 0x003f, 0xf2ea, 0xf86e, 0x003f,
+ /* 0x7400 .. 0x74ff */
+ 0x003f, 0xeb54, 0x003f, 0xe2b9, 0x003f, 0xe5ca, 0xe6e2, 0xec3f,
+ 0x003f, 0xe6b8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xef5d, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf66a, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf2a2, 0xec6a, 0xf69e, 0x003f, 0x003f, 0xf8d0, 0xe3ad, 0x003f,
+ 0xe1e4, 0x003f, 0xe3ae, 0xe97d, 0xef5e, 0x003f, 0xf39b, 0xe245,
+ 0xee9e, 0x003f, 0x003f, 0xe6fb, 0xe366, 0xe9f5, 0xf6f1, 0x003f,
+ 0xf69f, 0x003f, 0xe8f7, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8ea,
+ 0xefdc, 0xe7c1, 0x003f, 0xf5f2, 0xeb55, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf064, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7c2, 0x003f, 0xf04c,
+ 0x003f, 0xe455, 0xf8d1, 0xeec0, 0xf0a5, 0x003f, 0xeafa, 0xeca2,
+ 0xe6b9, 0x003f, 0xefc3, 0x003f, 0xef9f, 0xef3f, 0x003f, 0x003f,
+ 0xf463, 0xf8a9, 0xe735, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5cb,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe358, 0x003f,
+ 0x003f, 0x003f, 0xe3af, 0xe6e3, 0x003f, 0x003f, 0x003f, 0xeb56,
+ 0x003f, 0xe632, 0x003f, 0xf1f0, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe6f3, 0x003f, 0x003f, 0x003f, 0xf964, 0x003f, 0xe867, 0xe16f,
+ 0x003f, 0xf464, 0x003f, 0xe3b0, 0x003f, 0xe170, 0x003f, 0xe8fd,
+ 0xf4bf, 0x003f, 0xf361, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf94b, 0x003f, 0xec40, 0x003f, 0x003f, 0xee35, 0x003f, 0x003f,
+ 0x003f, 0xec6b, 0x003f, 0x003f, 0x003f, 0xeade, 0x003f, 0xeb57,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf491, 0x003f,
+ 0x003f, 0x003f, 0xe171, 0x003f, 0x003f, 0x003f, 0x003f, 0xe67a,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xeec2, 0x003f, 0x003f, 0x003f,
+ 0xe246, 0x003f, 0xf4c0, 0x003f, 0xe1fe, 0x003f, 0x003f, 0x003f,
+ 0xf8d2, 0x003f, 0xf79a, 0xf6fb, 0x003f, 0x003f, 0xef4f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef47, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1b6,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x7500 .. 0x75ff */
+ 0x003f, 0xe94a, 0x003f, 0x003f, 0xe144, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf3f7, 0x003f, 0x003f, 0x003f, 0xef48, 0x003f, 0x003f,
+ 0xe098, 0x003f, 0xed34, 0xf566, 0x003f, 0x003f, 0x003f, 0xeae6,
+ 0x003f, 0x003f, 0x003f, 0xeaa7, 0x003f, 0xeae7, 0xebc1, 0x003f,
+ 0xefc4, 0x003f, 0x003f, 0xe95b, 0xefc5, 0x003f, 0x003f, 0x003f,
+ 0xf2a3, 0xf0a6, 0xe0a3, 0xece9, 0x003f, 0x003f, 0x003f, 0xe3fb,
+ 0xf2a4, 0x003f, 0xf2eb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe344,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe1a3, 0x003f, 0x003f, 0xef76,
+ 0x003f, 0xf2a5, 0x003f, 0xe4cc, 0xe87d, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe6ba, 0x003f, 0xf465, 0xf5e5, 0xe7ef, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf7b4, 0x003f, 0x003f, 0xe5d4, 0xf9cf, 0x003f,
+ 0x003f, 0x003f, 0xe8e3, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3e1,
+ 0xf146, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8fe, 0xe4d7, 0x003f,
+ 0xe3b1, 0x003f, 0xe0b1, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3b2,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0b2, 0xf3c2,
+ 0x003f, 0x003f, 0xf571, 0xf7b5, 0x003f, 0x003f, 0xebc3, 0xebc2,
+ 0x003f, 0xf0f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeaa8, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0ca, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xee49, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf76e, 0xf7aa, 0xe099, 0x003f, 0xf1b7, 0x003f, 0x003f,
+ 0xe4b8, 0xf466, 0x003f, 0x003f, 0xe569, 0xf255, 0xf492, 0x003f,
+ 0x003f, 0x003f, 0xe042, 0x003f, 0x003f, 0xe94b, 0x003f, 0xf3f8,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf147, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xedca, 0x003f, 0xf650, 0xf9dd, 0x003f, 0x003f,
+ 0xe573, 0xe172, 0x003f, 0xf6d4, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe6e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe4c3, 0x003f, 0xe736, 0x003f, 0xf651, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe9f6, 0x003f, 0xe1c0, 0x003f, 0x003f, 0x003f,
+ /* 0x7600 .. 0x76ff */
+ 0xeddc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedcb, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xebc4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef40,
+ 0xf540, 0xf4ea, 0xe87e, 0x003f, 0xe6bb, 0x003f, 0xec41, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe6aa, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe69d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xed6f, 0x003f, 0xe066, 0x003f,
+ 0x003f, 0x003f, 0xf0a8, 0x003f, 0x003f, 0x003f, 0xe8fe, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf652, 0x003f, 0x003f, 0xf2bb, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe59f, 0x003f, 0x003f, 0xeb58, 0x003f, 0x003f, 0x003f,
+ 0xef49, 0x003f, 0xf2a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe1a4, 0x003f, 0x003f, 0xe596, 0xe8a1, 0xe8dc, 0xe8dd, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf26c, 0x003f, 0xe0cb, 0xf965,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe27b, 0x003f,
+ 0xe1c1, 0x003f, 0x003f, 0xf8d3, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7ab, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf5d4, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7a9,
+ 0x003f, 0x003f, 0xefdd, 0xe8cd, 0x003f, 0x003f, 0xe9ce, 0x003f,
+ 0xeec3, 0x003f, 0xf15c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf7ec, 0x003f, 0x003f, 0x003f, 0xe0cc, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeb9e, 0xe538, 0x003f, 0xf1d3, 0xe791,
+ 0x003f, 0xf467, 0x003f, 0xe09a, 0xe891, 0x003f, 0x003f, 0xe664,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7cd, 0x003f,
+ 0x003f, 0x003f, 0xe77e, 0x003f, 0xf451, 0x003f, 0x003f, 0x003f,
+ 0xead3, 0x003f, 0x003f, 0x003f, 0xe892, 0x003f, 0xec7a, 0x003f,
+ /* 0x7700 .. 0x77ff */
+ 0x003f, 0xeb9f, 0x003f, 0x003f, 0xe79a, 0x003f, 0x003f, 0x003f,
+ 0xf6af, 0xe846, 0x003f, 0xe067, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf468, 0x003f,
+ 0xe79b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf86f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2ef,
+ 0xe7c2, 0x003f, 0xf362, 0x003f, 0xed61, 0x003f, 0x003f, 0x003f,
+ 0xf4b7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf870, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf2ec, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xec42, 0x003f, 0xe54d, 0x003f, 0x003f, 0xe7ce, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf572, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe539, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1c2, 0xeeda,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf469, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe7aa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe74e, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe93d, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xec7b, 0xe69e, 0x003f, 0x003f,
+ 0xe09b, 0x003f, 0x003f, 0xe56a, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf567, 0xe131, 0x003f, 0x003f, 0xe2ba,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5b8,
+ 0x003f, 0x003f, 0x003f, 0xe7c3, 0xe378, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xecc5, 0xf0f8, 0x003f, 0xf441, 0x003f, 0x003f,
+ 0x003f, 0xe2bb, 0x003f, 0x003f, 0x003f, 0xe4ad, 0xef71, 0xe27c,
+ 0x003f, 0x003f, 0x003f, 0xeb44, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x7800 .. 0x78ff */
+ 0x003f, 0x003f, 0xea73, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe9f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf442, 0xf4f6, 0xf66b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe6fe, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf76f, 0x003f, 0xf6f2, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe339, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee6a,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5a6, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe6bc, 0xe173, 0x003f, 0x003f, 0xee6b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe9dd, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe3b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2ed,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe66e, 0xed96, 0xebef, 0x003f,
+ 0x003f, 0xe9f8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef5f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe075, 0x003f, 0x003f, 0x003f, 0xe931,
+ 0x003f, 0xeb45, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf93c, 0xf93d, 0xe737, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf1b8, 0x003f, 0x003f, 0x003f, 0xe8b6, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe692, 0xf4af, 0x003f, 0x003f, 0xe1a5, 0x003f,
+ 0xe893, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe738, 0x003f, 0x003f, 0x003f, 0xe174, 0x003f, 0x003f, 0xe3b4,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe068, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe894, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x7900 .. 0x79ff */
+ 0x003f, 0xf5a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5a8, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee36, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe5ec, 0xe5f8, 0xe895, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xecc6, 0x003f, 0x003f, 0x003f, 0xea74, 0x003f,
+ 0xea75, 0xe3b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3b6,
+ 0xe3b7, 0xf443, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xefde, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf363, 0xf444,
+ 0x003f, 0x003f, 0xf364, 0xe0e4, 0xf8d4, 0xf5e6, 0xecea, 0x003f,
+ 0xea76, 0x003f, 0x003f, 0x003f, 0x003f, 0xead4, 0x003f, 0x003f,
+ 0xf79b, 0x003f, 0x003f, 0x003f, 0x003f, 0xf33e, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe3b8, 0x003f, 0x003f, 0x003f, 0x003f, 0xe66f,
+ 0x003f, 0xe367, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf931, 0xf2ee, 0xe968,
+ 0x003f, 0xefdf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeddd, 0xf9fb,
+ 0x003f, 0x003f, 0xeb59, 0x003f, 0x003f, 0x003f, 0xe659, 0x003f,
+ 0x003f, 0xe53a, 0x003f, 0xedcc, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xefe0, 0x003f, 0x003f, 0x003f, 0xe368, 0xf932, 0xe54e,
+ 0xec43, 0xea77, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe94c, 0xe446, 0xf5d5, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe231, 0xf5a9, 0x003f, 0x003f, 0xe9f9, 0x003f, 0x003f,
+ 0xe9fa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf365,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf66f, 0x003f, 0xf46a, 0xed7b,
+ 0x003f, 0xf493, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf149, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x7a00 .. 0x7aff */
+ 0xf9fc, 0x003f, 0x003f, 0x003f, 0x003f, 0xebaa, 0x003f, 0x003f,
+ 0xe069, 0x003f, 0x003f, 0xf2ef, 0x003f, 0xf5aa, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf19b, 0x003f, 0x003f, 0xf73d,
+ 0x003f, 0xf452, 0xf653, 0x003f, 0xe6d2, 0x003f, 0x003f, 0xf7a2,
+ 0xf366, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf39c, 0x003f,
+ 0x003f, 0xf670, 0x003f, 0x003f, 0x003f, 0x003f, 0xeff3, 0xf453,
+ 0x003f, 0x003f, 0x003f, 0xe53b, 0xe043, 0xe1a6, 0x003f, 0xe1c3,
+ 0xe1da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7cf, 0x003f,
+ 0x003f, 0xf654, 0x003f, 0x003f, 0x003f, 0xf26d, 0xeec4, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xec44,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeae2, 0xeedb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xef41, 0x003f, 0xf93e, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xedcd, 0x003f, 0x003f, 0x003f, 0xf87b, 0x003f, 0xe2bc, 0x003f,
+ 0x003f, 0xe2e2, 0xe1f6, 0x003f, 0x003f, 0xf2f0, 0x003f, 0xf54e,
+ 0x003f, 0xe55d, 0x003f, 0x003f, 0xf4b8, 0x003f, 0x003f, 0x003f,
+ 0xefa1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf494, 0xf4eb, 0x003f, 0xf367, 0x003f, 0x003f,
+ 0xe2d7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2df,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xef50, 0xef51, 0x003f, 0x003f, 0x003f, 0xe2e3, 0xefa2,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe33a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf4c1, 0xe33b, 0x003f, 0xe574,
+ 0x003f, 0x003f, 0xf2bc, 0xe731, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7df,
+ 0x003f, 0xf4d7, 0x003f, 0x003f, 0x003f, 0xe94d, 0x003f, 0xe175,
+ 0xf1f1, 0x003f, 0x003f, 0xf3e2, 0x003f, 0xe56b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xec45, 0x003f, 0x003f, 0xe076, 0x003f, 0xe4ae,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe176, 0x003f,
+ 0x003f, 0xf3d3, 0xf5e7, 0x003f, 0x003f, 0x003f, 0x003f, 0xe06a,
+ /* 0x7b00 .. 0x7bff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8ee,
+ 0x003f, 0xebc5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeae9, 0x003f, 0xf26e, 0x003f, 0x003f, 0xf6c2, 0x003f,
+ 0xe732, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9ac, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf33f, 0xe64d, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xebab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7b6, 0x003f,
+ 0x003f, 0xe597, 0x003f, 0xe359, 0xf2a7, 0xec7c, 0x003f, 0xe8ea,
+ 0xe25c, 0xf5e8, 0xf6d5, 0x003f, 0xe4cd, 0x003f, 0xf4fe, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe345, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xeba0, 0x003f, 0xeafb, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee6d, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef34, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0cd,
+ 0x003f, 0x003f, 0x003f, 0xf2a8, 0x003f, 0x003f, 0x003f, 0xf244,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe868, 0xe3b9, 0x003f, 0xeaa9,
+ 0x003f, 0x003f, 0xf4b0, 0x003f, 0x003f, 0xe154, 0x003f, 0x003f,
+ 0x003f, 0xe247, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2a9, 0x003f, 0x003f,
+ 0x003f, 0xead5, 0x003f, 0x003f, 0xf1d7, 0x003f, 0x003f, 0x003f,
+ 0xf256, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf2bd, 0xf966, 0x003f, 0x003f, 0xe8f4, 0x003f, 0xf2aa, 0xf749,
+ 0x003f, 0xf5e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xecd9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xebc6, 0x003f, 0x003f, 0x003f, 0xe54f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xea78, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x7c00 .. 0x7cff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf37a,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf4c2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4af, 0x003f,
+ 0x003f, 0xe06b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf967,
+ 0x003f, 0x003f, 0xf1d8, 0xebc7, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf568, 0xe643, 0xe9ad,
+ 0x003f, 0x003f, 0x003f, 0xe5be, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf3c3, 0xf26f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe67b, 0x003f, 0x003f, 0x003f, 0xf569, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe6e6, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe847, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe9fb, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe9cf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe733, 0x003f, 0x003f, 0xe869, 0x003f, 0xf368,
+ 0xf2c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebd8,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3d4, 0x003f, 0xf1f2,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5db, 0x003f,
+ 0x003f, 0xe5dc, 0xf4c4, 0xe0d7, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xec46, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2f1, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf8d5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4d8, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9d0, 0xf369,
+ 0xe0b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5dd,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe1a7, 0x003f, 0x003f, 0xe33c, 0x003f,
+ /* 0x7d00 .. 0x7dff */
+ 0xe3ba, 0x003f, 0xf3c4, 0x003f, 0xedb3, 0xf8f5, 0xefe1, 0xf9e0,
+ 0xf94c, 0x003f, 0xe832, 0xe833, 0x003f, 0xe431, 0x003f, 0x003f,
+ 0xe491, 0x003f, 0x003f, 0x003f, 0xec7d, 0x003f, 0x003f, 0xea79,
+ 0xe26c, 0xf445, 0xe374, 0xe9d1, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xebc8, 0xe8b7, 0xeae3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf1b9, 0xf3c5, 0x003f, 0xf4cf, 0xe6ab,
+ 0xebac, 0x003f, 0x003f, 0xeceb, 0x003f, 0xf257, 0x003f, 0x003f,
+ 0x003f, 0xebc9, 0xe09c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf39d, 0xf871, 0xf36a, 0xe177, 0xe896, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe14f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe27d, 0x003f,
+ 0x003f, 0xe5a9, 0xf872, 0x003f, 0x003f, 0x003f, 0xe375, 0x003f,
+ 0xf0d6, 0x003f, 0xf16f, 0x003f, 0x003f, 0x003f, 0xeafc, 0x003f,
+ 0x003f, 0xf6d6, 0xea7a, 0xe0b4, 0x003f, 0x003f, 0xf2be, 0x003f,
+ 0x003f, 0xe145, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2bd,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2f2, 0xec47,
+ 0x003f, 0x003f, 0x003f, 0xe178, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf39e, 0x003f, 0x003f, 0x003f,
+ 0xe670, 0x003f, 0xf3c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xec48, 0xf0ab, 0x003f, 0x003f,
+ 0x003f, 0xe0b5, 0xe761, 0x003f, 0xf55e, 0xf4f7, 0x003f, 0x003f,
+ 0xe6c6, 0x003f, 0xe3bb, 0xf6aa, 0x003f, 0xf1ca, 0xe6d3, 0xe79c,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf655,
+ 0x003f, 0x003f, 0xe3cc, 0xe9fc, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeafd, 0x003f,
+ 0xf7e5, 0x003f, 0xeb5a, 0x003f, 0x003f, 0xf49f, 0xe4b0, 0x003f,
+ 0xf595, 0xe859, 0x003f, 0xee6e, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf74a, 0xef60, 0x003f, 0x003f, 0xe79d, 0x003f, 0x003f, 0xf065,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe633, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf656, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x7e00 .. 0x7eff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf46b, 0xed9e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef42, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe86a, 0x003f, 0xf46c, 0xf8d6, 0xefb2,
+ 0x003f, 0xf23d, 0x003f, 0xf873, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe97e, 0x003f, 0x003f, 0xf5ea, 0xee70,
+ 0x003f, 0xf39f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6ac,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5c5, 0xf270, 0x003f,
+ 0x003f, 0xe8e5, 0x003f, 0xe9de, 0x003f, 0x003f, 0xe7f0, 0xefa3,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf3f9, 0x003f, 0xf454, 0xeb5b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefa4, 0x003f,
+ 0x003f, 0xec49, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xecb1, 0xf97b, 0xe1a8, 0x003f, 0xe146, 0x003f, 0x003f,
+ 0xf36b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xee4a, 0x003f, 0x003f, 0xe1a9, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf4c3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xebd9, 0x003f, 0x003f, 0xf2ab,
+ 0x003f, 0x003f, 0x003f, 0xeec5, 0x003f, 0x003f, 0xeb79, 0x003f,
+ 0xf4c5, 0x003f, 0x003f, 0xe550, 0xe5bf, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x7f00 .. 0x7fff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9ae, 0x003f,
+ 0xf7fc, 0x003f, 0xe150, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xeda2, 0x003f, 0x003f, 0x003f,
+ 0xe248, 0x003f, 0x003f, 0x003f, 0xe762, 0xf7d6, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf3aa, 0xe261, 0x003f, 0x003f, 0xf657, 0x003f,
+ 0xe8eb, 0x003f, 0xeafe, 0x003f, 0x003f, 0xe771, 0x003f, 0xf6f3,
+ 0x003f, 0xe6e7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5a0, 0x003f, 0x003f,
+ 0xe3bc, 0x003f, 0xedcf, 0x003f, 0xe0b6, 0x003f, 0xe848, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe1c4, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe64e, 0x003f, 0x003f, 0x003f, 0xec4a, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d8, 0x003f, 0x003f, 0x003f,
+ 0xeb5c, 0xf0f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf9fd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe6e8, 0xe0d8, 0x003f, 0x003f, 0x003f, 0xefe2, 0x003f, 0x003f,
+ 0x003f, 0xef4a, 0x003f, 0x003f, 0x003f, 0xecc7, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf15d, 0x003f, 0xf15e, 0x003f, 0xe64f, 0x003f,
+ 0x003f, 0x003f, 0xeca7, 0x003f, 0xead6, 0xf9e8, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf271,
+ 0xf638, 0xe9fd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf74b, 0x003f, 0xef61, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf7d7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe27e, 0x003f, 0x003f, 0xf15f, 0x003f, 0x003f, 0x003f,
+ /* 0x8000 .. 0x80ff */
+ 0xefa5, 0xe665, 0x003f, 0xe1c5, 0x003f, 0xf1ba, 0xe3bd, 0x003f,
+ 0x003f, 0xe2be, 0x003f, 0x003f, 0xf14b, 0x003f, 0x003f, 0x003f,
+ 0xe441, 0x003f, 0x003f, 0x003f, 0x003f, 0xe179, 0x003f, 0xe7c4,
+ 0xeffc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3be, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf14c, 0x003f, 0x003f, 0xedad, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6b0, 0x003f, 0xe17a,
+ 0x003f, 0x003f, 0x003f, 0xe4c4, 0x003f, 0x003f, 0xe650, 0x003f,
+ 0x003f, 0x003f, 0xe69f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeba1, 0x003f,
+ 0xea4d, 0x003f, 0xf639, 0x003f, 0x003f, 0x003f, 0xe834, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe634,
+ 0xf5c6, 0x003f, 0xeba2, 0xefc6, 0x003f, 0x003f, 0x003f, 0xf455,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf579, 0xe67c, 0xf0d3,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf14d, 0xec6c, 0xea7b, 0xf36c,
+ 0x003f, 0xf0bf, 0x003f, 0xe6ce, 0xe3bf, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5ab, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf7fd, 0x003f, 0xe06c, 0x003f, 0x003f,
+ 0x003f, 0xe1c6, 0xf446, 0x003f, 0x003f, 0xe9fe, 0x003f, 0x003f,
+ 0x003f, 0xe147, 0xe8b8, 0x003f, 0x003f, 0x003f, 0x003f, 0xe379,
+ 0x003f, 0xe26d, 0xf0c0, 0x003f, 0xf9a2, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf75b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf066, 0xf3b0, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe8ce, 0x003f, 0xf6c3, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe8cf, 0xe0a4, 0x003f, 0x003f, 0xf770, 0x003f,
+ 0x003f, 0xf8d7, 0x003f, 0x003f, 0xf0ca, 0xeb31, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe25d, 0x003f, 0x003f, 0xe56c, 0x003f, 0x003f, 0x003f,
+ 0xf9d8, 0x003f, 0x003f, 0x003f, 0x003f, 0xe498, 0x003f, 0x003f,
+ /* 0x8100 .. 0x81ff */
+ 0x003f, 0x003f, 0xf447, 0x003f, 0x003f, 0xf898, 0xf63a, 0xf899,
+ 0xe776, 0x003f, 0xf541, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xef62, 0x003f, 0xe055, 0xe17b, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xec7e, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xec4b, 0x003f, 0xf6ad, 0x003f, 0x003f, 0x003f, 0xf771,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf4ec, 0x003f, 0x003f, 0x003f, 0x003f, 0xea31, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xed9f, 0x003f, 0x003f, 0xecec, 0x003f,
+ 0xe9af, 0xe9b0, 0x003f, 0x003f, 0xe0b7, 0xef63, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeba3, 0xe470, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf3a0, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xefa6, 0xe0f2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf1f3, 0xe969, 0xeb5d, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6da,
+ 0xe8b9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe13e, 0x003f, 0xe86b, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1c7,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe9b1, 0x003f, 0xe73f, 0xeca3, 0x003f, 0x003f,
+ 0xe291, 0x003f, 0x003f, 0xf495, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf743, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeb5e, 0x003f, 0xf5fd, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf0ec, 0x003f, 0x003f, 0xe4c5, 0xf97c, 0xe46b,
+ 0xe57b, 0x003f, 0xea32, 0x003f, 0x003f, 0x003f, 0xede6, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf340, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe5c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1f4,
+ 0x003f, 0x003f, 0x003f, 0xeced, 0x003f, 0xef52, 0x003f, 0xf1f5,
+ 0xe6fc, 0x003f, 0xf1bb, 0x003f, 0x003f, 0xf63b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf448, 0xf658, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe4e6, 0xf46d, 0xe2bf, 0x003f, 0xf0ac, 0x003f,
+ /* 0x8200 .. 0x82ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2c0, 0x003f, 0xee38,
+ 0xf9e9, 0x003f, 0xe2c1, 0x003f, 0xeb6f, 0xea7c, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeb32, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf54f, 0xec91, 0x003f, 0xe7f1, 0xf3c7,
+ 0x003f, 0xe0b8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf7fe, 0xe8ba, 0xe897, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf67c, 0xe86c, 0xf874,
+ 0x003f, 0xeb5f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe9b2, 0x003f, 0x003f, 0x003f, 0x003f, 0xee39, 0x003f, 0xf2f3,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf4ed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf0fa, 0x003f, 0xf7e6, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe06d, 0xe5de,
+ 0x003f, 0xe06e, 0xeae4, 0x003f, 0x003f, 0x003f, 0xee9f, 0x003f,
+ 0xf5ac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed97, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xefe3, 0x003f, 0xf1cb, 0xe2e4, 0x003f,
+ 0x003f, 0x003f, 0xe763, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe9b3, 0xe57c, 0x003f, 0x003f, 0xf449, 0x003f, 0xeab7,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0ce, 0xf8d8, 0x003f,
+ 0x003f, 0xe369, 0x003f, 0x003f, 0xe9d2, 0xf6f4, 0xeedc, 0xed35,
+ 0x003f, 0xf933, 0x003f, 0xe8bb, 0x003f, 0x003f, 0x003f, 0xf44a,
+ 0xeffd, 0xe35a, 0x003f, 0xf5d6, 0xe7c5, 0xed44, 0x003f, 0xf1a7,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf04d, 0xeea0, 0x003f, 0xf6c4, 0xf5ad, 0x003f, 0xe7e0,
+ 0x003f, 0x003f, 0x003f, 0xe044, 0x003f, 0x003f, 0xf772, 0xe2c2,
+ 0x003f, 0xf14e, 0x003f, 0x003f, 0x003f, 0xedb4, 0xe1c8, 0xf258,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeec8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1c9, 0xf7b7, 0x003f,
+ /* 0x8300 .. 0x83ff */
+ 0x003f, 0xf3e8, 0xe7f2, 0xe8f5, 0xe045, 0xe7c6, 0x003f, 0x003f,
+ 0x003f, 0xe759, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7ab,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf1bc, 0x003f, 0x003f, 0xe764, 0x003f, 0x003f, 0x003f, 0xe96a,
+ 0x003f, 0xec4c, 0x003f, 0x003f, 0xf97d, 0xf170, 0xe4a0, 0x003f,
+ 0xefc7, 0xee3a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xec92, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf84b,
+ 0x003f, 0xf5ae, 0xf8aa, 0x003f, 0x003f, 0x003f, 0x003f, 0xf19d,
+ 0x003f, 0xf14f, 0xf968, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe575, 0x003f, 0x003f, 0x003f, 0xf7c3,
+ 0x003f, 0x003f, 0x003f, 0xf272, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe6e9, 0xf1f6, 0x003f, 0x003f, 0x003f, 0xea7d, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe17c, 0x003f,
+ 0xecee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef64, 0x003f,
+ 0x003f, 0x003f, 0xf89a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe9b4, 0xed45, 0xe740, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe765, 0x003f, 0x003f,
+ 0x003f, 0xf57a, 0x003f, 0x003f, 0x003f, 0xe249, 0x003f, 0x003f,
+ 0x003f, 0xe671, 0xe2d2, 0x003f, 0xe346, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe232, 0x003f, 0x003f, 0xf4ee, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf4f8, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe95c, 0x003f, 0xe35b, 0x003f, 0x003f, 0x003f, 0xf934,
+ 0xe1ca, 0xe6d4, 0xea33, 0x003f, 0xed70, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf259, 0x003f, 0x003f, 0x003f, 0xec6d, 0x003f, 0x003f,
+ /* 0x8400 .. 0x84ff */
+ 0x003f, 0x003f, 0x003f, 0xf5fe, 0xe53c, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe5d1, 0x003f, 0xe792, 0xf753, 0xf067, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf5d7, 0x003f, 0x003f, 0xe74f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf9c0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf0ad, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5aa, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeea8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf25a,
+ 0x003f, 0x003f, 0x003f, 0xe077, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf773, 0x003f, 0xe56d, 0x003f, 0x003f, 0xf068, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf8d9, 0xf1f7, 0x003f, 0x003f, 0xedb5,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe33d, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf3f1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xec4d, 0x003f, 0x003f, 0x003f, 0xecc8, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe7d5, 0x003f, 0x003f, 0xeaaa, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe8bc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf774, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf3fa, 0x003f, 0x003f, 0xedb6, 0xf4ef, 0x003f, 0x003f, 0xf8da,
+ 0xebe0, 0x003f, 0xe7ac, 0x003f, 0xf5eb, 0x003f, 0xeb46, 0x003f,
+ 0x003f, 0xefc8, 0x003f, 0xe0cf, 0x003f, 0xecc9, 0x003f, 0x003f,
+ 0x003f, 0xea7e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xec4e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe991, 0x003f, 0xe635, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xec93, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe6a0, 0x003f, 0x003f, 0x003f,
+ /* 0x8500 .. 0x85ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe7a1, 0x003f, 0xe750, 0xe96b, 0x003f, 0x003f, 0xf1bd,
+ 0xeab8, 0x003f, 0xf035, 0x003f, 0x003f, 0x003f, 0xe6ad, 0x003f,
+ 0x003f, 0xf4f9, 0x003f, 0xf1f8, 0x003f, 0xf5c7, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xebca, 0xf0e3, 0x003f, 0xf46e,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf75c, 0x003f, 0xf069,
+ 0x003f, 0xe4c6, 0x003f, 0xe8e6, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf5af, 0x003f, 0x003f, 0x003f, 0x003f, 0xe292, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeffe, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf8b6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xec94, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe2f2, 0xf6b9, 0xe7f3, 0x003f, 0x003f, 0xebcb, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe86d, 0x003f, 0x003f, 0xe849,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0fb,
+ 0x003f, 0xe0b9, 0x003f, 0x003f, 0xf1f9, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeb70, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf550, 0x003f,
+ 0xf9bc, 0xeab1, 0xecef, 0x003f, 0x003f, 0x003f, 0x003f, 0xeb33,
+ 0xf9b9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf341, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe1cb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf1be, 0x003f, 0x003f, 0x003f, 0xe5c0, 0xecf0, 0xf1fa,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefe4, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe5ed, 0xeedd, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe598, 0xedb7, 0x003f, 0x003f,
+ 0x003f, 0xe8e7, 0xec4f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf25b,
+ 0x003f, 0x003f, 0xe6f4, 0xf36d, 0x003f, 0x003f, 0x003f, 0xe23b,
+ /* 0x8600 .. 0x86ff */
+ 0x003f, 0x003f, 0xeede, 0x003f, 0x003f, 0x003f, 0xe666, 0xebcc,
+ 0x003f, 0x003f, 0xef43, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedee, 0xe932,
+ 0x003f, 0x003f, 0xeb60, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5b5, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5a1,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8db, 0x003f,
+ 0xf7cb, 0x003f, 0x003f, 0x003f, 0xe0f3, 0xf535, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf858, 0xe667, 0x003f, 0xefe5, 0xf8dc,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9d0,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf8f6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe835, 0x003f, 0xe8bd, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf172, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe1f7, 0xf36e, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf659, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea91,
+ 0x003f, 0x003f, 0x003f, 0xe4b1, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf97e, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xef53, 0x003f, 0xf3c8, 0x003f, 0x003f, 0x003f, 0xe293,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf7ed, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf496, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed46, 0x003f,
+ /* 0x8700 .. 0x87ff */
+ 0xf5b9, 0x003f, 0xe992, 0xecf1, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xef35, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf44b, 0x003f, 0xea34, 0x003f, 0xe85c, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe079, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xecda, 0x003f, 0xf969,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf06a,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7c4, 0x003f,
+ 0xeca4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf8dd, 0x003f, 0xf2ca, 0x003f,
+ 0xef54, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe5cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0d7, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7ad,
+ 0x003f, 0x003f, 0xf8ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe4d9, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe5a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf66e, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe898, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xeb61, 0x003f, 0x003f, 0xefa8,
+ 0x003f, 0x003f, 0xf5f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf83f, 0x003f, 0xf0fc, 0x003f, 0x003f, 0xeb7a, 0x003f,
+ /* 0x8800 .. 0x88ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xecb2, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5c5,
+ 0x003f, 0x003f, 0xf3e3, 0xe5ee, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe1cc, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1d9, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe751, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf87c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3eb, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf84c, 0xee72, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf875, 0xec9c, 0x003f, 0x003f, 0x003f, 0xe046,
+ 0x003f, 0xed47, 0x003f, 0xf06b, 0x003f, 0xf5fa, 0x003f, 0x003f,
+ 0x003f, 0xf8ac, 0xe2c3, 0xf0fd, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf79c, 0x003f, 0x003f, 0xeab9, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xebf1, 0x003f, 0xe434, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5fb,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe36a, 0xe36b,
+ 0x003f, 0xf04e, 0xe7b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe047, 0x003f, 0x003f, 0xe4e7, 0x003f, 0xf775, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe4b2, 0x003f, 0x003f, 0x003f, 0xec50, 0xf46f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1e5, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf7ac, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe1cd, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf23e, 0xe63e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6ea,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xeee0, 0xf0ae, 0x003f, 0x003f,
+ 0x003f, 0xe2d9, 0x003f, 0x003f, 0xe95d, 0xf1fb, 0x003f, 0xea92,
+ 0x003f, 0xe6eb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xea35, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xead7, 0xe8d0, 0xe8d1, 0x003f, 0x003f,
+ 0xe5a3, 0x003f, 0x003f, 0x003f, 0x003f, 0xf342, 0x003f, 0x003f,
+ /* 0x8900 .. 0x89ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe96c,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe078, 0x003f, 0xf776, 0xe95e, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf06c, 0xe8d2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefb3, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf6db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeca8, 0x003f,
+ 0xe6ae, 0x003f, 0x003f, 0xeb71, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe0ba, 0x003f, 0x003f, 0xedd1, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe36c,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe5c1, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe75a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeca9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeb34,
+ 0x003f, 0xefa9, 0x003f, 0xe4c7, 0x003f, 0x003f, 0xe96d, 0xf73e,
+ 0x003f, 0x003f, 0x003f, 0xe148, 0x003f, 0x003f, 0x003f, 0xe33e,
+ 0x003f, 0x003f, 0x003f, 0xe794, 0x003f, 0x003f, 0xecca, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe13f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe53d, 0xf661, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe35c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe056, 0x003f, 0x003f, 0xe5c2, 0x003f, 0x003f,
+ 0xe24a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe057, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf840, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xead8, 0x003f, 0x003f, 0x003f,
+ 0xf5ba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x8a00 .. 0x8aff */
+ 0xedeb, 0x003f, 0xf2f4, 0xe9b5, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe1aa, 0x003f, 0xecf2, 0x003f, 0xf8f7, 0x003f, 0xf6d0, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf9ba, 0x003f, 0x003f, 0xf9e1, 0xf6a0,
+ 0xe3c0, 0x003f, 0x003f, 0xef55, 0x003f, 0xed48, 0x003f, 0xebe8,
+ 0x003f, 0x003f, 0x003f, 0xe151, 0x003f, 0xe47d, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe8be, 0x003f, 0x003f, 0xeb72, 0x003f, 0x003f,
+ 0x003f, 0xf859, 0x003f, 0x003f, 0xebcd, 0x003f, 0xe048, 0x003f,
+ 0x003f, 0x003f, 0xf470, 0xf3c9, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xea93, 0x003f, 0x003f, 0x003f, 0xf36f, 0xf754, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf25c, 0x003f, 0x003f, 0xea94, 0x003f,
+ 0xeec9, 0x003f, 0xec95, 0xeee1, 0x003f, 0x003f, 0xeccb, 0x003f,
+ 0x003f, 0xeccc, 0x003f, 0x003f, 0x003f, 0xe2f8, 0xf2ac, 0x003f,
+ 0xf9fe, 0xf935, 0xf841, 0xead9, 0x003f, 0xeb62, 0x003f, 0x003f,
+ 0x003f, 0xf56a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3ca, 0x003f, 0xe233,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf44c, 0xf173, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeb35, 0x003f, 0xf6ab, 0x003f, 0x003f,
+ 0xf0af, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedde, 0x003f,
+ 0xeba4, 0xe1ab, 0x003f, 0xe7f4, 0xef36, 0xe1ce, 0xebe9, 0x003f,
+ 0xf991, 0x003f, 0xeb73, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xec51, 0x003f, 0xe234, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xea36, 0x003f, 0x003f, 0xf0fe, 0x003f, 0xf0dd, 0xf370,
+ 0x003f, 0x003f, 0xf56b, 0x003f, 0xec96, 0x003f, 0x003f, 0xe4c8,
+ 0x003f, 0x003f, 0x003f, 0xf57b, 0x003f, 0xf245, 0x003f, 0xf5d8,
+ 0x003f, 0x003f, 0xe5df, 0x003f, 0x003f, 0x003f, 0xe675, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf0b0, 0xf573, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeccd, 0x003f, 0x003f, 0x003f, 0x003f, 0xf596, 0xf842,
+ 0x003f, 0x003f, 0xf2f5, 0xe06f, 0x003f, 0xf0b1, 0xf1bf, 0x003f,
+ 0x003f, 0xf9c9, 0x003f, 0x003f, 0x003f, 0x003f, 0xed36, 0xf7a4,
+ 0xf343, 0x003f, 0xedec, 0x003f, 0x003f, 0x003f, 0xe3e7, 0x003f,
+ /* 0x8b00 .. 0x8bff */
+ 0xe7c7, 0xed67, 0xf06d, 0x003f, 0xe599, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe84a, 0x003f,
+ 0xe85d, 0x003f, 0x003f, 0x003f, 0xf7cc, 0x003f, 0xebda, 0xe8bf,
+ 0x003f, 0xe155, 0xf160, 0xe0bb, 0x003f, 0xea95, 0x003f, 0x003f,
+ 0xefaa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe7c8, 0x003f, 0x003f, 0xf273, 0xe6bd, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe2c4, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe35d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf936, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf3fb, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9d2, 0xe3c1,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xecdb, 0x003f, 0xe4c9, 0x003f, 0xe95f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe17d, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xea37, 0x003f, 0x003f, 0xee4b,
+ 0xf131, 0x003f, 0x003f, 0x003f, 0xe149, 0x003f, 0x003f, 0xf8de,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeee2, 0x003f, 0x003f,
+ 0xe551, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe938, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xec52, 0x003f, 0xf4d8, 0xedd3, 0x003f, 0x003f, 0xf4d9, 0x003f,
+ 0x003f, 0x003f, 0xf4c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x8c00 .. 0x8cff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1db,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1ac,
+ 0x003f, 0xf953, 0x003f, 0x003f, 0x003f, 0x003f, 0xe577, 0x003f,
+ 0xe3c2, 0x003f, 0xf7a5, 0x003f, 0xef65, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xecce, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe55a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeada, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf8df, 0xeee3, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf79d, 0xeccf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf5b0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe777, 0x003f, 0xe7c9, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf73f, 0xf2f6, 0x003f,
+ 0xe9b6, 0xf23f, 0xe1f8, 0x003f, 0x003f, 0x003f, 0x003f, 0xea48,
+ 0xf937, 0xf6fc, 0xf6b1, 0xe24b, 0xf531, 0x003f, 0x003f, 0xf25d,
+ 0xebae, 0x003f, 0x003f, 0xf153, 0xe2fe, 0x003f, 0xf74f, 0xe772,
+ 0xe4e8, 0x003f, 0x003f, 0xea38, 0xf574, 0xf152, 0x003f, 0xe7f5,
+ 0xf7c5, 0xe9d3, 0xe693, 0xf19e, 0xf992, 0x003f, 0x003f, 0xf1c0,
+ 0xe049, 0x003f, 0xf274, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf471, 0x003f, 0xea49, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe694, 0x003f, 0xea96, 0x003f, 0xeadb, 0x003f,
+ 0xe8d3, 0x003f, 0xf877, 0xe773, 0xf551, 0x003f, 0xe9b7, 0x003f,
+ 0x003f, 0x003f, 0xf497, 0x003f, 0x003f, 0xe53e, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe695, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe9b8, 0xe2c5, 0xeadf, 0x003f, 0x003f,
+ /* 0x8d00 .. 0x8dff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf44e, 0xf631, 0x003f, 0xf0cb,
+ 0xf3fc, 0x003f, 0xf4c7, 0x003f, 0x003f, 0xeb7b, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf1fc, 0x003f, 0x003f, 0xebdb, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf275, 0x003f, 0xea97, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf863, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf3cb, 0x003f, 0x003f, 0xe33f, 0xe9b9, 0x003f, 0x003f, 0xe3c3,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5b1, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf056, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf371, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf63c, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf5d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf37b, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe9ba, 0x003f, 0x003f, 0x003f, 0xf44f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6c5, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe8a2, 0xf498, 0x003f, 0x003f, 0xe04a,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf6f5, 0x003f, 0xe0e5, 0x003f, 0x003f,
+ 0x003f, 0xf276, 0x003f, 0xeb63, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe235, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe668,
+ 0x003f, 0x003f, 0x003f, 0xe53f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x8e00 .. 0x8eff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xefc9, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4ce,
+ 0xf552, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0e6, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf3a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf0b2, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3a2, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf0b3, 0x003f, 0xf344, 0x003f, 0x003f, 0xe0f4,
+ 0xe540, 0xf4b2, 0xf8b7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf5ec, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf277,
+ 0xf542, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf5ed, 0x003f, 0xe2f3, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf372, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf25e,
+ 0x003f, 0x003f, 0xf3cc, 0x003f, 0x003f, 0xedb8, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe6f5, 0xecf3, 0xe2e5, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe2c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf4b3, 0xed68, 0xe2f9, 0xe2da, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf85d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee73,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf472, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf5ee, 0x003f, 0x003f, 0xe04b, 0x003f, 0x003f, 0xecdc, 0x003f,
+ /* 0x8f00 .. 0x8fff */
+ 0x003f, 0x003f, 0x003f, 0xe294, 0x003f, 0xe669, 0x003f, 0x003f,
+ 0x003f, 0xf240, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf575, 0xe752, 0xe960, 0xe17e, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe5e0, 0xf65a, 0xf9ca, 0xe766, 0xf55f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe636, 0xe94e,
+ 0x003f, 0xe8d4, 0xe6c7, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4a0,
+ 0x003f, 0x003f, 0x003f, 0xf3cd, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xec53, 0xe96e, 0x003f, 0xe96f, 0x003f, 0x003f, 0xf2ad, 0xee3b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf7dd, 0xf04f, 0x003f, 0x003f,
+ 0x003f, 0xf2ae, 0x003f, 0x003f, 0x003f, 0xf560, 0xe295, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee3c, 0x003f, 0xe26e,
+ 0x003f, 0x003f, 0xe5f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xecf4, 0xe1d0, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe5b8, 0x003f, 0x003f, 0xf6fd, 0x003f,
+ 0xe939, 0x003f, 0x003f, 0x003f, 0x003f, 0xea98, 0x003f, 0xe93a,
+ 0xf473, 0xefb4, 0xe46c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xefe6, 0x003f, 0x003f, 0xecf6, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeeca, 0x003f,
+ 0x003f, 0xe35e, 0x003f, 0x003f, 0xe899, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe04c, 0x003f,
+ 0x003f, 0x003f, 0xf278, 0xe86e, 0x003f, 0xf499, 0x003f, 0x003f,
+ 0xec9d, 0x003f, 0xe136, 0x003f, 0x003f, 0x003f, 0x003f, 0xe84b,
+ 0x003f, 0xf279, 0x003f, 0x003f, 0x003f, 0xf5da, 0x003f, 0x003f,
+ /* 0x9000 .. 0x90ff */
+ 0xf6dc, 0xebea, 0xe251, 0xe541, 0x003f, 0xf9b1, 0xee4d, 0x003f,
+ 0xf8ad, 0x003f, 0x003f, 0xf777, 0x003f, 0xebce, 0x003f, 0xf6e2,
+ 0xf5ef, 0xe2c7, 0x003f, 0x003f, 0xe542, 0xe191, 0x003f, 0xe578,
+ 0x003f, 0xf25f, 0xf6d7, 0x003f, 0x003f, 0xeb36, 0xe651, 0xebdc,
+ 0xf373, 0xf3e4, 0xe993, 0xe637, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf597, 0x003f,
+ 0x003f, 0xf3ce, 0xf474, 0x003f, 0x003f, 0xe340, 0x003f, 0x003f,
+ 0xf191, 0x003f, 0x003f, 0x003f, 0xf7ba, 0x003f, 0xf0b5, 0x003f,
+ 0x003f, 0xe57d, 0xec54, 0x003f, 0x003f, 0x003f, 0x003f, 0xefe7,
+ 0x003f, 0x003f, 0xf0b4, 0xf031, 0x003f, 0xf74c, 0xe236, 0x003f,
+ 0xf7c6, 0xf96a, 0x003f, 0xe543, 0xe4b9, 0xf06e, 0x003f, 0x003f,
+ 0x003f, 0xefab, 0x003f, 0x003f, 0xebe1, 0xe4cf, 0xf598, 0x003f,
+ 0xf050, 0xebcf, 0x003f, 0xe14a, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf27a, 0x003f, 0x003f, 0x003f, 0xf374, 0xf4b4, 0xe57e,
+ 0x003f, 0x003f, 0xf450, 0x003f, 0x003f, 0xf3e5, 0x003f, 0xf553,
+ 0xeb64, 0x003f, 0xf0b6, 0x003f, 0xe6a1, 0xe0e8, 0x003f, 0xf7ad,
+ 0xefad, 0xe774, 0xf843, 0xec55, 0xf94d, 0x003f, 0x003f, 0xf154,
+ 0xe741, 0x003f, 0xe93b, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5a4,
+ 0x003f, 0xf0e9, 0x003f, 0x003f, 0x003f, 0xef4b, 0x003f, 0x003f,
+ 0x003f, 0xe767, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf8ae, 0xe3e1, 0x003f, 0x003f, 0xe8c0, 0x003f,
+ 0xf5be, 0x003f, 0xea99, 0x003f, 0x003f, 0x003f, 0x003f, 0xe09d,
+ 0xf6c6, 0xe2c8, 0x003f, 0x003f, 0x003f, 0xebd0, 0x003f, 0x003f,
+ 0xf260, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeff4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe296, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5cd, 0x003f,
+ 0x003f, 0xe2db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe9bb, 0x003f, 0x003f, 0x003f, 0x003f, 0xe23c, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefe8, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe544, 0x003f, 0x003f,
+ /* 0x9100 .. 0x91ff */
+ 0x003f, 0x003f, 0xed57, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf5db, 0x003f, 0x003f, 0xf851, 0x003f, 0x003f,
+ 0x003f, 0xea39, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe59a,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2f7, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe4b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf0b7, 0xf2f8, 0xf5dc, 0xf1cc, 0xe8d5, 0xf3cf, 0x003f,
+ 0x003f, 0x003f, 0xf3d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf5b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe7ae, 0xe5ac, 0x003f, 0xec56, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9a3, 0x003f, 0xf8e5,
+ 0xeaab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xec97,
+ 0x003f, 0xf63d, 0x003f, 0xf5b3, 0x003f, 0xf345, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeba5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf5dd, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf132, 0xf1fd, 0x003f, 0xf5b4, 0xf8b8,
+ 0x003f, 0xe8a3, 0x003f, 0x003f, 0xe65a, 0xe0d9, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xedd4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4fa,
+ 0x003f, 0xf0b8, 0x003f, 0xeb47, 0xe6ec, 0xf3ec, 0xedaf, 0xe5e1,
+ 0xe6ed, 0xe3d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebf2,
+ 0xf2f9, 0x003f, 0x003f, 0x003f, 0xe9bc, 0xf66c, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf375, 0x003f, 0x003f, 0x003f, 0xf554,
+ 0x003f, 0x003f, 0xefe9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4fb, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x9200 .. 0x92ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe591, 0x003f, 0x003f,
+ 0xe132, 0xf6fe, 0xeabc, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0cd,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe347, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe652, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xef3d, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2af,
+ 0xe0a5, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0e9, 0x003f, 0x003f,
+ 0x003f, 0xf878, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe156,
+ 0x003f, 0x003f, 0x003f, 0xee77, 0x003f, 0x003f, 0xf057, 0x003f,
+ 0x003f, 0x003f, 0xe8a4, 0x003f, 0xe2c9, 0xec9e, 0xf2fa, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf0de, 0x003f, 0x003f, 0xf5c8, 0x003f, 0xe56e, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xeb65, 0x003f, 0xf2b0, 0x003f, 0x003f, 0xec57, 0x003f,
+ 0xe7af, 0x003f, 0x003f, 0x003f, 0xf7e7, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeee5, 0x003f, 0x003f, 0xe2ca, 0xebd1,
+ 0x003f, 0xec58, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf2fb, 0x003f, 0x003f, 0xf89b,
+ 0x003f, 0x003f, 0xe994, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xeb37, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf778, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe0ea, 0x003f, 0x003f, 0x003f, 0xe0bc, 0x003f, 0x003f, 0x003f,
+ /* 0x9300 .. 0x93ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe672, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf5de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf5df, 0x003f, 0xf246, 0x003f, 0x003f, 0x003f, 0xec98, 0xe4ca,
+ 0xf2fc, 0xe3c4, 0xf2b1, 0x003f, 0xe3c5, 0x003f, 0xe36e, 0x003f,
+ 0xe7e1, 0x003f, 0x003f, 0xeb48, 0x003f, 0x003f, 0xe1d1, 0xf4b9,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xeecc, 0x003f, 0xe638, 0xe237, 0x003f, 0xe545, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xed58, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe4b4, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0b9, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0f5, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf66d, 0x003f, 0xf3a3, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe157, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xefca, 0x003f, 0xebf0, 0x003f,
+ 0x003f, 0x003f, 0xf5e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf8af, 0x003f, 0x003f, 0x003f, 0xe0d1,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf8e0, 0xf475, 0x003f, 0x003f,
+ 0xf192, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf37c, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf27b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefcb, 0x003f,
+ 0x003f, 0xe192, 0x003f, 0x003f, 0xe6af, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4a1, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x9400 .. 0x94ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf997, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf3a4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeb66, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf2b2, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf561, 0x003f, 0x003f,
+ 0xf6a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf3d1, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe09e, 0xe09f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe25e, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4c8, 0x003f, 0xf4ba,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x9500 .. 0x95ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1fe,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe836, 0x003f, 0x003f, 0xeb7c, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf75d, 0x003f, 0xe0d2, 0x003f, 0x003f, 0x003f, 0xf0ce,
+ 0x003f, 0xf7d8, 0xf7d9, 0xe070, 0xe85a, 0x003f, 0x003f, 0x003f,
+ 0xe0a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe058, 0xf7ee, 0xe8ec, 0x003f, 0x003f,
+ 0xe341, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5ef, 0x003f, 0x003f,
+ 0x003f, 0xee95, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xeea2, 0xed69, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed71,
+ 0x003f, 0x003f, 0xf954, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf7ef, 0xe2f4, 0xf6e6, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe24c, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf555, 0xe933, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x9600 .. 0x96ff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe9bd, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf556, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf731, 0x003f, 0x003f, 0x003f, 0xef66, 0x003f,
+ 0x003f, 0x003f, 0xe8c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf376, 0x003f, 0x003f, 0x003f, 0xed49,
+ 0xf67d, 0x003f, 0xf7ae, 0x003f, 0xe9be, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe6b0, 0xe778, 0xe0bd, 0x003f, 0x003f,
+ 0xf7da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf75e, 0xf7f0, 0xeb7d, 0xecb3, 0xf543,
+ 0x003f, 0x003f, 0xf052, 0xf476, 0xf346, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe8d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf0e4, 0x003f, 0x003f, 0xf477, 0x003f, 0xe6d5, 0xe546, 0xf7e8,
+ 0xe6c1, 0x003f, 0x003f, 0x003f, 0x003f, 0xedd5, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefea, 0xe6cc, 0x003f,
+ 0x003f, 0x003f, 0xe4e9, 0xec59, 0x003f, 0xf96b, 0xe1ad, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe140, 0xf032, 0x003f, 0x003f,
+ 0xed98, 0xe350, 0x003f, 0xf347, 0xf231, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe6f6, 0x003f, 0x003f, 0x003f, 0xec5a,
+ 0xec5b, 0x003f, 0xf85f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf0df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe65b,
+ 0x003f, 0x003f, 0x003f, 0xf544, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf1cd, 0xed62, 0x003f, 0x003f, 0xf039, 0xed4a, 0xf4a2, 0xe1d2,
+ 0x003f, 0xf65b, 0x003f, 0xf3e6, 0xf1c1, 0xef4c, 0xf261, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf377, 0xec5c, 0x003f,
+ 0x003f, 0xed3a, 0x003f, 0xf5e1, 0xf1da, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe6ee, 0xe3f1, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xefeb, 0xefec, 0xeb74, 0x003f, 0x003f, 0x003f, 0x003f, 0xe837,
+ 0xe9d4, 0x003f, 0xf033, 0x003f, 0x003f, 0x003f, 0xe653, 0xe696,
+ 0x003f, 0xe86f, 0x003f, 0xf2b3, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x9700 .. 0x97ff */
+ 0xec5d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2fd, 0xf478,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf2c5, 0x003f, 0xeee7, 0x003f, 0x003f, 0xe6fd, 0x003f,
+ 0x003f, 0xeece, 0x003f, 0x003f, 0xeadc, 0x003f, 0xf7c7, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7f6,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xeaac, 0x003f, 0xe66a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe934, 0x003f, 0x003f, 0x003f, 0xf348, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe5fa, 0x003f, 0xed99, 0x003f, 0x003f, 0x003f,
+ 0xe654, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf57c, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2fe, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf331, 0x003f, 0xea3a, 0x003f,
+ 0x003f, 0xe84c, 0xe79e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf864, 0x003f, 0x003f, 0x003f, 0xf175, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf938, 0x003f, 0x003f, 0xf176,
+ 0x003f, 0x003f, 0xe75b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf8b9, 0x003f, 0xed63, 0x003f, 0xe1f9,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe2d3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe07a, 0x003f, 0x003f, 0xe2d4, 0x003f, 0xf74d, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf557, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf06f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf7db, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe547, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf0e5, 0x003f, 0x003f, 0xebd2, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf034, 0x003f, 0x003f, 0x003f, 0xf852,
+ /* 0x9800 .. 0x98ff */
+ 0xf8e1, 0xf87d, 0xf332, 0xe193, 0x003f, 0xf833, 0xec99, 0x003f,
+ 0xec5e, 0x003f, 0xeff5, 0x003f, 0xebeb, 0x003f, 0x003f, 0x003f,
+ 0xeee8, 0xef67, 0xe89a, 0xe55b, 0x003f, 0x003f, 0x003f, 0xf6f6,
+ 0xe655, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe579, 0x003f, 0x003f,
+ 0xf89c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe194, 0xf6dd, 0x003f, 0xea4a, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe238, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf349, 0xeda0, 0xed59, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xed64, 0x003f, 0x003f, 0x003f,
+ 0xf053, 0x003f, 0xf2b4, 0x003f, 0x003f, 0x003f, 0xe6be, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8e2, 0x003f, 0xe1d3,
+ 0x003f, 0x003f, 0x003f, 0xf2b5, 0x003f, 0x003f, 0x003f, 0xf879,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf7a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeabd,
+ 0x003f, 0xf6c7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf79f, 0x003f, 0x003f, 0xf79e,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xea3b, 0xe8e8, 0x003f, 0x003f, 0xecdd,
+ 0x003f, 0xebe2, 0xe3c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf660, 0xf0e6, 0xe89b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf157, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xea9a, 0xf779, 0xecde, 0x003f,
+ /* 0x9900 .. 0x99ff */
+ 0x003f, 0x003f, 0x003f, 0xe297, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf853, 0xedd7, 0x003f, 0xf158, 0x003f, 0x003f, 0x003f,
+ 0xf4c9, 0x003f, 0x003f, 0xed4b, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xee3e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2b6, 0x003f,
+ 0xe94f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe24d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe753, 0x003f, 0x003f,
+ 0x003f, 0xe35f, 0x003f, 0xe2fa, 0xf4ca, 0xeb67, 0x003f, 0x003f,
+ 0x003f, 0xe3c7, 0xefae, 0x003f, 0xef4d, 0x003f, 0x003f, 0xf854,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xec5f, 0x003f,
+ 0x003f, 0xf855, 0x003f, 0x003f, 0x003f, 0xf7b8, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe970, 0x003f, 0x003f,
+ 0xf8b0, 0x003f, 0x003f, 0x003f, 0xe739, 0xeddf, 0xf7a7, 0x003f,
+ 0x003f, 0xf67e, 0x003f, 0xf65c, 0xec9a, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf193, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe870, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf3d2, 0xe45c, 0xe2cb, 0x003f, 0x003f, 0xe04d, 0x003f, 0x003f,
+ 0x003f, 0xe9bf, 0x003f, 0x003f, 0x003f, 0xf691, 0x003f, 0xea9b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf844, 0x003f, 0x003f,
+ 0x003f, 0xe5ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3e7,
+ /* 0x9a00 .. 0x9aff */
+ 0x003f, 0xea4e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe950, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3c8, 0xe3c9,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf74e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe0f6, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe59b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5e2, 0xebd3,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe779, 0x003f, 0x003f, 0xf7a0, 0x003f, 0xe2cc, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9a4, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe298, 0x003f, 0xf860,
+ 0x003f, 0x003f, 0xe195, 0xee4e, 0x003f, 0x003f, 0x003f, 0xf63e,
+ 0x003f, 0x003f, 0xe5f0, 0x003f, 0x003f, 0xe3ca, 0x003f, 0x003f,
+ 0x003f, 0xf94e, 0xe5f1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe1e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf845, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xec60, 0xf599, 0x003f, 0x003f, 0x003f,
+ 0xe1d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeea3, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8a5, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x9b00 .. 0x9bff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xec61, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6a2,
+ 0x003f, 0x003f, 0xf6e3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xf036, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe331, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe26a, 0xf8eb, 0xe8a6, 0xe8de, 0xe775, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf070,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe73a, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xede0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe66b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2c6, 0x003f,
+ 0x003f, 0xf77a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed65,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe299, 0x003f, 0x003f, 0xeb68, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe6ef, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf57d, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe1e6, 0x003f, 0x003f, 0x003f,
+ 0xe196, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x9c00 .. 0x9cff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5e3, 0x003f, 0x003f,
+ 0xed5a, 0x003f, 0xe971, 0x003f, 0x003f, 0xf7c8, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf94f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xef37, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe754, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0be,
+ 0x003f, 0xe93e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6f7,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf378, 0x003f, 0xe9c0,
+ 0x003f, 0xe2cd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe995, 0xe7b0, 0x003f, 0xee79, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x9d00 .. 0x9dff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xed4c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf054, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed7c, 0x003f,
+ 0xed75, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf8f8, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe14b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed4d, 0x003f, 0x003f,
+ 0xe1dc, 0xe7f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe9df, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf1ce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xe7d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeda3,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xf7cd, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe1ae, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2ce,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf63f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xf9d3, 0xf0ed, 0xe66c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x9e00 .. 0x9eff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xeda4, 0x003f, 0x003f, 0x003f, 0xe5b6, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe66d, 0x003f, 0x003f,
+ 0x003f, 0xf7e9, 0x003f, 0x003f, 0x003f, 0xeea4, 0x003f, 0xe673,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xe3cb, 0xe674, 0x003f, 0x003f, 0x003f, 0xe5f2,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea9c, 0x003f, 0xe6f8,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe77a, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d5, 0xe79f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe73b, 0x003f, 0x003f, 0xf9cb, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xf96c, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeb38, 0xe5f3, 0x003f,
+ 0x003f, 0xf9d9, 0x003f, 0x003f, 0xe133, 0x003f, 0x003f, 0x003f,
+ 0xe7f9, 0x003f, 0x003f, 0xe4ea, 0xf5f5, 0x003f, 0xf2c7, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xe4da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe84d, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0x9f00 .. 0x9fff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef38,
+ 0xe93f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf333, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xe1d5, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0xeb39, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0xea3c, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf34a, 0xf241, 0x003f, 0x003f, 0xf242, 0x003f,
+ 0x003f, 0x003f, 0xf65d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf262,
+ 0x003f, 0xe656, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeb75,
+ 0x003f, 0x003f, 0xf4bb, 0x003f, 0xede1, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xed5b,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6a3, 0x003f, 0x003f,
+ 0xe8c2, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0a0, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0xe2cf, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0xac00 .. 0xacff */
+ 0x8861, 0x8862, 0x8863, 0x8864, 0x8865, 0x8866, 0x8867, 0x8868,
+ 0x8869, 0x886a, 0x886b, 0x886c, 0x886d, 0x886e, 0x886f, 0x8870,
+ 0x8871, 0x8873, 0x8874, 0x8875, 0x8876, 0x8877, 0x8878, 0x8879,
+ 0x887a, 0x887b, 0x887c, 0x887d, 0x8881, 0x8882, 0x8883, 0x8884,
+ 0x8885, 0x8886, 0x8887, 0x8888, 0x8889, 0x888a, 0x888b, 0x888c,
+ 0x888d, 0x888e, 0x888f, 0x8890, 0x8891, 0x8893, 0x8894, 0x8895,
+ 0x8896, 0x8897, 0x8898, 0x8899, 0x889a, 0x889b, 0x889c, 0x889d,
+ 0x88a1, 0x88a2, 0x88a3, 0x88a4, 0x88a5, 0x88a6, 0x88a7, 0x88a8,
+ 0x88a9, 0x88aa, 0x88ab, 0x88ac, 0x88ad, 0x88ae, 0x88af, 0x88b0,
+ 0x88b1, 0x88b3, 0x88b4, 0x88b5, 0x88b6, 0x88b7, 0x88b8, 0x88b9,
+ 0x88ba, 0x88bb, 0x88bc, 0x88bd, 0x88c1, 0x88c2, 0x88c3, 0x88c4,
+ 0x88c5, 0x88c6, 0x88c7, 0x88c8, 0x88c9, 0x88ca, 0x88cb, 0x88cc,
+ 0x88cd, 0x88ce, 0x88cf, 0x88d0, 0x88d1, 0x88d3, 0x88d4, 0x88d5,
+ 0x88d6, 0x88d7, 0x88d8, 0x88d9, 0x88da, 0x88db, 0x88dc, 0x88dd,
+ 0x88e1, 0x88e2, 0x88e3, 0x88e4, 0x88e5, 0x88e6, 0x88e7, 0x88e8,
+ 0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f0,
+ 0x88f1, 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0x88f7, 0x88f8, 0x88f9,
+ 0x88fa, 0x88fb, 0x88fc, 0x88fd, 0x8941, 0x8942, 0x8943, 0x8944,
+ 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, 0x894a, 0x894b, 0x894c,
+ 0x894d, 0x894e, 0x894f, 0x8950, 0x8951, 0x8953, 0x8954, 0x8955,
+ 0x8956, 0x8957, 0x8958, 0x8959, 0x895a, 0x895b, 0x895c, 0x895d,
+ 0x8961, 0x8962, 0x8963, 0x8964, 0x8965, 0x8966, 0x8967, 0x8968,
+ 0x8969, 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, 0x8970,
+ 0x8971, 0x8973, 0x8974, 0x8975, 0x8976, 0x8977, 0x8978, 0x8979,
+ 0x897a, 0x897b, 0x897c, 0x897d, 0x8981, 0x8982, 0x8983, 0x8984,
+ 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, 0x898a, 0x898b, 0x898c,
+ 0x898d, 0x898e, 0x898f, 0x8990, 0x8991, 0x8993, 0x8994, 0x8995,
+ 0x8996, 0x8997, 0x8998, 0x8999, 0x899a, 0x899b, 0x899c, 0x899d,
+ 0x89a1, 0x89a2, 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7, 0x89a8,
+ 0x89a9, 0x89aa, 0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0,
+ 0x89b1, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9,
+ 0x89ba, 0x89bb, 0x89bc, 0x89bd, 0x89c1, 0x89c2, 0x89c3, 0x89c4,
+ /* 0xad00 .. 0xadff */
+ 0x89c5, 0x89c6, 0x89c7, 0x89c8, 0x89c9, 0x89ca, 0x89cb, 0x89cc,
+ 0x89cd, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x89d3, 0x89d4, 0x89d5,
+ 0x89d6, 0x89d7, 0x89d8, 0x89d9, 0x89da, 0x89db, 0x89dc, 0x89dd,
+ 0x89e1, 0x89e2, 0x89e3, 0x89e4, 0x89e5, 0x89e6, 0x89e7, 0x89e8,
+ 0x89e9, 0x89ea, 0x89eb, 0x89ec, 0x89ed, 0x89ee, 0x89ef, 0x89f0,
+ 0x89f1, 0x89f3, 0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9,
+ 0x89fa, 0x89fb, 0x89fc, 0x89fd, 0x8a41, 0x8a42, 0x8a43, 0x8a44,
+ 0x8a45, 0x8a46, 0x8a47, 0x8a48, 0x8a49, 0x8a4a, 0x8a4b, 0x8a4c,
+ 0x8a4d, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a53, 0x8a54, 0x8a55,
+ 0x8a56, 0x8a57, 0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d,
+ 0x8a61, 0x8a62, 0x8a63, 0x8a64, 0x8a65, 0x8a66, 0x8a67, 0x8a68,
+ 0x8a69, 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f, 0x8a70,
+ 0x8a71, 0x8a73, 0x8a74, 0x8a75, 0x8a76, 0x8a77, 0x8a78, 0x8a79,
+ 0x8a7a, 0x8a7b, 0x8a7c, 0x8a7d, 0x8a81, 0x8a82, 0x8a83, 0x8a84,
+ 0x8a85, 0x8a86, 0x8a87, 0x8a88, 0x8a89, 0x8a8a, 0x8a8b, 0x8a8c,
+ 0x8a8d, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a93, 0x8a94, 0x8a95,
+ 0x8a96, 0x8a97, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, 0x8a9c, 0x8a9d,
+ 0x8aa1, 0x8aa2, 0x8aa3, 0x8aa4, 0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8,
+ 0x8aa9, 0x8aaa, 0x8aab, 0x8aac, 0x8aad, 0x8aae, 0x8aaf, 0x8ab0,
+ 0x8ab1, 0x8ab3, 0x8ab4, 0x8ab5, 0x8ab6, 0x8ab7, 0x8ab8, 0x8ab9,
+ 0x8aba, 0x8abb, 0x8abc, 0x8abd, 0x8ac1, 0x8ac2, 0x8ac3, 0x8ac4,
+ 0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, 0x8aca, 0x8acb, 0x8acc,
+ 0x8acd, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad3, 0x8ad4, 0x8ad5,
+ 0x8ad6, 0x8ad7, 0x8ad8, 0x8ad9, 0x8ada, 0x8adb, 0x8adc, 0x8add,
+ 0x8ae1, 0x8ae2, 0x8ae3, 0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8,
+ 0x8ae9, 0x8aea, 0x8aeb, 0x8aec, 0x8aed, 0x8aee, 0x8aef, 0x8af0,
+ 0x8af1, 0x8af3, 0x8af4, 0x8af5, 0x8af6, 0x8af7, 0x8af8, 0x8af9,
+ 0x8afa, 0x8afb, 0x8afc, 0x8afd, 0x8b41, 0x8b42, 0x8b43, 0x8b44,
+ 0x8b45, 0x8b46, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c,
+ 0x8b4d, 0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b53, 0x8b54, 0x8b55,
+ 0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d,
+ 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, 0x8b66, 0x8b67, 0x8b68,
+ /* 0xae00 .. 0xaeff */
+ 0x8b69, 0x8b6a, 0x8b6b, 0x8b6c, 0x8b6d, 0x8b6e, 0x8b6f, 0x8b70,
+ 0x8b71, 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77, 0x8b78, 0x8b79,
+ 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d, 0x8b81, 0x8b82, 0x8b83, 0x8b84,
+ 0x8b85, 0x8b86, 0x8b87, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c,
+ 0x8b8d, 0x8b8e, 0x8b8f, 0x8b90, 0x8b91, 0x8b93, 0x8b94, 0x8b95,
+ 0x8b96, 0x8b97, 0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d,
+ 0x8ba1, 0x8ba2, 0x8ba3, 0x8ba4, 0x8ba5, 0x8ba6, 0x8ba7, 0x8ba8,
+ 0x8ba9, 0x8baa, 0x8bab, 0x8bac, 0x8bad, 0x8bae, 0x8baf, 0x8bb0,
+ 0x8bb1, 0x8bb3, 0x8bb4, 0x8bb5, 0x8bb6, 0x8bb7, 0x8bb8, 0x8bb9,
+ 0x8bba, 0x8bbb, 0x8bbc, 0x8bbd, 0x8c61, 0x8c62, 0x8c63, 0x8c64,
+ 0x8c65, 0x8c66, 0x8c67, 0x8c68, 0x8c69, 0x8c6a, 0x8c6b, 0x8c6c,
+ 0x8c6d, 0x8c6e, 0x8c6f, 0x8c70, 0x8c71, 0x8c73, 0x8c74, 0x8c75,
+ 0x8c76, 0x8c77, 0x8c78, 0x8c79, 0x8c7a, 0x8c7b, 0x8c7c, 0x8c7d,
+ 0x8c81, 0x8c82, 0x8c83, 0x8c84, 0x8c85, 0x8c86, 0x8c87, 0x8c88,
+ 0x8c89, 0x8c8a, 0x8c8b, 0x8c8c, 0x8c8d, 0x8c8e, 0x8c8f, 0x8c90,
+ 0x8c91, 0x8c93, 0x8c94, 0x8c95, 0x8c96, 0x8c97, 0x8c98, 0x8c99,
+ 0x8c9a, 0x8c9b, 0x8c9c, 0x8c9d, 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4,
+ 0x8ca5, 0x8ca6, 0x8ca7, 0x8ca8, 0x8ca9, 0x8caa, 0x8cab, 0x8cac,
+ 0x8cad, 0x8cae, 0x8caf, 0x8cb0, 0x8cb1, 0x8cb3, 0x8cb4, 0x8cb5,
+ 0x8cb6, 0x8cb7, 0x8cb8, 0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd,
+ 0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5, 0x8cc6, 0x8cc7, 0x8cc8,
+ 0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0,
+ 0x8cd1, 0x8cd3, 0x8cd4, 0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9,
+ 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd, 0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4,
+ 0x8ce5, 0x8ce6, 0x8ce7, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec,
+ 0x8ced, 0x8cee, 0x8cef, 0x8cf0, 0x8cf1, 0x8cf3, 0x8cf4, 0x8cf5,
+ 0x8cf6, 0x8cf7, 0x8cf8, 0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd,
+ 0x8d41, 0x8d42, 0x8d43, 0x8d44, 0x8d45, 0x8d46, 0x8d47, 0x8d48,
+ 0x8d49, 0x8d4a, 0x8d4b, 0x8d4c, 0x8d4d, 0x8d4e, 0x8d4f, 0x8d50,
+ 0x8d51, 0x8d53, 0x8d54, 0x8d55, 0x8d56, 0x8d57, 0x8d58, 0x8d59,
+ 0x8d5a, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d61, 0x8d62, 0x8d63, 0x8d64,
+ 0x8d65, 0x8d66, 0x8d67, 0x8d68, 0x8d69, 0x8d6a, 0x8d6b, 0x8d6c,
+ /* 0xaf00 .. 0xafff */
+ 0x8d6d, 0x8d6e, 0x8d6f, 0x8d70, 0x8d71, 0x8d73, 0x8d74, 0x8d75,
+ 0x8d76, 0x8d77, 0x8d78, 0x8d79, 0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d,
+ 0x8d81, 0x8d82, 0x8d83, 0x8d84, 0x8d85, 0x8d86, 0x8d87, 0x8d88,
+ 0x8d89, 0x8d8a, 0x8d8b, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f, 0x8d90,
+ 0x8d91, 0x8d93, 0x8d94, 0x8d95, 0x8d96, 0x8d97, 0x8d98, 0x8d99,
+ 0x8d9a, 0x8d9b, 0x8d9c, 0x8d9d, 0x8da1, 0x8da2, 0x8da3, 0x8da4,
+ 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa, 0x8dab, 0x8dac,
+ 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db1, 0x8db3, 0x8db4, 0x8db5,
+ 0x8db6, 0x8db7, 0x8db8, 0x8db9, 0x8dba, 0x8dbb, 0x8dbc, 0x8dbd,
+ 0x8dc1, 0x8dc2, 0x8dc3, 0x8dc4, 0x8dc5, 0x8dc6, 0x8dc7, 0x8dc8,
+ 0x8dc9, 0x8dca, 0x8dcb, 0x8dcc, 0x8dcd, 0x8dce, 0x8dcf, 0x8dd0,
+ 0x8dd1, 0x8dd3, 0x8dd4, 0x8dd5, 0x8dd6, 0x8dd7, 0x8dd8, 0x8dd9,
+ 0x8dda, 0x8ddb, 0x8ddc, 0x8ddd, 0x8de1, 0x8de2, 0x8de3, 0x8de4,
+ 0x8de5, 0x8de6, 0x8de7, 0x8de8, 0x8de9, 0x8dea, 0x8deb, 0x8dec,
+ 0x8ded, 0x8dee, 0x8def, 0x8df0, 0x8df1, 0x8df3, 0x8df4, 0x8df5,
+ 0x8df6, 0x8df7, 0x8df8, 0x8df9, 0x8dfa, 0x8dfb, 0x8dfc, 0x8dfd,
+ 0x8e41, 0x8e42, 0x8e43, 0x8e44, 0x8e45, 0x8e46, 0x8e47, 0x8e48,
+ 0x8e49, 0x8e4a, 0x8e4b, 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e50,
+ 0x8e51, 0x8e53, 0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, 0x8e59,
+ 0x8e5a, 0x8e5b, 0x8e5c, 0x8e5d, 0x8e61, 0x8e62, 0x8e63, 0x8e64,
+ 0x8e65, 0x8e66, 0x8e67, 0x8e68, 0x8e69, 0x8e6a, 0x8e6b, 0x8e6c,
+ 0x8e6d, 0x8e6e, 0x8e6f, 0x8e70, 0x8e71, 0x8e73, 0x8e74, 0x8e75,
+ 0x8e76, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e7b, 0x8e7c, 0x8e7d,
+ 0x8e81, 0x8e82, 0x8e83, 0x8e84, 0x8e85, 0x8e86, 0x8e87, 0x8e88,
+ 0x8e89, 0x8e8a, 0x8e8b, 0x8e8c, 0x8e8d, 0x8e8e, 0x8e8f, 0x8e90,
+ 0x8e91, 0x8e93, 0x8e94, 0x8e95, 0x8e96, 0x8e97, 0x8e98, 0x8e99,
+ 0x8e9a, 0x8e9b, 0x8e9c, 0x8e9d, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4,
+ 0x8ea5, 0x8ea6, 0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0x8eab, 0x8eac,
+ 0x8ead, 0x8eae, 0x8eaf, 0x8eb0, 0x8eb1, 0x8eb3, 0x8eb4, 0x8eb5,
+ 0x8eb6, 0x8eb7, 0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0x8ebc, 0x8ebd,
+ 0x8ec1, 0x8ec2, 0x8ec3, 0x8ec4, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8,
+ 0x8ec9, 0x8eca, 0x8ecb, 0x8ecc, 0x8ecd, 0x8ece, 0x8ecf, 0x8ed0,
+ /* 0xb000 .. 0xb0ff */
+ 0x8ed1, 0x8ed3, 0x8ed4, 0x8ed5, 0x8ed6, 0x8ed7, 0x8ed8, 0x8ed9,
+ 0x8eda, 0x8edb, 0x8edc, 0x8edd, 0x8ee1, 0x8ee2, 0x8ee3, 0x8ee4,
+ 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec,
+ 0x8eed, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef3, 0x8ef4, 0x8ef5,
+ 0x8ef6, 0x8ef7, 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc, 0x8efd,
+ 0x8f41, 0x8f42, 0x8f43, 0x8f44, 0x8f45, 0x8f46, 0x8f47, 0x8f48,
+ 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c, 0x8f4d, 0x8f4e, 0x8f4f, 0x8f50,
+ 0x8f51, 0x8f53, 0x8f54, 0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59,
+ 0x8f5a, 0x8f5b, 0x8f5c, 0x8f5d, 0x8f61, 0x8f62, 0x8f63, 0x8f64,
+ 0x8f65, 0x8f66, 0x8f67, 0x8f68, 0x8f69, 0x8f6a, 0x8f6b, 0x8f6c,
+ 0x8f6d, 0x8f6e, 0x8f6f, 0x8f70, 0x8f71, 0x8f73, 0x8f74, 0x8f75,
+ 0x8f76, 0x8f77, 0x8f78, 0x8f79, 0x8f7a, 0x8f7b, 0x8f7c, 0x8f7d,
+ 0x8f81, 0x8f82, 0x8f83, 0x8f84, 0x8f85, 0x8f86, 0x8f87, 0x8f88,
+ 0x8f89, 0x8f8a, 0x8f8b, 0x8f8c, 0x8f8d, 0x8f8e, 0x8f8f, 0x8f90,
+ 0x8f91, 0x8f93, 0x8f94, 0x8f95, 0x8f96, 0x8f97, 0x8f98, 0x8f99,
+ 0x8f9a, 0x8f9b, 0x8f9c, 0x8f9d, 0x8fa1, 0x8fa2, 0x8fa3, 0x8fa4,
+ 0x8fa5, 0x8fa6, 0x8fa7, 0x8fa8, 0x8fa9, 0x8faa, 0x8fab, 0x8fac,
+ 0x8fad, 0x8fae, 0x8faf, 0x8fb0, 0x8fb1, 0x8fb3, 0x8fb4, 0x8fb5,
+ 0x8fb6, 0x8fb7, 0x8fb8, 0x8fb9, 0x8fba, 0x8fbb, 0x8fbc, 0x8fbd,
+ 0x9061, 0x9062, 0x9063, 0x9064, 0x9065, 0x9066, 0x9067, 0x9068,
+ 0x9069, 0x906a, 0x906b, 0x906c, 0x906d, 0x906e, 0x906f, 0x9070,
+ 0x9071, 0x9073, 0x9074, 0x9075, 0x9076, 0x9077, 0x9078, 0x9079,
+ 0x907a, 0x907b, 0x907c, 0x907d, 0x9081, 0x9082, 0x9083, 0x9084,
+ 0x9085, 0x9086, 0x9087, 0x9088, 0x9089, 0x908a, 0x908b, 0x908c,
+ 0x908d, 0x908e, 0x908f, 0x9090, 0x9091, 0x9093, 0x9094, 0x9095,
+ 0x9096, 0x9097, 0x9098, 0x9099, 0x909a, 0x909b, 0x909c, 0x909d,
+ 0x90a1, 0x90a2, 0x90a3, 0x90a4, 0x90a5, 0x90a6, 0x90a7, 0x90a8,
+ 0x90a9, 0x90aa, 0x90ab, 0x90ac, 0x90ad, 0x90ae, 0x90af, 0x90b0,
+ 0x90b1, 0x90b3, 0x90b4, 0x90b5, 0x90b6, 0x90b7, 0x90b8, 0x90b9,
+ 0x90ba, 0x90bb, 0x90bc, 0x90bd, 0x90c1, 0x90c2, 0x90c3, 0x90c4,
+ 0x90c5, 0x90c6, 0x90c7, 0x90c8, 0x90c9, 0x90ca, 0x90cb, 0x90cc,
+ 0x90cd, 0x90ce, 0x90cf, 0x90d0, 0x90d1, 0x90d3, 0x90d4, 0x90d5,
+ /* 0xb100 .. 0xb1ff */
+ 0x90d6, 0x90d7, 0x90d8, 0x90d9, 0x90da, 0x90db, 0x90dc, 0x90dd,
+ 0x90e1, 0x90e2, 0x90e3, 0x90e4, 0x90e5, 0x90e6, 0x90e7, 0x90e8,
+ 0x90e9, 0x90ea, 0x90eb, 0x90ec, 0x90ed, 0x90ee, 0x90ef, 0x90f0,
+ 0x90f1, 0x90f3, 0x90f4, 0x90f5, 0x90f6, 0x90f7, 0x90f8, 0x90f9,
+ 0x90fa, 0x90fb, 0x90fc, 0x90fd, 0x9141, 0x9142, 0x9143, 0x9144,
+ 0x9145, 0x9146, 0x9147, 0x9148, 0x9149, 0x914a, 0x914b, 0x914c,
+ 0x914d, 0x914e, 0x914f, 0x9150, 0x9151, 0x9153, 0x9154, 0x9155,
+ 0x9156, 0x9157, 0x9158, 0x9159, 0x915a, 0x915b, 0x915c, 0x915d,
+ 0x9161, 0x9162, 0x9163, 0x9164, 0x9165, 0x9166, 0x9167, 0x9168,
+ 0x9169, 0x916a, 0x916b, 0x916c, 0x916d, 0x916e, 0x916f, 0x9170,
+ 0x9171, 0x9173, 0x9174, 0x9175, 0x9176, 0x9177, 0x9178, 0x9179,
+ 0x917a, 0x917b, 0x917c, 0x917d, 0x9181, 0x9182, 0x9183, 0x9184,
+ 0x9185, 0x9186, 0x9187, 0x9188, 0x9189, 0x918a, 0x918b, 0x918c,
+ 0x918d, 0x918e, 0x918f, 0x9190, 0x9191, 0x9193, 0x9194, 0x9195,
+ 0x9196, 0x9197, 0x9198, 0x9199, 0x919a, 0x919b, 0x919c, 0x919d,
+ 0x91a1, 0x91a2, 0x91a3, 0x91a4, 0x91a5, 0x91a6, 0x91a7, 0x91a8,
+ 0x91a9, 0x91aa, 0x91ab, 0x91ac, 0x91ad, 0x91ae, 0x91af, 0x91b0,
+ 0x91b1, 0x91b3, 0x91b4, 0x91b5, 0x91b6, 0x91b7, 0x91b8, 0x91b9,
+ 0x91ba, 0x91bb, 0x91bc, 0x91bd, 0x91c1, 0x91c2, 0x91c3, 0x91c4,
+ 0x91c5, 0x91c6, 0x91c7, 0x91c8, 0x91c9, 0x91ca, 0x91cb, 0x91cc,
+ 0x91cd, 0x91ce, 0x91cf, 0x91d0, 0x91d1, 0x91d3, 0x91d4, 0x91d5,
+ 0x91d6, 0x91d7, 0x91d8, 0x91d9, 0x91da, 0x91db, 0x91dc, 0x91dd,
+ 0x91e1, 0x91e2, 0x91e3, 0x91e4, 0x91e5, 0x91e6, 0x91e7, 0x91e8,
+ 0x91e9, 0x91ea, 0x91eb, 0x91ec, 0x91ed, 0x91ee, 0x91ef, 0x91f0,
+ 0x91f1, 0x91f3, 0x91f4, 0x91f5, 0x91f6, 0x91f7, 0x91f8, 0x91f9,
+ 0x91fa, 0x91fb, 0x91fc, 0x91fd, 0x9241, 0x9242, 0x9243, 0x9244,
+ 0x9245, 0x9246, 0x9247, 0x9248, 0x9249, 0x924a, 0x924b, 0x924c,
+ 0x924d, 0x924e, 0x924f, 0x9250, 0x9251, 0x9253, 0x9254, 0x9255,
+ 0x9256, 0x9257, 0x9258, 0x9259, 0x925a, 0x925b, 0x925c, 0x925d,
+ 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, 0x9266, 0x9267, 0x9268,
+ 0x9269, 0x926a, 0x926b, 0x926c, 0x926d, 0x926e, 0x926f, 0x9270,
+ 0x9271, 0x9273, 0x9274, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279,
+ /* 0xb200 .. 0xb2ff */
+ 0x927a, 0x927b, 0x927c, 0x927d, 0x9281, 0x9282, 0x9283, 0x9284,
+ 0x9285, 0x9286, 0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c,
+ 0x928d, 0x928e, 0x928f, 0x9290, 0x9291, 0x9293, 0x9294, 0x9295,
+ 0x9296, 0x9297, 0x9298, 0x9299, 0x929a, 0x929b, 0x929c, 0x929d,
+ 0x92a1, 0x92a2, 0x92a3, 0x92a4, 0x92a5, 0x92a6, 0x92a7, 0x92a8,
+ 0x92a9, 0x92aa, 0x92ab, 0x92ac, 0x92ad, 0x92ae, 0x92af, 0x92b0,
+ 0x92b1, 0x92b3, 0x92b4, 0x92b5, 0x92b6, 0x92b7, 0x92b8, 0x92b9,
+ 0x92ba, 0x92bb, 0x92bc, 0x92bd, 0x92c1, 0x92c2, 0x92c3, 0x92c4,
+ 0x92c5, 0x92c6, 0x92c7, 0x92c8, 0x92c9, 0x92ca, 0x92cb, 0x92cc,
+ 0x92cd, 0x92ce, 0x92cf, 0x92d0, 0x92d1, 0x92d3, 0x92d4, 0x92d5,
+ 0x92d6, 0x92d7, 0x92d8, 0x92d9, 0x92da, 0x92db, 0x92dc, 0x92dd,
+ 0x92e1, 0x92e2, 0x92e3, 0x92e4, 0x92e5, 0x92e6, 0x92e7, 0x92e8,
+ 0x92e9, 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0,
+ 0x92f1, 0x92f3, 0x92f4, 0x92f5, 0x92f6, 0x92f7, 0x92f8, 0x92f9,
+ 0x92fa, 0x92fb, 0x92fc, 0x92fd, 0x9341, 0x9342, 0x9343, 0x9344,
+ 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x934a, 0x934b, 0x934c,
+ 0x934d, 0x934e, 0x934f, 0x9350, 0x9351, 0x9353, 0x9354, 0x9355,
+ 0x9356, 0x9357, 0x9358, 0x9359, 0x935a, 0x935b, 0x935c, 0x935d,
+ 0x9361, 0x9362, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368,
+ 0x9369, 0x936a, 0x936b, 0x936c, 0x936d, 0x936e, 0x936f, 0x9370,
+ 0x9371, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379,
+ 0x937a, 0x937b, 0x937c, 0x937d, 0x9381, 0x9382, 0x9383, 0x9384,
+ 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938a, 0x938b, 0x938c,
+ 0x938d, 0x938e, 0x938f, 0x9390, 0x9391, 0x9393, 0x9394, 0x9395,
+ 0x9396, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, 0x939c, 0x939d,
+ 0x93a1, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6, 0x93a7, 0x93a8,
+ 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae, 0x93af, 0x93b0,
+ 0x93b1, 0x93b3, 0x93b4, 0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9,
+ 0x93ba, 0x93bb, 0x93bc, 0x93bd, 0x9461, 0x9462, 0x9463, 0x9464,
+ 0x9465, 0x9466, 0x9467, 0x9468, 0x9469, 0x946a, 0x946b, 0x946c,
+ 0x946d, 0x946e, 0x946f, 0x9470, 0x9471, 0x9473, 0x9474, 0x9475,
+ 0x9476, 0x9477, 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, 0x947d,
+ /* 0xb300 .. 0xb3ff */
+ 0x9481, 0x9482, 0x9483, 0x9484, 0x9485, 0x9486, 0x9487, 0x9488,
+ 0x9489, 0x948a, 0x948b, 0x948c, 0x948d, 0x948e, 0x948f, 0x9490,
+ 0x9491, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498, 0x9499,
+ 0x949a, 0x949b, 0x949c, 0x949d, 0x94a1, 0x94a2, 0x94a3, 0x94a4,
+ 0x94a5, 0x94a6, 0x94a7, 0x94a8, 0x94a9, 0x94aa, 0x94ab, 0x94ac,
+ 0x94ad, 0x94ae, 0x94af, 0x94b0, 0x94b1, 0x94b3, 0x94b4, 0x94b5,
+ 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bb, 0x94bc, 0x94bd,
+ 0x94c1, 0x94c2, 0x94c3, 0x94c4, 0x94c5, 0x94c6, 0x94c7, 0x94c8,
+ 0x94c9, 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94cf, 0x94d0,
+ 0x94d1, 0x94d3, 0x94d4, 0x94d5, 0x94d6, 0x94d7, 0x94d8, 0x94d9,
+ 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94e1, 0x94e2, 0x94e3, 0x94e4,
+ 0x94e5, 0x94e6, 0x94e7, 0x94e8, 0x94e9, 0x94ea, 0x94eb, 0x94ec,
+ 0x94ed, 0x94ee, 0x94ef, 0x94f0, 0x94f1, 0x94f3, 0x94f4, 0x94f5,
+ 0x94f6, 0x94f7, 0x94f8, 0x94f9, 0x94fa, 0x94fb, 0x94fc, 0x94fd,
+ 0x9541, 0x9542, 0x9543, 0x9544, 0x9545, 0x9546, 0x9547, 0x9548,
+ 0x9549, 0x954a, 0x954b, 0x954c, 0x954d, 0x954e, 0x954f, 0x9550,
+ 0x9551, 0x9553, 0x9554, 0x9555, 0x9556, 0x9557, 0x9558, 0x9559,
+ 0x955a, 0x955b, 0x955c, 0x955d, 0x9561, 0x9562, 0x9563, 0x9564,
+ 0x9565, 0x9566, 0x9567, 0x9568, 0x9569, 0x956a, 0x956b, 0x956c,
+ 0x956d, 0x956e, 0x956f, 0x9570, 0x9571, 0x9573, 0x9574, 0x9575,
+ 0x9576, 0x9577, 0x9578, 0x9579, 0x957a, 0x957b, 0x957c, 0x957d,
+ 0x9581, 0x9582, 0x9583, 0x9584, 0x9585, 0x9586, 0x9587, 0x9588,
+ 0x9589, 0x958a, 0x958b, 0x958c, 0x958d, 0x958e, 0x958f, 0x9590,
+ 0x9591, 0x9593, 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599,
+ 0x959a, 0x959b, 0x959c, 0x959d, 0x95a1, 0x95a2, 0x95a3, 0x95a4,
+ 0x95a5, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0x95aa, 0x95ab, 0x95ac,
+ 0x95ad, 0x95ae, 0x95af, 0x95b0, 0x95b1, 0x95b3, 0x95b4, 0x95b5,
+ 0x95b6, 0x95b7, 0x95b8, 0x95b9, 0x95ba, 0x95bb, 0x95bc, 0x95bd,
+ 0x95c1, 0x95c2, 0x95c3, 0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8,
+ 0x95c9, 0x95ca, 0x95cb, 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0,
+ 0x95d1, 0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9,
+ 0x95da, 0x95db, 0x95dc, 0x95dd, 0x95e1, 0x95e2, 0x95e3, 0x95e4,
+ /* 0xb400 .. 0xb4ff */
+ 0x95e5, 0x95e6, 0x95e7, 0x95e8, 0x95e9, 0x95ea, 0x95eb, 0x95ec,
+ 0x95ed, 0x95ee, 0x95ef, 0x95f0, 0x95f1, 0x95f3, 0x95f4, 0x95f5,
+ 0x95f6, 0x95f7, 0x95f8, 0x95f9, 0x95fa, 0x95fb, 0x95fc, 0x95fd,
+ 0x9641, 0x9642, 0x9643, 0x9644, 0x9645, 0x9646, 0x9647, 0x9648,
+ 0x9649, 0x964a, 0x964b, 0x964c, 0x964d, 0x964e, 0x964f, 0x9650,
+ 0x9651, 0x9653, 0x9654, 0x9655, 0x9656, 0x9657, 0x9658, 0x9659,
+ 0x965a, 0x965b, 0x965c, 0x965d, 0x9661, 0x9662, 0x9663, 0x9664,
+ 0x9665, 0x9666, 0x9667, 0x9668, 0x9669, 0x966a, 0x966b, 0x966c,
+ 0x966d, 0x966e, 0x966f, 0x9670, 0x9671, 0x9673, 0x9674, 0x9675,
+ 0x9676, 0x9677, 0x9678, 0x9679, 0x967a, 0x967b, 0x967c, 0x967d,
+ 0x9681, 0x9682, 0x9683, 0x9684, 0x9685, 0x9686, 0x9687, 0x9688,
+ 0x9689, 0x968a, 0x968b, 0x968c, 0x968d, 0x968e, 0x968f, 0x9690,
+ 0x9691, 0x9693, 0x9694, 0x9695, 0x9696, 0x9697, 0x9698, 0x9699,
+ 0x969a, 0x969b, 0x969c, 0x969d, 0x96a1, 0x96a2, 0x96a3, 0x96a4,
+ 0x96a5, 0x96a6, 0x96a7, 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac,
+ 0x96ad, 0x96ae, 0x96af, 0x96b0, 0x96b1, 0x96b3, 0x96b4, 0x96b5,
+ 0x96b6, 0x96b7, 0x96b8, 0x96b9, 0x96ba, 0x96bb, 0x96bc, 0x96bd,
+ 0x96c1, 0x96c2, 0x96c3, 0x96c4, 0x96c5, 0x96c6, 0x96c7, 0x96c8,
+ 0x96c9, 0x96ca, 0x96cb, 0x96cc, 0x96cd, 0x96ce, 0x96cf, 0x96d0,
+ 0x96d1, 0x96d3, 0x96d4, 0x96d5, 0x96d6, 0x96d7, 0x96d8, 0x96d9,
+ 0x96da, 0x96db, 0x96dc, 0x96dd, 0x96e1, 0x96e2, 0x96e3, 0x96e4,
+ 0x96e5, 0x96e6, 0x96e7, 0x96e8, 0x96e9, 0x96ea, 0x96eb, 0x96ec,
+ 0x96ed, 0x96ee, 0x96ef, 0x96f0, 0x96f1, 0x96f3, 0x96f4, 0x96f5,
+ 0x96f6, 0x96f7, 0x96f8, 0x96f9, 0x96fa, 0x96fb, 0x96fc, 0x96fd,
+ 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747, 0x9748,
+ 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, 0x974e, 0x974f, 0x9750,
+ 0x9751, 0x9753, 0x9754, 0x9755, 0x9756, 0x9757, 0x9758, 0x9759,
+ 0x975a, 0x975b, 0x975c, 0x975d, 0x9761, 0x9762, 0x9763, 0x9764,
+ 0x9765, 0x9766, 0x9767, 0x9768, 0x9769, 0x976a, 0x976b, 0x976c,
+ 0x976d, 0x976e, 0x976f, 0x9770, 0x9771, 0x9773, 0x9774, 0x9775,
+ 0x9776, 0x9777, 0x9778, 0x9779, 0x977a, 0x977b, 0x977c, 0x977d,
+ 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, 0x9787, 0x9788,
+ /* 0xb500 .. 0xb5ff */
+ 0x9789, 0x978a, 0x978b, 0x978c, 0x978d, 0x978e, 0x978f, 0x9790,
+ 0x9791, 0x9793, 0x9794, 0x9795, 0x9796, 0x9797, 0x9798, 0x9799,
+ 0x979a, 0x979b, 0x979c, 0x979d, 0x97a1, 0x97a2, 0x97a3, 0x97a4,
+ 0x97a5, 0x97a6, 0x97a7, 0x97a8, 0x97a9, 0x97aa, 0x97ab, 0x97ac,
+ 0x97ad, 0x97ae, 0x97af, 0x97b0, 0x97b1, 0x97b3, 0x97b4, 0x97b5,
+ 0x97b6, 0x97b7, 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc, 0x97bd,
+ 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866, 0x9867, 0x9868,
+ 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f, 0x9870,
+ 0x9871, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877, 0x9878, 0x9879,
+ 0x987a, 0x987b, 0x987c, 0x987d, 0x9881, 0x9882, 0x9883, 0x9884,
+ 0x9885, 0x9886, 0x9887, 0x9888, 0x9889, 0x988a, 0x988b, 0x988c,
+ 0x988d, 0x988e, 0x988f, 0x9890, 0x9891, 0x9893, 0x9894, 0x9895,
+ 0x9896, 0x9897, 0x9898, 0x9899, 0x989a, 0x989b, 0x989c, 0x989d,
+ 0x98a1, 0x98a2, 0x98a3, 0x98a4, 0x98a5, 0x98a6, 0x98a7, 0x98a8,
+ 0x98a9, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, 0x98af, 0x98b0,
+ 0x98b1, 0x98b3, 0x98b4, 0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9,
+ 0x98ba, 0x98bb, 0x98bc, 0x98bd, 0x98c1, 0x98c2, 0x98c3, 0x98c4,
+ 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0x98cb, 0x98cc,
+ 0x98cd, 0x98ce, 0x98cf, 0x98d0, 0x98d1, 0x98d3, 0x98d4, 0x98d5,
+ 0x98d6, 0x98d7, 0x98d8, 0x98d9, 0x98da, 0x98db, 0x98dc, 0x98dd,
+ 0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e7, 0x98e8,
+ 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, 0x98ef, 0x98f0,
+ 0x98f1, 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0x98f7, 0x98f8, 0x98f9,
+ 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x9941, 0x9942, 0x9943, 0x9944,
+ 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0x994a, 0x994b, 0x994c,
+ 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, 0x9953, 0x9954, 0x9955,
+ 0x9956, 0x9957, 0x9958, 0x9959, 0x995a, 0x995b, 0x995c, 0x995d,
+ 0x9961, 0x9962, 0x9963, 0x9964, 0x9965, 0x9966, 0x9967, 0x9968,
+ 0x9969, 0x996a, 0x996b, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970,
+ 0x9971, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, 0x9979,
+ 0x997a, 0x997b, 0x997c, 0x997d, 0x9981, 0x9982, 0x9983, 0x9984,
+ 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, 0x998a, 0x998b, 0x998c,
+ /* 0xb600 .. 0xb6ff */
+ 0x998d, 0x998e, 0x998f, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995,
+ 0x9996, 0x9997, 0x9998, 0x9999, 0x999a, 0x999b, 0x999c, 0x999d,
+ 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a5, 0x99a6, 0x99a7, 0x99a8,
+ 0x99a9, 0x99aa, 0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x99b0,
+ 0x99b1, 0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0x99b8, 0x99b9,
+ 0x99ba, 0x99bb, 0x99bc, 0x99bd, 0x99c1, 0x99c2, 0x99c3, 0x99c4,
+ 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9, 0x99ca, 0x99cb, 0x99cc,
+ 0x99cd, 0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d3, 0x99d4, 0x99d5,
+ 0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da, 0x99db, 0x99dc, 0x99dd,
+ 0x99e1, 0x99e2, 0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7, 0x99e8,
+ 0x99e9, 0x99ea, 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0x99f0,
+ 0x99f1, 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, 0x99f8, 0x99f9,
+ 0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x9a41, 0x9a42, 0x9a43, 0x9a44,
+ 0x9a45, 0x9a46, 0x9a47, 0x9a48, 0x9a49, 0x9a4a, 0x9a4b, 0x9a4c,
+ 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51, 0x9a53, 0x9a54, 0x9a55,
+ 0x9a56, 0x9a57, 0x9a58, 0x9a59, 0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d,
+ 0x9a61, 0x9a62, 0x9a63, 0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68,
+ 0x9a69, 0x9a6a, 0x9a6b, 0x9a6c, 0x9a6d, 0x9a6e, 0x9a6f, 0x9a70,
+ 0x9a71, 0x9a73, 0x9a74, 0x9a75, 0x9a76, 0x9a77, 0x9a78, 0x9a79,
+ 0x9a7a, 0x9a7b, 0x9a7c, 0x9a7d, 0x9a81, 0x9a82, 0x9a83, 0x9a84,
+ 0x9a85, 0x9a86, 0x9a87, 0x9a88, 0x9a89, 0x9a8a, 0x9a8b, 0x9a8c,
+ 0x9a8d, 0x9a8e, 0x9a8f, 0x9a90, 0x9a91, 0x9a93, 0x9a94, 0x9a95,
+ 0x9a96, 0x9a97, 0x9a98, 0x9a99, 0x9a9a, 0x9a9b, 0x9a9c, 0x9a9d,
+ 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, 0x9aa5, 0x9aa6, 0x9aa7, 0x9aa8,
+ 0x9aa9, 0x9aaa, 0x9aab, 0x9aac, 0x9aad, 0x9aae, 0x9aaf, 0x9ab0,
+ 0x9ab1, 0x9ab3, 0x9ab4, 0x9ab5, 0x9ab6, 0x9ab7, 0x9ab8, 0x9ab9,
+ 0x9aba, 0x9abb, 0x9abc, 0x9abd, 0x9ac1, 0x9ac2, 0x9ac3, 0x9ac4,
+ 0x9ac5, 0x9ac6, 0x9ac7, 0x9ac8, 0x9ac9, 0x9aca, 0x9acb, 0x9acc,
+ 0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad1, 0x9ad3, 0x9ad4, 0x9ad5,
+ 0x9ad6, 0x9ad7, 0x9ad8, 0x9ad9, 0x9ada, 0x9adb, 0x9adc, 0x9add,
+ 0x9ae1, 0x9ae2, 0x9ae3, 0x9ae4, 0x9ae5, 0x9ae6, 0x9ae7, 0x9ae8,
+ 0x9ae9, 0x9aea, 0x9aeb, 0x9aec, 0x9aed, 0x9aee, 0x9aef, 0x9af0,
+ /* 0xb700 .. 0xb7ff */
+ 0x9af1, 0x9af3, 0x9af4, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9af9,
+ 0x9afa, 0x9afb, 0x9afc, 0x9afd, 0x9b41, 0x9b42, 0x9b43, 0x9b44,
+ 0x9b45, 0x9b46, 0x9b47, 0x9b48, 0x9b49, 0x9b4a, 0x9b4b, 0x9b4c,
+ 0x9b4d, 0x9b4e, 0x9b4f, 0x9b50, 0x9b51, 0x9b53, 0x9b54, 0x9b55,
+ 0x9b56, 0x9b57, 0x9b58, 0x9b59, 0x9b5a, 0x9b5b, 0x9b5c, 0x9b5d,
+ 0x9b61, 0x9b62, 0x9b63, 0x9b64, 0x9b65, 0x9b66, 0x9b67, 0x9b68,
+ 0x9b69, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, 0x9b70,
+ 0x9b71, 0x9b73, 0x9b74, 0x9b75, 0x9b76, 0x9b77, 0x9b78, 0x9b79,
+ 0x9b7a, 0x9b7b, 0x9b7c, 0x9b7d, 0x9b81, 0x9b82, 0x9b83, 0x9b84,
+ 0x9b85, 0x9b86, 0x9b87, 0x9b88, 0x9b89, 0x9b8a, 0x9b8b, 0x9b8c,
+ 0x9b8d, 0x9b8e, 0x9b8f, 0x9b90, 0x9b91, 0x9b93, 0x9b94, 0x9b95,
+ 0x9b96, 0x9b97, 0x9b98, 0x9b99, 0x9b9a, 0x9b9b, 0x9b9c, 0x9b9d,
+ 0x9ba1, 0x9ba2, 0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0x9ba8,
+ 0x9ba9, 0x9baa, 0x9bab, 0x9bac, 0x9bad, 0x9bae, 0x9baf, 0x9bb0,
+ 0x9bb1, 0x9bb3, 0x9bb4, 0x9bb5, 0x9bb6, 0x9bb7, 0x9bb8, 0x9bb9,
+ 0x9bba, 0x9bbb, 0x9bbc, 0x9bbd, 0x9c61, 0x9c62, 0x9c63, 0x9c64,
+ 0x9c65, 0x9c66, 0x9c67, 0x9c68, 0x9c69, 0x9c6a, 0x9c6b, 0x9c6c,
+ 0x9c6d, 0x9c6e, 0x9c6f, 0x9c70, 0x9c71, 0x9c73, 0x9c74, 0x9c75,
+ 0x9c76, 0x9c77, 0x9c78, 0x9c79, 0x9c7a, 0x9c7b, 0x9c7c, 0x9c7d,
+ 0x9c81, 0x9c82, 0x9c83, 0x9c84, 0x9c85, 0x9c86, 0x9c87, 0x9c88,
+ 0x9c89, 0x9c8a, 0x9c8b, 0x9c8c, 0x9c8d, 0x9c8e, 0x9c8f, 0x9c90,
+ 0x9c91, 0x9c93, 0x9c94, 0x9c95, 0x9c96, 0x9c97, 0x9c98, 0x9c99,
+ 0x9c9a, 0x9c9b, 0x9c9c, 0x9c9d, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4,
+ 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8, 0x9ca9, 0x9caa, 0x9cab, 0x9cac,
+ 0x9cad, 0x9cae, 0x9caf, 0x9cb0, 0x9cb1, 0x9cb3, 0x9cb4, 0x9cb5,
+ 0x9cb6, 0x9cb7, 0x9cb8, 0x9cb9, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd,
+ 0x9cc1, 0x9cc2, 0x9cc3, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cc8,
+ 0x9cc9, 0x9cca, 0x9ccb, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0,
+ 0x9cd1, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd6, 0x9cd7, 0x9cd8, 0x9cd9,
+ 0x9cda, 0x9cdb, 0x9cdc, 0x9cdd, 0x9ce1, 0x9ce2, 0x9ce3, 0x9ce4,
+ 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0x9ce9, 0x9cea, 0x9ceb, 0x9cec,
+ 0x9ced, 0x9cee, 0x9cef, 0x9cf0, 0x9cf1, 0x9cf3, 0x9cf4, 0x9cf5,
+ /* 0xb800 .. 0xb8ff */
+ 0x9cf6, 0x9cf7, 0x9cf8, 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd,
+ 0x9d41, 0x9d42, 0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, 0x9d48,
+ 0x9d49, 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f, 0x9d50,
+ 0x9d51, 0x9d53, 0x9d54, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59,
+ 0x9d5a, 0x9d5b, 0x9d5c, 0x9d5d, 0x9d61, 0x9d62, 0x9d63, 0x9d64,
+ 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, 0x9d6a, 0x9d6b, 0x9d6c,
+ 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, 0x9d73, 0x9d74, 0x9d75,
+ 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a, 0x9d7b, 0x9d7c, 0x9d7d,
+ 0x9d81, 0x9d82, 0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, 0x9d88,
+ 0x9d89, 0x9d8a, 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90,
+ 0x9d91, 0x9d93, 0x9d94, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9d99,
+ 0x9d9a, 0x9d9b, 0x9d9c, 0x9d9d, 0x9da1, 0x9da2, 0x9da3, 0x9da4,
+ 0x9da5, 0x9da6, 0x9da7, 0x9da8, 0x9da9, 0x9daa, 0x9dab, 0x9dac,
+ 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0x9db1, 0x9db3, 0x9db4, 0x9db5,
+ 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba, 0x9dbb, 0x9dbc, 0x9dbd,
+ 0x9dc1, 0x9dc2, 0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8,
+ 0x9dc9, 0x9dca, 0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0,
+ 0x9dd1, 0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dd8, 0x9dd9,
+ 0x9dda, 0x9ddb, 0x9ddc, 0x9ddd, 0x9de1, 0x9de2, 0x9de3, 0x9de4,
+ 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, 0x9dea, 0x9deb, 0x9dec,
+ 0x9ded, 0x9dee, 0x9def, 0x9df0, 0x9df1, 0x9df3, 0x9df4, 0x9df5,
+ 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0x9dfa, 0x9dfb, 0x9dfc, 0x9dfd,
+ 0x9e41, 0x9e42, 0x9e43, 0x9e44, 0x9e45, 0x9e46, 0x9e47, 0x9e48,
+ 0x9e49, 0x9e4a, 0x9e4b, 0x9e4c, 0x9e4d, 0x9e4e, 0x9e4f, 0x9e50,
+ 0x9e51, 0x9e53, 0x9e54, 0x9e55, 0x9e56, 0x9e57, 0x9e58, 0x9e59,
+ 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5d, 0x9e61, 0x9e62, 0x9e63, 0x9e64,
+ 0x9e65, 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c,
+ 0x9e6d, 0x9e6e, 0x9e6f, 0x9e70, 0x9e71, 0x9e73, 0x9e74, 0x9e75,
+ 0x9e76, 0x9e77, 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e7d,
+ 0x9e81, 0x9e82, 0x9e83, 0x9e84, 0x9e85, 0x9e86, 0x9e87, 0x9e88,
+ 0x9e89, 0x9e8a, 0x9e8b, 0x9e8c, 0x9e8d, 0x9e8e, 0x9e8f, 0x9e90,
+ 0x9e91, 0x9e93, 0x9e94, 0x9e95, 0x9e96, 0x9e97, 0x9e98, 0x9e99,
+ /* 0xb900 .. 0xb9ff */
+ 0x9e9a, 0x9e9b, 0x9e9c, 0x9e9d, 0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4,
+ 0x9ea5, 0x9ea6, 0x9ea7, 0x9ea8, 0x9ea9, 0x9eaa, 0x9eab, 0x9eac,
+ 0x9ead, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb3, 0x9eb4, 0x9eb5,
+ 0x9eb6, 0x9eb7, 0x9eb8, 0x9eb9, 0x9eba, 0x9ebb, 0x9ebc, 0x9ebd,
+ 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec4, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8,
+ 0x9ec9, 0x9eca, 0x9ecb, 0x9ecc, 0x9ecd, 0x9ece, 0x9ecf, 0x9ed0,
+ 0x9ed1, 0x9ed3, 0x9ed4, 0x9ed5, 0x9ed6, 0x9ed7, 0x9ed8, 0x9ed9,
+ 0x9eda, 0x9edb, 0x9edc, 0x9edd, 0x9ee1, 0x9ee2, 0x9ee3, 0x9ee4,
+ 0x9ee5, 0x9ee6, 0x9ee7, 0x9ee8, 0x9ee9, 0x9eea, 0x9eeb, 0x9eec,
+ 0x9eed, 0x9eee, 0x9eef, 0x9ef0, 0x9ef1, 0x9ef3, 0x9ef4, 0x9ef5,
+ 0x9ef6, 0x9ef7, 0x9ef8, 0x9ef9, 0x9efa, 0x9efb, 0x9efc, 0x9efd,
+ 0x9f41, 0x9f42, 0x9f43, 0x9f44, 0x9f45, 0x9f46, 0x9f47, 0x9f48,
+ 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f, 0x9f50,
+ 0x9f51, 0x9f53, 0x9f54, 0x9f55, 0x9f56, 0x9f57, 0x9f58, 0x9f59,
+ 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f61, 0x9f62, 0x9f63, 0x9f64,
+ 0x9f65, 0x9f66, 0x9f67, 0x9f68, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c,
+ 0x9f6d, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f73, 0x9f74, 0x9f75,
+ 0x9f76, 0x9f77, 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d,
+ 0x9f81, 0x9f82, 0x9f83, 0x9f84, 0x9f85, 0x9f86, 0x9f87, 0x9f88,
+ 0x9f89, 0x9f8a, 0x9f8b, 0x9f8c, 0x9f8d, 0x9f8e, 0x9f8f, 0x9f90,
+ 0x9f91, 0x9f93, 0x9f94, 0x9f95, 0x9f96, 0x9f97, 0x9f98, 0x9f99,
+ 0x9f9a, 0x9f9b, 0x9f9c, 0x9f9d, 0x9fa1, 0x9fa2, 0x9fa3, 0x9fa4,
+ 0x9fa5, 0x9fa6, 0x9fa7, 0x9fa8, 0x9fa9, 0x9faa, 0x9fab, 0x9fac,
+ 0x9fad, 0x9fae, 0x9faf, 0x9fb0, 0x9fb1, 0x9fb3, 0x9fb4, 0x9fb5,
+ 0x9fb6, 0x9fb7, 0x9fb8, 0x9fb9, 0x9fba, 0x9fbb, 0x9fbc, 0x9fbd,
+ 0xa061, 0xa062, 0xa063, 0xa064, 0xa065, 0xa066, 0xa067, 0xa068,
+ 0xa069, 0xa06a, 0xa06b, 0xa06c, 0xa06d, 0xa06e, 0xa06f, 0xa070,
+ 0xa071, 0xa073, 0xa074, 0xa075, 0xa076, 0xa077, 0xa078, 0xa079,
+ 0xa07a, 0xa07b, 0xa07c, 0xa07d, 0xa081, 0xa082, 0xa083, 0xa084,
+ 0xa085, 0xa086, 0xa087, 0xa088, 0xa089, 0xa08a, 0xa08b, 0xa08c,
+ 0xa08d, 0xa08e, 0xa08f, 0xa090, 0xa091, 0xa093, 0xa094, 0xa095,
+ 0xa096, 0xa097, 0xa098, 0xa099, 0xa09a, 0xa09b, 0xa09c, 0xa09d,
+ /* 0xba00 .. 0xbaff */
+ 0xa0a1, 0xa0a2, 0xa0a3, 0xa0a4, 0xa0a5, 0xa0a6, 0xa0a7, 0xa0a8,
+ 0xa0a9, 0xa0aa, 0xa0ab, 0xa0ac, 0xa0ad, 0xa0ae, 0xa0af, 0xa0b0,
+ 0xa0b1, 0xa0b3, 0xa0b4, 0xa0b5, 0xa0b6, 0xa0b7, 0xa0b8, 0xa0b9,
+ 0xa0ba, 0xa0bb, 0xa0bc, 0xa0bd, 0xa0c1, 0xa0c2, 0xa0c3, 0xa0c4,
+ 0xa0c5, 0xa0c6, 0xa0c7, 0xa0c8, 0xa0c9, 0xa0ca, 0xa0cb, 0xa0cc,
+ 0xa0cd, 0xa0ce, 0xa0cf, 0xa0d0, 0xa0d1, 0xa0d3, 0xa0d4, 0xa0d5,
+ 0xa0d6, 0xa0d7, 0xa0d8, 0xa0d9, 0xa0da, 0xa0db, 0xa0dc, 0xa0dd,
+ 0xa0e1, 0xa0e2, 0xa0e3, 0xa0e4, 0xa0e5, 0xa0e6, 0xa0e7, 0xa0e8,
+ 0xa0e9, 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ed, 0xa0ee, 0xa0ef, 0xa0f0,
+ 0xa0f1, 0xa0f3, 0xa0f4, 0xa0f5, 0xa0f6, 0xa0f7, 0xa0f8, 0xa0f9,
+ 0xa0fa, 0xa0fb, 0xa0fc, 0xa0fd, 0xa141, 0xa142, 0xa143, 0xa144,
+ 0xa145, 0xa146, 0xa147, 0xa148, 0xa149, 0xa14a, 0xa14b, 0xa14c,
+ 0xa14d, 0xa14e, 0xa14f, 0xa150, 0xa151, 0xa153, 0xa154, 0xa155,
+ 0xa156, 0xa157, 0xa158, 0xa159, 0xa15a, 0xa15b, 0xa15c, 0xa15d,
+ 0xa161, 0xa162, 0xa163, 0xa164, 0xa165, 0xa166, 0xa167, 0xa168,
+ 0xa169, 0xa16a, 0xa16b, 0xa16c, 0xa16d, 0xa16e, 0xa16f, 0xa170,
+ 0xa171, 0xa173, 0xa174, 0xa175, 0xa176, 0xa177, 0xa178, 0xa179,
+ 0xa17a, 0xa17b, 0xa17c, 0xa17d, 0xa181, 0xa182, 0xa183, 0xa184,
+ 0xa185, 0xa186, 0xa187, 0xa188, 0xa189, 0xa18a, 0xa18b, 0xa18c,
+ 0xa18d, 0xa18e, 0xa18f, 0xa190, 0xa191, 0xa193, 0xa194, 0xa195,
+ 0xa196, 0xa197, 0xa198, 0xa199, 0xa19a, 0xa19b, 0xa19c, 0xa19d,
+ 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1a5, 0xa1a6, 0xa1a7, 0xa1a8,
+ 0xa1a9, 0xa1aa, 0xa1ab, 0xa1ac, 0xa1ad, 0xa1ae, 0xa1af, 0xa1b0,
+ 0xa1b1, 0xa1b3, 0xa1b4, 0xa1b5, 0xa1b6, 0xa1b7, 0xa1b8, 0xa1b9,
+ 0xa1ba, 0xa1bb, 0xa1bc, 0xa1bd, 0xa1c1, 0xa1c2, 0xa1c3, 0xa1c4,
+ 0xa1c5, 0xa1c6, 0xa1c7, 0xa1c8, 0xa1c9, 0xa1ca, 0xa1cb, 0xa1cc,
+ 0xa1cd, 0xa1ce, 0xa1cf, 0xa1d0, 0xa1d1, 0xa1d3, 0xa1d4, 0xa1d5,
+ 0xa1d6, 0xa1d7, 0xa1d8, 0xa1d9, 0xa1da, 0xa1db, 0xa1dc, 0xa1dd,
+ 0xa1e1, 0xa1e2, 0xa1e3, 0xa1e4, 0xa1e5, 0xa1e6, 0xa1e7, 0xa1e8,
+ 0xa1e9, 0xa1ea, 0xa1eb, 0xa1ec, 0xa1ed, 0xa1ee, 0xa1ef, 0xa1f0,
+ 0xa1f1, 0xa1f3, 0xa1f4, 0xa1f5, 0xa1f6, 0xa1f7, 0xa1f8, 0xa1f9,
+ 0xa1fa, 0xa1fb, 0xa1fc, 0xa1fd, 0xa241, 0xa242, 0xa243, 0xa244,
+ /* 0xbb00 .. 0xbbff */
+ 0xa245, 0xa246, 0xa247, 0xa248, 0xa249, 0xa24a, 0xa24b, 0xa24c,
+ 0xa24d, 0xa24e, 0xa24f, 0xa250, 0xa251, 0xa253, 0xa254, 0xa255,
+ 0xa256, 0xa257, 0xa258, 0xa259, 0xa25a, 0xa25b, 0xa25c, 0xa25d,
+ 0xa261, 0xa262, 0xa263, 0xa264, 0xa265, 0xa266, 0xa267, 0xa268,
+ 0xa269, 0xa26a, 0xa26b, 0xa26c, 0xa26d, 0xa26e, 0xa26f, 0xa270,
+ 0xa271, 0xa273, 0xa274, 0xa275, 0xa276, 0xa277, 0xa278, 0xa279,
+ 0xa27a, 0xa27b, 0xa27c, 0xa27d, 0xa281, 0xa282, 0xa283, 0xa284,
+ 0xa285, 0xa286, 0xa287, 0xa288, 0xa289, 0xa28a, 0xa28b, 0xa28c,
+ 0xa28d, 0xa28e, 0xa28f, 0xa290, 0xa291, 0xa293, 0xa294, 0xa295,
+ 0xa296, 0xa297, 0xa298, 0xa299, 0xa29a, 0xa29b, 0xa29c, 0xa29d,
+ 0xa2a1, 0xa2a2, 0xa2a3, 0xa2a4, 0xa2a5, 0xa2a6, 0xa2a7, 0xa2a8,
+ 0xa2a9, 0xa2aa, 0xa2ab, 0xa2ac, 0xa2ad, 0xa2ae, 0xa2af, 0xa2b0,
+ 0xa2b1, 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, 0xa2b9,
+ 0xa2ba, 0xa2bb, 0xa2bc, 0xa2bd, 0xa2c1, 0xa2c2, 0xa2c3, 0xa2c4,
+ 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, 0xa2c9, 0xa2ca, 0xa2cb, 0xa2cc,
+ 0xa2cd, 0xa2ce, 0xa2cf, 0xa2d0, 0xa2d1, 0xa2d3, 0xa2d4, 0xa2d5,
+ 0xa2d6, 0xa2d7, 0xa2d8, 0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd,
+ 0xa2e1, 0xa2e2, 0xa2e3, 0xa2e4, 0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8,
+ 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ed, 0xa2ee, 0xa2ef, 0xa2f0,
+ 0xa2f1, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7, 0xa2f8, 0xa2f9,
+ 0xa2fa, 0xa2fb, 0xa2fc, 0xa2fd, 0xa341, 0xa342, 0xa343, 0xa344,
+ 0xa345, 0xa346, 0xa347, 0xa348, 0xa349, 0xa34a, 0xa34b, 0xa34c,
+ 0xa34d, 0xa34e, 0xa34f, 0xa350, 0xa351, 0xa353, 0xa354, 0xa355,
+ 0xa356, 0xa357, 0xa358, 0xa359, 0xa35a, 0xa35b, 0xa35c, 0xa35d,
+ 0xa361, 0xa362, 0xa363, 0xa364, 0xa365, 0xa366, 0xa367, 0xa368,
+ 0xa369, 0xa36a, 0xa36b, 0xa36c, 0xa36d, 0xa36e, 0xa36f, 0xa370,
+ 0xa371, 0xa373, 0xa374, 0xa375, 0xa376, 0xa377, 0xa378, 0xa379,
+ 0xa37a, 0xa37b, 0xa37c, 0xa37d, 0xa381, 0xa382, 0xa383, 0xa384,
+ 0xa385, 0xa386, 0xa387, 0xa388, 0xa389, 0xa38a, 0xa38b, 0xa38c,
+ 0xa38d, 0xa38e, 0xa38f, 0xa390, 0xa391, 0xa393, 0xa394, 0xa395,
+ 0xa396, 0xa397, 0xa398, 0xa399, 0xa39a, 0xa39b, 0xa39c, 0xa39d,
+ 0xa3a1, 0xa3a2, 0xa3a3, 0xa3a4, 0xa3a5, 0xa3a6, 0xa3a7, 0xa3a8,
+ /* 0xbc00 .. 0xbcff */
+ 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, 0xa3b0,
+ 0xa3b1, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, 0xa3b8, 0xa3b9,
+ 0xa3ba, 0xa3bb, 0xa3bc, 0xa3bd, 0xa461, 0xa462, 0xa463, 0xa464,
+ 0xa465, 0xa466, 0xa467, 0xa468, 0xa469, 0xa46a, 0xa46b, 0xa46c,
+ 0xa46d, 0xa46e, 0xa46f, 0xa470, 0xa471, 0xa473, 0xa474, 0xa475,
+ 0xa476, 0xa477, 0xa478, 0xa479, 0xa47a, 0xa47b, 0xa47c, 0xa47d,
+ 0xa481, 0xa482, 0xa483, 0xa484, 0xa485, 0xa486, 0xa487, 0xa488,
+ 0xa489, 0xa48a, 0xa48b, 0xa48c, 0xa48d, 0xa48e, 0xa48f, 0xa490,
+ 0xa491, 0xa493, 0xa494, 0xa495, 0xa496, 0xa497, 0xa498, 0xa499,
+ 0xa49a, 0xa49b, 0xa49c, 0xa49d, 0xa4a1, 0xa4a2, 0xa4a3, 0xa4a4,
+ 0xa4a5, 0xa4a6, 0xa4a7, 0xa4a8, 0xa4a9, 0xa4aa, 0xa4ab, 0xa4ac,
+ 0xa4ad, 0xa4ae, 0xa4af, 0xa4b0, 0xa4b1, 0xa4b3, 0xa4b4, 0xa4b5,
+ 0xa4b6, 0xa4b7, 0xa4b8, 0xa4b9, 0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd,
+ 0xa4c1, 0xa4c2, 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c6, 0xa4c7, 0xa4c8,
+ 0xa4c9, 0xa4ca, 0xa4cb, 0xa4cc, 0xa4cd, 0xa4ce, 0xa4cf, 0xa4d0,
+ 0xa4d1, 0xa4d3, 0xa4d4, 0xa4d5, 0xa4d6, 0xa4d7, 0xa4d8, 0xa4d9,
+ 0xa4da, 0xa4db, 0xa4dc, 0xa4dd, 0xa4e1, 0xa4e2, 0xa4e3, 0xa4e4,
+ 0xa4e5, 0xa4e6, 0xa4e7, 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec,
+ 0xa4ed, 0xa4ee, 0xa4ef, 0xa4f0, 0xa4f1, 0xa4f3, 0xa4f4, 0xa4f5,
+ 0xa4f6, 0xa4f7, 0xa4f8, 0xa4f9, 0xa4fa, 0xa4fb, 0xa4fc, 0xa4fd,
+ 0xa541, 0xa542, 0xa543, 0xa544, 0xa545, 0xa546, 0xa547, 0xa548,
+ 0xa549, 0xa54a, 0xa54b, 0xa54c, 0xa54d, 0xa54e, 0xa54f, 0xa550,
+ 0xa551, 0xa553, 0xa554, 0xa555, 0xa556, 0xa557, 0xa558, 0xa559,
+ 0xa55a, 0xa55b, 0xa55c, 0xa55d, 0xa561, 0xa562, 0xa563, 0xa564,
+ 0xa565, 0xa566, 0xa567, 0xa568, 0xa569, 0xa56a, 0xa56b, 0xa56c,
+ 0xa56d, 0xa56e, 0xa56f, 0xa570, 0xa571, 0xa573, 0xa574, 0xa575,
+ 0xa576, 0xa577, 0xa578, 0xa579, 0xa57a, 0xa57b, 0xa57c, 0xa57d,
+ 0xa581, 0xa582, 0xa583, 0xa584, 0xa585, 0xa586, 0xa587, 0xa588,
+ 0xa589, 0xa58a, 0xa58b, 0xa58c, 0xa58d, 0xa58e, 0xa58f, 0xa590,
+ 0xa591, 0xa593, 0xa594, 0xa595, 0xa596, 0xa597, 0xa598, 0xa599,
+ 0xa59a, 0xa59b, 0xa59c, 0xa59d, 0xa5a1, 0xa5a2, 0xa5a3, 0xa5a4,
+ 0xa5a5, 0xa5a6, 0xa5a7, 0xa5a8, 0xa5a9, 0xa5aa, 0xa5ab, 0xa5ac,
+ /* 0xbd00 .. 0xbdff */
+ 0xa5ad, 0xa5ae, 0xa5af, 0xa5b0, 0xa5b1, 0xa5b3, 0xa5b4, 0xa5b5,
+ 0xa5b6, 0xa5b7, 0xa5b8, 0xa5b9, 0xa5ba, 0xa5bb, 0xa5bc, 0xa5bd,
+ 0xa5c1, 0xa5c2, 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c6, 0xa5c7, 0xa5c8,
+ 0xa5c9, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf, 0xa5d0,
+ 0xa5d1, 0xa5d3, 0xa5d4, 0xa5d5, 0xa5d6, 0xa5d7, 0xa5d8, 0xa5d9,
+ 0xa5da, 0xa5db, 0xa5dc, 0xa5dd, 0xa5e1, 0xa5e2, 0xa5e3, 0xa5e4,
+ 0xa5e5, 0xa5e6, 0xa5e7, 0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec,
+ 0xa5ed, 0xa5ee, 0xa5ef, 0xa5f0, 0xa5f1, 0xa5f3, 0xa5f4, 0xa5f5,
+ 0xa5f6, 0xa5f7, 0xa5f8, 0xa5f9, 0xa5fa, 0xa5fb, 0xa5fc, 0xa5fd,
+ 0xa641, 0xa642, 0xa643, 0xa644, 0xa645, 0xa646, 0xa647, 0xa648,
+ 0xa649, 0xa64a, 0xa64b, 0xa64c, 0xa64d, 0xa64e, 0xa64f, 0xa650,
+ 0xa651, 0xa653, 0xa654, 0xa655, 0xa656, 0xa657, 0xa658, 0xa659,
+ 0xa65a, 0xa65b, 0xa65c, 0xa65d, 0xa661, 0xa662, 0xa663, 0xa664,
+ 0xa665, 0xa666, 0xa667, 0xa668, 0xa669, 0xa66a, 0xa66b, 0xa66c,
+ 0xa66d, 0xa66e, 0xa66f, 0xa670, 0xa671, 0xa673, 0xa674, 0xa675,
+ 0xa676, 0xa677, 0xa678, 0xa679, 0xa67a, 0xa67b, 0xa67c, 0xa67d,
+ 0xa681, 0xa682, 0xa683, 0xa684, 0xa685, 0xa686, 0xa687, 0xa688,
+ 0xa689, 0xa68a, 0xa68b, 0xa68c, 0xa68d, 0xa68e, 0xa68f, 0xa690,
+ 0xa691, 0xa693, 0xa694, 0xa695, 0xa696, 0xa697, 0xa698, 0xa699,
+ 0xa69a, 0xa69b, 0xa69c, 0xa69d, 0xa6a1, 0xa6a2, 0xa6a3, 0xa6a4,
+ 0xa6a5, 0xa6a6, 0xa6a7, 0xa6a8, 0xa6a9, 0xa6aa, 0xa6ab, 0xa6ac,
+ 0xa6ad, 0xa6ae, 0xa6af, 0xa6b0, 0xa6b1, 0xa6b3, 0xa6b4, 0xa6b5,
+ 0xa6b6, 0xa6b7, 0xa6b8, 0xa6b9, 0xa6ba, 0xa6bb, 0xa6bc, 0xa6bd,
+ 0xa6c1, 0xa6c2, 0xa6c3, 0xa6c4, 0xa6c5, 0xa6c6, 0xa6c7, 0xa6c8,
+ 0xa6c9, 0xa6ca, 0xa6cb, 0xa6cc, 0xa6cd, 0xa6ce, 0xa6cf, 0xa6d0,
+ 0xa6d1, 0xa6d3, 0xa6d4, 0xa6d5, 0xa6d6, 0xa6d7, 0xa6d8, 0xa6d9,
+ 0xa6da, 0xa6db, 0xa6dc, 0xa6dd, 0xa6e1, 0xa6e2, 0xa6e3, 0xa6e4,
+ 0xa6e5, 0xa6e6, 0xa6e7, 0xa6e8, 0xa6e9, 0xa6ea, 0xa6eb, 0xa6ec,
+ 0xa6ed, 0xa6ee, 0xa6ef, 0xa6f0, 0xa6f1, 0xa6f3, 0xa6f4, 0xa6f5,
+ 0xa6f6, 0xa6f7, 0xa6f8, 0xa6f9, 0xa6fa, 0xa6fb, 0xa6fc, 0xa6fd,
+ 0xa741, 0xa742, 0xa743, 0xa744, 0xa745, 0xa746, 0xa747, 0xa748,
+ 0xa749, 0xa74a, 0xa74b, 0xa74c, 0xa74d, 0xa74e, 0xa74f, 0xa750,
+ /* 0xbe00 .. 0xbeff */
+ 0xa751, 0xa753, 0xa754, 0xa755, 0xa756, 0xa757, 0xa758, 0xa759,
+ 0xa75a, 0xa75b, 0xa75c, 0xa75d, 0xa761, 0xa762, 0xa763, 0xa764,
+ 0xa765, 0xa766, 0xa767, 0xa768, 0xa769, 0xa76a, 0xa76b, 0xa76c,
+ 0xa76d, 0xa76e, 0xa76f, 0xa770, 0xa771, 0xa773, 0xa774, 0xa775,
+ 0xa776, 0xa777, 0xa778, 0xa779, 0xa77a, 0xa77b, 0xa77c, 0xa77d,
+ 0xa781, 0xa782, 0xa783, 0xa784, 0xa785, 0xa786, 0xa787, 0xa788,
+ 0xa789, 0xa78a, 0xa78b, 0xa78c, 0xa78d, 0xa78e, 0xa78f, 0xa790,
+ 0xa791, 0xa793, 0xa794, 0xa795, 0xa796, 0xa797, 0xa798, 0xa799,
+ 0xa79a, 0xa79b, 0xa79c, 0xa79d, 0xa7a1, 0xa7a2, 0xa7a3, 0xa7a4,
+ 0xa7a5, 0xa7a6, 0xa7a7, 0xa7a8, 0xa7a9, 0xa7aa, 0xa7ab, 0xa7ac,
+ 0xa7ad, 0xa7ae, 0xa7af, 0xa7b0, 0xa7b1, 0xa7b3, 0xa7b4, 0xa7b5,
+ 0xa7b6, 0xa7b7, 0xa7b8, 0xa7b9, 0xa7ba, 0xa7bb, 0xa7bc, 0xa7bd,
+ 0xa861, 0xa862, 0xa863, 0xa864, 0xa865, 0xa866, 0xa867, 0xa868,
+ 0xa869, 0xa86a, 0xa86b, 0xa86c, 0xa86d, 0xa86e, 0xa86f, 0xa870,
+ 0xa871, 0xa873, 0xa874, 0xa875, 0xa876, 0xa877, 0xa878, 0xa879,
+ 0xa87a, 0xa87b, 0xa87c, 0xa87d, 0xa881, 0xa882, 0xa883, 0xa884,
+ 0xa885, 0xa886, 0xa887, 0xa888, 0xa889, 0xa88a, 0xa88b, 0xa88c,
+ 0xa88d, 0xa88e, 0xa88f, 0xa890, 0xa891, 0xa893, 0xa894, 0xa895,
+ 0xa896, 0xa897, 0xa898, 0xa899, 0xa89a, 0xa89b, 0xa89c, 0xa89d,
+ 0xa8a1, 0xa8a2, 0xa8a3, 0xa8a4, 0xa8a5, 0xa8a6, 0xa8a7, 0xa8a8,
+ 0xa8a9, 0xa8aa, 0xa8ab, 0xa8ac, 0xa8ad, 0xa8ae, 0xa8af, 0xa8b0,
+ 0xa8b1, 0xa8b3, 0xa8b4, 0xa8b5, 0xa8b6, 0xa8b7, 0xa8b8, 0xa8b9,
+ 0xa8ba, 0xa8bb, 0xa8bc, 0xa8bd, 0xa8c1, 0xa8c2, 0xa8c3, 0xa8c4,
+ 0xa8c5, 0xa8c6, 0xa8c7, 0xa8c8, 0xa8c9, 0xa8ca, 0xa8cb, 0xa8cc,
+ 0xa8cd, 0xa8ce, 0xa8cf, 0xa8d0, 0xa8d1, 0xa8d3, 0xa8d4, 0xa8d5,
+ 0xa8d6, 0xa8d7, 0xa8d8, 0xa8d9, 0xa8da, 0xa8db, 0xa8dc, 0xa8dd,
+ 0xa8e1, 0xa8e2, 0xa8e3, 0xa8e4, 0xa8e5, 0xa8e6, 0xa8e7, 0xa8e8,
+ 0xa8e9, 0xa8ea, 0xa8eb, 0xa8ec, 0xa8ed, 0xa8ee, 0xa8ef, 0xa8f0,
+ 0xa8f1, 0xa8f3, 0xa8f4, 0xa8f5, 0xa8f6, 0xa8f7, 0xa8f8, 0xa8f9,
+ 0xa8fa, 0xa8fb, 0xa8fc, 0xa8fd, 0xa941, 0xa942, 0xa943, 0xa944,
+ 0xa945, 0xa946, 0xa947, 0xa948, 0xa949, 0xa94a, 0xa94b, 0xa94c,
+ 0xa94d, 0xa94e, 0xa94f, 0xa950, 0xa951, 0xa953, 0xa954, 0xa955,
+ /* 0xbf00 .. 0xbfff */
+ 0xa956, 0xa957, 0xa958, 0xa959, 0xa95a, 0xa95b, 0xa95c, 0xa95d,
+ 0xa961, 0xa962, 0xa963, 0xa964, 0xa965, 0xa966, 0xa967, 0xa968,
+ 0xa969, 0xa96a, 0xa96b, 0xa96c, 0xa96d, 0xa96e, 0xa96f, 0xa970,
+ 0xa971, 0xa973, 0xa974, 0xa975, 0xa976, 0xa977, 0xa978, 0xa979,
+ 0xa97a, 0xa97b, 0xa97c, 0xa97d, 0xa981, 0xa982, 0xa983, 0xa984,
+ 0xa985, 0xa986, 0xa987, 0xa988, 0xa989, 0xa98a, 0xa98b, 0xa98c,
+ 0xa98d, 0xa98e, 0xa98f, 0xa990, 0xa991, 0xa993, 0xa994, 0xa995,
+ 0xa996, 0xa997, 0xa998, 0xa999, 0xa99a, 0xa99b, 0xa99c, 0xa99d,
+ 0xa9a1, 0xa9a2, 0xa9a3, 0xa9a4, 0xa9a5, 0xa9a6, 0xa9a7, 0xa9a8,
+ 0xa9a9, 0xa9aa, 0xa9ab, 0xa9ac, 0xa9ad, 0xa9ae, 0xa9af, 0xa9b0,
+ 0xa9b1, 0xa9b3, 0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7, 0xa9b8, 0xa9b9,
+ 0xa9ba, 0xa9bb, 0xa9bc, 0xa9bd, 0xa9c1, 0xa9c2, 0xa9c3, 0xa9c4,
+ 0xa9c5, 0xa9c6, 0xa9c7, 0xa9c8, 0xa9c9, 0xa9ca, 0xa9cb, 0xa9cc,
+ 0xa9cd, 0xa9ce, 0xa9cf, 0xa9d0, 0xa9d1, 0xa9d3, 0xa9d4, 0xa9d5,
+ 0xa9d6, 0xa9d7, 0xa9d8, 0xa9d9, 0xa9da, 0xa9db, 0xa9dc, 0xa9dd,
+ 0xa9e1, 0xa9e2, 0xa9e3, 0xa9e4, 0xa9e5, 0xa9e6, 0xa9e7, 0xa9e8,
+ 0xa9e9, 0xa9ea, 0xa9eb, 0xa9ec, 0xa9ed, 0xa9ee, 0xa9ef, 0xa9f0,
+ 0xa9f1, 0xa9f3, 0xa9f4, 0xa9f5, 0xa9f6, 0xa9f7, 0xa9f8, 0xa9f9,
+ 0xa9fa, 0xa9fb, 0xa9fc, 0xa9fd, 0xaa41, 0xaa42, 0xaa43, 0xaa44,
+ 0xaa45, 0xaa46, 0xaa47, 0xaa48, 0xaa49, 0xaa4a, 0xaa4b, 0xaa4c,
+ 0xaa4d, 0xaa4e, 0xaa4f, 0xaa50, 0xaa51, 0xaa53, 0xaa54, 0xaa55,
+ 0xaa56, 0xaa57, 0xaa58, 0xaa59, 0xaa5a, 0xaa5b, 0xaa5c, 0xaa5d,
+ 0xaa61, 0xaa62, 0xaa63, 0xaa64, 0xaa65, 0xaa66, 0xaa67, 0xaa68,
+ 0xaa69, 0xaa6a, 0xaa6b, 0xaa6c, 0xaa6d, 0xaa6e, 0xaa6f, 0xaa70,
+ 0xaa71, 0xaa73, 0xaa74, 0xaa75, 0xaa76, 0xaa77, 0xaa78, 0xaa79,
+ 0xaa7a, 0xaa7b, 0xaa7c, 0xaa7d, 0xaa81, 0xaa82, 0xaa83, 0xaa84,
+ 0xaa85, 0xaa86, 0xaa87, 0xaa88, 0xaa89, 0xaa8a, 0xaa8b, 0xaa8c,
+ 0xaa8d, 0xaa8e, 0xaa8f, 0xaa90, 0xaa91, 0xaa93, 0xaa94, 0xaa95,
+ 0xaa96, 0xaa97, 0xaa98, 0xaa99, 0xaa9a, 0xaa9b, 0xaa9c, 0xaa9d,
+ 0xaaa1, 0xaaa2, 0xaaa3, 0xaaa4, 0xaaa5, 0xaaa6, 0xaaa7, 0xaaa8,
+ 0xaaa9, 0xaaaa, 0xaaab, 0xaaac, 0xaaad, 0xaaae, 0xaaaf, 0xaab0,
+ 0xaab1, 0xaab3, 0xaab4, 0xaab5, 0xaab6, 0xaab7, 0xaab8, 0xaab9,
+ /* 0xc000 .. 0xc0ff */
+ 0xaaba, 0xaabb, 0xaabc, 0xaabd, 0xaac1, 0xaac2, 0xaac3, 0xaac4,
+ 0xaac5, 0xaac6, 0xaac7, 0xaac8, 0xaac9, 0xaaca, 0xaacb, 0xaacc,
+ 0xaacd, 0xaace, 0xaacf, 0xaad0, 0xaad1, 0xaad3, 0xaad4, 0xaad5,
+ 0xaad6, 0xaad7, 0xaad8, 0xaad9, 0xaada, 0xaadb, 0xaadc, 0xaadd,
+ 0xaae1, 0xaae2, 0xaae3, 0xaae4, 0xaae5, 0xaae6, 0xaae7, 0xaae8,
+ 0xaae9, 0xaaea, 0xaaeb, 0xaaec, 0xaaed, 0xaaee, 0xaaef, 0xaaf0,
+ 0xaaf1, 0xaaf3, 0xaaf4, 0xaaf5, 0xaaf6, 0xaaf7, 0xaaf8, 0xaaf9,
+ 0xaafa, 0xaafb, 0xaafc, 0xaafd, 0xab41, 0xab42, 0xab43, 0xab44,
+ 0xab45, 0xab46, 0xab47, 0xab48, 0xab49, 0xab4a, 0xab4b, 0xab4c,
+ 0xab4d, 0xab4e, 0xab4f, 0xab50, 0xab51, 0xab53, 0xab54, 0xab55,
+ 0xab56, 0xab57, 0xab58, 0xab59, 0xab5a, 0xab5b, 0xab5c, 0xab5d,
+ 0xab61, 0xab62, 0xab63, 0xab64, 0xab65, 0xab66, 0xab67, 0xab68,
+ 0xab69, 0xab6a, 0xab6b, 0xab6c, 0xab6d, 0xab6e, 0xab6f, 0xab70,
+ 0xab71, 0xab73, 0xab74, 0xab75, 0xab76, 0xab77, 0xab78, 0xab79,
+ 0xab7a, 0xab7b, 0xab7c, 0xab7d, 0xab81, 0xab82, 0xab83, 0xab84,
+ 0xab85, 0xab86, 0xab87, 0xab88, 0xab89, 0xab8a, 0xab8b, 0xab8c,
+ 0xab8d, 0xab8e, 0xab8f, 0xab90, 0xab91, 0xab93, 0xab94, 0xab95,
+ 0xab96, 0xab97, 0xab98, 0xab99, 0xab9a, 0xab9b, 0xab9c, 0xab9d,
+ 0xaba1, 0xaba2, 0xaba3, 0xaba4, 0xaba5, 0xaba6, 0xaba7, 0xaba8,
+ 0xaba9, 0xabaa, 0xabab, 0xabac, 0xabad, 0xabae, 0xabaf, 0xabb0,
+ 0xabb1, 0xabb3, 0xabb4, 0xabb5, 0xabb6, 0xabb7, 0xabb8, 0xabb9,
+ 0xabba, 0xabbb, 0xabbc, 0xabbd, 0xac61, 0xac62, 0xac63, 0xac64,
+ 0xac65, 0xac66, 0xac67, 0xac68, 0xac69, 0xac6a, 0xac6b, 0xac6c,
+ 0xac6d, 0xac6e, 0xac6f, 0xac70, 0xac71, 0xac73, 0xac74, 0xac75,
+ 0xac76, 0xac77, 0xac78, 0xac79, 0xac7a, 0xac7b, 0xac7c, 0xac7d,
+ 0xac81, 0xac82, 0xac83, 0xac84, 0xac85, 0xac86, 0xac87, 0xac88,
+ 0xac89, 0xac8a, 0xac8b, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90,
+ 0xac91, 0xac93, 0xac94, 0xac95, 0xac96, 0xac97, 0xac98, 0xac99,
+ 0xac9a, 0xac9b, 0xac9c, 0xac9d, 0xaca1, 0xaca2, 0xaca3, 0xaca4,
+ 0xaca5, 0xaca6, 0xaca7, 0xaca8, 0xaca9, 0xacaa, 0xacab, 0xacac,
+ 0xacad, 0xacae, 0xacaf, 0xacb0, 0xacb1, 0xacb3, 0xacb4, 0xacb5,
+ 0xacb6, 0xacb7, 0xacb8, 0xacb9, 0xacba, 0xacbb, 0xacbc, 0xacbd,
+ /* 0xc100 .. 0xc1ff */
+ 0xacc1, 0xacc2, 0xacc3, 0xacc4, 0xacc5, 0xacc6, 0xacc7, 0xacc8,
+ 0xacc9, 0xacca, 0xaccb, 0xaccc, 0xaccd, 0xacce, 0xaccf, 0xacd0,
+ 0xacd1, 0xacd3, 0xacd4, 0xacd5, 0xacd6, 0xacd7, 0xacd8, 0xacd9,
+ 0xacda, 0xacdb, 0xacdc, 0xacdd, 0xace1, 0xace2, 0xace3, 0xace4,
+ 0xace5, 0xace6, 0xace7, 0xace8, 0xace9, 0xacea, 0xaceb, 0xacec,
+ 0xaced, 0xacee, 0xacef, 0xacf0, 0xacf1, 0xacf3, 0xacf4, 0xacf5,
+ 0xacf6, 0xacf7, 0xacf8, 0xacf9, 0xacfa, 0xacfb, 0xacfc, 0xacfd,
+ 0xad41, 0xad42, 0xad43, 0xad44, 0xad45, 0xad46, 0xad47, 0xad48,
+ 0xad49, 0xad4a, 0xad4b, 0xad4c, 0xad4d, 0xad4e, 0xad4f, 0xad50,
+ 0xad51, 0xad53, 0xad54, 0xad55, 0xad56, 0xad57, 0xad58, 0xad59,
+ 0xad5a, 0xad5b, 0xad5c, 0xad5d, 0xad61, 0xad62, 0xad63, 0xad64,
+ 0xad65, 0xad66, 0xad67, 0xad68, 0xad69, 0xad6a, 0xad6b, 0xad6c,
+ 0xad6d, 0xad6e, 0xad6f, 0xad70, 0xad71, 0xad73, 0xad74, 0xad75,
+ 0xad76, 0xad77, 0xad78, 0xad79, 0xad7a, 0xad7b, 0xad7c, 0xad7d,
+ 0xad81, 0xad82, 0xad83, 0xad84, 0xad85, 0xad86, 0xad87, 0xad88,
+ 0xad89, 0xad8a, 0xad8b, 0xad8c, 0xad8d, 0xad8e, 0xad8f, 0xad90,
+ 0xad91, 0xad93, 0xad94, 0xad95, 0xad96, 0xad97, 0xad98, 0xad99,
+ 0xad9a, 0xad9b, 0xad9c, 0xad9d, 0xada1, 0xada2, 0xada3, 0xada4,
+ 0xada5, 0xada6, 0xada7, 0xada8, 0xada9, 0xadaa, 0xadab, 0xadac,
+ 0xadad, 0xadae, 0xadaf, 0xadb0, 0xadb1, 0xadb3, 0xadb4, 0xadb5,
+ 0xadb6, 0xadb7, 0xadb8, 0xadb9, 0xadba, 0xadbb, 0xadbc, 0xadbd,
+ 0xadc1, 0xadc2, 0xadc3, 0xadc4, 0xadc5, 0xadc6, 0xadc7, 0xadc8,
+ 0xadc9, 0xadca, 0xadcb, 0xadcc, 0xadcd, 0xadce, 0xadcf, 0xadd0,
+ 0xadd1, 0xadd3, 0xadd4, 0xadd5, 0xadd6, 0xadd7, 0xadd8, 0xadd9,
+ 0xadda, 0xaddb, 0xaddc, 0xaddd, 0xade1, 0xade2, 0xade3, 0xade4,
+ 0xade5, 0xade6, 0xade7, 0xade8, 0xade9, 0xadea, 0xadeb, 0xadec,
+ 0xaded, 0xadee, 0xadef, 0xadf0, 0xadf1, 0xadf3, 0xadf4, 0xadf5,
+ 0xadf6, 0xadf7, 0xadf8, 0xadf9, 0xadfa, 0xadfb, 0xadfc, 0xadfd,
+ 0xae41, 0xae42, 0xae43, 0xae44, 0xae45, 0xae46, 0xae47, 0xae48,
+ 0xae49, 0xae4a, 0xae4b, 0xae4c, 0xae4d, 0xae4e, 0xae4f, 0xae50,
+ 0xae51, 0xae53, 0xae54, 0xae55, 0xae56, 0xae57, 0xae58, 0xae59,
+ 0xae5a, 0xae5b, 0xae5c, 0xae5d, 0xae61, 0xae62, 0xae63, 0xae64,
+ /* 0xc200 .. 0xc2ff */
+ 0xae65, 0xae66, 0xae67, 0xae68, 0xae69, 0xae6a, 0xae6b, 0xae6c,
+ 0xae6d, 0xae6e, 0xae6f, 0xae70, 0xae71, 0xae73, 0xae74, 0xae75,
+ 0xae76, 0xae77, 0xae78, 0xae79, 0xae7a, 0xae7b, 0xae7c, 0xae7d,
+ 0xae81, 0xae82, 0xae83, 0xae84, 0xae85, 0xae86, 0xae87, 0xae88,
+ 0xae89, 0xae8a, 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f, 0xae90,
+ 0xae91, 0xae93, 0xae94, 0xae95, 0xae96, 0xae97, 0xae98, 0xae99,
+ 0xae9a, 0xae9b, 0xae9c, 0xae9d, 0xaea1, 0xaea2, 0xaea3, 0xaea4,
+ 0xaea5, 0xaea6, 0xaea7, 0xaea8, 0xaea9, 0xaeaa, 0xaeab, 0xaeac,
+ 0xaead, 0xaeae, 0xaeaf, 0xaeb0, 0xaeb1, 0xaeb3, 0xaeb4, 0xaeb5,
+ 0xaeb6, 0xaeb7, 0xaeb8, 0xaeb9, 0xaeba, 0xaebb, 0xaebc, 0xaebd,
+ 0xaec1, 0xaec2, 0xaec3, 0xaec4, 0xaec5, 0xaec6, 0xaec7, 0xaec8,
+ 0xaec9, 0xaeca, 0xaecb, 0xaecc, 0xaecd, 0xaece, 0xaecf, 0xaed0,
+ 0xaed1, 0xaed3, 0xaed4, 0xaed5, 0xaed6, 0xaed7, 0xaed8, 0xaed9,
+ 0xaeda, 0xaedb, 0xaedc, 0xaedd, 0xaee1, 0xaee2, 0xaee3, 0xaee4,
+ 0xaee5, 0xaee6, 0xaee7, 0xaee8, 0xaee9, 0xaeea, 0xaeeb, 0xaeec,
+ 0xaeed, 0xaeee, 0xaeef, 0xaef0, 0xaef1, 0xaef3, 0xaef4, 0xaef5,
+ 0xaef6, 0xaef7, 0xaef8, 0xaef9, 0xaefa, 0xaefb, 0xaefc, 0xaefd,
+ 0xaf41, 0xaf42, 0xaf43, 0xaf44, 0xaf45, 0xaf46, 0xaf47, 0xaf48,
+ 0xaf49, 0xaf4a, 0xaf4b, 0xaf4c, 0xaf4d, 0xaf4e, 0xaf4f, 0xaf50,
+ 0xaf51, 0xaf53, 0xaf54, 0xaf55, 0xaf56, 0xaf57, 0xaf58, 0xaf59,
+ 0xaf5a, 0xaf5b, 0xaf5c, 0xaf5d, 0xaf61, 0xaf62, 0xaf63, 0xaf64,
+ 0xaf65, 0xaf66, 0xaf67, 0xaf68, 0xaf69, 0xaf6a, 0xaf6b, 0xaf6c,
+ 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, 0xaf71, 0xaf73, 0xaf74, 0xaf75,
+ 0xaf76, 0xaf77, 0xaf78, 0xaf79, 0xaf7a, 0xaf7b, 0xaf7c, 0xaf7d,
+ 0xaf81, 0xaf82, 0xaf83, 0xaf84, 0xaf85, 0xaf86, 0xaf87, 0xaf88,
+ 0xaf89, 0xaf8a, 0xaf8b, 0xaf8c, 0xaf8d, 0xaf8e, 0xaf8f, 0xaf90,
+ 0xaf91, 0xaf93, 0xaf94, 0xaf95, 0xaf96, 0xaf97, 0xaf98, 0xaf99,
+ 0xaf9a, 0xaf9b, 0xaf9c, 0xaf9d, 0xafa1, 0xafa2, 0xafa3, 0xafa4,
+ 0xafa5, 0xafa6, 0xafa7, 0xafa8, 0xafa9, 0xafaa, 0xafab, 0xafac,
+ 0xafad, 0xafae, 0xafaf, 0xafb0, 0xafb1, 0xafb3, 0xafb4, 0xafb5,
+ 0xafb6, 0xafb7, 0xafb8, 0xafb9, 0xafba, 0xafbb, 0xafbc, 0xafbd,
+ 0xb061, 0xb062, 0xb063, 0xb064, 0xb065, 0xb066, 0xb067, 0xb068,
+ /* 0xc300 .. 0xc3ff */
+ 0xb069, 0xb06a, 0xb06b, 0xb06c, 0xb06d, 0xb06e, 0xb06f, 0xb070,
+ 0xb071, 0xb073, 0xb074, 0xb075, 0xb076, 0xb077, 0xb078, 0xb079,
+ 0xb07a, 0xb07b, 0xb07c, 0xb07d, 0xb081, 0xb082, 0xb083, 0xb084,
+ 0xb085, 0xb086, 0xb087, 0xb088, 0xb089, 0xb08a, 0xb08b, 0xb08c,
+ 0xb08d, 0xb08e, 0xb08f, 0xb090, 0xb091, 0xb093, 0xb094, 0xb095,
+ 0xb096, 0xb097, 0xb098, 0xb099, 0xb09a, 0xb09b, 0xb09c, 0xb09d,
+ 0xb0a1, 0xb0a2, 0xb0a3, 0xb0a4, 0xb0a5, 0xb0a6, 0xb0a7, 0xb0a8,
+ 0xb0a9, 0xb0aa, 0xb0ab, 0xb0ac, 0xb0ad, 0xb0ae, 0xb0af, 0xb0b0,
+ 0xb0b1, 0xb0b3, 0xb0b4, 0xb0b5, 0xb0b6, 0xb0b7, 0xb0b8, 0xb0b9,
+ 0xb0ba, 0xb0bb, 0xb0bc, 0xb0bd, 0xb0c1, 0xb0c2, 0xb0c3, 0xb0c4,
+ 0xb0c5, 0xb0c6, 0xb0c7, 0xb0c8, 0xb0c9, 0xb0ca, 0xb0cb, 0xb0cc,
+ 0xb0cd, 0xb0ce, 0xb0cf, 0xb0d0, 0xb0d1, 0xb0d3, 0xb0d4, 0xb0d5,
+ 0xb0d6, 0xb0d7, 0xb0d8, 0xb0d9, 0xb0da, 0xb0db, 0xb0dc, 0xb0dd,
+ 0xb0e1, 0xb0e2, 0xb0e3, 0xb0e4, 0xb0e5, 0xb0e6, 0xb0e7, 0xb0e8,
+ 0xb0e9, 0xb0ea, 0xb0eb, 0xb0ec, 0xb0ed, 0xb0ee, 0xb0ef, 0xb0f0,
+ 0xb0f1, 0xb0f3, 0xb0f4, 0xb0f5, 0xb0f6, 0xb0f7, 0xb0f8, 0xb0f9,
+ 0xb0fa, 0xb0fb, 0xb0fc, 0xb0fd, 0xb141, 0xb142, 0xb143, 0xb144,
+ 0xb145, 0xb146, 0xb147, 0xb148, 0xb149, 0xb14a, 0xb14b, 0xb14c,
+ 0xb14d, 0xb14e, 0xb14f, 0xb150, 0xb151, 0xb153, 0xb154, 0xb155,
+ 0xb156, 0xb157, 0xb158, 0xb159, 0xb15a, 0xb15b, 0xb15c, 0xb15d,
+ 0xb161, 0xb162, 0xb163, 0xb164, 0xb165, 0xb166, 0xb167, 0xb168,
+ 0xb169, 0xb16a, 0xb16b, 0xb16c, 0xb16d, 0xb16e, 0xb16f, 0xb170,
+ 0xb171, 0xb173, 0xb174, 0xb175, 0xb176, 0xb177, 0xb178, 0xb179,
+ 0xb17a, 0xb17b, 0xb17c, 0xb17d, 0xb181, 0xb182, 0xb183, 0xb184,
+ 0xb185, 0xb186, 0xb187, 0xb188, 0xb189, 0xb18a, 0xb18b, 0xb18c,
+ 0xb18d, 0xb18e, 0xb18f, 0xb190, 0xb191, 0xb193, 0xb194, 0xb195,
+ 0xb196, 0xb197, 0xb198, 0xb199, 0xb19a, 0xb19b, 0xb19c, 0xb19d,
+ 0xb1a1, 0xb1a2, 0xb1a3, 0xb1a4, 0xb1a5, 0xb1a6, 0xb1a7, 0xb1a8,
+ 0xb1a9, 0xb1aa, 0xb1ab, 0xb1ac, 0xb1ad, 0xb1ae, 0xb1af, 0xb1b0,
+ 0xb1b1, 0xb1b3, 0xb1b4, 0xb1b5, 0xb1b6, 0xb1b7, 0xb1b8, 0xb1b9,
+ 0xb1ba, 0xb1bb, 0xb1bc, 0xb1bd, 0xb1c1, 0xb1c2, 0xb1c3, 0xb1c4,
+ 0xb1c5, 0xb1c6, 0xb1c7, 0xb1c8, 0xb1c9, 0xb1ca, 0xb1cb, 0xb1cc,
+ /* 0xc400 .. 0xc4ff */
+ 0xb1cd, 0xb1ce, 0xb1cf, 0xb1d0, 0xb1d1, 0xb1d3, 0xb1d4, 0xb1d5,
+ 0xb1d6, 0xb1d7, 0xb1d8, 0xb1d9, 0xb1da, 0xb1db, 0xb1dc, 0xb1dd,
+ 0xb1e1, 0xb1e2, 0xb1e3, 0xb1e4, 0xb1e5, 0xb1e6, 0xb1e7, 0xb1e8,
+ 0xb1e9, 0xb1ea, 0xb1eb, 0xb1ec, 0xb1ed, 0xb1ee, 0xb1ef, 0xb1f0,
+ 0xb1f1, 0xb1f3, 0xb1f4, 0xb1f5, 0xb1f6, 0xb1f7, 0xb1f8, 0xb1f9,
+ 0xb1fa, 0xb1fb, 0xb1fc, 0xb1fd, 0xb241, 0xb242, 0xb243, 0xb244,
+ 0xb245, 0xb246, 0xb247, 0xb248, 0xb249, 0xb24a, 0xb24b, 0xb24c,
+ 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251, 0xb253, 0xb254, 0xb255,
+ 0xb256, 0xb257, 0xb258, 0xb259, 0xb25a, 0xb25b, 0xb25c, 0xb25d,
+ 0xb261, 0xb262, 0xb263, 0xb264, 0xb265, 0xb266, 0xb267, 0xb268,
+ 0xb269, 0xb26a, 0xb26b, 0xb26c, 0xb26d, 0xb26e, 0xb26f, 0xb270,
+ 0xb271, 0xb273, 0xb274, 0xb275, 0xb276, 0xb277, 0xb278, 0xb279,
+ 0xb27a, 0xb27b, 0xb27c, 0xb27d, 0xb281, 0xb282, 0xb283, 0xb284,
+ 0xb285, 0xb286, 0xb287, 0xb288, 0xb289, 0xb28a, 0xb28b, 0xb28c,
+ 0xb28d, 0xb28e, 0xb28f, 0xb290, 0xb291, 0xb293, 0xb294, 0xb295,
+ 0xb296, 0xb297, 0xb298, 0xb299, 0xb29a, 0xb29b, 0xb29c, 0xb29d,
+ 0xb2a1, 0xb2a2, 0xb2a3, 0xb2a4, 0xb2a5, 0xb2a6, 0xb2a7, 0xb2a8,
+ 0xb2a9, 0xb2aa, 0xb2ab, 0xb2ac, 0xb2ad, 0xb2ae, 0xb2af, 0xb2b0,
+ 0xb2b1, 0xb2b3, 0xb2b4, 0xb2b5, 0xb2b6, 0xb2b7, 0xb2b8, 0xb2b9,
+ 0xb2ba, 0xb2bb, 0xb2bc, 0xb2bd, 0xb2c1, 0xb2c2, 0xb2c3, 0xb2c4,
+ 0xb2c5, 0xb2c6, 0xb2c7, 0xb2c8, 0xb2c9, 0xb2ca, 0xb2cb, 0xb2cc,
+ 0xb2cd, 0xb2ce, 0xb2cf, 0xb2d0, 0xb2d1, 0xb2d3, 0xb2d4, 0xb2d5,
+ 0xb2d6, 0xb2d7, 0xb2d8, 0xb2d9, 0xb2da, 0xb2db, 0xb2dc, 0xb2dd,
+ 0xb2e1, 0xb2e2, 0xb2e3, 0xb2e4, 0xb2e5, 0xb2e6, 0xb2e7, 0xb2e8,
+ 0xb2e9, 0xb2ea, 0xb2eb, 0xb2ec, 0xb2ed, 0xb2ee, 0xb2ef, 0xb2f0,
+ 0xb2f1, 0xb2f3, 0xb2f4, 0xb2f5, 0xb2f6, 0xb2f7, 0xb2f8, 0xb2f9,
+ 0xb2fa, 0xb2fb, 0xb2fc, 0xb2fd, 0xb341, 0xb342, 0xb343, 0xb344,
+ 0xb345, 0xb346, 0xb347, 0xb348, 0xb349, 0xb34a, 0xb34b, 0xb34c,
+ 0xb34d, 0xb34e, 0xb34f, 0xb350, 0xb351, 0xb353, 0xb354, 0xb355,
+ 0xb356, 0xb357, 0xb358, 0xb359, 0xb35a, 0xb35b, 0xb35c, 0xb35d,
+ 0xb361, 0xb362, 0xb363, 0xb364, 0xb365, 0xb366, 0xb367, 0xb368,
+ 0xb369, 0xb36a, 0xb36b, 0xb36c, 0xb36d, 0xb36e, 0xb36f, 0xb370,
+ /* 0xc500 .. 0xc5ff */
+ 0xb371, 0xb373, 0xb374, 0xb375, 0xb376, 0xb377, 0xb378, 0xb379,
+ 0xb37a, 0xb37b, 0xb37c, 0xb37d, 0xb381, 0xb382, 0xb383, 0xb384,
+ 0xb385, 0xb386, 0xb387, 0xb388, 0xb389, 0xb38a, 0xb38b, 0xb38c,
+ 0xb38d, 0xb38e, 0xb38f, 0xb390, 0xb391, 0xb393, 0xb394, 0xb395,
+ 0xb396, 0xb397, 0xb398, 0xb399, 0xb39a, 0xb39b, 0xb39c, 0xb39d,
+ 0xb3a1, 0xb3a2, 0xb3a3, 0xb3a4, 0xb3a5, 0xb3a6, 0xb3a7, 0xb3a8,
+ 0xb3a9, 0xb3aa, 0xb3ab, 0xb3ac, 0xb3ad, 0xb3ae, 0xb3af, 0xb3b0,
+ 0xb3b1, 0xb3b3, 0xb3b4, 0xb3b5, 0xb3b6, 0xb3b7, 0xb3b8, 0xb3b9,
+ 0xb3ba, 0xb3bb, 0xb3bc, 0xb3bd, 0xb461, 0xb462, 0xb463, 0xb464,
+ 0xb465, 0xb466, 0xb467, 0xb468, 0xb469, 0xb46a, 0xb46b, 0xb46c,
+ 0xb46d, 0xb46e, 0xb46f, 0xb470, 0xb471, 0xb473, 0xb474, 0xb475,
+ 0xb476, 0xb477, 0xb478, 0xb479, 0xb47a, 0xb47b, 0xb47c, 0xb47d,
+ 0xb481, 0xb482, 0xb483, 0xb484, 0xb485, 0xb486, 0xb487, 0xb488,
+ 0xb489, 0xb48a, 0xb48b, 0xb48c, 0xb48d, 0xb48e, 0xb48f, 0xb490,
+ 0xb491, 0xb493, 0xb494, 0xb495, 0xb496, 0xb497, 0xb498, 0xb499,
+ 0xb49a, 0xb49b, 0xb49c, 0xb49d, 0xb4a1, 0xb4a2, 0xb4a3, 0xb4a4,
+ 0xb4a5, 0xb4a6, 0xb4a7, 0xb4a8, 0xb4a9, 0xb4aa, 0xb4ab, 0xb4ac,
+ 0xb4ad, 0xb4ae, 0xb4af, 0xb4b0, 0xb4b1, 0xb4b3, 0xb4b4, 0xb4b5,
+ 0xb4b6, 0xb4b7, 0xb4b8, 0xb4b9, 0xb4ba, 0xb4bb, 0xb4bc, 0xb4bd,
+ 0xb4c1, 0xb4c2, 0xb4c3, 0xb4c4, 0xb4c5, 0xb4c6, 0xb4c7, 0xb4c8,
+ 0xb4c9, 0xb4ca, 0xb4cb, 0xb4cc, 0xb4cd, 0xb4ce, 0xb4cf, 0xb4d0,
+ 0xb4d1, 0xb4d3, 0xb4d4, 0xb4d5, 0xb4d6, 0xb4d7, 0xb4d8, 0xb4d9,
+ 0xb4da, 0xb4db, 0xb4dc, 0xb4dd, 0xb4e1, 0xb4e2, 0xb4e3, 0xb4e4,
+ 0xb4e5, 0xb4e6, 0xb4e7, 0xb4e8, 0xb4e9, 0xb4ea, 0xb4eb, 0xb4ec,
+ 0xb4ed, 0xb4ee, 0xb4ef, 0xb4f0, 0xb4f1, 0xb4f3, 0xb4f4, 0xb4f5,
+ 0xb4f6, 0xb4f7, 0xb4f8, 0xb4f9, 0xb4fa, 0xb4fb, 0xb4fc, 0xb4fd,
+ 0xb541, 0xb542, 0xb543, 0xb544, 0xb545, 0xb546, 0xb547, 0xb548,
+ 0xb549, 0xb54a, 0xb54b, 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xb550,
+ 0xb551, 0xb553, 0xb554, 0xb555, 0xb556, 0xb557, 0xb558, 0xb559,
+ 0xb55a, 0xb55b, 0xb55c, 0xb55d, 0xb561, 0xb562, 0xb563, 0xb564,
+ 0xb565, 0xb566, 0xb567, 0xb568, 0xb569, 0xb56a, 0xb56b, 0xb56c,
+ 0xb56d, 0xb56e, 0xb56f, 0xb570, 0xb571, 0xb573, 0xb574, 0xb575,
+ /* 0xc600 .. 0xc6ff */
+ 0xb576, 0xb577, 0xb578, 0xb579, 0xb57a, 0xb57b, 0xb57c, 0xb57d,
+ 0xb581, 0xb582, 0xb583, 0xb584, 0xb585, 0xb586, 0xb587, 0xb588,
+ 0xb589, 0xb58a, 0xb58b, 0xb58c, 0xb58d, 0xb58e, 0xb58f, 0xb590,
+ 0xb591, 0xb593, 0xb594, 0xb595, 0xb596, 0xb597, 0xb598, 0xb599,
+ 0xb59a, 0xb59b, 0xb59c, 0xb59d, 0xb5a1, 0xb5a2, 0xb5a3, 0xb5a4,
+ 0xb5a5, 0xb5a6, 0xb5a7, 0xb5a8, 0xb5a9, 0xb5aa, 0xb5ab, 0xb5ac,
+ 0xb5ad, 0xb5ae, 0xb5af, 0xb5b0, 0xb5b1, 0xb5b3, 0xb5b4, 0xb5b5,
+ 0xb5b6, 0xb5b7, 0xb5b8, 0xb5b9, 0xb5ba, 0xb5bb, 0xb5bc, 0xb5bd,
+ 0xb5c1, 0xb5c2, 0xb5c3, 0xb5c4, 0xb5c5, 0xb5c6, 0xb5c7, 0xb5c8,
+ 0xb5c9, 0xb5ca, 0xb5cb, 0xb5cc, 0xb5cd, 0xb5ce, 0xb5cf, 0xb5d0,
+ 0xb5d1, 0xb5d3, 0xb5d4, 0xb5d5, 0xb5d6, 0xb5d7, 0xb5d8, 0xb5d9,
+ 0xb5da, 0xb5db, 0xb5dc, 0xb5dd, 0xb5e1, 0xb5e2, 0xb5e3, 0xb5e4,
+ 0xb5e5, 0xb5e6, 0xb5e7, 0xb5e8, 0xb5e9, 0xb5ea, 0xb5eb, 0xb5ec,
+ 0xb5ed, 0xb5ee, 0xb5ef, 0xb5f0, 0xb5f1, 0xb5f3, 0xb5f4, 0xb5f5,
+ 0xb5f6, 0xb5f7, 0xb5f8, 0xb5f9, 0xb5fa, 0xb5fb, 0xb5fc, 0xb5fd,
+ 0xb641, 0xb642, 0xb643, 0xb644, 0xb645, 0xb646, 0xb647, 0xb648,
+ 0xb649, 0xb64a, 0xb64b, 0xb64c, 0xb64d, 0xb64e, 0xb64f, 0xb650,
+ 0xb651, 0xb653, 0xb654, 0xb655, 0xb656, 0xb657, 0xb658, 0xb659,
+ 0xb65a, 0xb65b, 0xb65c, 0xb65d, 0xb661, 0xb662, 0xb663, 0xb664,
+ 0xb665, 0xb666, 0xb667, 0xb668, 0xb669, 0xb66a, 0xb66b, 0xb66c,
+ 0xb66d, 0xb66e, 0xb66f, 0xb670, 0xb671, 0xb673, 0xb674, 0xb675,
+ 0xb676, 0xb677, 0xb678, 0xb679, 0xb67a, 0xb67b, 0xb67c, 0xb67d,
+ 0xb681, 0xb682, 0xb683, 0xb684, 0xb685, 0xb686, 0xb687, 0xb688,
+ 0xb689, 0xb68a, 0xb68b, 0xb68c, 0xb68d, 0xb68e, 0xb68f, 0xb690,
+ 0xb691, 0xb693, 0xb694, 0xb695, 0xb696, 0xb697, 0xb698, 0xb699,
+ 0xb69a, 0xb69b, 0xb69c, 0xb69d, 0xb6a1, 0xb6a2, 0xb6a3, 0xb6a4,
+ 0xb6a5, 0xb6a6, 0xb6a7, 0xb6a8, 0xb6a9, 0xb6aa, 0xb6ab, 0xb6ac,
+ 0xb6ad, 0xb6ae, 0xb6af, 0xb6b0, 0xb6b1, 0xb6b3, 0xb6b4, 0xb6b5,
+ 0xb6b6, 0xb6b7, 0xb6b8, 0xb6b9, 0xb6ba, 0xb6bb, 0xb6bc, 0xb6bd,
+ 0xb6c1, 0xb6c2, 0xb6c3, 0xb6c4, 0xb6c5, 0xb6c6, 0xb6c7, 0xb6c8,
+ 0xb6c9, 0xb6ca, 0xb6cb, 0xb6cc, 0xb6cd, 0xb6ce, 0xb6cf, 0xb6d0,
+ 0xb6d1, 0xb6d3, 0xb6d4, 0xb6d5, 0xb6d6, 0xb6d7, 0xb6d8, 0xb6d9,
+ /* 0xc700 .. 0xc7ff */
+ 0xb6da, 0xb6db, 0xb6dc, 0xb6dd, 0xb6e1, 0xb6e2, 0xb6e3, 0xb6e4,
+ 0xb6e5, 0xb6e6, 0xb6e7, 0xb6e8, 0xb6e9, 0xb6ea, 0xb6eb, 0xb6ec,
+ 0xb6ed, 0xb6ee, 0xb6ef, 0xb6f0, 0xb6f1, 0xb6f3, 0xb6f4, 0xb6f5,
+ 0xb6f6, 0xb6f7, 0xb6f8, 0xb6f9, 0xb6fa, 0xb6fb, 0xb6fc, 0xb6fd,
+ 0xb741, 0xb742, 0xb743, 0xb744, 0xb745, 0xb746, 0xb747, 0xb748,
+ 0xb749, 0xb74a, 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f, 0xb750,
+ 0xb751, 0xb753, 0xb754, 0xb755, 0xb756, 0xb757, 0xb758, 0xb759,
+ 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb761, 0xb762, 0xb763, 0xb764,
+ 0xb765, 0xb766, 0xb767, 0xb768, 0xb769, 0xb76a, 0xb76b, 0xb76c,
+ 0xb76d, 0xb76e, 0xb76f, 0xb770, 0xb771, 0xb773, 0xb774, 0xb775,
+ 0xb776, 0xb777, 0xb778, 0xb779, 0xb77a, 0xb77b, 0xb77c, 0xb77d,
+ 0xb781, 0xb782, 0xb783, 0xb784, 0xb785, 0xb786, 0xb787, 0xb788,
+ 0xb789, 0xb78a, 0xb78b, 0xb78c, 0xb78d, 0xb78e, 0xb78f, 0xb790,
+ 0xb791, 0xb793, 0xb794, 0xb795, 0xb796, 0xb797, 0xb798, 0xb799,
+ 0xb79a, 0xb79b, 0xb79c, 0xb79d, 0xb7a1, 0xb7a2, 0xb7a3, 0xb7a4,
+ 0xb7a5, 0xb7a6, 0xb7a7, 0xb7a8, 0xb7a9, 0xb7aa, 0xb7ab, 0xb7ac,
+ 0xb7ad, 0xb7ae, 0xb7af, 0xb7b0, 0xb7b1, 0xb7b3, 0xb7b4, 0xb7b5,
+ 0xb7b6, 0xb7b7, 0xb7b8, 0xb7b9, 0xb7ba, 0xb7bb, 0xb7bc, 0xb7bd,
+ 0xb861, 0xb862, 0xb863, 0xb864, 0xb865, 0xb866, 0xb867, 0xb868,
+ 0xb869, 0xb86a, 0xb86b, 0xb86c, 0xb86d, 0xb86e, 0xb86f, 0xb870,
+ 0xb871, 0xb873, 0xb874, 0xb875, 0xb876, 0xb877, 0xb878, 0xb879,
+ 0xb87a, 0xb87b, 0xb87c, 0xb87d, 0xb881, 0xb882, 0xb883, 0xb884,
+ 0xb885, 0xb886, 0xb887, 0xb888, 0xb889, 0xb88a, 0xb88b, 0xb88c,
+ 0xb88d, 0xb88e, 0xb88f, 0xb890, 0xb891, 0xb893, 0xb894, 0xb895,
+ 0xb896, 0xb897, 0xb898, 0xb899, 0xb89a, 0xb89b, 0xb89c, 0xb89d,
+ 0xb8a1, 0xb8a2, 0xb8a3, 0xb8a4, 0xb8a5, 0xb8a6, 0xb8a7, 0xb8a8,
+ 0xb8a9, 0xb8aa, 0xb8ab, 0xb8ac, 0xb8ad, 0xb8ae, 0xb8af, 0xb8b0,
+ 0xb8b1, 0xb8b3, 0xb8b4, 0xb8b5, 0xb8b6, 0xb8b7, 0xb8b8, 0xb8b9,
+ 0xb8ba, 0xb8bb, 0xb8bc, 0xb8bd, 0xb8c1, 0xb8c2, 0xb8c3, 0xb8c4,
+ 0xb8c5, 0xb8c6, 0xb8c7, 0xb8c8, 0xb8c9, 0xb8ca, 0xb8cb, 0xb8cc,
+ 0xb8cd, 0xb8ce, 0xb8cf, 0xb8d0, 0xb8d1, 0xb8d3, 0xb8d4, 0xb8d5,
+ 0xb8d6, 0xb8d7, 0xb8d8, 0xb8d9, 0xb8da, 0xb8db, 0xb8dc, 0xb8dd,
+ /* 0xc800 .. 0xc8ff */
+ 0xb8e1, 0xb8e2, 0xb8e3, 0xb8e4, 0xb8e5, 0xb8e6, 0xb8e7, 0xb8e8,
+ 0xb8e9, 0xb8ea, 0xb8eb, 0xb8ec, 0xb8ed, 0xb8ee, 0xb8ef, 0xb8f0,
+ 0xb8f1, 0xb8f3, 0xb8f4, 0xb8f5, 0xb8f6, 0xb8f7, 0xb8f8, 0xb8f9,
+ 0xb8fa, 0xb8fb, 0xb8fc, 0xb8fd, 0xb941, 0xb942, 0xb943, 0xb944,
+ 0xb945, 0xb946, 0xb947, 0xb948, 0xb949, 0xb94a, 0xb94b, 0xb94c,
+ 0xb94d, 0xb94e, 0xb94f, 0xb950, 0xb951, 0xb953, 0xb954, 0xb955,
+ 0xb956, 0xb957, 0xb958, 0xb959, 0xb95a, 0xb95b, 0xb95c, 0xb95d,
+ 0xb961, 0xb962, 0xb963, 0xb964, 0xb965, 0xb966, 0xb967, 0xb968,
+ 0xb969, 0xb96a, 0xb96b, 0xb96c, 0xb96d, 0xb96e, 0xb96f, 0xb970,
+ 0xb971, 0xb973, 0xb974, 0xb975, 0xb976, 0xb977, 0xb978, 0xb979,
+ 0xb97a, 0xb97b, 0xb97c, 0xb97d, 0xb981, 0xb982, 0xb983, 0xb984,
+ 0xb985, 0xb986, 0xb987, 0xb988, 0xb989, 0xb98a, 0xb98b, 0xb98c,
+ 0xb98d, 0xb98e, 0xb98f, 0xb990, 0xb991, 0xb993, 0xb994, 0xb995,
+ 0xb996, 0xb997, 0xb998, 0xb999, 0xb99a, 0xb99b, 0xb99c, 0xb99d,
+ 0xb9a1, 0xb9a2, 0xb9a3, 0xb9a4, 0xb9a5, 0xb9a6, 0xb9a7, 0xb9a8,
+ 0xb9a9, 0xb9aa, 0xb9ab, 0xb9ac, 0xb9ad, 0xb9ae, 0xb9af, 0xb9b0,
+ 0xb9b1, 0xb9b3, 0xb9b4, 0xb9b5, 0xb9b6, 0xb9b7, 0xb9b8, 0xb9b9,
+ 0xb9ba, 0xb9bb, 0xb9bc, 0xb9bd, 0xb9c1, 0xb9c2, 0xb9c3, 0xb9c4,
+ 0xb9c5, 0xb9c6, 0xb9c7, 0xb9c8, 0xb9c9, 0xb9ca, 0xb9cb, 0xb9cc,
+ 0xb9cd, 0xb9ce, 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d3, 0xb9d4, 0xb9d5,
+ 0xb9d6, 0xb9d7, 0xb9d8, 0xb9d9, 0xb9da, 0xb9db, 0xb9dc, 0xb9dd,
+ 0xb9e1, 0xb9e2, 0xb9e3, 0xb9e4, 0xb9e5, 0xb9e6, 0xb9e7, 0xb9e8,
+ 0xb9e9, 0xb9ea, 0xb9eb, 0xb9ec, 0xb9ed, 0xb9ee, 0xb9ef, 0xb9f0,
+ 0xb9f1, 0xb9f3, 0xb9f4, 0xb9f5, 0xb9f6, 0xb9f7, 0xb9f8, 0xb9f9,
+ 0xb9fa, 0xb9fb, 0xb9fc, 0xb9fd, 0xba41, 0xba42, 0xba43, 0xba44,
+ 0xba45, 0xba46, 0xba47, 0xba48, 0xba49, 0xba4a, 0xba4b, 0xba4c,
+ 0xba4d, 0xba4e, 0xba4f, 0xba50, 0xba51, 0xba53, 0xba54, 0xba55,
+ 0xba56, 0xba57, 0xba58, 0xba59, 0xba5a, 0xba5b, 0xba5c, 0xba5d,
+ 0xba61, 0xba62, 0xba63, 0xba64, 0xba65, 0xba66, 0xba67, 0xba68,
+ 0xba69, 0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f, 0xba70,
+ 0xba71, 0xba73, 0xba74, 0xba75, 0xba76, 0xba77, 0xba78, 0xba79,
+ 0xba7a, 0xba7b, 0xba7c, 0xba7d, 0xba81, 0xba82, 0xba83, 0xba84,
+ /* 0xc900 .. 0xc9ff */
+ 0xba85, 0xba86, 0xba87, 0xba88, 0xba89, 0xba8a, 0xba8b, 0xba8c,
+ 0xba8d, 0xba8e, 0xba8f, 0xba90, 0xba91, 0xba93, 0xba94, 0xba95,
+ 0xba96, 0xba97, 0xba98, 0xba99, 0xba9a, 0xba9b, 0xba9c, 0xba9d,
+ 0xbaa1, 0xbaa2, 0xbaa3, 0xbaa4, 0xbaa5, 0xbaa6, 0xbaa7, 0xbaa8,
+ 0xbaa9, 0xbaaa, 0xbaab, 0xbaac, 0xbaad, 0xbaae, 0xbaaf, 0xbab0,
+ 0xbab1, 0xbab3, 0xbab4, 0xbab5, 0xbab6, 0xbab7, 0xbab8, 0xbab9,
+ 0xbaba, 0xbabb, 0xbabc, 0xbabd, 0xbac1, 0xbac2, 0xbac3, 0xbac4,
+ 0xbac5, 0xbac6, 0xbac7, 0xbac8, 0xbac9, 0xbaca, 0xbacb, 0xbacc,
+ 0xbacd, 0xbace, 0xbacf, 0xbad0, 0xbad1, 0xbad3, 0xbad4, 0xbad5,
+ 0xbad6, 0xbad7, 0xbad8, 0xbad9, 0xbada, 0xbadb, 0xbadc, 0xbadd,
+ 0xbae1, 0xbae2, 0xbae3, 0xbae4, 0xbae5, 0xbae6, 0xbae7, 0xbae8,
+ 0xbae9, 0xbaea, 0xbaeb, 0xbaec, 0xbaed, 0xbaee, 0xbaef, 0xbaf0,
+ 0xbaf1, 0xbaf3, 0xbaf4, 0xbaf5, 0xbaf6, 0xbaf7, 0xbaf8, 0xbaf9,
+ 0xbafa, 0xbafb, 0xbafc, 0xbafd, 0xbb41, 0xbb42, 0xbb43, 0xbb44,
+ 0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49, 0xbb4a, 0xbb4b, 0xbb4c,
+ 0xbb4d, 0xbb4e, 0xbb4f, 0xbb50, 0xbb51, 0xbb53, 0xbb54, 0xbb55,
+ 0xbb56, 0xbb57, 0xbb58, 0xbb59, 0xbb5a, 0xbb5b, 0xbb5c, 0xbb5d,
+ 0xbb61, 0xbb62, 0xbb63, 0xbb64, 0xbb65, 0xbb66, 0xbb67, 0xbb68,
+ 0xbb69, 0xbb6a, 0xbb6b, 0xbb6c, 0xbb6d, 0xbb6e, 0xbb6f, 0xbb70,
+ 0xbb71, 0xbb73, 0xbb74, 0xbb75, 0xbb76, 0xbb77, 0xbb78, 0xbb79,
+ 0xbb7a, 0xbb7b, 0xbb7c, 0xbb7d, 0xbb81, 0xbb82, 0xbb83, 0xbb84,
+ 0xbb85, 0xbb86, 0xbb87, 0xbb88, 0xbb89, 0xbb8a, 0xbb8b, 0xbb8c,
+ 0xbb8d, 0xbb8e, 0xbb8f, 0xbb90, 0xbb91, 0xbb93, 0xbb94, 0xbb95,
+ 0xbb96, 0xbb97, 0xbb98, 0xbb99, 0xbb9a, 0xbb9b, 0xbb9c, 0xbb9d,
+ 0xbba1, 0xbba2, 0xbba3, 0xbba4, 0xbba5, 0xbba6, 0xbba7, 0xbba8,
+ 0xbba9, 0xbbaa, 0xbbab, 0xbbac, 0xbbad, 0xbbae, 0xbbaf, 0xbbb0,
+ 0xbbb1, 0xbbb3, 0xbbb4, 0xbbb5, 0xbbb6, 0xbbb7, 0xbbb8, 0xbbb9,
+ 0xbbba, 0xbbbb, 0xbbbc, 0xbbbd, 0xbc61, 0xbc62, 0xbc63, 0xbc64,
+ 0xbc65, 0xbc66, 0xbc67, 0xbc68, 0xbc69, 0xbc6a, 0xbc6b, 0xbc6c,
+ 0xbc6d, 0xbc6e, 0xbc6f, 0xbc70, 0xbc71, 0xbc73, 0xbc74, 0xbc75,
+ 0xbc76, 0xbc77, 0xbc78, 0xbc79, 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d,
+ 0xbc81, 0xbc82, 0xbc83, 0xbc84, 0xbc85, 0xbc86, 0xbc87, 0xbc88,
+ /* 0xca00 .. 0xcaff */
+ 0xbc89, 0xbc8a, 0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, 0xbc8f, 0xbc90,
+ 0xbc91, 0xbc93, 0xbc94, 0xbc95, 0xbc96, 0xbc97, 0xbc98, 0xbc99,
+ 0xbc9a, 0xbc9b, 0xbc9c, 0xbc9d, 0xbca1, 0xbca2, 0xbca3, 0xbca4,
+ 0xbca5, 0xbca6, 0xbca7, 0xbca8, 0xbca9, 0xbcaa, 0xbcab, 0xbcac,
+ 0xbcad, 0xbcae, 0xbcaf, 0xbcb0, 0xbcb1, 0xbcb3, 0xbcb4, 0xbcb5,
+ 0xbcb6, 0xbcb7, 0xbcb8, 0xbcb9, 0xbcba, 0xbcbb, 0xbcbc, 0xbcbd,
+ 0xbcc1, 0xbcc2, 0xbcc3, 0xbcc4, 0xbcc5, 0xbcc6, 0xbcc7, 0xbcc8,
+ 0xbcc9, 0xbcca, 0xbccb, 0xbccc, 0xbccd, 0xbcce, 0xbccf, 0xbcd0,
+ 0xbcd1, 0xbcd3, 0xbcd4, 0xbcd5, 0xbcd6, 0xbcd7, 0xbcd8, 0xbcd9,
+ 0xbcda, 0xbcdb, 0xbcdc, 0xbcdd, 0xbce1, 0xbce2, 0xbce3, 0xbce4,
+ 0xbce5, 0xbce6, 0xbce7, 0xbce8, 0xbce9, 0xbcea, 0xbceb, 0xbcec,
+ 0xbced, 0xbcee, 0xbcef, 0xbcf0, 0xbcf1, 0xbcf3, 0xbcf4, 0xbcf5,
+ 0xbcf6, 0xbcf7, 0xbcf8, 0xbcf9, 0xbcfa, 0xbcfb, 0xbcfc, 0xbcfd,
+ 0xbd41, 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0xbd48,
+ 0xbd49, 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e, 0xbd4f, 0xbd50,
+ 0xbd51, 0xbd53, 0xbd54, 0xbd55, 0xbd56, 0xbd57, 0xbd58, 0xbd59,
+ 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d, 0xbd61, 0xbd62, 0xbd63, 0xbd64,
+ 0xbd65, 0xbd66, 0xbd67, 0xbd68, 0xbd69, 0xbd6a, 0xbd6b, 0xbd6c,
+ 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, 0xbd71, 0xbd73, 0xbd74, 0xbd75,
+ 0xbd76, 0xbd77, 0xbd78, 0xbd79, 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d,
+ 0xbd81, 0xbd82, 0xbd83, 0xbd84, 0xbd85, 0xbd86, 0xbd87, 0xbd88,
+ 0xbd89, 0xbd8a, 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f, 0xbd90,
+ 0xbd91, 0xbd93, 0xbd94, 0xbd95, 0xbd96, 0xbd97, 0xbd98, 0xbd99,
+ 0xbd9a, 0xbd9b, 0xbd9c, 0xbd9d, 0xbda1, 0xbda2, 0xbda3, 0xbda4,
+ 0xbda5, 0xbda6, 0xbda7, 0xbda8, 0xbda9, 0xbdaa, 0xbdab, 0xbdac,
+ 0xbdad, 0xbdae, 0xbdaf, 0xbdb0, 0xbdb1, 0xbdb3, 0xbdb4, 0xbdb5,
+ 0xbdb6, 0xbdb7, 0xbdb8, 0xbdb9, 0xbdba, 0xbdbb, 0xbdbc, 0xbdbd,
+ 0xbdc1, 0xbdc2, 0xbdc3, 0xbdc4, 0xbdc5, 0xbdc6, 0xbdc7, 0xbdc8,
+ 0xbdc9, 0xbdca, 0xbdcb, 0xbdcc, 0xbdcd, 0xbdce, 0xbdcf, 0xbdd0,
+ 0xbdd1, 0xbdd3, 0xbdd4, 0xbdd5, 0xbdd6, 0xbdd7, 0xbdd8, 0xbdd9,
+ 0xbdda, 0xbddb, 0xbddc, 0xbddd, 0xbde1, 0xbde2, 0xbde3, 0xbde4,
+ 0xbde5, 0xbde6, 0xbde7, 0xbde8, 0xbde9, 0xbdea, 0xbdeb, 0xbdec,
+ /* 0xcb00 .. 0xcbff */
+ 0xbded, 0xbdee, 0xbdef, 0xbdf0, 0xbdf1, 0xbdf3, 0xbdf4, 0xbdf5,
+ 0xbdf6, 0xbdf7, 0xbdf8, 0xbdf9, 0xbdfa, 0xbdfb, 0xbdfc, 0xbdfd,
+ 0xbe41, 0xbe42, 0xbe43, 0xbe44, 0xbe45, 0xbe46, 0xbe47, 0xbe48,
+ 0xbe49, 0xbe4a, 0xbe4b, 0xbe4c, 0xbe4d, 0xbe4e, 0xbe4f, 0xbe50,
+ 0xbe51, 0xbe53, 0xbe54, 0xbe55, 0xbe56, 0xbe57, 0xbe58, 0xbe59,
+ 0xbe5a, 0xbe5b, 0xbe5c, 0xbe5d, 0xbe61, 0xbe62, 0xbe63, 0xbe64,
+ 0xbe65, 0xbe66, 0xbe67, 0xbe68, 0xbe69, 0xbe6a, 0xbe6b, 0xbe6c,
+ 0xbe6d, 0xbe6e, 0xbe6f, 0xbe70, 0xbe71, 0xbe73, 0xbe74, 0xbe75,
+ 0xbe76, 0xbe77, 0xbe78, 0xbe79, 0xbe7a, 0xbe7b, 0xbe7c, 0xbe7d,
+ 0xbe81, 0xbe82, 0xbe83, 0xbe84, 0xbe85, 0xbe86, 0xbe87, 0xbe88,
+ 0xbe89, 0xbe8a, 0xbe8b, 0xbe8c, 0xbe8d, 0xbe8e, 0xbe8f, 0xbe90,
+ 0xbe91, 0xbe93, 0xbe94, 0xbe95, 0xbe96, 0xbe97, 0xbe98, 0xbe99,
+ 0xbe9a, 0xbe9b, 0xbe9c, 0xbe9d, 0xbea1, 0xbea2, 0xbea3, 0xbea4,
+ 0xbea5, 0xbea6, 0xbea7, 0xbea8, 0xbea9, 0xbeaa, 0xbeab, 0xbeac,
+ 0xbead, 0xbeae, 0xbeaf, 0xbeb0, 0xbeb1, 0xbeb3, 0xbeb4, 0xbeb5,
+ 0xbeb6, 0xbeb7, 0xbeb8, 0xbeb9, 0xbeba, 0xbebb, 0xbebc, 0xbebd,
+ 0xbec1, 0xbec2, 0xbec3, 0xbec4, 0xbec5, 0xbec6, 0xbec7, 0xbec8,
+ 0xbec9, 0xbeca, 0xbecb, 0xbecc, 0xbecd, 0xbece, 0xbecf, 0xbed0,
+ 0xbed1, 0xbed3, 0xbed4, 0xbed5, 0xbed6, 0xbed7, 0xbed8, 0xbed9,
+ 0xbeda, 0xbedb, 0xbedc, 0xbedd, 0xbee1, 0xbee2, 0xbee3, 0xbee4,
+ 0xbee5, 0xbee6, 0xbee7, 0xbee8, 0xbee9, 0xbeea, 0xbeeb, 0xbeec,
+ 0xbeed, 0xbeee, 0xbeef, 0xbef0, 0xbef1, 0xbef3, 0xbef4, 0xbef5,
+ 0xbef6, 0xbef7, 0xbef8, 0xbef9, 0xbefa, 0xbefb, 0xbefc, 0xbefd,
+ 0xbf41, 0xbf42, 0xbf43, 0xbf44, 0xbf45, 0xbf46, 0xbf47, 0xbf48,
+ 0xbf49, 0xbf4a, 0xbf4b, 0xbf4c, 0xbf4d, 0xbf4e, 0xbf4f, 0xbf50,
+ 0xbf51, 0xbf53, 0xbf54, 0xbf55, 0xbf56, 0xbf57, 0xbf58, 0xbf59,
+ 0xbf5a, 0xbf5b, 0xbf5c, 0xbf5d, 0xbf61, 0xbf62, 0xbf63, 0xbf64,
+ 0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, 0xbf6a, 0xbf6b, 0xbf6c,
+ 0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71, 0xbf73, 0xbf74, 0xbf75,
+ 0xbf76, 0xbf77, 0xbf78, 0xbf79, 0xbf7a, 0xbf7b, 0xbf7c, 0xbf7d,
+ 0xbf81, 0xbf82, 0xbf83, 0xbf84, 0xbf85, 0xbf86, 0xbf87, 0xbf88,
+ 0xbf89, 0xbf8a, 0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90,
+ /* 0xcc00 .. 0xccff */
+ 0xbf91, 0xbf93, 0xbf94, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99,
+ 0xbf9a, 0xbf9b, 0xbf9c, 0xbf9d, 0xbfa1, 0xbfa2, 0xbfa3, 0xbfa4,
+ 0xbfa5, 0xbfa6, 0xbfa7, 0xbfa8, 0xbfa9, 0xbfaa, 0xbfab, 0xbfac,
+ 0xbfad, 0xbfae, 0xbfaf, 0xbfb0, 0xbfb1, 0xbfb3, 0xbfb4, 0xbfb5,
+ 0xbfb6, 0xbfb7, 0xbfb8, 0xbfb9, 0xbfba, 0xbfbb, 0xbfbc, 0xbfbd,
+ 0xc061, 0xc062, 0xc063, 0xc064, 0xc065, 0xc066, 0xc067, 0xc068,
+ 0xc069, 0xc06a, 0xc06b, 0xc06c, 0xc06d, 0xc06e, 0xc06f, 0xc070,
+ 0xc071, 0xc073, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, 0xc079,
+ 0xc07a, 0xc07b, 0xc07c, 0xc07d, 0xc081, 0xc082, 0xc083, 0xc084,
+ 0xc085, 0xc086, 0xc087, 0xc088, 0xc089, 0xc08a, 0xc08b, 0xc08c,
+ 0xc08d, 0xc08e, 0xc08f, 0xc090, 0xc091, 0xc093, 0xc094, 0xc095,
+ 0xc096, 0xc097, 0xc098, 0xc099, 0xc09a, 0xc09b, 0xc09c, 0xc09d,
+ 0xc0a1, 0xc0a2, 0xc0a3, 0xc0a4, 0xc0a5, 0xc0a6, 0xc0a7, 0xc0a8,
+ 0xc0a9, 0xc0aa, 0xc0ab, 0xc0ac, 0xc0ad, 0xc0ae, 0xc0af, 0xc0b0,
+ 0xc0b1, 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0b7, 0xc0b8, 0xc0b9,
+ 0xc0ba, 0xc0bb, 0xc0bc, 0xc0bd, 0xc0c1, 0xc0c2, 0xc0c3, 0xc0c4,
+ 0xc0c5, 0xc0c6, 0xc0c7, 0xc0c8, 0xc0c9, 0xc0ca, 0xc0cb, 0xc0cc,
+ 0xc0cd, 0xc0ce, 0xc0cf, 0xc0d0, 0xc0d1, 0xc0d3, 0xc0d4, 0xc0d5,
+ 0xc0d6, 0xc0d7, 0xc0d8, 0xc0d9, 0xc0da, 0xc0db, 0xc0dc, 0xc0dd,
+ 0xc0e1, 0xc0e2, 0xc0e3, 0xc0e4, 0xc0e5, 0xc0e6, 0xc0e7, 0xc0e8,
+ 0xc0e9, 0xc0ea, 0xc0eb, 0xc0ec, 0xc0ed, 0xc0ee, 0xc0ef, 0xc0f0,
+ 0xc0f1, 0xc0f3, 0xc0f4, 0xc0f5, 0xc0f6, 0xc0f7, 0xc0f8, 0xc0f9,
+ 0xc0fa, 0xc0fb, 0xc0fc, 0xc0fd, 0xc141, 0xc142, 0xc143, 0xc144,
+ 0xc145, 0xc146, 0xc147, 0xc148, 0xc149, 0xc14a, 0xc14b, 0xc14c,
+ 0xc14d, 0xc14e, 0xc14f, 0xc150, 0xc151, 0xc153, 0xc154, 0xc155,
+ 0xc156, 0xc157, 0xc158, 0xc159, 0xc15a, 0xc15b, 0xc15c, 0xc15d,
+ 0xc161, 0xc162, 0xc163, 0xc164, 0xc165, 0xc166, 0xc167, 0xc168,
+ 0xc169, 0xc16a, 0xc16b, 0xc16c, 0xc16d, 0xc16e, 0xc16f, 0xc170,
+ 0xc171, 0xc173, 0xc174, 0xc175, 0xc176, 0xc177, 0xc178, 0xc179,
+ 0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xc181, 0xc182, 0xc183, 0xc184,
+ 0xc185, 0xc186, 0xc187, 0xc188, 0xc189, 0xc18a, 0xc18b, 0xc18c,
+ 0xc18d, 0xc18e, 0xc18f, 0xc190, 0xc191, 0xc193, 0xc194, 0xc195,
+ /* 0xcd00 .. 0xcdff */
+ 0xc196, 0xc197, 0xc198, 0xc199, 0xc19a, 0xc19b, 0xc19c, 0xc19d,
+ 0xc1a1, 0xc1a2, 0xc1a3, 0xc1a4, 0xc1a5, 0xc1a6, 0xc1a7, 0xc1a8,
+ 0xc1a9, 0xc1aa, 0xc1ab, 0xc1ac, 0xc1ad, 0xc1ae, 0xc1af, 0xc1b0,
+ 0xc1b1, 0xc1b3, 0xc1b4, 0xc1b5, 0xc1b6, 0xc1b7, 0xc1b8, 0xc1b9,
+ 0xc1ba, 0xc1bb, 0xc1bc, 0xc1bd, 0xc1c1, 0xc1c2, 0xc1c3, 0xc1c4,
+ 0xc1c5, 0xc1c6, 0xc1c7, 0xc1c8, 0xc1c9, 0xc1ca, 0xc1cb, 0xc1cc,
+ 0xc1cd, 0xc1ce, 0xc1cf, 0xc1d0, 0xc1d1, 0xc1d3, 0xc1d4, 0xc1d5,
+ 0xc1d6, 0xc1d7, 0xc1d8, 0xc1d9, 0xc1da, 0xc1db, 0xc1dc, 0xc1dd,
+ 0xc1e1, 0xc1e2, 0xc1e3, 0xc1e4, 0xc1e5, 0xc1e6, 0xc1e7, 0xc1e8,
+ 0xc1e9, 0xc1ea, 0xc1eb, 0xc1ec, 0xc1ed, 0xc1ee, 0xc1ef, 0xc1f0,
+ 0xc1f1, 0xc1f3, 0xc1f4, 0xc1f5, 0xc1f6, 0xc1f7, 0xc1f8, 0xc1f9,
+ 0xc1fa, 0xc1fb, 0xc1fc, 0xc1fd, 0xc241, 0xc242, 0xc243, 0xc244,
+ 0xc245, 0xc246, 0xc247, 0xc248, 0xc249, 0xc24a, 0xc24b, 0xc24c,
+ 0xc24d, 0xc24e, 0xc24f, 0xc250, 0xc251, 0xc253, 0xc254, 0xc255,
+ 0xc256, 0xc257, 0xc258, 0xc259, 0xc25a, 0xc25b, 0xc25c, 0xc25d,
+ 0xc261, 0xc262, 0xc263, 0xc264, 0xc265, 0xc266, 0xc267, 0xc268,
+ 0xc269, 0xc26a, 0xc26b, 0xc26c, 0xc26d, 0xc26e, 0xc26f, 0xc270,
+ 0xc271, 0xc273, 0xc274, 0xc275, 0xc276, 0xc277, 0xc278, 0xc279,
+ 0xc27a, 0xc27b, 0xc27c, 0xc27d, 0xc281, 0xc282, 0xc283, 0xc284,
+ 0xc285, 0xc286, 0xc287, 0xc288, 0xc289, 0xc28a, 0xc28b, 0xc28c,
+ 0xc28d, 0xc28e, 0xc28f, 0xc290, 0xc291, 0xc293, 0xc294, 0xc295,
+ 0xc296, 0xc297, 0xc298, 0xc299, 0xc29a, 0xc29b, 0xc29c, 0xc29d,
+ 0xc2a1, 0xc2a2, 0xc2a3, 0xc2a4, 0xc2a5, 0xc2a6, 0xc2a7, 0xc2a8,
+ 0xc2a9, 0xc2aa, 0xc2ab, 0xc2ac, 0xc2ad, 0xc2ae, 0xc2af, 0xc2b0,
+ 0xc2b1, 0xc2b3, 0xc2b4, 0xc2b5, 0xc2b6, 0xc2b7, 0xc2b8, 0xc2b9,
+ 0xc2ba, 0xc2bb, 0xc2bc, 0xc2bd, 0xc2c1, 0xc2c2, 0xc2c3, 0xc2c4,
+ 0xc2c5, 0xc2c6, 0xc2c7, 0xc2c8, 0xc2c9, 0xc2ca, 0xc2cb, 0xc2cc,
+ 0xc2cd, 0xc2ce, 0xc2cf, 0xc2d0, 0xc2d1, 0xc2d3, 0xc2d4, 0xc2d5,
+ 0xc2d6, 0xc2d7, 0xc2d8, 0xc2d9, 0xc2da, 0xc2db, 0xc2dc, 0xc2dd,
+ 0xc2e1, 0xc2e2, 0xc2e3, 0xc2e4, 0xc2e5, 0xc2e6, 0xc2e7, 0xc2e8,
+ 0xc2e9, 0xc2ea, 0xc2eb, 0xc2ec, 0xc2ed, 0xc2ee, 0xc2ef, 0xc2f0,
+ 0xc2f1, 0xc2f3, 0xc2f4, 0xc2f5, 0xc2f6, 0xc2f7, 0xc2f8, 0xc2f9,
+ /* 0xce00 .. 0xceff */
+ 0xc2fa, 0xc2fb, 0xc2fc, 0xc2fd, 0xc341, 0xc342, 0xc343, 0xc344,
+ 0xc345, 0xc346, 0xc347, 0xc348, 0xc349, 0xc34a, 0xc34b, 0xc34c,
+ 0xc34d, 0xc34e, 0xc34f, 0xc350, 0xc351, 0xc353, 0xc354, 0xc355,
+ 0xc356, 0xc357, 0xc358, 0xc359, 0xc35a, 0xc35b, 0xc35c, 0xc35d,
+ 0xc361, 0xc362, 0xc363, 0xc364, 0xc365, 0xc366, 0xc367, 0xc368,
+ 0xc369, 0xc36a, 0xc36b, 0xc36c, 0xc36d, 0xc36e, 0xc36f, 0xc370,
+ 0xc371, 0xc373, 0xc374, 0xc375, 0xc376, 0xc377, 0xc378, 0xc379,
+ 0xc37a, 0xc37b, 0xc37c, 0xc37d, 0xc381, 0xc382, 0xc383, 0xc384,
+ 0xc385, 0xc386, 0xc387, 0xc388, 0xc389, 0xc38a, 0xc38b, 0xc38c,
+ 0xc38d, 0xc38e, 0xc38f, 0xc390, 0xc391, 0xc393, 0xc394, 0xc395,
+ 0xc396, 0xc397, 0xc398, 0xc399, 0xc39a, 0xc39b, 0xc39c, 0xc39d,
+ 0xc3a1, 0xc3a2, 0xc3a3, 0xc3a4, 0xc3a5, 0xc3a6, 0xc3a7, 0xc3a8,
+ 0xc3a9, 0xc3aa, 0xc3ab, 0xc3ac, 0xc3ad, 0xc3ae, 0xc3af, 0xc3b0,
+ 0xc3b1, 0xc3b3, 0xc3b4, 0xc3b5, 0xc3b6, 0xc3b7, 0xc3b8, 0xc3b9,
+ 0xc3ba, 0xc3bb, 0xc3bc, 0xc3bd, 0xc461, 0xc462, 0xc463, 0xc464,
+ 0xc465, 0xc466, 0xc467, 0xc468, 0xc469, 0xc46a, 0xc46b, 0xc46c,
+ 0xc46d, 0xc46e, 0xc46f, 0xc470, 0xc471, 0xc473, 0xc474, 0xc475,
+ 0xc476, 0xc477, 0xc478, 0xc479, 0xc47a, 0xc47b, 0xc47c, 0xc47d,
+ 0xc481, 0xc482, 0xc483, 0xc484, 0xc485, 0xc486, 0xc487, 0xc488,
+ 0xc489, 0xc48a, 0xc48b, 0xc48c, 0xc48d, 0xc48e, 0xc48f, 0xc490,
+ 0xc491, 0xc493, 0xc494, 0xc495, 0xc496, 0xc497, 0xc498, 0xc499,
+ 0xc49a, 0xc49b, 0xc49c, 0xc49d, 0xc4a1, 0xc4a2, 0xc4a3, 0xc4a4,
+ 0xc4a5, 0xc4a6, 0xc4a7, 0xc4a8, 0xc4a9, 0xc4aa, 0xc4ab, 0xc4ac,
+ 0xc4ad, 0xc4ae, 0xc4af, 0xc4b0, 0xc4b1, 0xc4b3, 0xc4b4, 0xc4b5,
+ 0xc4b6, 0xc4b7, 0xc4b8, 0xc4b9, 0xc4ba, 0xc4bb, 0xc4bc, 0xc4bd,
+ 0xc4c1, 0xc4c2, 0xc4c3, 0xc4c4, 0xc4c5, 0xc4c6, 0xc4c7, 0xc4c8,
+ 0xc4c9, 0xc4ca, 0xc4cb, 0xc4cc, 0xc4cd, 0xc4ce, 0xc4cf, 0xc4d0,
+ 0xc4d1, 0xc4d3, 0xc4d4, 0xc4d5, 0xc4d6, 0xc4d7, 0xc4d8, 0xc4d9,
+ 0xc4da, 0xc4db, 0xc4dc, 0xc4dd, 0xc4e1, 0xc4e2, 0xc4e3, 0xc4e4,
+ 0xc4e5, 0xc4e6, 0xc4e7, 0xc4e8, 0xc4e9, 0xc4ea, 0xc4eb, 0xc4ec,
+ 0xc4ed, 0xc4ee, 0xc4ef, 0xc4f0, 0xc4f1, 0xc4f3, 0xc4f4, 0xc4f5,
+ 0xc4f6, 0xc4f7, 0xc4f8, 0xc4f9, 0xc4fa, 0xc4fb, 0xc4fc, 0xc4fd,
+ /* 0xcf00 .. 0xcfff */
+ 0xc541, 0xc542, 0xc543, 0xc544, 0xc545, 0xc546, 0xc547, 0xc548,
+ 0xc549, 0xc54a, 0xc54b, 0xc54c, 0xc54d, 0xc54e, 0xc54f, 0xc550,
+ 0xc551, 0xc553, 0xc554, 0xc555, 0xc556, 0xc557, 0xc558, 0xc559,
+ 0xc55a, 0xc55b, 0xc55c, 0xc55d, 0xc561, 0xc562, 0xc563, 0xc564,
+ 0xc565, 0xc566, 0xc567, 0xc568, 0xc569, 0xc56a, 0xc56b, 0xc56c,
+ 0xc56d, 0xc56e, 0xc56f, 0xc570, 0xc571, 0xc573, 0xc574, 0xc575,
+ 0xc576, 0xc577, 0xc578, 0xc579, 0xc57a, 0xc57b, 0xc57c, 0xc57d,
+ 0xc581, 0xc582, 0xc583, 0xc584, 0xc585, 0xc586, 0xc587, 0xc588,
+ 0xc589, 0xc58a, 0xc58b, 0xc58c, 0xc58d, 0xc58e, 0xc58f, 0xc590,
+ 0xc591, 0xc593, 0xc594, 0xc595, 0xc596, 0xc597, 0xc598, 0xc599,
+ 0xc59a, 0xc59b, 0xc59c, 0xc59d, 0xc5a1, 0xc5a2, 0xc5a3, 0xc5a4,
+ 0xc5a5, 0xc5a6, 0xc5a7, 0xc5a8, 0xc5a9, 0xc5aa, 0xc5ab, 0xc5ac,
+ 0xc5ad, 0xc5ae, 0xc5af, 0xc5b0, 0xc5b1, 0xc5b3, 0xc5b4, 0xc5b5,
+ 0xc5b6, 0xc5b7, 0xc5b8, 0xc5b9, 0xc5ba, 0xc5bb, 0xc5bc, 0xc5bd,
+ 0xc5c1, 0xc5c2, 0xc5c3, 0xc5c4, 0xc5c5, 0xc5c6, 0xc5c7, 0xc5c8,
+ 0xc5c9, 0xc5ca, 0xc5cb, 0xc5cc, 0xc5cd, 0xc5ce, 0xc5cf, 0xc5d0,
+ 0xc5d1, 0xc5d3, 0xc5d4, 0xc5d5, 0xc5d6, 0xc5d7, 0xc5d8, 0xc5d9,
+ 0xc5da, 0xc5db, 0xc5dc, 0xc5dd, 0xc5e1, 0xc5e2, 0xc5e3, 0xc5e4,
+ 0xc5e5, 0xc5e6, 0xc5e7, 0xc5e8, 0xc5e9, 0xc5ea, 0xc5eb, 0xc5ec,
+ 0xc5ed, 0xc5ee, 0xc5ef, 0xc5f0, 0xc5f1, 0xc5f3, 0xc5f4, 0xc5f5,
+ 0xc5f6, 0xc5f7, 0xc5f8, 0xc5f9, 0xc5fa, 0xc5fb, 0xc5fc, 0xc5fd,
+ 0xc641, 0xc642, 0xc643, 0xc644, 0xc645, 0xc646, 0xc647, 0xc648,
+ 0xc649, 0xc64a, 0xc64b, 0xc64c, 0xc64d, 0xc64e, 0xc64f, 0xc650,
+ 0xc651, 0xc653, 0xc654, 0xc655, 0xc656, 0xc657, 0xc658, 0xc659,
+ 0xc65a, 0xc65b, 0xc65c, 0xc65d, 0xc661, 0xc662, 0xc663, 0xc664,
+ 0xc665, 0xc666, 0xc667, 0xc668, 0xc669, 0xc66a, 0xc66b, 0xc66c,
+ 0xc66d, 0xc66e, 0xc66f, 0xc670, 0xc671, 0xc673, 0xc674, 0xc675,
+ 0xc676, 0xc677, 0xc678, 0xc679, 0xc67a, 0xc67b, 0xc67c, 0xc67d,
+ 0xc681, 0xc682, 0xc683, 0xc684, 0xc685, 0xc686, 0xc687, 0xc688,
+ 0xc689, 0xc68a, 0xc68b, 0xc68c, 0xc68d, 0xc68e, 0xc68f, 0xc690,
+ 0xc691, 0xc693, 0xc694, 0xc695, 0xc696, 0xc697, 0xc698, 0xc699,
+ 0xc69a, 0xc69b, 0xc69c, 0xc69d, 0xc6a1, 0xc6a2, 0xc6a3, 0xc6a4,
+ /* 0xd000 .. 0xd0ff */
+ 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9, 0xc6aa, 0xc6ab, 0xc6ac,
+ 0xc6ad, 0xc6ae, 0xc6af, 0xc6b0, 0xc6b1, 0xc6b3, 0xc6b4, 0xc6b5,
+ 0xc6b6, 0xc6b7, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb, 0xc6bc, 0xc6bd,
+ 0xc6c1, 0xc6c2, 0xc6c3, 0xc6c4, 0xc6c5, 0xc6c6, 0xc6c7, 0xc6c8,
+ 0xc6c9, 0xc6ca, 0xc6cb, 0xc6cc, 0xc6cd, 0xc6ce, 0xc6cf, 0xc6d0,
+ 0xc6d1, 0xc6d3, 0xc6d4, 0xc6d5, 0xc6d6, 0xc6d7, 0xc6d8, 0xc6d9,
+ 0xc6da, 0xc6db, 0xc6dc, 0xc6dd, 0xc6e1, 0xc6e2, 0xc6e3, 0xc6e4,
+ 0xc6e5, 0xc6e6, 0xc6e7, 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb, 0xc6ec,
+ 0xc6ed, 0xc6ee, 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f3, 0xc6f4, 0xc6f5,
+ 0xc6f6, 0xc6f7, 0xc6f8, 0xc6f9, 0xc6fa, 0xc6fb, 0xc6fc, 0xc6fd,
+ 0xc741, 0xc742, 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748,
+ 0xc749, 0xc74a, 0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f, 0xc750,
+ 0xc751, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759,
+ 0xc75a, 0xc75b, 0xc75c, 0xc75d, 0xc761, 0xc762, 0xc763, 0xc764,
+ 0xc765, 0xc766, 0xc767, 0xc768, 0xc769, 0xc76a, 0xc76b, 0xc76c,
+ 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc773, 0xc774, 0xc775,
+ 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a, 0xc77b, 0xc77c, 0xc77d,
+ 0xc781, 0xc782, 0xc783, 0xc784, 0xc785, 0xc786, 0xc787, 0xc788,
+ 0xc789, 0xc78a, 0xc78b, 0xc78c, 0xc78d, 0xc78e, 0xc78f, 0xc790,
+ 0xc791, 0xc793, 0xc794, 0xc795, 0xc796, 0xc797, 0xc798, 0xc799,
+ 0xc79a, 0xc79b, 0xc79c, 0xc79d, 0xc7a1, 0xc7a2, 0xc7a3, 0xc7a4,
+ 0xc7a5, 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0xc7ac,
+ 0xc7ad, 0xc7ae, 0xc7af, 0xc7b0, 0xc7b1, 0xc7b3, 0xc7b4, 0xc7b5,
+ 0xc7b6, 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba, 0xc7bb, 0xc7bc, 0xc7bd,
+ 0xc861, 0xc862, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, 0xc868,
+ 0xc869, 0xc86a, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc870,
+ 0xc871, 0xc873, 0xc874, 0xc875, 0xc876, 0xc877, 0xc878, 0xc879,
+ 0xc87a, 0xc87b, 0xc87c, 0xc87d, 0xc881, 0xc882, 0xc883, 0xc884,
+ 0xc885, 0xc886, 0xc887, 0xc888, 0xc889, 0xc88a, 0xc88b, 0xc88c,
+ 0xc88d, 0xc88e, 0xc88f, 0xc890, 0xc891, 0xc893, 0xc894, 0xc895,
+ 0xc896, 0xc897, 0xc898, 0xc899, 0xc89a, 0xc89b, 0xc89c, 0xc89d,
+ 0xc8a1, 0xc8a2, 0xc8a3, 0xc8a4, 0xc8a5, 0xc8a6, 0xc8a7, 0xc8a8,
+ /* 0xd100 .. 0xd1ff */
+ 0xc8a9, 0xc8aa, 0xc8ab, 0xc8ac, 0xc8ad, 0xc8ae, 0xc8af, 0xc8b0,
+ 0xc8b1, 0xc8b3, 0xc8b4, 0xc8b5, 0xc8b6, 0xc8b7, 0xc8b8, 0xc8b9,
+ 0xc8ba, 0xc8bb, 0xc8bc, 0xc8bd, 0xc8c1, 0xc8c2, 0xc8c3, 0xc8c4,
+ 0xc8c5, 0xc8c6, 0xc8c7, 0xc8c8, 0xc8c9, 0xc8ca, 0xc8cb, 0xc8cc,
+ 0xc8cd, 0xc8ce, 0xc8cf, 0xc8d0, 0xc8d1, 0xc8d3, 0xc8d4, 0xc8d5,
+ 0xc8d6, 0xc8d7, 0xc8d8, 0xc8d9, 0xc8da, 0xc8db, 0xc8dc, 0xc8dd,
+ 0xc8e1, 0xc8e2, 0xc8e3, 0xc8e4, 0xc8e5, 0xc8e6, 0xc8e7, 0xc8e8,
+ 0xc8e9, 0xc8ea, 0xc8eb, 0xc8ec, 0xc8ed, 0xc8ee, 0xc8ef, 0xc8f0,
+ 0xc8f1, 0xc8f3, 0xc8f4, 0xc8f5, 0xc8f6, 0xc8f7, 0xc8f8, 0xc8f9,
+ 0xc8fa, 0xc8fb, 0xc8fc, 0xc8fd, 0xc941, 0xc942, 0xc943, 0xc944,
+ 0xc945, 0xc946, 0xc947, 0xc948, 0xc949, 0xc94a, 0xc94b, 0xc94c,
+ 0xc94d, 0xc94e, 0xc94f, 0xc950, 0xc951, 0xc953, 0xc954, 0xc955,
+ 0xc956, 0xc957, 0xc958, 0xc959, 0xc95a, 0xc95b, 0xc95c, 0xc95d,
+ 0xc961, 0xc962, 0xc963, 0xc964, 0xc965, 0xc966, 0xc967, 0xc968,
+ 0xc969, 0xc96a, 0xc96b, 0xc96c, 0xc96d, 0xc96e, 0xc96f, 0xc970,
+ 0xc971, 0xc973, 0xc974, 0xc975, 0xc976, 0xc977, 0xc978, 0xc979,
+ 0xc97a, 0xc97b, 0xc97c, 0xc97d, 0xc981, 0xc982, 0xc983, 0xc984,
+ 0xc985, 0xc986, 0xc987, 0xc988, 0xc989, 0xc98a, 0xc98b, 0xc98c,
+ 0xc98d, 0xc98e, 0xc98f, 0xc990, 0xc991, 0xc993, 0xc994, 0xc995,
+ 0xc996, 0xc997, 0xc998, 0xc999, 0xc99a, 0xc99b, 0xc99c, 0xc99d,
+ 0xc9a1, 0xc9a2, 0xc9a3, 0xc9a4, 0xc9a5, 0xc9a6, 0xc9a7, 0xc9a8,
+ 0xc9a9, 0xc9aa, 0xc9ab, 0xc9ac, 0xc9ad, 0xc9ae, 0xc9af, 0xc9b0,
+ 0xc9b1, 0xc9b3, 0xc9b4, 0xc9b5, 0xc9b6, 0xc9b7, 0xc9b8, 0xc9b9,
+ 0xc9ba, 0xc9bb, 0xc9bc, 0xc9bd, 0xc9c1, 0xc9c2, 0xc9c3, 0xc9c4,
+ 0xc9c5, 0xc9c6, 0xc9c7, 0xc9c8, 0xc9c9, 0xc9ca, 0xc9cb, 0xc9cc,
+ 0xc9cd, 0xc9ce, 0xc9cf, 0xc9d0, 0xc9d1, 0xc9d3, 0xc9d4, 0xc9d5,
+ 0xc9d6, 0xc9d7, 0xc9d8, 0xc9d9, 0xc9da, 0xc9db, 0xc9dc, 0xc9dd,
+ 0xc9e1, 0xc9e2, 0xc9e3, 0xc9e4, 0xc9e5, 0xc9e6, 0xc9e7, 0xc9e8,
+ 0xc9e9, 0xc9ea, 0xc9eb, 0xc9ec, 0xc9ed, 0xc9ee, 0xc9ef, 0xc9f0,
+ 0xc9f1, 0xc9f3, 0xc9f4, 0xc9f5, 0xc9f6, 0xc9f7, 0xc9f8, 0xc9f9,
+ 0xc9fa, 0xc9fb, 0xc9fc, 0xc9fd, 0xca41, 0xca42, 0xca43, 0xca44,
+ 0xca45, 0xca46, 0xca47, 0xca48, 0xca49, 0xca4a, 0xca4b, 0xca4c,
+ /* 0xd200 .. 0xd2ff */
+ 0xca4d, 0xca4e, 0xca4f, 0xca50, 0xca51, 0xca53, 0xca54, 0xca55,
+ 0xca56, 0xca57, 0xca58, 0xca59, 0xca5a, 0xca5b, 0xca5c, 0xca5d,
+ 0xca61, 0xca62, 0xca63, 0xca64, 0xca65, 0xca66, 0xca67, 0xca68,
+ 0xca69, 0xca6a, 0xca6b, 0xca6c, 0xca6d, 0xca6e, 0xca6f, 0xca70,
+ 0xca71, 0xca73, 0xca74, 0xca75, 0xca76, 0xca77, 0xca78, 0xca79,
+ 0xca7a, 0xca7b, 0xca7c, 0xca7d, 0xca81, 0xca82, 0xca83, 0xca84,
+ 0xca85, 0xca86, 0xca87, 0xca88, 0xca89, 0xca8a, 0xca8b, 0xca8c,
+ 0xca8d, 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca93, 0xca94, 0xca95,
+ 0xca96, 0xca97, 0xca98, 0xca99, 0xca9a, 0xca9b, 0xca9c, 0xca9d,
+ 0xcaa1, 0xcaa2, 0xcaa3, 0xcaa4, 0xcaa5, 0xcaa6, 0xcaa7, 0xcaa8,
+ 0xcaa9, 0xcaaa, 0xcaab, 0xcaac, 0xcaad, 0xcaae, 0xcaaf, 0xcab0,
+ 0xcab1, 0xcab3, 0xcab4, 0xcab5, 0xcab6, 0xcab7, 0xcab8, 0xcab9,
+ 0xcaba, 0xcabb, 0xcabc, 0xcabd, 0xcac1, 0xcac2, 0xcac3, 0xcac4,
+ 0xcac5, 0xcac6, 0xcac7, 0xcac8, 0xcac9, 0xcaca, 0xcacb, 0xcacc,
+ 0xcacd, 0xcace, 0xcacf, 0xcad0, 0xcad1, 0xcad3, 0xcad4, 0xcad5,
+ 0xcad6, 0xcad7, 0xcad8, 0xcad9, 0xcada, 0xcadb, 0xcadc, 0xcadd,
+ 0xcae1, 0xcae2, 0xcae3, 0xcae4, 0xcae5, 0xcae6, 0xcae7, 0xcae8,
+ 0xcae9, 0xcaea, 0xcaeb, 0xcaec, 0xcaed, 0xcaee, 0xcaef, 0xcaf0,
+ 0xcaf1, 0xcaf3, 0xcaf4, 0xcaf5, 0xcaf6, 0xcaf7, 0xcaf8, 0xcaf9,
+ 0xcafa, 0xcafb, 0xcafc, 0xcafd, 0xcb41, 0xcb42, 0xcb43, 0xcb44,
+ 0xcb45, 0xcb46, 0xcb47, 0xcb48, 0xcb49, 0xcb4a, 0xcb4b, 0xcb4c,
+ 0xcb4d, 0xcb4e, 0xcb4f, 0xcb50, 0xcb51, 0xcb53, 0xcb54, 0xcb55,
+ 0xcb56, 0xcb57, 0xcb58, 0xcb59, 0xcb5a, 0xcb5b, 0xcb5c, 0xcb5d,
+ 0xcb61, 0xcb62, 0xcb63, 0xcb64, 0xcb65, 0xcb66, 0xcb67, 0xcb68,
+ 0xcb69, 0xcb6a, 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f, 0xcb70,
+ 0xcb71, 0xcb73, 0xcb74, 0xcb75, 0xcb76, 0xcb77, 0xcb78, 0xcb79,
+ 0xcb7a, 0xcb7b, 0xcb7c, 0xcb7d, 0xcb81, 0xcb82, 0xcb83, 0xcb84,
+ 0xcb85, 0xcb86, 0xcb87, 0xcb88, 0xcb89, 0xcb8a, 0xcb8b, 0xcb8c,
+ 0xcb8d, 0xcb8e, 0xcb8f, 0xcb90, 0xcb91, 0xcb93, 0xcb94, 0xcb95,
+ 0xcb96, 0xcb97, 0xcb98, 0xcb99, 0xcb9a, 0xcb9b, 0xcb9c, 0xcb9d,
+ 0xcba1, 0xcba2, 0xcba3, 0xcba4, 0xcba5, 0xcba6, 0xcba7, 0xcba8,
+ 0xcba9, 0xcbaa, 0xcbab, 0xcbac, 0xcbad, 0xcbae, 0xcbaf, 0xcbb0,
+ /* 0xd300 .. 0xd3ff */
+ 0xcbb1, 0xcbb3, 0xcbb4, 0xcbb5, 0xcbb6, 0xcbb7, 0xcbb8, 0xcbb9,
+ 0xcbba, 0xcbbb, 0xcbbc, 0xcbbd, 0xcc61, 0xcc62, 0xcc63, 0xcc64,
+ 0xcc65, 0xcc66, 0xcc67, 0xcc68, 0xcc69, 0xcc6a, 0xcc6b, 0xcc6c,
+ 0xcc6d, 0xcc6e, 0xcc6f, 0xcc70, 0xcc71, 0xcc73, 0xcc74, 0xcc75,
+ 0xcc76, 0xcc77, 0xcc78, 0xcc79, 0xcc7a, 0xcc7b, 0xcc7c, 0xcc7d,
+ 0xcc81, 0xcc82, 0xcc83, 0xcc84, 0xcc85, 0xcc86, 0xcc87, 0xcc88,
+ 0xcc89, 0xcc8a, 0xcc8b, 0xcc8c, 0xcc8d, 0xcc8e, 0xcc8f, 0xcc90,
+ 0xcc91, 0xcc93, 0xcc94, 0xcc95, 0xcc96, 0xcc97, 0xcc98, 0xcc99,
+ 0xcc9a, 0xcc9b, 0xcc9c, 0xcc9d, 0xcca1, 0xcca2, 0xcca3, 0xcca4,
+ 0xcca5, 0xcca6, 0xcca7, 0xcca8, 0xcca9, 0xccaa, 0xccab, 0xccac,
+ 0xccad, 0xccae, 0xccaf, 0xccb0, 0xccb1, 0xccb3, 0xccb4, 0xccb5,
+ 0xccb6, 0xccb7, 0xccb8, 0xccb9, 0xccba, 0xccbb, 0xccbc, 0xccbd,
+ 0xccc1, 0xccc2, 0xccc3, 0xccc4, 0xccc5, 0xccc6, 0xccc7, 0xccc8,
+ 0xccc9, 0xccca, 0xcccb, 0xcccc, 0xcccd, 0xccce, 0xcccf, 0xccd0,
+ 0xccd1, 0xccd3, 0xccd4, 0xccd5, 0xccd6, 0xccd7, 0xccd8, 0xccd9,
+ 0xccda, 0xccdb, 0xccdc, 0xccdd, 0xcce1, 0xcce2, 0xcce3, 0xcce4,
+ 0xcce5, 0xcce6, 0xcce7, 0xcce8, 0xcce9, 0xccea, 0xcceb, 0xccec,
+ 0xcced, 0xccee, 0xccef, 0xccf0, 0xccf1, 0xccf3, 0xccf4, 0xccf5,
+ 0xccf6, 0xccf7, 0xccf8, 0xccf9, 0xccfa, 0xccfb, 0xccfc, 0xccfd,
+ 0xcd41, 0xcd42, 0xcd43, 0xcd44, 0xcd45, 0xcd46, 0xcd47, 0xcd48,
+ 0xcd49, 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e, 0xcd4f, 0xcd50,
+ 0xcd51, 0xcd53, 0xcd54, 0xcd55, 0xcd56, 0xcd57, 0xcd58, 0xcd59,
+ 0xcd5a, 0xcd5b, 0xcd5c, 0xcd5d, 0xcd61, 0xcd62, 0xcd63, 0xcd64,
+ 0xcd65, 0xcd66, 0xcd67, 0xcd68, 0xcd69, 0xcd6a, 0xcd6b, 0xcd6c,
+ 0xcd6d, 0xcd6e, 0xcd6f, 0xcd70, 0xcd71, 0xcd73, 0xcd74, 0xcd75,
+ 0xcd76, 0xcd77, 0xcd78, 0xcd79, 0xcd7a, 0xcd7b, 0xcd7c, 0xcd7d,
+ 0xcd81, 0xcd82, 0xcd83, 0xcd84, 0xcd85, 0xcd86, 0xcd87, 0xcd88,
+ 0xcd89, 0xcd8a, 0xcd8b, 0xcd8c, 0xcd8d, 0xcd8e, 0xcd8f, 0xcd90,
+ 0xcd91, 0xcd93, 0xcd94, 0xcd95, 0xcd96, 0xcd97, 0xcd98, 0xcd99,
+ 0xcd9a, 0xcd9b, 0xcd9c, 0xcd9d, 0xcda1, 0xcda2, 0xcda3, 0xcda4,
+ 0xcda5, 0xcda6, 0xcda7, 0xcda8, 0xcda9, 0xcdaa, 0xcdab, 0xcdac,
+ 0xcdad, 0xcdae, 0xcdaf, 0xcdb0, 0xcdb1, 0xcdb3, 0xcdb4, 0xcdb5,
+ /* 0xd400 .. 0xd4ff */
+ 0xcdb6, 0xcdb7, 0xcdb8, 0xcdb9, 0xcdba, 0xcdbb, 0xcdbc, 0xcdbd,
+ 0xcdc1, 0xcdc2, 0xcdc3, 0xcdc4, 0xcdc5, 0xcdc6, 0xcdc7, 0xcdc8,
+ 0xcdc9, 0xcdca, 0xcdcb, 0xcdcc, 0xcdcd, 0xcdce, 0xcdcf, 0xcdd0,
+ 0xcdd1, 0xcdd3, 0xcdd4, 0xcdd5, 0xcdd6, 0xcdd7, 0xcdd8, 0xcdd9,
+ 0xcdda, 0xcddb, 0xcddc, 0xcddd, 0xcde1, 0xcde2, 0xcde3, 0xcde4,
+ 0xcde5, 0xcde6, 0xcde7, 0xcde8, 0xcde9, 0xcdea, 0xcdeb, 0xcdec,
+ 0xcded, 0xcdee, 0xcdef, 0xcdf0, 0xcdf1, 0xcdf3, 0xcdf4, 0xcdf5,
+ 0xcdf6, 0xcdf7, 0xcdf8, 0xcdf9, 0xcdfa, 0xcdfb, 0xcdfc, 0xcdfd,
+ 0xce41, 0xce42, 0xce43, 0xce44, 0xce45, 0xce46, 0xce47, 0xce48,
+ 0xce49, 0xce4a, 0xce4b, 0xce4c, 0xce4d, 0xce4e, 0xce4f, 0xce50,
+ 0xce51, 0xce53, 0xce54, 0xce55, 0xce56, 0xce57, 0xce58, 0xce59,
+ 0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce61, 0xce62, 0xce63, 0xce64,
+ 0xce65, 0xce66, 0xce67, 0xce68, 0xce69, 0xce6a, 0xce6b, 0xce6c,
+ 0xce6d, 0xce6e, 0xce6f, 0xce70, 0xce71, 0xce73, 0xce74, 0xce75,
+ 0xce76, 0xce77, 0xce78, 0xce79, 0xce7a, 0xce7b, 0xce7c, 0xce7d,
+ 0xce81, 0xce82, 0xce83, 0xce84, 0xce85, 0xce86, 0xce87, 0xce88,
+ 0xce89, 0xce8a, 0xce8b, 0xce8c, 0xce8d, 0xce8e, 0xce8f, 0xce90,
+ 0xce91, 0xce93, 0xce94, 0xce95, 0xce96, 0xce97, 0xce98, 0xce99,
+ 0xce9a, 0xce9b, 0xce9c, 0xce9d, 0xcea1, 0xcea2, 0xcea3, 0xcea4,
+ 0xcea5, 0xcea6, 0xcea7, 0xcea8, 0xcea9, 0xceaa, 0xceab, 0xceac,
+ 0xcead, 0xceae, 0xceaf, 0xceb0, 0xceb1, 0xceb3, 0xceb4, 0xceb5,
+ 0xceb6, 0xceb7, 0xceb8, 0xceb9, 0xceba, 0xcebb, 0xcebc, 0xcebd,
+ 0xcec1, 0xcec2, 0xcec3, 0xcec4, 0xcec5, 0xcec6, 0xcec7, 0xcec8,
+ 0xcec9, 0xceca, 0xcecb, 0xcecc, 0xcecd, 0xcece, 0xcecf, 0xced0,
+ 0xced1, 0xced3, 0xced4, 0xced5, 0xced6, 0xced7, 0xced8, 0xced9,
+ 0xceda, 0xcedb, 0xcedc, 0xcedd, 0xcee1, 0xcee2, 0xcee3, 0xcee4,
+ 0xcee5, 0xcee6, 0xcee7, 0xcee8, 0xcee9, 0xceea, 0xceeb, 0xceec,
+ 0xceed, 0xceee, 0xceef, 0xcef0, 0xcef1, 0xcef3, 0xcef4, 0xcef5,
+ 0xcef6, 0xcef7, 0xcef8, 0xcef9, 0xcefa, 0xcefb, 0xcefc, 0xcefd,
+ 0xcf41, 0xcf42, 0xcf43, 0xcf44, 0xcf45, 0xcf46, 0xcf47, 0xcf48,
+ 0xcf49, 0xcf4a, 0xcf4b, 0xcf4c, 0xcf4d, 0xcf4e, 0xcf4f, 0xcf50,
+ 0xcf51, 0xcf53, 0xcf54, 0xcf55, 0xcf56, 0xcf57, 0xcf58, 0xcf59,
+ /* 0xd500 .. 0xd5ff */
+ 0xcf5a, 0xcf5b, 0xcf5c, 0xcf5d, 0xcf61, 0xcf62, 0xcf63, 0xcf64,
+ 0xcf65, 0xcf66, 0xcf67, 0xcf68, 0xcf69, 0xcf6a, 0xcf6b, 0xcf6c,
+ 0xcf6d, 0xcf6e, 0xcf6f, 0xcf70, 0xcf71, 0xcf73, 0xcf74, 0xcf75,
+ 0xcf76, 0xcf77, 0xcf78, 0xcf79, 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d,
+ 0xcf81, 0xcf82, 0xcf83, 0xcf84, 0xcf85, 0xcf86, 0xcf87, 0xcf88,
+ 0xcf89, 0xcf8a, 0xcf8b, 0xcf8c, 0xcf8d, 0xcf8e, 0xcf8f, 0xcf90,
+ 0xcf91, 0xcf93, 0xcf94, 0xcf95, 0xcf96, 0xcf97, 0xcf98, 0xcf99,
+ 0xcf9a, 0xcf9b, 0xcf9c, 0xcf9d, 0xcfa1, 0xcfa2, 0xcfa3, 0xcfa4,
+ 0xcfa5, 0xcfa6, 0xcfa7, 0xcfa8, 0xcfa9, 0xcfaa, 0xcfab, 0xcfac,
+ 0xcfad, 0xcfae, 0xcfaf, 0xcfb0, 0xcfb1, 0xcfb3, 0xcfb4, 0xcfb5,
+ 0xcfb6, 0xcfb7, 0xcfb8, 0xcfb9, 0xcfba, 0xcfbb, 0xcfbc, 0xcfbd,
+ 0xd061, 0xd062, 0xd063, 0xd064, 0xd065, 0xd066, 0xd067, 0xd068,
+ 0xd069, 0xd06a, 0xd06b, 0xd06c, 0xd06d, 0xd06e, 0xd06f, 0xd070,
+ 0xd071, 0xd073, 0xd074, 0xd075, 0xd076, 0xd077, 0xd078, 0xd079,
+ 0xd07a, 0xd07b, 0xd07c, 0xd07d, 0xd081, 0xd082, 0xd083, 0xd084,
+ 0xd085, 0xd086, 0xd087, 0xd088, 0xd089, 0xd08a, 0xd08b, 0xd08c,
+ 0xd08d, 0xd08e, 0xd08f, 0xd090, 0xd091, 0xd093, 0xd094, 0xd095,
+ 0xd096, 0xd097, 0xd098, 0xd099, 0xd09a, 0xd09b, 0xd09c, 0xd09d,
+ 0xd0a1, 0xd0a2, 0xd0a3, 0xd0a4, 0xd0a5, 0xd0a6, 0xd0a7, 0xd0a8,
+ 0xd0a9, 0xd0aa, 0xd0ab, 0xd0ac, 0xd0ad, 0xd0ae, 0xd0af, 0xd0b0,
+ 0xd0b1, 0xd0b3, 0xd0b4, 0xd0b5, 0xd0b6, 0xd0b7, 0xd0b8, 0xd0b9,
+ 0xd0ba, 0xd0bb, 0xd0bc, 0xd0bd, 0xd0c1, 0xd0c2, 0xd0c3, 0xd0c4,
+ 0xd0c5, 0xd0c6, 0xd0c7, 0xd0c8, 0xd0c9, 0xd0ca, 0xd0cb, 0xd0cc,
+ 0xd0cd, 0xd0ce, 0xd0cf, 0xd0d0, 0xd0d1, 0xd0d3, 0xd0d4, 0xd0d5,
+ 0xd0d6, 0xd0d7, 0xd0d8, 0xd0d9, 0xd0da, 0xd0db, 0xd0dc, 0xd0dd,
+ 0xd0e1, 0xd0e2, 0xd0e3, 0xd0e4, 0xd0e5, 0xd0e6, 0xd0e7, 0xd0e8,
+ 0xd0e9, 0xd0ea, 0xd0eb, 0xd0ec, 0xd0ed, 0xd0ee, 0xd0ef, 0xd0f0,
+ 0xd0f1, 0xd0f3, 0xd0f4, 0xd0f5, 0xd0f6, 0xd0f7, 0xd0f8, 0xd0f9,
+ 0xd0fa, 0xd0fb, 0xd0fc, 0xd0fd, 0xd141, 0xd142, 0xd143, 0xd144,
+ 0xd145, 0xd146, 0xd147, 0xd148, 0xd149, 0xd14a, 0xd14b, 0xd14c,
+ 0xd14d, 0xd14e, 0xd14f, 0xd150, 0xd151, 0xd153, 0xd154, 0xd155,
+ 0xd156, 0xd157, 0xd158, 0xd159, 0xd15a, 0xd15b, 0xd15c, 0xd15d,
+ /* 0xd600 .. 0xd6ff */
+ 0xd161, 0xd162, 0xd163, 0xd164, 0xd165, 0xd166, 0xd167, 0xd168,
+ 0xd169, 0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e, 0xd16f, 0xd170,
+ 0xd171, 0xd173, 0xd174, 0xd175, 0xd176, 0xd177, 0xd178, 0xd179,
+ 0xd17a, 0xd17b, 0xd17c, 0xd17d, 0xd181, 0xd182, 0xd183, 0xd184,
+ 0xd185, 0xd186, 0xd187, 0xd188, 0xd189, 0xd18a, 0xd18b, 0xd18c,
+ 0xd18d, 0xd18e, 0xd18f, 0xd190, 0xd191, 0xd193, 0xd194, 0xd195,
+ 0xd196, 0xd197, 0xd198, 0xd199, 0xd19a, 0xd19b, 0xd19c, 0xd19d,
+ 0xd1a1, 0xd1a2, 0xd1a3, 0xd1a4, 0xd1a5, 0xd1a6, 0xd1a7, 0xd1a8,
+ 0xd1a9, 0xd1aa, 0xd1ab, 0xd1ac, 0xd1ad, 0xd1ae, 0xd1af, 0xd1b0,
+ 0xd1b1, 0xd1b3, 0xd1b4, 0xd1b5, 0xd1b6, 0xd1b7, 0xd1b8, 0xd1b9,
+ 0xd1ba, 0xd1bb, 0xd1bc, 0xd1bd, 0xd1c1, 0xd1c2, 0xd1c3, 0xd1c4,
+ 0xd1c5, 0xd1c6, 0xd1c7, 0xd1c8, 0xd1c9, 0xd1ca, 0xd1cb, 0xd1cc,
+ 0xd1cd, 0xd1ce, 0xd1cf, 0xd1d0, 0xd1d1, 0xd1d3, 0xd1d4, 0xd1d5,
+ 0xd1d6, 0xd1d7, 0xd1d8, 0xd1d9, 0xd1da, 0xd1db, 0xd1dc, 0xd1dd,
+ 0xd1e1, 0xd1e2, 0xd1e3, 0xd1e4, 0xd1e5, 0xd1e6, 0xd1e7, 0xd1e8,
+ 0xd1e9, 0xd1ea, 0xd1eb, 0xd1ec, 0xd1ed, 0xd1ee, 0xd1ef, 0xd1f0,
+ 0xd1f1, 0xd1f3, 0xd1f4, 0xd1f5, 0xd1f6, 0xd1f7, 0xd1f8, 0xd1f9,
+ 0xd1fa, 0xd1fb, 0xd1fc, 0xd1fd, 0xd241, 0xd242, 0xd243, 0xd244,
+ 0xd245, 0xd246, 0xd247, 0xd248, 0xd249, 0xd24a, 0xd24b, 0xd24c,
+ 0xd24d, 0xd24e, 0xd24f, 0xd250, 0xd251, 0xd253, 0xd254, 0xd255,
+ 0xd256, 0xd257, 0xd258, 0xd259, 0xd25a, 0xd25b, 0xd25c, 0xd25d,
+ 0xd261, 0xd262, 0xd263, 0xd264, 0xd265, 0xd266, 0xd267, 0xd268,
+ 0xd269, 0xd26a, 0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, 0xd270,
+ 0xd271, 0xd273, 0xd274, 0xd275, 0xd276, 0xd277, 0xd278, 0xd279,
+ 0xd27a, 0xd27b, 0xd27c, 0xd27d, 0xd281, 0xd282, 0xd283, 0xd284,
+ 0xd285, 0xd286, 0xd287, 0xd288, 0xd289, 0xd28a, 0xd28b, 0xd28c,
+ 0xd28d, 0xd28e, 0xd28f, 0xd290, 0xd291, 0xd293, 0xd294, 0xd295,
+ 0xd296, 0xd297, 0xd298, 0xd299, 0xd29a, 0xd29b, 0xd29c, 0xd29d,
+ 0xd2a1, 0xd2a2, 0xd2a3, 0xd2a4, 0xd2a5, 0xd2a6, 0xd2a7, 0xd2a8,
+ 0xd2a9, 0xd2aa, 0xd2ab, 0xd2ac, 0xd2ad, 0xd2ae, 0xd2af, 0xd2b0,
+ 0xd2b1, 0xd2b3, 0xd2b4, 0xd2b5, 0xd2b6, 0xd2b7, 0xd2b8, 0xd2b9,
+ 0xd2ba, 0xd2bb, 0xd2bc, 0xd2bd, 0xd2c1, 0xd2c2, 0xd2c3, 0xd2c4,
+ /* 0xd700 .. 0xd7ff */
+ 0xd2c5, 0xd2c6, 0xd2c7, 0xd2c8, 0xd2c9, 0xd2ca, 0xd2cb, 0xd2cc,
+ 0xd2cd, 0xd2ce, 0xd2cf, 0xd2d0, 0xd2d1, 0xd2d3, 0xd2d4, 0xd2d5,
+ 0xd2d6, 0xd2d7, 0xd2d8, 0xd2d9, 0xd2da, 0xd2db, 0xd2dc, 0xd2dd,
+ 0xd2e1, 0xd2e2, 0xd2e3, 0xd2e4, 0xd2e5, 0xd2e6, 0xd2e7, 0xd2e8,
+ 0xd2e9, 0xd2ea, 0xd2eb, 0xd2ec, 0xd2ed, 0xd2ee, 0xd2ef, 0xd2f0,
+ 0xd2f1, 0xd2f3, 0xd2f4, 0xd2f5, 0xd2f6, 0xd2f7, 0xd2f8, 0xd2f9,
+ 0xd2fa, 0xd2fb, 0xd2fc, 0xd2fd, 0xd341, 0xd342, 0xd343, 0xd344,
+ 0xd345, 0xd346, 0xd347, 0xd348, 0xd349, 0xd34a, 0xd34b, 0xd34c,
+ 0xd34d, 0xd34e, 0xd34f, 0xd350, 0xd351, 0xd353, 0xd354, 0xd355,
+ 0xd356, 0xd357, 0xd358, 0xd359, 0xd35a, 0xd35b, 0xd35c, 0xd35d,
+ 0xd361, 0xd362, 0xd363, 0xd364, 0xd365, 0xd366, 0xd367, 0xd368,
+ 0xd369, 0xd36a, 0xd36b, 0xd36c, 0xd36d, 0xd36e, 0xd36f, 0xd370,
+ 0xd371, 0xd373, 0xd374, 0xd375, 0xd376, 0xd377, 0xd378, 0xd379,
+ 0xd37a, 0xd37b, 0xd37c, 0xd37d, 0xd381, 0xd382, 0xd383, 0xd384,
+ 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, 0xd38a, 0xd38b, 0xd38c,
+ 0xd38d, 0xd38e, 0xd38f, 0xd390, 0xd391, 0xd393, 0xd394, 0xd395,
+ 0xd396, 0xd397, 0xd398, 0xd399, 0xd39a, 0xd39b, 0xd39c, 0xd39d,
+ 0xd3a1, 0xd3a2, 0xd3a3, 0xd3a4, 0xd3a5, 0xd3a6, 0xd3a7, 0xd3a8,
+ 0xd3a9, 0xd3aa, 0xd3ab, 0xd3ac, 0xd3ad, 0xd3ae, 0xd3af, 0xd3b0,
+ 0xd3b1, 0xd3b3, 0xd3b4, 0xd3b5, 0xd3b6, 0xd3b7, 0xd3b8, 0xd3b9,
+ 0xd3ba, 0xd3bb, 0xd3bc, 0xd3bd, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0xf900 .. 0xf9ff */
+ 0xe0d0, 0xe0d6, 0xe0e7, 0xe1cf, 0xe1e8, 0xe23d, 0xe2fb, 0xe332,
+ 0xe348, 0xe360, 0xe36d, 0xe3d4, 0xe3d5, 0xe3d8, 0xe3db, 0xe3dc,
+ 0xe3dd, 0xe3de, 0xe3df, 0xe3e0, 0xe3e2, 0xe3e3, 0xe3e4, 0xe3e5,
+ 0xe3e6, 0xe3e8, 0xe3e9, 0xe3ea, 0xe3eb, 0xe3ed, 0xe3ef, 0xe3f0,
+ 0xe3f2, 0xe3f6, 0xe3fa, 0xe3fc, 0xe3fd, 0xe3fe, 0xe432, 0xe433,
+ 0xe437, 0xe438, 0xe439, 0xe43a, 0xe43b, 0xe43d, 0xe442, 0xe44e,
+ 0xe452, 0xe453, 0xe454, 0xe456, 0xe457, 0xe458, 0xe459, 0xe45a,
+ 0xe45b, 0xe45d, 0xe45e, 0xe45f, 0xe460, 0xe461, 0xe462, 0xe463,
+ 0xe464, 0xe465, 0xe466, 0xe467, 0xe469, 0xe46a, 0xe46e, 0xe46f,
+ 0xe471, 0xe472, 0xe474, 0xe475, 0xe476, 0xe477, 0xe478, 0xe479,
+ 0xe47a, 0xe47b, 0xe492, 0xe493, 0xe494, 0xe495, 0xe496, 0xe497,
+ 0xe499, 0xe49a, 0xe576, 0xe59e, 0xe5a5, 0xe5ab, 0xe5ae, 0xe648,
+ 0xe65d, 0xe6cb, 0xe6e4, 0xe8c5, 0xe8e4, 0xe935, 0xe9a5, 0xe9d5,
+ 0xe9f4, 0xea9e, 0xeaa0, 0xeab3, 0xeae1, 0xeae8, 0xeb93, 0xebad,
+ 0xebed, 0xecf5, 0xed31, 0xed39, 0xedae, 0xedb1, 0xedb2, 0xedb9,
+ 0xedbb, 0xedbc, 0xedc4, 0xedce, 0xedd0, 0xedd2, 0xedd6, 0xedfa,
+ 0xedfb, 0xedfc, 0xedfe, 0xee31, 0xee34, 0xee37, 0xee3d, 0xee3f,
+ 0xee40, 0xee41, 0xee43, 0xee47, 0xee48, 0xee4c, 0xee54, 0xee56,
+ 0xee57, 0xee5a, 0xee62, 0xee66, 0xee69, 0xee6c, 0xee6f, 0xee71,
+ 0xee74, 0xee75, 0xee76, 0xee78, 0xee7a, 0xee7b, 0xee7c, 0xee91,
+ 0xee93, 0xee94, 0xee97, 0xee98, 0xee99, 0xee9b, 0xeea1, 0xeea6,
+ 0xeea9, 0xeeaa, 0xeeac, 0xeead, 0xeeb0, 0xeebf, 0xeec1, 0xeec6,
+ 0xeec7, 0xeecb, 0xeecd, 0xeecf, 0xeed0, 0xeed3, 0xeedf, 0xeee4,
+ 0xeee6, 0xeef7, 0xef77, 0xef78, 0xef92, 0xef93, 0xef99, 0xef9b,
+ 0xef9d, 0xefa0, 0xefa7, 0xefac, 0xefcc, 0xeff7, 0xf051, 0xf075,
+ 0xf096, 0xf099, 0xf09e, 0xf0a0, 0xf0a4, 0xf0a7, 0xf0a9, 0xf0aa,
+ 0xf0ba, 0xf0bb, 0xf0bd, 0xf0c1, 0xf0c2, 0xf0c6, 0xf0c7, 0xf0cc,
+ 0xf0cf, 0xf0d0, 0xf0d1, 0xf0d2, 0xf0d8, 0xf136, 0xf137, 0xf13a,
+ 0xf13f, 0xf140, 0xf141, 0xf142, 0xf145, 0xf148, 0xf14a, 0xf150,
+ 0xf151, 0xf155, 0xf156, 0xf159, 0xf15a, 0xf165, 0xf16d, 0xf16e,
+ 0xf171, 0xf174, 0xf177, 0xf178, 0xf199, 0xf19a, 0xf19c, 0xf1a1,
+ 0xf1a2, 0xf1a3, 0xf1ee, 0xf26b, 0xf44d, 0xf49c, 0xf4b1, 0xf537,
+ /* 0xfa00 .. 0xfaff */
+ 0xf57e, 0xf696, 0xf698, 0xf6b8, 0xf6c8, 0xf6d3, 0xf76b, 0xf792,
+ 0xf831, 0xf832, 0xf876, 0xf939, 0xef44, 0x003f, 0x003f, 0x003f,
+ 0xf5c0, 0x003f, 0xf577, 0x003f, 0x003f, 0xf9eb, 0xf254, 0xf15c,
+ 0x003f, 0xecea, 0xead4, 0xe968, 0xf2fe, 0xf2f1, 0xefe2, 0x003f,
+ 0x003f, 0x003f, 0xf343, 0x003f, 0x003f, 0xf191, 0xe544, 0x003f,
+ 0x003f, 0x003f, 0xe89b, 0xea9a, 0xe24d, 0xf7cd, 0x003f, 0x003f,
+ 0xe7b2, 0xecac, 0xe795, 0xe797, 0xe353, 0xe9e4, 0xe072, 0xf6a3,
+ 0xe391, 0x003f, 0xe7f8, 0xf645, 0x003f, 0xf972, 0xe0c6, 0xf3f3,
+ 0xf4a4, 0xe852, 0x003f, 0xeaf4, 0xe76e, 0xf83d, 0xf252, 0xf7d3,
+ 0xf1b4, 0x003f, 0xf69e, 0xe9f8, 0xea74, 0xf443, 0xe3b7, 0xefde,
+ 0xf363, 0xf5e6, 0xf931, 0xf2ee, 0xe1da, 0xe55d, 0xf2bd, 0xe633,
+ 0xf46b, 0xe8e5, 0xeafe, 0xf1ba, 0xf63b, 0x003f, 0x003f, 0xf25a,
+ 0xe078, 0xecca, 0xed67, 0xe35d, 0xea49, 0xf3fc, 0x003f, 0xf191,
+ 0xe3f1, 0xf852, 0xea4a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0xf291, 0x003f, 0xf5f6, 0xe37d, 0xefb8, 0xf1c3,
+ 0xe072, 0x003f, 0xf9c2, 0x003f, 0xf5c0, 0xe9c5, 0xedf2, 0xe9c6,
+ 0xe9e6, 0x003f, 0x003f, 0x003f, 0xf4f4, 0x003f, 0x003f, 0x003f,
+ 0xf091, 0xf3f3, 0x003f, 0xf4a4, 0xe4e3, 0xf093, 0xec34, 0x003f,
+ 0xeef9, 0xf577, 0xe5c7, 0xe760, 0xf1e8, 0x003f, 0xeaaf, 0xe6b5,
+ 0x003f, 0xf1b2, 0xf7d3, 0xf2e7, 0xf1b4, 0x003f, 0xf1c9, 0xe8f3,
+ 0xf254, 0x003f, 0x003f, 0x003f, 0x003f, 0xef40, 0xf15c, 0xeb9e,
+ 0xf451, 0x003f, 0xf4b7, 0x003f, 0x003f, 0xf2bd, 0x003f, 0x003f,
+ 0xe633, 0x003f, 0xf1ba, 0xf968, 0xf934, 0x003f, 0xe0ba, 0xe96d,
+ 0xecca, 0xf370, 0xf343, 0xf57b, 0xed67, 0xe3e7, 0xf0b1, 0xe35d,
+ 0xe938, 0xf3fc, 0xec53, 0xf450, 0x003f, 0x003f, 0x003f, 0xe3f1,
+ 0xf2fe, 0x003f, 0xf852, 0x003f, 0xea4a, 0x003f, 0xe2cf, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0xfb00 .. 0xfbff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x002b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0xfe00 .. 0xfeff */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0xd93a, 0xd93a, 0xd93a, 0xd93a, 0x005f, 0x005f, 0x005f,
+ 0x002c, 0xd932, 0x002e, 0x003f, 0x003b, 0x003a, 0x003f, 0x0021,
+ 0xd93a, 0x0028, 0x0029, 0x007b, 0x007d, 0xd942, 0xd943, 0x0023,
+ 0x0026, 0x002a, 0x002b, 0x002d, 0x003c, 0x003e, 0x003d, 0x003f,
+ 0x003f, 0x0024, 0x0025, 0x0040, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* 0xff00 .. 0xffff */
+ 0x003f, 0xda31, 0xda32, 0xda33, 0xda34, 0xda35, 0xda36, 0xda37,
+ 0xda38, 0xda39, 0xda3a, 0xda3b, 0xda3c, 0xda3d, 0xda3e, 0xda3f,
+ 0xda40, 0xda41, 0xda42, 0xda43, 0xda44, 0xda45, 0xda46, 0xda47,
+ 0xda48, 0xda49, 0xda4a, 0xda4b, 0xda4c, 0xda4d, 0xda4e, 0xda4f,
+ 0xda50, 0xda51, 0xda52, 0xda53, 0xda54, 0xda55, 0xda56, 0xda57,
+ 0xda58, 0xda59, 0xda5a, 0xda5b, 0xda5c, 0xda5d, 0xda5e, 0xda5f,
+ 0xda60, 0xda61, 0xda62, 0xda63, 0xda64, 0xda65, 0xda66, 0xda67,
+ 0xda68, 0xda69, 0xda6a, 0xda6b, 0xd93c, 0xda6d, 0xda6e, 0xda6f,
+ 0xda70, 0xda71, 0xda72, 0xda73, 0xda74, 0xda75, 0xda76, 0xda77,
+ 0xda78, 0xda79, 0xda7a, 0xda7b, 0xda7c, 0xda7d, 0xda7e, 0xda91,
+ 0xda92, 0xda93, 0xda94, 0xda95, 0xda96, 0xda97, 0xda98, 0xda99,
+ 0xda9a, 0xda9b, 0xda9c, 0xda9d, 0xda9e, 0xda9f, 0xd9a6, 0x003f,
+ 0x003f, 0xd933, 0xd948, 0xd949, 0xd932, 0x003f, 0xde94, 0xde31,
+ 0xde33, 0xde35, 0xde37, 0xde39, 0xde73, 0xde75, 0xde77, 0xde53,
+ 0x003f, 0xde32, 0xde34, 0xde36, 0xde38, 0xde3a, 0xde3b, 0xde3d,
+ 0xde3f, 0xde41, 0xde43, 0xde45, 0xde47, 0xde49, 0xde4b, 0xde4d,
+ 0xde4f, 0xde51, 0xde54, 0xde56, 0xde58, 0xde5a, 0xde5b, 0xde5c,
+ 0xde5d, 0xde5e, 0xde5f, 0xde62, 0xde65, 0xde68, 0xde6b, 0xde6e,
+ 0xde6f, 0xde70, 0xde71, 0xde72, 0xde74, 0xde76, 0xde78, 0xde79,
+ 0xde7a, 0xde7b, 0xde7c, 0xde7d, 0xde91, 0xde95, 0x003f, 0x003f,
+ 0xdad4, 0x8841, 0x8c41, 0x8444, 0x9041, 0x8446, 0x8447, 0x9441,
+ 0x9841, 0x9c41, 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f,
+ 0x8450, 0xa041, 0xa441, 0xa841, 0x8454, 0xac41, 0xb041, 0xb441,
+ 0xb841, 0xbc41, 0xc041, 0xc441, 0xc841, 0xcc41, 0xd041, 0x003f,
+ 0x003f, 0x003f, 0x8461, 0x8481, 0x84a1, 0x84c1, 0x84e1, 0x8541,
+ 0x003f, 0x003f, 0x8561, 0x8581, 0x85a1, 0x85c1, 0x85e1, 0x8641,
+ 0x003f, 0x003f, 0x8661, 0x8681, 0x86a1, 0x86c1, 0x86e1, 0x8741,
+ 0x003f, 0x003f, 0x8761, 0x8781, 0x87a1, 0x003f, 0x003f, 0x003f,
+ 0xd95b, 0xd95c, 0xd9a0, 0xdaa0, 0x007c, 0xd95d, 0xda6c, 0x003f,
+ 0xdba2, 0xd977, 0xd978, 0xd976, 0xd979, 0xd971, 0xd96b, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ /* defaults */
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f,
+ 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f
+};
+
+static const unsigned short uni2cp_high[256] =
+{
+ 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x0500, 0x0600, 0x0700,
+ 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x0e00, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x0f00, 0x1000,
+ 0x1100, 0x1200, 0x1300, 0x1400, 0x9800, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x1500, 0x1600,
+ 0x1700, 0x1800, 0x1900, 0x1a00, 0x1b00, 0x1c00, 0x1d00, 0x1e00,
+ 0x1f00, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600,
+ 0x2700, 0x2800, 0x2900, 0x2a00, 0x2b00, 0x2c00, 0x2d00, 0x2e00,
+ 0x2f00, 0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500, 0x3600,
+ 0x3700, 0x3800, 0x3900, 0x3a00, 0x3b00, 0x3c00, 0x3d00, 0x3e00,
+ 0x3f00, 0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500, 0x4600,
+ 0x4700, 0x4800, 0x4900, 0x4a00, 0x4b00, 0x4c00, 0x4d00, 0x4e00,
+ 0x4f00, 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500, 0x5600,
+ 0x5700, 0x5800, 0x5900, 0x5a00, 0x5b00, 0x5c00, 0x5d00, 0x5e00,
+ 0x5f00, 0x6000, 0x6100, 0x6200, 0x6300, 0x6400, 0x6500, 0x6600,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x6700, 0x6800, 0x6900, 0x6a00,
+ 0x6b00, 0x6c00, 0x6d00, 0x6e00, 0x6f00, 0x7000, 0x7100, 0x7200,
+ 0x7300, 0x7400, 0x7500, 0x7600, 0x7700, 0x7800, 0x7900, 0x7a00,
+ 0x7b00, 0x7c00, 0x7d00, 0x7e00, 0x7f00, 0x8000, 0x8100, 0x8200,
+ 0x8300, 0x8400, 0x8500, 0x8600, 0x8700, 0x8800, 0x8900, 0x8a00,
+ 0x8b00, 0x8c00, 0x8d00, 0x8e00, 0x8f00, 0x9000, 0x9100, 0x9200,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800,
+ 0x9800, 0x9300, 0x9400, 0x9500, 0x9800, 0x9800, 0x9600, 0x9700
+};
+
+const struct dbcs_table cptable_1361 =
+{
+ { 1361, 2, 0x003f, 0x003f, "Korean Johab" },
+ cp2uni,
+ cp2uni_leadbytes,
+ uni2cp_low,
+ uni2cp_high,
+ { 0x84, 0xd3, 0xd9, 0xde, 0xe0, 0xf9, 0x00, 0x00 }
+};
diff --git a/reactos/tools/unicode/c_20127.c b/reactos/tools/unicode/c_20127.c
new file mode 100644
index 00000000000..843830f4aaf
--- /dev/null
+++ b/reactos/tools/unicode/c_20127.c
@@ -0,0 +1,683 @@
+/* code page 20127 (US-ASCII (7bit)) */
+/* Automatically generated; DO NOT EDIT!! */
+
+#include "wine/unicode.h"
+
+static const WCHAR cp2uni[256] =
+{
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f
+};
+
+static const unsigned char uni2cp_low[4608] =
+{
+ /* 0x0000 .. 0x00ff */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x20, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0x3f,
+ 0x22, 0x63, 0x61, 0x3c, 0x3f, 0x2d, 0x72, 0x2d,
+ 0x3f, 0x3f, 0x32, 0x33, 0x27, 0x75, 0x3f, 0x3f,
+ 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43,
+ 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49,
+ 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78,
+ 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63,
+ 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69,
+ 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x3f,
+ 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79,
+ /* 0x0100 .. 0x01ff */
+ 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63,
+ 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64,
+ 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65,
+ 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67,
+ 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68,
+ 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69,
+ 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b,
+ 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f,
+ 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e,
+ 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f,
+ 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72,
+ 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73,
+ 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74,
+ 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75,
+ 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79,
+ 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73,
+ 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49,
+ 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f,
+ 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55,
+ 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49,
+ 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55,
+ 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61,
+ 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67,
+ 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f,
+ 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f,
+ 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f,
+ /* 0x0200 .. 0x02ff */
+ 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65,
+ 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f,
+ 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75,
+ 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61,
+ 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f,
+ 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77,
+ 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76,
+ 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x22, 0x3f, 0x3f,
+ 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0x0300 .. 0x03ff */
+ 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f,
+ 0x22, 0x3f, 0x3f, 0x22, 0x76, 0x3f, 0x22, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x3f,
+ 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f,
+ 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48,
+ 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f,
+ 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58,
+ 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0x1d00 .. 0x1dff */
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f,
+ 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b,
+ 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52,
+ 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62,
+ 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b,
+ 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74,
+ 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f,
+ 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0x1e00 .. 0x1eff */
+ 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62,
+ 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64,
+ 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65,
+ 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66,
+ 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68,
+ 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69,
+ 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c,
+ 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d,
+ 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e,
+ 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f,
+ 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70,
+ 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72,
+ 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73,
+ 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74,
+ 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75,
+ 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76,
+ 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77,
+ 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79,
+ 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74,
+ 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61,
+ 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61,
+ 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61,
+ 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65,
+ 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65,
+ 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f,
+ 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f,
+ 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f,
+ 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75,
+ 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75,
+ 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79,
+ 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0x1f00 .. 0x1fff */
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f,
+ /* 0x2000 .. 0x20ff */
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f,
+ 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20,
+ 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f,
+ 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f,
+ 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0x2100 .. 0x21ff */
+ 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45,
+ 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68,
+ 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f,
+ 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f,
+ 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65,
+ 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65,
+ 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d,
+ 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0x2200 .. 0x22ff */
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a,
+ 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c,
+ 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0x2300 .. 0x23ff */
+ 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0x2400 .. 0x24ff */
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
+ 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x42,
+ 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a,
+ 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52,
+ 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a,
+ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+ 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
+ 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
+ 0x79, 0x7a, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0x2500 .. 0x25ff */
+ 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c,
+ 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c,
+ 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
+ 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
+ 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54,
+ 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b,
+ 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
+ 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
+ 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c,
+ 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f,
+ 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
+ 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b,
+ 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c,
+ 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0x3000 .. 0x30ff */
+ 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0xfb00 .. 0xfbff */
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0xfe00 .. 0xfeff */
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f,
+ 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21,
+ 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23,
+ 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f,
+ 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* 0xff00 .. 0xffff */
+ 0x3f, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f,
+ 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ /* defaults */
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f
+};
+
+static const unsigned short uni2cp_high[256] =
+{
+ 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600,
+ 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000
+};
+
+const struct sbcs_table cptable_20127 =
+{
+ { 20127, 1, 0x003f, 0x003f, "US-ASCII (7bit)" },
+ cp2uni,
+ cp2uni,
+ uni2cp_low,
+ uni2cp_high
+};
diff --git a/reactos/tools/unicode/c_20866.c b/reactos/tools/unicode/c_20866.c
index c0d5bdc6b85..d58953e9db4 100644
--- a/reactos/tools/unicode/c_20866.c
+++ b/reactos/tools/unicode/c_20866.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_20866 =
{
{ 20866, 1, 0x003f, 0x003f, "Russian KOI8" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_21866.c b/reactos/tools/unicode/c_21866.c
index 7fdb7f3b87f..e2fbc3e0341 100644
--- a/reactos/tools/unicode/c_21866.c
+++ b/reactos/tools/unicode/c_21866.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_21866 =
{
{ 21866, 1, 0x003f, 0x003f, "Ukrainian KOI8" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28591.c b/reactos/tools/unicode/c_28591.c
index d6dff0dfdff..c32884ce427 100644
--- a/reactos/tools/unicode/c_28591.c
+++ b/reactos/tools/unicode/c_28591.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28591 =
{
{ 28591, 1, 0x003f, 0x003f, "ISO 8859-1 Latin 1" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28592.c b/reactos/tools/unicode/c_28592.c
index 88328d14096..05b945d58c8 100644
--- a/reactos/tools/unicode/c_28592.c
+++ b/reactos/tools/unicode/c_28592.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28592 =
{
{ 28592, 1, 0x003f, 0x003f, "ISO 8859-2 Latin 2 (East European)" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28593.c b/reactos/tools/unicode/c_28593.c
index 2bc395892eb..052bec40d61 100644
--- a/reactos/tools/unicode/c_28593.c
+++ b/reactos/tools/unicode/c_28593.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28593 =
{
{ 28593, 1, 0x003f, 0x003f, "ISO 8859-3 Latin 3 (South European)" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28594.c b/reactos/tools/unicode/c_28594.c
index c069f47fcba..95507110898 100644
--- a/reactos/tools/unicode/c_28594.c
+++ b/reactos/tools/unicode/c_28594.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28594 =
{
{ 28594, 1, 0x003f, 0x003f, "ISO 8859-4 Latin 4 (Baltic old)" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28595.c b/reactos/tools/unicode/c_28595.c
index e61da41e455..2a24afbeb2b 100644
--- a/reactos/tools/unicode/c_28595.c
+++ b/reactos/tools/unicode/c_28595.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_28595 =
{
{ 28595, 1, 0x003f, 0x003f, "ISO 8859-5 Cyrillic" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28596.c b/reactos/tools/unicode/c_28596.c
index 19c493b94eb..1722caa8a11 100644
--- a/reactos/tools/unicode/c_28596.c
+++ b/reactos/tools/unicode/c_28596.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_28596 =
{
{ 28596, 1, 0x003f, 0x003f, "ISO 8859-6 Arabic" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28597.c b/reactos/tools/unicode/c_28597.c
index f72efb24335..c1cc1984420 100644
--- a/reactos/tools/unicode/c_28597.c
+++ b/reactos/tools/unicode/c_28597.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28597 =
{
{ 28597, 1, 0x003f, 0x003f, "ISO 8859-7 Greek" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28598.c b/reactos/tools/unicode/c_28598.c
index 3bd0cf98d94..2b901e1777d 100644
--- a/reactos/tools/unicode/c_28598.c
+++ b/reactos/tools/unicode/c_28598.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_28598 =
{
{ 28598, 1, 0x003f, 0x003f, "ISO 8859-8 Hebrew" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28599.c b/reactos/tools/unicode/c_28599.c
index e4cc2580182..42ea3d6ed34 100644
--- a/reactos/tools/unicode/c_28599.c
+++ b/reactos/tools/unicode/c_28599.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28599 =
{
{ 28599, 1, 0x003f, 0x003f, "ISO 8859-9 Latin 5 (Turkish)" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28600.c b/reactos/tools/unicode/c_28600.c
index 0ef4edf29a3..fe2dc9e6a80 100644
--- a/reactos/tools/unicode/c_28600.c
+++ b/reactos/tools/unicode/c_28600.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28600 =
{
{ 28600, 1, 0x003f, 0x003f, "ISO 8859-10 Latin 6 (Nordic)" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28603.c b/reactos/tools/unicode/c_28603.c
index 7229126e36e..30932325528 100644
--- a/reactos/tools/unicode/c_28603.c
+++ b/reactos/tools/unicode/c_28603.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28603 =
{
{ 28603, 1, 0x003f, 0x003f, "ISO 8859-13 Latin 7 (Baltic)" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28604.c b/reactos/tools/unicode/c_28604.c
index e0473b5f52a..0c885c4e4a1 100644
--- a/reactos/tools/unicode/c_28604.c
+++ b/reactos/tools/unicode/c_28604.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28604 =
{
{ 28604, 1, 0x003f, 0x003f, "ISO 8859-14 Latin 8 (Celtic)" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28605.c b/reactos/tools/unicode/c_28605.c
index f870741caff..9d45471b394 100644
--- a/reactos/tools/unicode/c_28605.c
+++ b/reactos/tools/unicode/c_28605.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28605 =
{
{ 28605, 1, 0x003f, 0x003f, "ISO 8859-15 Latin 9 (Euro)" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_28606.c b/reactos/tools/unicode/c_28606.c
index a8d0fffdc0b..5942dff92a1 100644
--- a/reactos/tools/unicode/c_28606.c
+++ b/reactos/tools/unicode/c_28606.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_28606 =
{
{ 28606, 1, 0x003f, 0x003f, "ISO 8859-16 Latin 10 (Balkan)" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_424.c b/reactos/tools/unicode/c_424.c
index a018e5aa7d2..43967eac514 100644
--- a/reactos/tools/unicode/c_424.c
+++ b/reactos/tools/unicode/c_424.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_424 =
{
{ 424, 1, 0x003f, 0x003f, "IBM EBCDIC Hebrew" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_437.c b/reactos/tools/unicode/c_437.c
index a91b4424cb4..5fbb440698a 100644
--- a/reactos/tools/unicode/c_437.c
+++ b/reactos/tools/unicode/c_437.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
+ 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7,
+ 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
+ 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9,
+ 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192,
+ 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba,
+ 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+ 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+ 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
+ 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
+ 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_437 =
{
{ 437, 1, 0x003f, 0x003f, "OEM United States" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_500.c b/reactos/tools/unicode/c_500.c
index 0fa33c7c1a2..df20eb19711 100644
--- a/reactos/tools/unicode/c_500.c
+++ b/reactos/tools/unicode/c_500.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_500 =
{
{ 500, 1, 0x003f, 0x003f, "IBM EBCDIC International" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_737.c b/reactos/tools/unicode/c_737.c
index c8c9f82e462..e86bbaeef21 100644
--- a/reactos/tools/unicode/c_737.c
+++ b/reactos/tools/unicode/c_737.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x03c9, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd,
0x03cb, 0x03ce, 0x0386, 0x0388, 0x0389, 0x038a, 0x038c, 0x038e,
0x038f, 0x00b1, 0x2265, 0x2264, 0x03aa, 0x03ab, 0x00f7, 0x2248,
+ 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
+ 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
+ 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
+ 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
+ 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
+ 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+ 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+ 0x03c9, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd,
+ 0x03cb, 0x03ce, 0x0386, 0x0388, 0x0389, 0x038a, 0x038c, 0x038e,
+ 0x038f, 0x00b1, 0x2265, 0x2264, 0x03aa, 0x03ab, 0x00f7, 0x2248,
0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_737 =
{
{ 737, 1, 0x003f, 0x003f, "OEM Greek 437G" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_775.c b/reactos/tools/unicode/c_775.c
index 1765741c765..4921dd3238a 100644
--- a/reactos/tools/unicode/c_775.c
+++ b/reactos/tools/unicode/c_775.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x00d3, 0x00df, 0x014c, 0x0143, 0x00f5, 0x00d5, 0x00b5, 0x0144,
0x0136, 0x0137, 0x013b, 0x013c, 0x0146, 0x0112, 0x0145, 0x2019,
0x00ad, 0x00b1, 0x201c, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x201e,
+ 0x00b0, 0x2219, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x0106, 0x00fc, 0x00e9, 0x0101, 0x00e4, 0x0123, 0x00e5, 0x0107,
+ 0x0142, 0x0113, 0x0156, 0x0157, 0x012b, 0x0179, 0x00c4, 0x00c5,
+ 0x00c9, 0x00e6, 0x00c6, 0x014d, 0x00f6, 0x0122, 0x00a2, 0x015a,
+ 0x015b, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x00a4,
+ 0x0100, 0x012a, 0x00f3, 0x017b, 0x017c, 0x017a, 0x201d, 0x00a6,
+ 0x00a9, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x0141, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010c, 0x0118,
+ 0x0116, 0x2563, 0x2551, 0x2557, 0x255d, 0x012e, 0x0160, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x0172, 0x016a,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x017d,
+ 0x0105, 0x010d, 0x0119, 0x0117, 0x012f, 0x0161, 0x0173, 0x016b,
+ 0x017e, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+ 0x00d3, 0x00df, 0x014c, 0x0143, 0x00f5, 0x00d5, 0x00b5, 0x0144,
+ 0x0136, 0x0137, 0x013b, 0x013c, 0x0146, 0x0112, 0x0145, 0x2019,
+ 0x00ad, 0x00b1, 0x201c, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x201e,
0x00b0, 0x2219, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_775 =
{
{ 775, 1, 0x003f, 0x003f, "OEM Baltic" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_850.c b/reactos/tools/unicode/c_850.c
index a5bc688e86c..72fa3481c82 100644
--- a/reactos/tools/unicode/c_850.c
+++ b/reactos/tools/unicode/c_850.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe,
0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4,
0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8,
+ 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7,
+ 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
+ 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9,
+ 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x0192,
+ 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba,
+ 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0,
+ 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4,
+ 0x00f0, 0x00d0, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce,
+ 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580,
+ 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe,
+ 0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4,
+ 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8,
0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_850 =
{
{ 850, 1, 0x003f, 0x003f, "OEM Multilingual Latin 1" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_852.c b/reactos/tools/unicode/c_852.c
index 455732a6698..26ba157143b 100644
--- a/reactos/tools/unicode/c_852.c
+++ b/reactos/tools/unicode/c_852.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x00d3, 0x00df, 0x00d4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161,
0x0154, 0x00da, 0x0155, 0x0170, 0x00fd, 0x00dd, 0x0163, 0x00b4,
0x00ad, 0x02dd, 0x02db, 0x02c7, 0x02d8, 0x00a7, 0x00f7, 0x00b8,
+ 0x00b0, 0x00a8, 0x02d9, 0x0171, 0x0158, 0x0159, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x016f, 0x0107, 0x00e7,
+ 0x0142, 0x00eb, 0x0150, 0x0151, 0x00ee, 0x0179, 0x00c4, 0x0106,
+ 0x00c9, 0x0139, 0x013a, 0x00f4, 0x00f6, 0x013d, 0x013e, 0x015a,
+ 0x015b, 0x00d6, 0x00dc, 0x0164, 0x0165, 0x0141, 0x00d7, 0x010d,
+ 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x0104, 0x0105, 0x017d, 0x017e,
+ 0x0118, 0x0119, 0x00ac, 0x017a, 0x010c, 0x015f, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x011a,
+ 0x015e, 0x2563, 0x2551, 0x2557, 0x255d, 0x017b, 0x017c, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x0102, 0x0103,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4,
+ 0x0111, 0x0110, 0x010e, 0x00cb, 0x010f, 0x0147, 0x00cd, 0x00ce,
+ 0x011b, 0x2518, 0x250c, 0x2588, 0x2584, 0x0162, 0x016e, 0x2580,
+ 0x00d3, 0x00df, 0x00d4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161,
+ 0x0154, 0x00da, 0x0155, 0x0170, 0x00fd, 0x00dd, 0x0163, 0x00b4,
+ 0x00ad, 0x02dd, 0x02db, 0x02c7, 0x02d8, 0x00a7, 0x00f7, 0x00b8,
0x00b0, 0x00a8, 0x02d9, 0x0171, 0x0158, 0x0159, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_852 =
{
{ 852, 1, 0x003f, 0x003f, "OEM Slovak Latin 2" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_855.c b/reactos/tools/unicode/c_855.c
index 6cef840aa7b..ca8b91a3783 100644
--- a/reactos/tools/unicode/c_855.c
+++ b/reactos/tools/unicode/c_855.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x042f, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443,
0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044c, 0x042c, 0x2116,
0x00ad, 0x044b, 0x042b, 0x0437, 0x0417, 0x0448, 0x0428, 0x044d,
+ 0x042d, 0x0449, 0x0429, 0x0447, 0x0427, 0x00a7, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404,
+ 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408,
+ 0x0459, 0x0409, 0x045a, 0x040a, 0x045b, 0x040b, 0x045c, 0x040c,
+ 0x045e, 0x040e, 0x045f, 0x040f, 0x044e, 0x042e, 0x044a, 0x042a,
+ 0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414,
+ 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438,
+ 0x0418, 0x2563, 0x2551, 0x2557, 0x255d, 0x0439, 0x0419, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x043a, 0x041a,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4,
+ 0x043b, 0x041b, 0x043c, 0x041c, 0x043d, 0x041d, 0x043e, 0x041e,
+ 0x043f, 0x2518, 0x250c, 0x2588, 0x2584, 0x041f, 0x044f, 0x2580,
+ 0x042f, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443,
+ 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044c, 0x042c, 0x2116,
+ 0x00ad, 0x044b, 0x042b, 0x0437, 0x0417, 0x0448, 0x0428, 0x044d,
0x042d, 0x0449, 0x0429, 0x0447, 0x0427, 0x00a7, 0x25a0, 0x00a0
};
@@ -711,6 +744,7 @@ const struct sbcs_table cptable_855 =
{
{ 855, 1, 0x003f, 0x003f, "OEM Cyrillic" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_856.c b/reactos/tools/unicode/c_856.c
index b86d527cde2..1809b82bc6b 100644
--- a/reactos/tools/unicode/c_856.c
+++ b/reactos/tools/unicode/c_856.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_856 =
{
{ 856, 1, 0x003f, 0x003f, "Hebrew PC" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_857.c b/reactos/tools/unicode/c_857.c
index 782927ea26a..784ca491e12 100644
--- a/reactos/tools/unicode/c_857.c
+++ b/reactos/tools/unicode/c_857.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x003f,
0x00d7, 0x00da, 0x00db, 0x00d9, 0x00ec, 0x00ff, 0x00af, 0x00b4,
0x00ad, 0x00b1, 0x003f, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8,
+ 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7,
+ 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x0131, 0x00c4, 0x00c5,
+ 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9,
+ 0x0130, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x015e, 0x015f,
+ 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x011e, 0x011f,
+ 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0,
+ 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4,
+ 0x00ba, 0x00aa, 0x00ca, 0x00cb, 0x00c8, 0x003f, 0x00cd, 0x00ce,
+ 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580,
+ 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x003f,
+ 0x00d7, 0x00da, 0x00db, 0x00d9, 0x00ec, 0x00ff, 0x00af, 0x00b4,
+ 0x00ad, 0x00b1, 0x003f, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8,
0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_857 =
{
{ 857, 1, 0x003f, 0x003f, "OEM Turkish" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_860.c b/reactos/tools/unicode/c_860.c
index f090561a7fa..23bdd2d17a1 100644
--- a/reactos/tools/unicode/c_860.c
+++ b/reactos/tools/unicode/c_860.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
+ 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e3, 0x00e0, 0x00c1, 0x00e7,
+ 0x00ea, 0x00ca, 0x00e8, 0x00cd, 0x00d4, 0x00ec, 0x00c3, 0x00c2,
+ 0x00c9, 0x00c0, 0x00c8, 0x00f4, 0x00f5, 0x00f2, 0x00da, 0x00f9,
+ 0x00cc, 0x00d5, 0x00dc, 0x00a2, 0x00a3, 0x00d9, 0x20a7, 0x00d3,
+ 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba,
+ 0x00bf, 0x00d2, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+ 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+ 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
+ 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
+ 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_860 =
{
{ 860, 1, 0x003f, 0x003f, "OEM Portuguese" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_861.c b/reactos/tools/unicode/c_861.c
index f799726ef24..afa284eff12 100644
--- a/reactos/tools/unicode/c_861.c
+++ b/reactos/tools/unicode/c_861.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
+ 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7,
+ 0x00ea, 0x00eb, 0x00e8, 0x00d0, 0x00f0, 0x00de, 0x00c4, 0x00c5,
+ 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00fe, 0x00fb, 0x00dd,
+ 0x00fd, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x20a7, 0x0192,
+ 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00c1, 0x00cd, 0x00d3, 0x00da,
+ 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+ 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+ 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
+ 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
+ 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_861 =
{
{ 861, 1, 0x003f, 0x003f, "OEM Icelandic" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_862.c b/reactos/tools/unicode/c_862.c
index f58a7e5c1fd..2375cfc2b41 100644
--- a/reactos/tools/unicode/c_862.c
+++ b/reactos/tools/unicode/c_862.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
+ 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
+ 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
+ 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
+ 0x05e8, 0x05e9, 0x05ea, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192,
+ 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba,
+ 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+ 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+ 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
+ 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
+ 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
};
@@ -711,6 +744,7 @@ const struct sbcs_table cptable_862 =
{
{ 862, 1, 0x003f, 0x003f, "OEM Hebrew" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_863.c b/reactos/tools/unicode/c_863.c
index f9916d74a87..488fe853221 100644
--- a/reactos/tools/unicode/c_863.c
+++ b/reactos/tools/unicode/c_863.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
+ 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00c2, 0x00e0, 0x00b6, 0x00e7,
+ 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x2017, 0x00c0, 0x00a7,
+ 0x00c9, 0x00c8, 0x00ca, 0x00f4, 0x00cb, 0x00cf, 0x00fb, 0x00f9,
+ 0x00a4, 0x00d4, 0x00dc, 0x00a2, 0x00a3, 0x00d9, 0x00db, 0x0192,
+ 0x00a6, 0x00b4, 0x00f3, 0x00fa, 0x00a8, 0x00b8, 0x00b3, 0x00af,
+ 0x00ce, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00be, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+ 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+ 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
+ 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
+ 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_863 =
{
{ 863, 1, 0x003f, 0x003f, "OEM Canadian French" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_864.c b/reactos/tools/unicode/c_864.c
index 852a8cf0af5..29efacabc3d 100644
--- a/reactos/tools/unicode/c_864.c
+++ b/reactos/tools/unicode/c_864.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_864 =
{
{ 864, 1, 0x003f, 0x003f, "OEM Arabic" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_865.c b/reactos/tools/unicode/c_865.c
index 7233cf7499c..94455503b74 100644
--- a/reactos/tools/unicode/c_865.c
+++ b/reactos/tools/unicode/c_865.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
+ 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7,
+ 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
+ 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9,
+ 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x20a7, 0x0192,
+ 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba,
+ 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00a4,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+ 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+ 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
+ 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
+ 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_865 =
{
{ 865, 1, 0x003f, 0x003f, "OEM Nordic" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_866.c b/reactos/tools/unicode/c_866.c
index b92e117b9bc..3d5ff0e0935 100644
--- a/reactos/tools/unicode/c_866.c
+++ b/reactos/tools/unicode/c_866.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e,
+ 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+ 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+ 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e,
0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0
};
@@ -711,6 +744,7 @@ const struct sbcs_table cptable_866 =
{
{ 866, 1, 0x003f, 0x003f, "OEM Russian" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_869.c b/reactos/tools/unicode/c_869.c
index 5b7c71ab49f..17265fa56c9 100644
--- a/reactos/tools/unicode/c_869.c
+++ b/reactos/tools/unicode/c_869.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd,
0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x0384,
0x00ad, 0x00b1, 0x03c5, 0x03c6, 0x03c7, 0x00a7, 0x03c8, 0x0385,
+ 0x00b0, 0x00a8, 0x03c9, 0x03cb, 0x03b0, 0x03ce, 0x25a0, 0x00a0,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0386, 0x0087,
+ 0x00b7, 0x00ac, 0x00a6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389,
+ 0x038a, 0x03aa, 0x038c, 0x0093, 0x0094, 0x038e, 0x03ab, 0x00a9,
+ 0x038f, 0x00b2, 0x00b3, 0x03ac, 0x00a3, 0x03ad, 0x03ae, 0x03af,
+ 0x03ca, 0x0390, 0x03cc, 0x03cd, 0x0391, 0x0392, 0x0393, 0x0394,
+ 0x0395, 0x0396, 0x0397, 0x00bd, 0x0398, 0x0399, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039a, 0x039b, 0x039c,
+ 0x039d, 0x2563, 0x2551, 0x2557, 0x255d, 0x039e, 0x039f, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x03a0, 0x03a1,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x03a3,
+ 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2,
+ 0x03b3, 0x2518, 0x250c, 0x2588, 0x2584, 0x03b4, 0x03b5, 0x2580,
+ 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd,
+ 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x0384,
+ 0x00ad, 0x00b1, 0x03c5, 0x03c6, 0x03c7, 0x00a7, 0x03c8, 0x0385,
0x00b0, 0x00a8, 0x03c9, 0x03cb, 0x03b0, 0x03ce, 0x25a0, 0x00a0
};
@@ -678,6 +711,7 @@ const struct sbcs_table cptable_869 =
{
{ 869, 1, 0x003f, 0x003f, "OEM Greek" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_874.c b/reactos/tools/unicode/c_874.c
index 1a46bf5058c..71792bd3770 100644
--- a/reactos/tools/unicode/c_874.c
+++ b/reactos/tools/unicode/c_874.c
@@ -4,7 +4,7 @@
#include "wine/unicode.h"
-static const WCHAR cp2uni[256] =
+static const WCHAR cp2uni[512] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -37,6 +37,39 @@ static const WCHAR cp2uni[256] =
0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
+ 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x003f, 0x003f, 0x00fe, 0x003f,
+ /* glyphs */
+ 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+ 0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+ 0x20ac, 0x0081, 0x0082, 0x0083, 0x0084, 0x2026, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
+ 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
+ 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
+ 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
+ 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
+ 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
+ 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
+ 0x0e38, 0x0e39, 0x0e3a, 0x003f, 0x003f, 0x003f, 0x00de, 0x0e3f,
+ 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
+ 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
+ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x003f, 0x003f, 0x00fe, 0x003f
};
@@ -711,6 +744,7 @@ const struct sbcs_table cptable_874 =
{
{ 874, 1, 0x003f, 0x003f, "ANSI/OEM Thai" },
cp2uni,
+ cp2uni + 256,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_875.c b/reactos/tools/unicode/c_875.c
index 987e30b574f..865331d5de7 100644
--- a/reactos/tools/unicode/c_875.c
+++ b/reactos/tools/unicode/c_875.c
@@ -678,6 +678,7 @@ const struct sbcs_table cptable_875 =
{
{ 875, 1, 0x003f, 0x003f, "IBM EBCDIC Greek" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/c_878.c b/reactos/tools/unicode/c_878.c
index 41cfe802a9d..02f092df4f8 100644
--- a/reactos/tools/unicode/c_878.c
+++ b/reactos/tools/unicode/c_878.c
@@ -711,6 +711,7 @@ const struct sbcs_table cptable_878 =
{
{ 878, 1, 0x003f, 0x003f, "Russian KOI8" },
cp2uni,
+ cp2uni,
uni2cp_low,
uni2cp_high
};
diff --git a/reactos/tools/unicode/casemap.c b/reactos/tools/unicode/casemap.c
index 7073243faab..d038b895ab5 100644
--- a/reactos/tools/unicode/casemap.c
+++ b/reactos/tools/unicode/casemap.c
@@ -3,15 +3,15 @@
#include "wine/unicode.h"
-const WCHAR wine_casemap_lower[3298] =
+const WCHAR wine_casemap_lower[3318] =
{
/* index */
0x01bf, 0x02bf, 0x03bf, 0x0439, 0x0539, 0x0639, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0699, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0799, 0x0892,
- 0x0100, 0x098f, 0x0100, 0x0100, 0x09ff, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0aff, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x098f, 0x0100, 0x0100, 0x0a13, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0b13, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
@@ -37,7 +37,7 @@ const WCHAR wine_casemap_lower[3298] =
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0be2,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0bf6,
/* defaults */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -137,9 +137,9 @@ const WCHAR wine_casemap_lower[3298] =
0xff7e, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xff5d, 0x0000, 0x0000,
- 0x0000, 0x0053, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x2a2b, 0x0001, 0x0000, 0xff5d, 0x2a28, 0x0000,
+ 0x0000, 0x0001, 0x0000, 0xff3d, 0x0045, 0x0047, 0x0001, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -177,8 +177,8 @@ const WCHAR wine_casemap_lower[3298] =
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffc4, 0x0000,
- 0x0000, 0x0001, 0x0000, 0xfff9, 0x0001, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000,
+ 0x0000, 0x0001, 0x0000, 0xfff9, 0x0001, 0x0000, 0x0000, 0xff7e,
+ 0xff7e, 0xff7e,
/* 0x0400 .. 0x04ff */
0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
@@ -204,18 +204,18 @@ const WCHAR wine_casemap_lower[3298] =
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
- 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,
+ 0x000f, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,
0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
- 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
/* 0x0500 .. 0x05ff */
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -330,7 +330,7 @@ const WCHAR wine_casemap_lower[3298] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0xe2a3, 0x0000, 0x0000, 0x0000, 0xdf41,
- 0xdfba, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xdfba, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001c,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -341,7 +341,7 @@ const WCHAR wine_casemap_lower[3298] =
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -357,21 +357,24 @@ const WCHAR wine_casemap_lower[3298] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- /* 0x2490 .. 0x24ff */
+ /* 0x247c .. 0x24ff */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001a, 0x001a,
- 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a,
0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a,
0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a,
+ 0x001a, 0x001a, 0x001a, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2c00 .. 0x2cff */
0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
@@ -385,9 +388,9 @@ const WCHAR wine_casemap_lower[3298] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0000, 0xd609, 0xf11a, 0xd619, 0x0000, 0x0000, 0x0001,
+ 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,
@@ -436,15 +439,15 @@ const WCHAR wine_casemap_lower[3298] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000
};
-const WCHAR wine_casemap_upper[3441] =
+const WCHAR wine_casemap_upper[3582] =
{
/* index */
- 0x019f, 0x029f, 0x039f, 0x045a, 0x0556, 0x0655, 0x0100, 0x0100,
+ 0x019f, 0x029f, 0x039f, 0x045a, 0x0556, 0x0656, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0754, 0x0854,
- 0x0100, 0x0948, 0x0100, 0x0100, 0x09c8, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0ab2, 0x0bb2, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x06dd, 0x07dc, 0x08dc,
+ 0x0100, 0x09d0, 0x0100, 0x0100, 0x0a55, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0b3f, 0x0c3f, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
@@ -470,7 +473,7 @@ const WCHAR wine_casemap_upper[3441] =
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0c71,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0cfe,
/* defaults */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -542,7 +545,7 @@ const WCHAR wine_casemap_upper[3441] =
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0xfed4,
- 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,
+ 0x00c3, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,
0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0061, 0x0000, 0x0000,
0x0000, 0xffff, 0x00a3, 0x0000, 0x0000, 0x0000, 0x0082, 0x0000,
@@ -567,17 +570,17 @@ const WCHAR wine_casemap_upper[3441] =
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0x0000, 0x0000, 0xff2e, 0xff32, 0x0000, 0xff33, 0xff33,
0x0000, 0xff36, 0x0000, 0xff35, 0x0000, 0x0000, 0x0000, 0x0000,
0xff33, 0x0000, 0x0000, 0xff31, 0x0000, 0x0000, 0x0000, 0x0000,
- 0xff2f, 0xff2d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff2d,
+ 0xff2f, 0xff2d, 0x0000, 0x29f7, 0x0000, 0x0000, 0x0000, 0xff2d,
0x0000, 0x0000, 0xff2b, 0x0000, 0x0000, 0xff2a, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x29e7, 0x0000, 0x0000,
0xff26, 0x0000, 0x0000, 0xff26, 0x0000, 0x0000, 0x0000, 0x0000,
- 0xff26, 0x0000, 0xff27, 0xff27, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0xff25, 0x0000, 0xffad, 0x0000, 0x0000, 0x0000,
+ 0xff26, 0xffbb, 0xff27, 0xff27, 0xffb9, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xff25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -598,8 +601,8 @@ const WCHAR wine_casemap_upper[3441] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0082, 0x0082,
+ 0x0082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -642,17 +645,17 @@ const WCHAR wine_casemap_upper[3441] =
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000,
0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
- 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0xffff, 0x0000, 0xffff, 0xfff1, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
- 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000,
- /* 0x0501 .. 0x05ff */
- 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
- 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff,
+ /* 0x0500 .. 0x05ff */
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
+ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -662,11 +665,29 @@ const WCHAR wine_casemap_upper[3441] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
- 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
- 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0x0000, 0x0000,
+ 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1d79 .. 0x1dff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0ee6, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -757,14 +778,14 @@ const WCHAR wine_casemap_upper[3441] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xffe4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0xfff0, 0xfff0, 0xfff0, 0xfff0,
0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0,
0xfff0, 0xfff0, 0xfff0, 0xfff0, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -780,7 +801,7 @@ const WCHAR wine_casemap_upper[3441] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
- /* 0x2480 .. 0x24ff */
+ /* 0x247b .. 0x24ff */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -791,12 +812,13 @@ const WCHAR wine_casemap_upper[3441] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffe6, 0xffe6, 0xffe6,
0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6,
0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6,
- 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6,
- 0xffe6, 0xffe6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2c16 .. 0x2cff */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -807,10 +829,10 @@ const WCHAR wine_casemap_upper[3441] =
0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,
- 0xffd0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xffd0, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xd5d5,
+ 0xd5d8, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,
@@ -887,14 +909,14 @@ const WCHAR wine_casemap_upper[3441] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
};
-const WCHAR wine_digitmap[4273] =
+const WCHAR wine_digitmap[4619] =
{
/* index */
- 0x01d0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x028a, 0x0100,
- 0x0100, 0x0384, 0x0474, 0x0564, 0x0654, 0x0744, 0x07f4, 0x08d4,
- 0x0994, 0x0100, 0x0100, 0x0a2b, 0x0100, 0x0100, 0x0100, 0x0a9d,
- 0x0b8d, 0x0c47, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0d21, 0x0100, 0x0100, 0x0100, 0x0dc1, 0x0100, 0x0100, 0x0ec1,
+ 0x01d0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x028a, 0x0384,
+ 0x0100, 0x044e, 0x053e, 0x062e, 0x071e, 0x080e, 0x08be, 0x099e,
+ 0x0a5e, 0x0100, 0x0100, 0x0af5, 0x0100, 0x0100, 0x0100, 0x0b67,
+ 0x0c57, 0x0d11, 0x0100, 0x0deb, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0e7b, 0x0100, 0x0100, 0x0100, 0x0f1b, 0x0100, 0x0100, 0x101b,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
@@ -921,7 +943,7 @@ const WCHAR wine_digitmap[4273] =
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0fb1,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x110b,
/* defaults */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -1007,7 +1029,7 @@ const WCHAR wine_digitmap[4273] =
0x0000, 0x0000, 0xf940, 0xf940, 0xf940, 0xf940, 0xf940, 0xf940,
0xf940, 0xf940, 0xf940, 0xf940, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000,
- /* 0x0906 .. 0x09ff */
+ /* 0x0706 .. 0x07ff */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -1020,6 +1042,33 @@ const WCHAR wine_digitmap[4273] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xf870, 0xf870, 0xf870, 0xf870, 0xf870, 0xf870,
+ 0xf870, 0xf870, 0xf870, 0xf870, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000,
+ /* 0x0936 .. 0x09ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca,
0xf6ca, 0xf6ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -1333,7 +1382,14 @@ const WCHAR wine_digitmap[4273] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000,
- /* 0x2026 .. 0x20ff */
+ /* 0x1b26 .. 0x1bff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xe4e0, 0xe4e0, 0xe4e0, 0xe4e0, 0xe4e0, 0xe4e0,
+ 0xe4e0, 0xe4e0, 0xe4e0, 0xe4e0, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -1343,13 +1399,6 @@ const WCHAR wine_digitmap[4273] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0xdfc0, 0x0000, 0x0000, 0x0000, 0xdfc0, 0xdfc0,
- 0xdfc0, 0xdfc0, 0xdfc0, 0xdfc0, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0,
- 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -1362,6 +1411,25 @@ const WCHAR wine_digitmap[4273] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000,
+ /* 0x2070 .. 0x20ff */
+ 0xdfc0, 0x0000, 0x0000, 0x0000, 0xdfc0, 0xdfc0, 0xdfc0, 0xdfc0,
+ 0xdfc0, 0xdfc0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0,
+ 0xdfb0, 0xdfb0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2460 .. 0x24ff */
0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1,
0xdbd1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
diff --git a/reactos/tools/unicode/compose.c b/reactos/tools/unicode/compose.c
index 8d5567df0c8..be886d0390d 100644
--- a/reactos/tools/unicode/compose.c
+++ b/reactos/tools/unicode/compose.c
@@ -3,27 +3,27 @@
#include "wine/unicode.h"
-const WCHAR unicode_compose_table[0x846] =
+const WCHAR unicode_compose_table[0x85e] =
{
/* second chars + offsets */
- 0x0300, 0x0046, 0x0301, 0x009a, 0x0302, 0x0110, 0x0303, 0x0130,
- 0x0304, 0x014c, 0x0306, 0x0178, 0x0307, 0x0198, 0x0308, 0x01c6,
- 0x0309, 0x01fc, 0x030a, 0x0214, 0x030b, 0x021a, 0x030c, 0x0220,
- 0x030f, 0x0245, 0x0311, 0x0253, 0x0313, 0x025f, 0x0314, 0x026d,
- 0x031b, 0x027d, 0x0323, 0x0281, 0x0324, 0x02ab, 0x0325, 0x02ad,
- 0x0326, 0x02af, 0x0327, 0x02b3, 0x0328, 0x02c9, 0x032d, 0x02d3,
- 0x032e, 0x02df, 0x0330, 0x02e1, 0x0331, 0x02e7, 0x0338, 0x02f8,
- 0x0342, 0x0325, 0x0345, 0x0342, 0x05b4, 0x0381, 0x05b7, 0x0382,
- 0x05b8, 0x0384, 0x05b9, 0x0385, 0x05bc, 0x0386, 0x05bf, 0x039c,
- 0x05c1, 0x039f, 0x05c2, 0x03a1, 0x0653, 0x03a3, 0x0654, 0x03a4,
- 0x0655, 0x03aa, 0x093c, 0x03ab, 0x09bc, 0x03b6, 0x09be, 0x03b9,
- 0x09d7, 0x03ba, 0x0a3c, 0x03bb, 0x0b3c, 0x03c1, 0x0b3e, 0x03c3,
- 0x0b56, 0x03c4, 0x0b57, 0x03c5, 0x0bbe, 0x03c6, 0x0bd7, 0x03c8,
- 0x0c56, 0x03ca, 0x0cc2, 0x03cb, 0x0cd5, 0x03cc, 0x0cd6, 0x03cf,
- 0x0d3e, 0x03d0, 0x0d57, 0x03d2, 0x0dca, 0x03d3, 0x0dcf, 0x03d5,
- 0x0ddf, 0x03d6, 0x0f72, 0x03d7, 0x0f74, 0x03d8, 0x0f80, 0x03d9,
- 0x0fb5, 0x03dc, 0x0fb7, 0x03de, 0x102e, 0x03e8, 0x3099, 0x03e9,
- 0x309a, 0x0419, 0x0000, 0x0423,
+ 0x0300, 0x0047, 0x0301, 0x009b, 0x0302, 0x0111, 0x0303, 0x0131,
+ 0x0304, 0x014d, 0x0306, 0x0179, 0x0307, 0x0199, 0x0308, 0x01c7,
+ 0x0309, 0x01fd, 0x030a, 0x0215, 0x030b, 0x021b, 0x030c, 0x0221,
+ 0x030f, 0x0246, 0x0311, 0x0254, 0x0313, 0x0260, 0x0314, 0x026e,
+ 0x031b, 0x027e, 0x0323, 0x0282, 0x0324, 0x02ac, 0x0325, 0x02ae,
+ 0x0326, 0x02b0, 0x0327, 0x02b4, 0x0328, 0x02ca, 0x032d, 0x02d4,
+ 0x032e, 0x02e0, 0x0330, 0x02e2, 0x0331, 0x02e8, 0x0338, 0x02f9,
+ 0x0342, 0x0326, 0x0345, 0x0343, 0x05b4, 0x0382, 0x05b7, 0x0383,
+ 0x05b8, 0x0385, 0x05b9, 0x0386, 0x05bc, 0x0387, 0x05bf, 0x039d,
+ 0x05c1, 0x03a0, 0x05c2, 0x03a2, 0x0653, 0x03a4, 0x0654, 0x03a5,
+ 0x0655, 0x03ab, 0x093c, 0x03ac, 0x09bc, 0x03b7, 0x09be, 0x03ba,
+ 0x09d7, 0x03bb, 0x0a3c, 0x03bc, 0x0b3c, 0x03c2, 0x0b3e, 0x03c4,
+ 0x0b56, 0x03c5, 0x0b57, 0x03c6, 0x0bbe, 0x03c7, 0x0bd7, 0x03c9,
+ 0x0c56, 0x03cb, 0x0cc2, 0x03cc, 0x0cd5, 0x03cd, 0x0cd6, 0x03d0,
+ 0x0d3e, 0x03d1, 0x0d57, 0x03d3, 0x0dca, 0x03d4, 0x0dcf, 0x03d6,
+ 0x0ddf, 0x03d7, 0x0f72, 0x03d8, 0x0f74, 0x03d9, 0x0f80, 0x03da,
+ 0x0fb5, 0x03dd, 0x0fb7, 0x03df, 0x102e, 0x03e9, 0x1b35, 0x03ea,
+ 0x3099, 0x03f5, 0x309a, 0x0425, 0x0000, 0x042f,
/* 0x0300 */
0x0041, 0x00c0, 0x0045, 0x00c8, 0x0049, 0x00cc, 0x004e, 0x01f8,
0x004f, 0x00d2, 0x0055, 0x00d9, 0x0057, 0x1e80, 0x0059, 0x1ef2,
@@ -356,6 +356,10 @@ const WCHAR unicode_compose_table[0x846] =
0x0fa6, 0x0fa7, 0x0fab, 0x0fac,
/* 0x102e */
0x1025, 0x1026,
+ /* 0x1b35 */
+ 0x1b05, 0x1b06, 0x1b07, 0x1b08, 0x1b09, 0x1b0a, 0x1b0b, 0x1b0c,
+ 0x1b0d, 0x1b0e, 0x1b11, 0x1b12, 0x1b3a, 0x1b3b, 0x1b3c, 0x1b3d,
+ 0x1b3e, 0x1b40, 0x1b3f, 0x1b41, 0x1b42, 0x1b43,
/* 0x3099 */
0x3046, 0x3094, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050,
0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
@@ -375,18 +379,18 @@ const WCHAR unicode_compose_table[0x846] =
0x30d8, 0x30da, 0x30db, 0x30dd
};
-const unsigned int unicode_compose_table_size = 69;
+const unsigned int unicode_compose_table_size = 70;
-const WCHAR unicode_decompose_table[4560] =
+const WCHAR unicode_decompose_table[4704] =
{
/* index */
0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0100, 0x0160, 0x0100,
0x0100, 0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x0100, 0x01c0,
0x01d0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x01e0, 0x01f0,
- 0x0100, 0x0200, 0x0210, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0220, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0230, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x01e0, 0x0100, 0x0100, 0x01f0, 0x0200,
+ 0x0100, 0x0210, 0x0220, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0230, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0240, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
@@ -411,70 +415,73 @@ const WCHAR unicode_decompose_table[4560] =
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0240, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0250, 0x0100, 0x0100, 0x0100, 0x0100,
/* null sub-index */
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
/* sub-index 00 */
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0270, 0x0290, 0x02b0, 0x02d0,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0280, 0x02a0, 0x02c0, 0x02e0,
/* sub-index 01 */
- 0x02f0, 0x0310, 0x0330, 0x0350, 0x0370, 0x0390, 0x03b0, 0x03d0,
- 0x0250, 0x0250, 0x03f0, 0x0410, 0x0430, 0x0450, 0x0470, 0x0490,
+ 0x0300, 0x0320, 0x0340, 0x0360, 0x0380, 0x03a0, 0x03c0, 0x03e0,
+ 0x0260, 0x0260, 0x0400, 0x0420, 0x0440, 0x0460, 0x0480, 0x04a0,
/* sub-index 02 */
- 0x04b0, 0x04d0, 0x04f0, 0x0510, 0x0250, 0x0250, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
+ 0x04c0, 0x04e0, 0x0500, 0x0520, 0x0260, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
/* sub-index 03 */
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0530, 0x0250, 0x0250, 0x0250,
- 0x0550, 0x0570, 0x0590, 0x05b0, 0x05d0, 0x05f0, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0540, 0x0260, 0x0260, 0x0260,
+ 0x0560, 0x0580, 0x05a0, 0x05c0, 0x05e0, 0x0600, 0x0260, 0x0260,
/* sub-index 04 */
- 0x0610, 0x0630, 0x0250, 0x0650, 0x0250, 0x0670, 0x0250, 0x0690,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x06b0, 0x06d0, 0x06f0, 0x0710,
+ 0x0620, 0x0640, 0x0260, 0x0660, 0x0260, 0x0680, 0x0260, 0x06a0,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x06c0, 0x06e0, 0x0700, 0x0720,
/* sub-index 06 */
- 0x0250, 0x0250, 0x0730, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0750, 0x0770, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0740, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0760, 0x0780, 0x0260, 0x0260,
/* sub-index 09 */
- 0x0250, 0x0250, 0x0790, 0x07b0, 0x0250, 0x07d0, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x07f0, 0x0810, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x07a0, 0x07c0, 0x0260, 0x07e0, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0800, 0x0820, 0x0260, 0x0260,
/* sub-index 0a */
- 0x0250, 0x0250, 0x0250, 0x0830, 0x0250, 0x0850, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0260, 0x0840, 0x0260, 0x0860, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
/* sub-index 0b */
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0870, 0x0890, 0x0250, 0x0250,
- 0x0250, 0x08b0, 0x0250, 0x0250, 0x08d0, 0x0250, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0880, 0x08a0, 0x0260, 0x0260,
+ 0x0260, 0x08c0, 0x0260, 0x0260, 0x08e0, 0x0260, 0x0260, 0x0260,
/* sub-index 0c */
- 0x0250, 0x0250, 0x0250, 0x0250, 0x08f0, 0x0250, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0910, 0x0250, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0900, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0920, 0x0260, 0x0260, 0x0260,
/* sub-index 0d */
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0930, 0x0250, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0950, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0940, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0960, 0x0260, 0x0260,
/* sub-index 0f */
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0970, 0x0990, 0x09b0, 0x09d0,
- 0x09f0, 0x0a10, 0x0a30, 0x0a50, 0x0250, 0x0250, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0980, 0x09a0, 0x09c0, 0x09e0,
+ 0x0a00, 0x0a20, 0x0a40, 0x0a60, 0x0260, 0x0260, 0x0260, 0x0260,
/* sub-index 10 */
- 0x0250, 0x0250, 0x0a70, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0a80, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
+ /* sub-index 1b */
+ 0x0aa0, 0x0ac0, 0x0260, 0x0ae0, 0x0b00, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
/* sub-index 1e */
- 0x0a90, 0x0ab0, 0x0ad0, 0x0af0, 0x0b10, 0x0b30, 0x0b50, 0x0b70,
- 0x0b90, 0x0bb0, 0x0bd0, 0x0bf0, 0x0c10, 0x0c30, 0x0c50, 0x0c70,
+ 0x0b20, 0x0b40, 0x0b60, 0x0b80, 0x0ba0, 0x0bc0, 0x0be0, 0x0c00,
+ 0x0c20, 0x0c40, 0x0c60, 0x0c80, 0x0ca0, 0x0cc0, 0x0ce0, 0x0d00,
/* sub-index 1f */
- 0x0c90, 0x0cb0, 0x0cd0, 0x0cf0, 0x0d10, 0x0d30, 0x0d50, 0x0d70,
- 0x0d90, 0x0db0, 0x0dd0, 0x0df0, 0x0e10, 0x0e30, 0x0e50, 0x0e70,
+ 0x0d20, 0x0d40, 0x0d60, 0x0d80, 0x0da0, 0x0dc0, 0x0de0, 0x0e00,
+ 0x0e20, 0x0e40, 0x0e60, 0x0e80, 0x0ea0, 0x0ec0, 0x0ee0, 0x0f00,
/* sub-index 21 */
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
- 0x0250, 0x0e90, 0x0eb0, 0x0250, 0x0ed0, 0x0250, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0f20, 0x0f40, 0x0260, 0x0f60, 0x0260, 0x0260, 0x0260,
/* sub-index 22 */
- 0x0ef0, 0x0250, 0x0f10, 0x0250, 0x0f30, 0x0250, 0x0f50, 0x0f70,
- 0x0f90, 0x0250, 0x0fb0, 0x0250, 0x0250, 0x0250, 0x0fd0, 0x0250,
+ 0x0f80, 0x0260, 0x0fa0, 0x0260, 0x0fc0, 0x0260, 0x0fe0, 0x1000,
+ 0x1020, 0x0260, 0x1040, 0x0260, 0x0260, 0x0260, 0x1060, 0x0260,
/* sub-index 2a */
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0ff0, 0x0250, 0x0250,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x1080, 0x0260, 0x0260,
/* sub-index 30 */
- 0x0250, 0x0250, 0x0250, 0x0250, 0x1010, 0x1030, 0x1050, 0x1070,
- 0x0250, 0x1090, 0x10b0, 0x10d0, 0x10f0, 0x1110, 0x0250, 0x1130,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x10a0, 0x10c0, 0x10e0, 0x1100,
+ 0x0260, 0x1120, 0x1140, 0x1160, 0x1180, 0x11a0, 0x0260, 0x11c0,
/* sub-index fb */
- 0x0250, 0x1150, 0x1170, 0x1190, 0x11b0, 0x0250, 0x0250, 0x0250,
- 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250,
+ 0x0260, 0x11e0, 0x1200, 0x1220, 0x1240, 0x0260, 0x0260, 0x0260,
+ 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
/* null mapping */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -805,6 +812,26 @@ const WCHAR unicode_decompose_table[4560] =
0x0000, 0x0000, 0x0000, 0x0000, 0x1025, 0x102e, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1b00 .. 0x1b0f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x1b05, 0x1b35, 0x0000, 0x0000,
+ 0x1b07, 0x1b35, 0x0000, 0x0000, 0x1b09, 0x1b35, 0x0000, 0x0000,
+ 0x1b0b, 0x1b35, 0x0000, 0x0000, 0x1b0d, 0x1b35, 0x0000, 0x0000,
+ /* 0x1b10 .. 0x1b1f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x1b11, 0x1b35, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1b30 .. 0x1b3f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1b3a, 0x1b35,
+ 0x0000, 0x0000, 0x1b3c, 0x1b35, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1b40 .. 0x1b4f */
+ 0x1b3e, 0x1b35, 0x1b3f, 0x1b35, 0x0000, 0x0000, 0x1b42, 0x1b35,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1e00 .. 0x1e0f */
0x0041, 0x0325, 0x0061, 0x0325, 0x0042, 0x0307, 0x0062, 0x0307,
0x0042, 0x0323, 0x0062, 0x0323, 0x0042, 0x0331, 0x0062, 0x0331,
diff --git a/reactos/tools/unicode/cpmap.pl b/reactos/tools/unicode/cpmap.pl
index 8962e5aafdd..a04b10d9015 100644
--- a/reactos/tools/unicode/cpmap.pl
+++ b/reactos/tools/unicode/cpmap.pl
@@ -37,66 +37,68 @@ $DEF_CHAR = ord '?';
@allfiles =
(
- [ 37, "VENDORS/MICSFT/EBCDIC/CP037.TXT", "IBM EBCDIC US Canada" ],
- [ 424, "VENDORS/MISC/CP424.TXT", "IBM EBCDIC Hebrew" ],
- [ 437, "VENDORS/MICSFT/PC/CP437.TXT", "OEM United States" ],
- [ 500, "VENDORS/MICSFT/EBCDIC/CP500.TXT", "IBM EBCDIC International" ],
- [ 737, "VENDORS/MICSFT/PC/CP737.TXT", "OEM Greek 437G" ],
- [ 775, "VENDORS/MICSFT/PC/CP775.TXT", "OEM Baltic" ],
- [ 850, "VENDORS/MICSFT/PC/CP850.TXT", "OEM Multilingual Latin 1" ],
- [ 852, "VENDORS/MICSFT/PC/CP852.TXT", "OEM Slovak Latin 2" ],
- [ 855, "VENDORS/MICSFT/PC/CP855.TXT", "OEM Cyrillic" ],
- [ 856, "VENDORS/MISC/CP856.TXT", "Hebrew PC" ],
- [ 857, "VENDORS/MICSFT/PC/CP857.TXT", "OEM Turkish" ],
- [ 860, "VENDORS/MICSFT/PC/CP860.TXT", "OEM Portuguese" ],
- [ 861, "VENDORS/MICSFT/PC/CP861.TXT", "OEM Icelandic" ],
- [ 862, "VENDORS/MICSFT/PC/CP862.TXT", "OEM Hebrew" ],
- [ 863, "VENDORS/MICSFT/PC/CP863.TXT", "OEM Canadian French" ],
- [ 864, "VENDORS/MICSFT/PC/CP864.TXT", "OEM Arabic" ],
- [ 865, "VENDORS/MICSFT/PC/CP865.TXT", "OEM Nordic" ],
- [ 866, "VENDORS/MICSFT/PC/CP866.TXT", "OEM Russian" ],
- [ 869, "VENDORS/MICSFT/PC/CP869.TXT", "OEM Greek" ],
- [ 874, "VENDORS/MICSFT/PC/CP874.TXT", "ANSI/OEM Thai" ],
- [ 875, "VENDORS/MICSFT/EBCDIC/CP875.TXT", "IBM EBCDIC Greek" ],
- [ 878, "VENDORS/MISC/KOI8-R.TXT", "Russian KOI8" ],
- [ 932, "VENDORS/MICSFT/WINDOWS/CP932.TXT", "ANSI/OEM Japanese Shift-JIS" ],
- [ 936, "VENDORS/MICSFT/WINDOWS/CP936.TXT", "ANSI/OEM Simplified Chinese GBK" ],
- [ 949, "VENDORS/MICSFT/WINDOWS/CP949.TXT", "ANSI/OEM Korean Unified Hangul" ],
- [ 950, "VENDORS/MICSFT/WINDOWS/CP950.TXT", "ANSI/OEM Traditional Chinese Big5" ],
- [ 1006, "VENDORS/MISC/CP1006.TXT", "IBM Arabic" ],
- [ 1026, "VENDORS/MICSFT/EBCDIC/CP1026.TXT", "IBM EBCDIC Latin 5 Turkish" ],
- [ 1250, "VENDORS/MICSFT/WINDOWS/CP1250.TXT", "ANSI Eastern Europe" ],
- [ 1251, "VENDORS/MICSFT/WINDOWS/CP1251.TXT", "ANSI Cyrillic" ],
- [ 1252, "VENDORS/MICSFT/WINDOWS/CP1252.TXT", "ANSI Latin 1" ],
- [ 1253, "VENDORS/MICSFT/WINDOWS/CP1253.TXT", "ANSI Greek" ],
- [ 1254, "VENDORS/MICSFT/WINDOWS/CP1254.TXT", "ANSI Turkish" ],
- [ 1255, "VENDORS/MICSFT/WINDOWS/CP1255.TXT", "ANSI Hebrew" ],
- [ 1256, "VENDORS/MICSFT/WINDOWS/CP1256.TXT", "ANSI Arabic" ],
- [ 1257, "VENDORS/MICSFT/WINDOWS/CP1257.TXT", "ANSI Baltic" ],
- [ 1258, "VENDORS/MICSFT/WINDOWS/CP1258.TXT", "ANSI/OEM Viet Nam" ],
- [ 10000, "VENDORS/MICSFT/MAC/ROMAN.TXT", "Mac Roman" ],
- [ 10006, "VENDORS/MICSFT/MAC/GREEK.TXT", "Mac Greek" ],
- [ 10007, "VENDORS/MICSFT/MAC/CYRILLIC.TXT", "Mac Cyrillic" ],
- [ 10029, "VENDORS/MICSFT/MAC/LATIN2.TXT", "Mac Latin 2" ],
- [ 10079, "VENDORS/MICSFT/MAC/ICELAND.TXT", "Mac Icelandic" ],
- [ 10081, "VENDORS/MICSFT/MAC/TURKISH.TXT", "Mac Turkish" ],
- [ 20866, "VENDORS/MISC/KOI8-R.TXT", "Russian KOI8" ],
- [ 20932, "OBSOLETE/EASTASIA/JIS/JIS0208.TXT", "EUC-JP" ],
- [ 21866, "VENDORS/MISC/KOI8-U.TXT", "Ukrainian KOI8" ],
- [ 28591, "ISO8859/8859-1.TXT", "ISO 8859-1 Latin 1" ],
- [ 28592, "ISO8859/8859-2.TXT", "ISO 8859-2 Latin 2 (East European)" ],
- [ 28593, "ISO8859/8859-3.TXT", "ISO 8859-3 Latin 3 (South European)" ],
- [ 28594, "ISO8859/8859-4.TXT", "ISO 8859-4 Latin 4 (Baltic old)" ],
- [ 28595, "ISO8859/8859-5.TXT", "ISO 8859-5 Cyrillic" ],
- [ 28596, "ISO8859/8859-6.TXT", "ISO 8859-6 Arabic" ],
- [ 28597, "ISO8859/8859-7.TXT", "ISO 8859-7 Greek" ],
- [ 28598, "ISO8859/8859-8.TXT", "ISO 8859-8 Hebrew" ],
- [ 28599, "ISO8859/8859-9.TXT", "ISO 8859-9 Latin 5 (Turkish)" ],
- [ 28600, "ISO8859/8859-10.TXT", "ISO 8859-10 Latin 6 (Nordic)" ],
- [ 28603, "ISO8859/8859-13.TXT", "ISO 8859-13 Latin 7 (Baltic)" ],
- [ 28604, "ISO8859/8859-14.TXT", "ISO 8859-14 Latin 8 (Celtic)" ],
- [ 28605, "ISO8859/8859-15.TXT", "ISO 8859-15 Latin 9 (Euro)" ],
- [ 28606, "ISO8859/8859-16.TXT", "ISO 8859-16 Latin 10 (Balkan)" ]
+ [ 37, "VENDORS/MICSFT/EBCDIC/CP037.TXT", 0, "IBM EBCDIC US Canada" ],
+ [ 424, "VENDORS/MISC/CP424.TXT", 0, "IBM EBCDIC Hebrew" ],
+ [ 437, "VENDORS/MICSFT/PC/CP437.TXT", 1, "OEM United States" ],
+ [ 500, "VENDORS/MICSFT/EBCDIC/CP500.TXT", 0, "IBM EBCDIC International" ],
+ [ 737, "VENDORS/MICSFT/PC/CP737.TXT", 1, "OEM Greek 437G" ],
+ [ 775, "VENDORS/MICSFT/PC/CP775.TXT", 1, "OEM Baltic" ],
+ [ 850, "VENDORS/MICSFT/PC/CP850.TXT", 1, "OEM Multilingual Latin 1" ],
+ [ 852, "VENDORS/MICSFT/PC/CP852.TXT", 1, "OEM Slovak Latin 2" ],
+ [ 855, "VENDORS/MICSFT/PC/CP855.TXT", 1, "OEM Cyrillic" ],
+ [ 856, "VENDORS/MISC/CP856.TXT", 0, "Hebrew PC" ],
+ [ 857, "VENDORS/MICSFT/PC/CP857.TXT", 1, "OEM Turkish" ],
+ [ 860, "VENDORS/MICSFT/PC/CP860.TXT", 1, "OEM Portuguese" ],
+ [ 861, "VENDORS/MICSFT/PC/CP861.TXT", 1, "OEM Icelandic" ],
+ [ 862, "VENDORS/MICSFT/PC/CP862.TXT", 1, "OEM Hebrew" ],
+ [ 863, "VENDORS/MICSFT/PC/CP863.TXT", 1, "OEM Canadian French" ],
+ [ 864, "VENDORS/MICSFT/PC/CP864.TXT", 0, "OEM Arabic" ],
+ [ 865, "VENDORS/MICSFT/PC/CP865.TXT", 1, "OEM Nordic" ],
+ [ 866, "VENDORS/MICSFT/PC/CP866.TXT", 1, "OEM Russian" ],
+ [ 869, "VENDORS/MICSFT/PC/CP869.TXT", 1, "OEM Greek" ],
+ [ 874, "VENDORS/MICSFT/PC/CP874.TXT", 1, "ANSI/OEM Thai" ],
+ [ 875, "VENDORS/MICSFT/EBCDIC/CP875.TXT", 0, "IBM EBCDIC Greek" ],
+ [ 878, "VENDORS/MISC/KOI8-R.TXT", 0, "Russian KOI8" ],
+ [ 932, "VENDORS/MICSFT/WINDOWS/CP932.TXT", 0, "ANSI/OEM Japanese Shift-JIS" ],
+ [ 936, "VENDORS/MICSFT/WINDOWS/CP936.TXT", 0, "ANSI/OEM Simplified Chinese GBK" ],
+ [ 949, "VENDORS/MICSFT/WINDOWS/CP949.TXT", 0, "ANSI/OEM Korean Unified Hangul" ],
+ [ 950, "VENDORS/MICSFT/WINDOWS/CP950.TXT", 0, "ANSI/OEM Traditional Chinese Big5" ],
+ [ 1006, "VENDORS/MISC/CP1006.TXT", 0, "IBM Arabic" ],
+ [ 1026, "VENDORS/MICSFT/EBCDIC/CP1026.TXT", 0, "IBM EBCDIC Latin 5 Turkish" ],
+ [ 1250, "VENDORS/MICSFT/WINDOWS/CP1250.TXT", 0, "ANSI Eastern Europe" ],
+ [ 1251, "VENDORS/MICSFT/WINDOWS/CP1251.TXT", 0, "ANSI Cyrillic" ],
+ [ 1252, "VENDORS/MICSFT/WINDOWS/CP1252.TXT", 0, "ANSI Latin 1" ],
+ [ 1253, "VENDORS/MICSFT/WINDOWS/CP1253.TXT", 0, "ANSI Greek" ],
+ [ 1254, "VENDORS/MICSFT/WINDOWS/CP1254.TXT", 0, "ANSI Turkish" ],
+ [ 1255, "VENDORS/MICSFT/WINDOWS/CP1255.TXT", 0, "ANSI Hebrew" ],
+ [ 1256, "VENDORS/MICSFT/WINDOWS/CP1256.TXT", 0, "ANSI Arabic" ],
+ [ 1257, "VENDORS/MICSFT/WINDOWS/CP1257.TXT", 0, "ANSI Baltic" ],
+ [ 1258, "VENDORS/MICSFT/WINDOWS/CP1258.TXT", 0, "ANSI/OEM Viet Nam" ],
+ [ 1361, "OBSOLETE/EASTASIA/KSC/JOHAB.TXT", 0, "Korean Johab" ],
+ [ 10000, "VENDORS/MICSFT/MAC/ROMAN.TXT", 0, "Mac Roman" ],
+ [ 10006, "VENDORS/MICSFT/MAC/GREEK.TXT", 0, "Mac Greek" ],
+ [ 10007, "VENDORS/MICSFT/MAC/CYRILLIC.TXT", 0, "Mac Cyrillic" ],
+ [ 10029, "VENDORS/MICSFT/MAC/LATIN2.TXT", 0, "Mac Latin 2" ],
+ [ 10079, "VENDORS/MICSFT/MAC/ICELAND.TXT", 0, "Mac Icelandic" ],
+ [ 10081, "VENDORS/MICSFT/MAC/TURKISH.TXT", 0, "Mac Turkish" ],
+ [ 20127, undef, 0, "US-ASCII (7bit)" ],
+ [ 20866, "VENDORS/MISC/KOI8-R.TXT", 0, "Russian KOI8" ],
+ [ 20932, "OBSOLETE/EASTASIA/JIS/JIS0208.TXT", 0, "EUC-JP" ],
+ [ 21866, "VENDORS/MISC/KOI8-U.TXT", 0, "Ukrainian KOI8" ],
+ [ 28591, "ISO8859/8859-1.TXT", 0, "ISO 8859-1 Latin 1" ],
+ [ 28592, "ISO8859/8859-2.TXT", 0, "ISO 8859-2 Latin 2 (East European)" ],
+ [ 28593, "ISO8859/8859-3.TXT", 0, "ISO 8859-3 Latin 3 (South European)" ],
+ [ 28594, "ISO8859/8859-4.TXT", 0, "ISO 8859-4 Latin 4 (Baltic old)" ],
+ [ 28595, "ISO8859/8859-5.TXT", 0, "ISO 8859-5 Cyrillic" ],
+ [ 28596, "ISO8859/8859-6.TXT", 0, "ISO 8859-6 Arabic" ],
+ [ 28597, "ISO8859/8859-7.TXT", 0, "ISO 8859-7 Greek" ],
+ [ 28598, "ISO8859/8859-8.TXT", 0, "ISO 8859-8 Hebrew" ],
+ [ 28599, "ISO8859/8859-9.TXT", 0, "ISO 8859-9 Latin 5 (Turkish)" ],
+ [ 28600, "ISO8859/8859-10.TXT", 0, "ISO 8859-10 Latin 6 (Nordic)" ],
+ [ 28603, "ISO8859/8859-13.TXT", 0, "ISO 8859-13 Latin 7 (Baltic)" ],
+ [ 28604, "ISO8859/8859-14.TXT", 0, "ISO 8859-14 Latin 8 (Celtic)" ],
+ [ 28605, "ISO8859/8859-15.TXT", 0, "ISO 8859-15 Latin 9 (Euro)" ],
+ [ 28606, "ISO8859/8859-16.TXT", 0, "ISO 8859-16 Latin 10 (Balkan)" ]
);
@@ -369,9 +371,6 @@ sub READ_FILE
{
my $name = shift;
open INPUT,$name or die "Cannot open $name";
- @cp2uni = ();
- @lead_bytes = ();
- @uni2cp = ();
while ()
{
@@ -393,6 +392,11 @@ sub READ_FILE
$uni = hex $2;
$cp2uni[$cp] = $uni unless defined($cp2uni[$cp]);
$uni2cp[$uni] = $cp unless defined($uni2cp[$uni]);
+ if ($cp > 0xff && !defined($cp2uni[$cp >> 8]))
+ {
+ push @lead_bytes,$cp >> 8;
+ $cp2uni[$cp >> 8] = 0;
+ }
next;
}
die "$name: Unrecognized line $_\n";
@@ -400,6 +404,54 @@ sub READ_FILE
}
+################################################################
+# fill input data for the 20127 (us-ascii) codepage
+sub fill_20127_codepage()
+{
+ for (my $i = 0; $i < 128; $i++) { $cp2uni[$i] = $uni2cp[$i] = $i; }
+ for (my $i = 128; $i < 256; $i++) { $cp2uni[$i] = $i & 0x7f; }
+}
+
+################################################################
+# get a mapping including glyph chars for MB_USEGLYPHCHARS
+
+sub get_glyphs_mapping(@)
+{
+ $_[0x01] = 0x263a; # (WHITE SMILING FACE)
+ $_[0x02] = 0x263b; # (BLACK SMILING FACE)
+ $_[0x03] = 0x2665; # (BLACK HEART SUIT)
+ $_[0x04] = 0x2666; # (BLACK DIAMOND SUIT)
+ $_[0x05] = 0x2663; # (BLACK CLUB SUIT)
+ $_[0x06] = 0x2660; # (BLACK SPADE SUIT)
+ $_[0x07] = 0x2022; # (BULLET)
+ $_[0x08] = 0x25d8; # (INVERSE BULLET)
+ $_[0x09] = 0x25cb; # (WHITE CIRCLE)
+ $_[0x0a] = 0x25d9; # (INVERSE WHITE CIRCLE)
+ $_[0x0b] = 0x2642; # (MALE SIGN)
+ $_[0x0c] = 0x2640; # (FEMALE SIGN)
+ $_[0x0d] = 0x266a; # (EIGHTH NOTE)
+ $_[0x0e] = 0x266b; # (BEAMED EIGHTH NOTES)
+ $_[0x0f] = 0x263c; # (WHITE SUN WITH RAYS)
+ $_[0x10] = 0x25ba; # (BLACK RIGHT-POINTING POINTER)
+ $_[0x11] = 0x25c4; # (BLACK LEFT-POINTING POINTER)
+ $_[0x12] = 0x2195; # (UP DOWN ARROW)
+ $_[0x13] = 0x203c; # (DOUBLE EXCLAMATION MARK)
+ $_[0x14] = 0x00b6; # (PILCROW SIGN)
+ $_[0x15] = 0x00a7; # (SECTION SIGN)
+ $_[0x16] = 0x25ac; # (BLACK RECTANGLE)
+ $_[0x17] = 0x21a8; # (UP DOWN ARROW WITH BASE)
+ $_[0x18] = 0x2191; # (UPWARDS ARROW)
+ $_[0x19] = 0x2193; # (DOWNWARDS ARROW)
+ $_[0x1a] = 0x2192; # (RIGHTWARDS ARROW)
+ $_[0x1b] = 0x2190; # (LEFTWARDS ARROW)
+ $_[0x1c] = 0x221f; # (RIGHT ANGLE)
+ $_[0x1d] = 0x2194; # (LEFT RIGHT ARROW)
+ $_[0x1e] = 0x25b2; # (BLACK UP-POINTING TRIANGLE)
+ $_[0x1f] = 0x25bc; # (BLACK DOWN-POINTING TRIANGLE)
+ $_[0x7f] = 0x2302; # (HOUSE)
+ return @_;
+}
+
################################################################
# build EUC-JP table from the JIS 0208 file
# FIXME: for proper EUC-JP we should probably read JIS 0212 too
@@ -407,9 +459,6 @@ sub READ_FILE
sub READ_JIS0208_FILE
{
my $name = shift;
- @cp2uni = ();
- @lead_bytes = ();
- @uni2cp = ();
# ASCII chars
for ($i = 0x00; $i <= 0x7f; $i++)
@@ -590,7 +639,7 @@ sub DUMP_SORTKEYS
# output the default values
printf OUTPUT " /* defaults */\n";
- printf OUTPUT "%s", DUMP_ARRAY( "0x%08x", 0, (-1) x 256 );
+ printf OUTPUT "%s", DUMP_ARRAY( "0x%08x", 0, (0xffffffff) x 256 );
# output all the key ranges
@@ -598,7 +647,7 @@ sub DUMP_SORTKEYS
{
next if $offsets[$i] == 256;
printf OUTPUT ",\n /* 0x%02x00 .. 0x%02xff */\n", $i, $i;
- printf OUTPUT "%s", DUMP_ARRAY( "0x%08x", -1, @keys[($i<<8) .. ($i<<8)+255] );
+ printf OUTPUT "%s", DUMP_ARRAY( "0x%08x", 0xffffffff, @keys[($i<<8) .. ($i<<8)+255] );
}
printf OUTPUT "\n};\n";
close OUTPUT;
@@ -677,13 +726,23 @@ sub DUMP_ARRAY
# dump an SBCS mapping table
sub DUMP_SBCS_TABLE
{
- my ($codepage, $name) = @_;
+ my ($codepage, $has_glyphs, $name) = @_;
my $i;
# output the ascii->unicode table
- printf OUTPUT "static const WCHAR cp2uni[256] =\n";
- printf OUTPUT "{\n%s\n};\n\n", DUMP_ARRAY( "0x%04x", $DEF_CHAR, @cp2uni[0 .. 255] );
+ if ($has_glyphs)
+ {
+ printf OUTPUT "static const WCHAR cp2uni[512] =\n";
+ printf OUTPUT "{\n%s", DUMP_ARRAY( "0x%04x", $DEF_CHAR, @cp2uni[0 .. 255] );
+ printf OUTPUT ",\n /* glyphs */\n%s\n};\n\n",
+ DUMP_ARRAY( "0x%04x", $DEF_CHAR, get_glyphs_mapping(@cp2uni[0 .. 255]) );
+ }
+ else
+ {
+ printf OUTPUT "static const WCHAR cp2uni[256] =\n";
+ printf OUTPUT "{\n%s\n};\n\n", DUMP_ARRAY( "0x%04x", $DEF_CHAR, @cp2uni[0 .. 255] );
+ }
# count the number of unicode->ascii subtables that contain something
@@ -727,6 +786,8 @@ sub DUMP_SBCS_TABLE
printf OUTPUT " { %d, 1, 0x%04x, 0x%04x, \"%s\" },\n",
$codepage, $DEF_CHAR, $DEF_CHAR, $name;
printf OUTPUT " cp2uni,\n";
+ if ($has_glyphs) { printf OUTPUT " cp2uni + 256,\n"; }
+ else { printf OUTPUT " cp2uni,\n"; }
printf OUTPUT " uni2cp_low,\n";
printf OUTPUT " uni2cp_high\n};\n";
}
@@ -1142,10 +1203,15 @@ sub DUMP_COMPOSE_TABLES
# read an input file and generate the corresponding .c file
sub HANDLE_FILE
{
- my ($codepage,$filename,$comment) = @_;
+ my ($codepage,$filename,$has_glyphs,$comment) = @_;
+
+ @cp2uni = ();
+ @lead_bytes = ();
+ @uni2cp = ();
# symbol codepage file is special
if ($codepage == 20932) { READ_JIS0208_FILE($MAPPREFIX . $filename); }
+ elsif ($codepage == 20127) { fill_20127_codepage(); }
else { READ_FILE($MAPPREFIX . $filename); }
# hack: 0x00a5 must map to backslash in Shift-JIS
@@ -1156,16 +1222,23 @@ sub HANDLE_FILE
my $output = sprintf "c_%03d.c", $codepage;
open OUTPUT,">$output.new" or die "Cannot create $output";
- printf "Building %s from %s (%s)\n", $output, $filename, $comment;
+ printf "Building %s from %s (%s)\n", $output, $filename || "hardcoded data", $comment;
# dump all tables
printf OUTPUT "/* code page %03d (%s) */\n", $codepage, $comment;
- printf OUTPUT "/* generated from %s */\n", $MAPPREFIX . $filename;
- printf OUTPUT "/* DO NOT EDIT!! */\n\n";
+ if ($filename)
+ {
+ printf OUTPUT "/* generated from %s */\n", $MAPPREFIX . $filename;
+ printf OUTPUT "/* DO NOT EDIT!! */\n\n";
+ }
+ else
+ {
+ printf OUTPUT "/* Automatically generated; DO NOT EDIT!! */\n\n";
+ }
printf OUTPUT "#include \"wine/unicode.h\"\n\n";
- if ($#lead_bytes == -1) { DUMP_SBCS_TABLE( $codepage, $comment ); }
+ if ($#lead_bytes == -1) { DUMP_SBCS_TABLE( $codepage, $has_glyphs, $comment ); }
else { DUMP_DBCS_TABLE( $codepage, $comment ); }
close OUTPUT;
save_file($output);
@@ -1177,7 +1250,7 @@ sub HANDLE_FILE
sub save_file($)
{
my $file = shift;
- if (!system "cmp $file $file.new >/dev/null")
+ if (-f $file && !system "cmp $file $file.new >/dev/null")
{
unlink "$file.new";
}
diff --git a/reactos/tools/unicode/cptable.c b/reactos/tools/unicode/cptable.c
index 7e45f15e03d..50849468e65 100644
--- a/reactos/tools/unicode/cptable.c
+++ b/reactos/tools/unicode/cptable.c
@@ -61,12 +61,14 @@ extern union cptable cptable_1255;
extern union cptable cptable_1256;
extern union cptable cptable_1257;
extern union cptable cptable_1258;
+extern union cptable cptable_1361;
extern union cptable cptable_10000;
extern union cptable cptable_10006;
extern union cptable cptable_10007;
extern union cptable cptable_10029;
extern union cptable cptable_10079;
extern union cptable cptable_10081;
+extern union cptable cptable_20127;
extern union cptable cptable_20866;
extern union cptable cptable_20932;
extern union cptable cptable_21866;
@@ -85,7 +87,7 @@ extern union cptable cptable_28604;
extern union cptable cptable_28605;
extern union cptable cptable_28606;
-static const union cptable * const cptables[60] =
+static const union cptable * const cptables[62] =
{
&cptable_037,
&cptable_424,
@@ -124,12 +126,14 @@ static const union cptable * const cptables[60] =
&cptable_1256,
&cptable_1257,
&cptable_1258,
+ &cptable_1361,
&cptable_10000,
&cptable_10006,
&cptable_10007,
&cptable_10029,
&cptable_10079,
&cptable_10081,
+ &cptable_20127,
&cptable_20866,
&cptable_20932,
&cptable_21866,
diff --git a/reactos/tools/unicode/mbtowc.c b/reactos/tools/unicode/mbtowc.c
index c0e5791ccfb..6249e41b388 100644
--- a/reactos/tools/unicode/mbtowc.c
+++ b/reactos/tools/unicode/mbtowc.c
@@ -40,10 +40,10 @@ static int get_decomposition( WCHAR src, WCHAR *dst, unsigned int dstlen )
}
/* check src string for invalid chars; return non-zero if invalid char found */
-static inline int check_invalid_chars_sbcs( const struct sbcs_table *table,
+static inline int check_invalid_chars_sbcs( const struct sbcs_table *table, int flags,
const unsigned char *src, unsigned int srclen )
{
- const WCHAR * const cp2uni = table->cp2uni;
+ const WCHAR * const cp2uni = (flags & MB_USEGLYPHCHARS) ? table->cp2uni_glyphs : table->cp2uni;
while (srclen)
{
if (cp2uni[*src] == table->info.def_unicode_char && *src != table->info.def_char)
@@ -56,11 +56,11 @@ static inline int check_invalid_chars_sbcs( const struct sbcs_table *table,
/* mbstowcs for single-byte code page */
/* all lengths are in characters, not bytes */
-static inline int mbstowcs_sbcs( const struct sbcs_table *table,
+static inline int mbstowcs_sbcs( const struct sbcs_table *table, int flags,
const unsigned char *src, unsigned int srclen,
WCHAR *dst, unsigned int dstlen )
{
- const WCHAR * const cp2uni = table->cp2uni;
+ const WCHAR * const cp2uni = (flags & MB_USEGLYPHCHARS) ? table->cp2uni_glyphs : table->cp2uni;
int ret = srclen;
if (dstlen < srclen)
@@ -101,11 +101,11 @@ static inline int mbstowcs_sbcs( const struct sbcs_table *table,
}
/* mbstowcs for single-byte code page with char decomposition */
-static int mbstowcs_sbcs_decompose( const struct sbcs_table *table,
+static int mbstowcs_sbcs_decompose( const struct sbcs_table *table, int flags,
const unsigned char *src, unsigned int srclen,
WCHAR *dst, unsigned int dstlen )
{
- const WCHAR * const cp2uni = table->cp2uni;
+ const WCHAR * const cp2uni = (flags & MB_USEGLYPHCHARS) ? table->cp2uni_glyphs : table->cp2uni;
unsigned int len;
if (!dstlen) /* compute length */
@@ -258,14 +258,14 @@ int wine_cp_mbstowcs( const union cptable *table, int flags,
{
if (flags & MB_ERR_INVALID_CHARS)
{
- if (check_invalid_chars_sbcs( &table->sbcs, src, srclen )) return -2;
+ if (check_invalid_chars_sbcs( &table->sbcs, flags, src, srclen )) return -2;
}
if (!(flags & MB_COMPOSITE))
{
if (!dstlen) return srclen;
- return mbstowcs_sbcs( &table->sbcs, src, srclen, dst, dstlen );
+ return mbstowcs_sbcs( &table->sbcs, flags, src, srclen, dst, dstlen );
}
- return mbstowcs_sbcs_decompose( &table->sbcs, src, srclen, dst, dstlen );
+ return mbstowcs_sbcs_decompose( &table->sbcs, flags, src, srclen, dst, dstlen );
}
else /* mbcs */
{
diff --git a/reactos/tools/unicode/sortkey.c b/reactos/tools/unicode/sortkey.c
index 67c2e8d476b..17b55374c51 100644
--- a/reactos/tools/unicode/sortkey.c
+++ b/reactos/tools/unicode/sortkey.c
@@ -326,9 +326,8 @@ static inline int compare_case_weights(int flags, const WCHAR *str1, int len1,
static inline int real_length(const WCHAR *str, int len)
{
- int real_len = 0;
- while (len-- && *str++) real_len++;
- return real_len;
+ while (len && !str[len - 1]) len--;
+ return len;
}
int wine_compare_string(int flags, const WCHAR *str1, int len1,
diff --git a/reactos/tools/unicode/string.c b/reactos/tools/unicode/string.c
index 3225a0ed73b..1aad6630992 100644
--- a/reactos/tools/unicode/string.c
+++ b/reactos/tools/unicode/string.c
@@ -22,193 +22,9 @@
#include
#include
+#define WINE_UNICODE_INLINE /* nothing */
#include "wine/unicode.h"
-extern const WCHAR wine_casemap_lower[];
-extern const WCHAR wine_casemap_upper[];
-extern const unsigned short wine_wctype_table[];
-
-int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch )
-{
- return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]);
-}
-
-WCHAR tolowerW( WCHAR ch )
-{
- return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)];
-}
-
-WCHAR toupperW( WCHAR ch )
-{
- return ch + wine_casemap_upper[wine_casemap_upper[ch >> 8] + (ch & 0xff)];
-}
-
-/* the character type contains the C1_* flags in the low 12 bits */
-/* and the C2_* type in the high 4 bits */
-unsigned short get_char_typeW( WCHAR ch )
-{
- return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)];
-}
-
-int iscntrlW( WCHAR wc )
-{
- return get_char_typeW(wc) & C1_CNTRL;
-}
-
-int ispunctW( WCHAR wc )
-{
- return get_char_typeW(wc) & C1_PUNCT;
-}
-
-int isspaceW( WCHAR wc )
-{
- return get_char_typeW(wc) & C1_SPACE;
-}
-
-int isdigitW( WCHAR wc )
-{
- return get_char_typeW(wc) & C1_DIGIT;
-}
-
-int isxdigitW( WCHAR wc )
-{
- return get_char_typeW(wc) & C1_XDIGIT;
-}
-
-int islowerW( WCHAR wc )
-{
- return get_char_typeW(wc) & C1_LOWER;
-}
-
-int isupperW( WCHAR wc )
-{
- return get_char_typeW(wc) & C1_UPPER;
-}
-
-int isalnumW( WCHAR wc )
-{
- return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER);
-}
-
-int isalphaW( WCHAR wc )
-{
- return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER);
-}
-
-int isgraphW( WCHAR wc )
-{
- return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
-}
-
-int isprintW( WCHAR wc )
-{
- return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
-}
-
-unsigned int strlenW( const WCHAR *str )
-{
- const WCHAR *s = str;
- while (*s) s++;
- return s - str;
-}
-
-WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )
-{
- WCHAR *p = dst;
- while ((*p++ = *src++));
- return dst;
-}
-
-int strcmpW( const WCHAR *str1, const WCHAR *str2 )
-{
- while (*str1 && (*str1 == *str2)) { str1++; str2++; }
- return *str1 - *str2;
-}
-
-int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
-{
- if (n <= 0) return 0;
- while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
- return *str1 - *str2;
-}
-
-WCHAR *strcatW( WCHAR *dst, const WCHAR *src )
-{
- strcpyW( dst + strlenW(dst), src );
- return dst;
-}
-
-WCHAR *strchrW( const WCHAR *str, WCHAR ch )
-{
- do { if (*str == ch) return (WCHAR *)str; } while (*str++);
- return NULL;
-}
-
-WCHAR *strrchrW( const WCHAR *str, WCHAR ch )
-{
- WCHAR *ret = NULL;
- do { if (*str == ch) ret = (WCHAR *)str; } while (*str++);
- return ret;
-}
-
-WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept )
-{
- for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)str;
- return NULL;
-}
-
-size_t strspnW( const WCHAR *str, const WCHAR *accept )
-{
- const WCHAR *ptr;
- for (ptr = str; *ptr; ptr++) if (!strchrW( accept, *ptr )) break;
- return ptr - str;
-}
-
-size_t strcspnW( const WCHAR *str, const WCHAR *reject )
-{
- const WCHAR *ptr;
- for (ptr = str; *ptr; ptr++) if (strchrW( reject, *ptr )) break;
- return ptr - str;
-}
-
-WCHAR *strlwrW( WCHAR *str )
-{
- WCHAR *ret = str;
- while ((*str = tolowerW(*str))) str++;
- return ret;
-}
-
-WCHAR *struprW( WCHAR *str )
-{
- WCHAR *ret = str;
- while ((*str = toupperW(*str))) str++;
- return ret;
-}
-
-WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n )
-{
- const WCHAR *end;
- for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return (WCHAR *)ptr;
- return NULL;
-}
-
-WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n )
-{
- const WCHAR *end, *ret = NULL;
- for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = ptr;
- return (WCHAR *)ret;
-}
-
-long int atolW( const WCHAR *str )
-{
- return strtolW( str, (WCHAR **)0, 10 );
-}
-
-int atoiW( const WCHAR *str )
-{
- return (int)atolW( str );
-}
-
int strcmpiW( const WCHAR *str1, const WCHAR *str2 )
{
for (;;)
@@ -588,7 +404,7 @@ int vsnprintfW(WCHAR *str, size_t len, const WCHAR *format, va_list valist)
*fmta = '\0';
if (*iter == 'a' || *iter == 'A' ||
*iter == 'e' || *iter == 'E' ||
- *iter == 'f' || *iter == 'F' ||
+ *iter == 'f' || *iter == 'F' ||
*iter == 'g' || *iter == 'G')
sprintf(bufaiter, fmtbufa, va_arg(valist, double));
else
diff --git a/reactos/tools/unicode/unicode.rbuild b/reactos/tools/unicode/unicode.rbuild
index 478e5bc8333..cd2f6acaa03 100644
--- a/reactos/tools/unicode/unicode.rbuild
+++ b/reactos/tools/unicode/unicode.rbuild
@@ -47,6 +47,7 @@
c_1256.c
c_1257.c
c_1258.c
+ c_1361.c
c_10000.c
c_10006.c
c_10007.c
@@ -55,6 +56,7 @@
c_10081.c
c_20866.c
c_20932.c
+ c_20127.c
c_21866.c
c_28591.c
c_28592.c
diff --git a/reactos/tools/unicode/utf8.c b/reactos/tools/unicode/utf8.c
index c1b594fc243..c95bc519155 100644
--- a/reactos/tools/unicode/utf8.c
+++ b/reactos/tools/unicode/utf8.c
@@ -22,6 +22,8 @@
#include "wine/unicode.h"
+extern WCHAR compose( const WCHAR *str );
+
/* number of following bytes in sequence based on first byte value (for bytes above 0x7f) */
static const char utf8_length[128] =
{
@@ -29,17 +31,18 @@ static const char utf8_length[128] =
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x90-0x9f */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xa0-0xaf */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xb0-0xbf */
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xc0-0xcf */
+ 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xc0-0xcf */
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xd0-0xdf */
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* 0xe0-0xef */
- 3,3,3,3,3,3,3,3,4,4,4,4,5,5,0,0 /* 0xf0-0xff */
+ 3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0 /* 0xf0-0xff */
};
/* first byte mask depending on UTF-8 sequence length */
-static const unsigned char utf8_mask[6] = { 0x7f, 0x1f, 0x0f, 0x07, 0x03, 0x01 };
+static const unsigned char utf8_mask[4] = { 0x7f, 0x1f, 0x0f, 0x07 };
/* minimum Unicode value depending on UTF-8 sequence length */
-static const unsigned int utf8_minval[6] = { 0x0, 0x80, 0x800, 0x10000, 0x200000, 0x4000000 };
+static const unsigned int utf8_minval[4] = { 0x0, 0x80, 0x800, 0x10000 };
+
/* get the next char value taking surrogates into account */
static inline unsigned int get_surrogate_value( const WCHAR *src, unsigned int srclen )
@@ -81,7 +84,11 @@ static inline int get_length_wcs_utf8( int flags, const WCHAR *src, unsigned int
if (val < 0x10000) /* 0x800-0xffff: 3 bytes */
len += 3;
else /* 0x10000-0x10ffff: 4 bytes */
+ {
len += 4;
+ src++;
+ srclen--;
+ }
}
return len;
}
@@ -143,45 +150,151 @@ int wine_utf8_wcstombs( int flags, const WCHAR *src, int srclen, char *dst, int
val >>= 6;
dst[0] = 0xf0 | val;
dst += 4;
+ src++;
+ srclen--;
}
}
return dstlen - len;
}
-/* query necessary dst length for src string */
-inline static int get_length_mbs_utf8( const unsigned char *src, int srclen )
+/* helper for the various utf8 mbstowcs functions */
+static inline unsigned int decode_utf8_char( unsigned char ch, const char **str, const char *strend )
{
- int ret;
- const unsigned char *srcend = src + srclen;
+ unsigned int len = utf8_length[ch-0x80];
+ unsigned int res = ch & utf8_mask[len];
+ const char *end = *str + len;
- for (ret = 0; src < srcend; ret++)
+ if (end > strend) return ~0;
+ switch(len)
+ {
+ case 3:
+ if ((ch = end[-3] ^ 0x80) >= 0x40) break;
+ res = (res << 6) | ch;
+ (*str)++;
+ case 2:
+ if ((ch = end[-2] ^ 0x80) >= 0x40) break;
+ res = (res << 6) | ch;
+ (*str)++;
+ case 1:
+ if ((ch = end[-1] ^ 0x80) >= 0x40) break;
+ res = (res << 6) | ch;
+ (*str)++;
+ if (res < utf8_minval[len]) break;
+ return res;
+ }
+ return ~0;
+}
+
+/* query necessary dst length for src string with composition */
+static inline int get_length_mbs_utf8_compose( int flags, const char *src, int srclen )
+{
+ int ret = 0;
+ unsigned int res;
+ WCHAR composed[2];
+ const char *srcend = src + srclen;
+
+ composed[0] = 0;
+ while (src < srcend)
{
unsigned char ch = *src++;
- if (ch < 0xc0) continue;
-
- switch(utf8_length[ch-0x80])
+ if (ch < 0x80) /* special fast case for 7-bit ASCII */
{
- case 5:
- if (src >= srcend) return ret; /* ignore partial char */
- if ((ch = *src ^ 0x80) >= 0x40) continue;
- src++;
- case 4:
- if (src >= srcend) return ret; /* ignore partial char */
- if ((ch = *src ^ 0x80) >= 0x40) continue;
- src++;
- case 3:
- if (src >= srcend) return ret; /* ignore partial char */
- if ((ch = *src ^ 0x80) >= 0x40) continue;
- src++;
- case 2:
- if (src >= srcend) return ret; /* ignore partial char */
- if ((ch = *src ^ 0x80) >= 0x40) continue;
- src++;
- case 1:
- if (src >= srcend) return ret; /* ignore partial char */
- if ((ch = *src ^ 0x80) >= 0x40) continue;
- src++;
+ composed[0] = ch;
+ ret++;
+ continue;
}
+ if ((res = decode_utf8_char( ch, &src, srcend )) <= 0xffff)
+ {
+ if (composed[0])
+ {
+ composed[1] = res;
+ if ((composed[0] = compose( composed ))) continue;
+ }
+ composed[0] = res;
+ ret++;
+ }
+ else if (res <= 0x10ffff)
+ {
+ ret += 2;
+ composed[0] = 0; /* no composition for surrogates */
+ }
+ else if (flags & MB_ERR_INVALID_CHARS) return -2; /* bad char */
+ /* otherwise ignore it */
+ }
+ return ret;
+}
+
+/* UTF-8 to wide char string conversion with composition */
+/* return -1 on dst buffer overflow, -2 on invalid input char */
+static int utf8_mbstowcs_compose( int flags, const char *src, int srclen, WCHAR *dst, int dstlen )
+{
+ unsigned int res;
+ const char *srcend = src + srclen;
+ WCHAR composed[2];
+ WCHAR *dstend = dst + dstlen;
+
+ if (!dstlen) return get_length_mbs_utf8_compose( flags, src, srclen );
+
+ composed[0] = 0;
+ while (src < srcend)
+ {
+ unsigned char ch = *src++;
+ if (ch < 0x80) /* special fast case for 7-bit ASCII */
+ {
+ if (dst >= dstend) return -1; /* overflow */
+ *dst++ = composed[0] = ch;
+ continue;
+ }
+ if ((res = decode_utf8_char( ch, &src, srcend )) <= 0xffff)
+ {
+ if (composed[0])
+ {
+ composed[1] = res;
+ if ((composed[0] = compose( composed )))
+ {
+ dst[-1] = composed[0];
+ continue;
+ }
+ }
+ if (dst >= dstend) return -1; /* overflow */
+ *dst++ = composed[0] = res;
+ }
+ else if (res <= 0x10ffff) /* we need surrogates */
+ {
+ if (dst >= dstend - 1) return -1; /* overflow */
+ res -= 0x10000;
+ *dst++ = 0xd800 | (res >> 10);
+ *dst++ = 0xdc00 | (res & 0x3ff);
+ composed[0] = 0; /* no composition for surrogates */
+ }
+ else if (flags & MB_ERR_INVALID_CHARS) return -2; /* bad char */
+ /* otherwise ignore it */
+ }
+ return dstlen - (dstend - dst);
+}
+
+/* query necessary dst length for src string */
+static inline int get_length_mbs_utf8( int flags, const char *src, int srclen )
+{
+ int ret = 0;
+ unsigned int res;
+ const char *srcend = src + srclen;
+
+ while (src < srcend)
+ {
+ unsigned char ch = *src++;
+ if (ch < 0x80) /* special fast case for 7-bit ASCII */
+ {
+ ret++;
+ continue;
+ }
+ if ((res = decode_utf8_char( ch, &src, srcend )) <= 0x10ffff)
+ {
+ if (res > 0xffff) ret++;
+ ret++;
+ }
+ else if (flags & MB_ERR_INVALID_CHARS) return -2; /* bad char */
+ /* otherwise ignore it */
}
return ret;
}
@@ -190,60 +303,36 @@ inline static int get_length_mbs_utf8( const unsigned char *src, int srclen )
/* return -1 on dst buffer overflow, -2 on invalid input char */
int wine_utf8_mbstowcs( int flags, const char *src, int srclen, WCHAR *dst, int dstlen )
{
- int len, count;
unsigned int res;
const char *srcend = src + srclen;
+ WCHAR *dstend = dst + dstlen;
- if (!dstlen) return get_length_mbs_utf8( (const unsigned char*)src, srclen );
+ if (flags & MB_COMPOSITE) return utf8_mbstowcs_compose( flags, src, srclen, dst, dstlen );
- for (count = dstlen; count && (src < srcend); count--, dst++)
+ if (!dstlen) return get_length_mbs_utf8( flags, src, srclen );
+
+ while ((dst < dstend) && (src < srcend))
{
unsigned char ch = *src++;
if (ch < 0x80) /* special fast case for 7-bit ASCII */
{
- *dst = ch;
+ *dst++ = ch;
continue;
}
- len = utf8_length[ch-0x80];
- res = ch & utf8_mask[len];
-
- switch(len)
+ if ((res = decode_utf8_char( ch, &src, srcend )) <= 0xffff)
{
- case 5:
- if (src >= srcend) goto done; /* ignore partial char */
- if ((ch = *src ^ 0x80) >= 0x40) goto bad;
- res = (res << 6) | ch;
- src++;
- case 4:
- if (src >= srcend) goto done; /* ignore partial char */
- if ((ch = *src ^ 0x80) >= 0x40) goto bad;
- res = (res << 6) | ch;
- src++;
- case 3:
- if (src >= srcend) goto done; /* ignore partial char */
- if ((ch = *src ^ 0x80) >= 0x40) goto bad;
- res = (res << 6) | ch;
- src++;
- case 2:
- if (src >= srcend) goto done; /* ignore partial char */
- if ((ch = *src ^ 0x80) >= 0x40) goto bad;
- res = (res << 6) | ch;
- src++;
- case 1:
- if (src >= srcend) goto done; /* ignore partial char */
- if ((ch = *src ^ 0x80) >= 0x40) goto bad;
- res = (res << 6) | ch;
- src++;
- if (res < utf8_minval[len]) goto bad;
- if (res >= 0x10000) goto bad; /* FIXME: maybe we should do surrogates here */
- *dst = res;
- continue;
+ *dst++ = res;
}
- bad:
- if (flags & MB_ERR_INVALID_CHARS) return -2; /* bad char */
- *dst = (WCHAR)'?';
+ else if (res <= 0x10ffff) /* we need surrogates */
+ {
+ if (dst == dstend - 1) return -1; /* overflow */
+ res -= 0x10000;
+ *dst++ = 0xd800 | (res >> 10);
+ *dst++ = 0xdc00 | (res & 0x3ff);
+ }
+ else if (flags & MB_ERR_INVALID_CHARS) return -2; /* bad char */
+ /* otherwise ignore it */
}
if (src < srcend) return -1; /* overflow */
-done:
- return dstlen - count;
+ return dstlen - (dstend - dst);
}
diff --git a/reactos/tools/unicode/wctomb.c b/reactos/tools/unicode/wctomb.c
index 5ad027acd3c..966e6af693b 100644
--- a/reactos/tools/unicode/wctomb.c
+++ b/reactos/tools/unicode/wctomb.c
@@ -45,7 +45,7 @@ static inline int binary_search( WCHAR ch, int low, int high )
}
/* return the result of the composition of two Unicode chars, or 0 if none */
-static WCHAR compose( const WCHAR *str )
+WCHAR compose( const WCHAR *str )
{
extern const WCHAR unicode_compose_table[];
extern const unsigned int unicode_compose_table_size;
diff --git a/reactos/tools/unicode/wctype.c b/reactos/tools/unicode/wctype.c
index be7c53181ab..0323d449315 100644
--- a/reactos/tools/unicode/wctype.c
+++ b/reactos/tools/unicode/wctype.c
@@ -3,19 +3,19 @@
#include "wine/unicode.h"
-const unsigned short wine_wctype_table[16128] =
+const unsigned short wine_wctype_table[16384] =
{
/* offsets */
0x0100, 0x0200, 0x0300, 0x0400, 0x0500, 0x0600, 0x0700, 0x0800,
0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x0e00, 0x0f00, 0x1000,
0x1100, 0x1200, 0x1300, 0x1400, 0x1500, 0x1600, 0x1700, 0x1800,
- 0x1900, 0x1a00, 0x1b00, 0x0900, 0x0900, 0x1c00, 0x1d00, 0x1e00,
- 0x1f00, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600,
- 0x2700, 0x2400, 0x2400, 0x2800, 0x2900, 0x2a00, 0x2b00, 0x2c00,
- 0x2d00, 0x2e00, 0x2f00, 0x3000, 0x1600, 0x1600, 0x1600, 0x1600,
+ 0x1900, 0x1a00, 0x1b00, 0x1c00, 0x0900, 0x1d00, 0x1e00, 0x1f00,
+ 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600, 0x2700,
+ 0x2800, 0x2500, 0x2500, 0x2900, 0x2a00, 0x2b00, 0x2c00, 0x2d00,
+ 0x2e00, 0x2f00, 0x3000, 0x3100, 0x1600, 0x1600, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
- 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x3100, 0x1600, 0x1600,
+ 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x3200, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
@@ -25,19 +25,19 @@ const unsigned short wine_wctype_table[16128] =
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
- 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x3200,
- 0x3300, 0x1600, 0x1600, 0x1600, 0x3400, 0x0900, 0x0900, 0x3500,
- 0x3600, 0x0900, 0x0900, 0x0900, 0x1600, 0x1600, 0x1600, 0x1600,
+ 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x3300,
+ 0x3400, 0x1600, 0x1600, 0x1600, 0x3500, 0x0900, 0x0900, 0x3600,
+ 0x3700, 0x0900, 0x0900, 0x0900, 0x1600, 0x1600, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600,
- 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x3700,
- 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800,
- 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800,
- 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800,
- 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800,
- 0x3800, 0x1600, 0x3900, 0x3a00, 0x3b00, 0x3c00, 0x3d00, 0x3e00,
+ 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x3800,
+ 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900,
+ 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900,
+ 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900,
+ 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900, 0x3900,
+ 0x3900, 0x1600, 0x3a00, 0x3b00, 0x3c00, 0x3d00, 0x3e00, 0x3f00,
/* values */
0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
0x0020, 0x9068, 0x8028, 0x9028, 0xa028, 0x8028, 0x0020, 0x0020,
@@ -111,9 +111,8 @@ const unsigned short wine_wctype_table[16128] =
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1101, 0x1101, 0x1102, 0x1101, 0x1101, 0x1102,
- 0x1102, 0x1101, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
+ 0x1102, 0x1101, 0x1102, 0x1101, 0x1101, 0x1101, 0x1101, 0x1102,
+ 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
@@ -122,6 +121,7 @@ const unsigned short wine_wctype_table[16128] =
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
+ 0x1102, 0x1102, 0x1102, 0x1102, 0x1100, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
@@ -150,7 +150,7 @@ const unsigned short wine_wctype_table[16128] =
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0000, 0x0000, 0x0000, 0x0000, 0xb010, 0xb010, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x1010, 0x0000, 0x0000, 0x0000, 0xb010, 0x0000,
+ 0x0000, 0x0000, 0x1010, 0x1102, 0x1102, 0x1102, 0xb010, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0xb010, 0xb010, 0x1101, 0xb010,
0x1101, 0x1101, 0x1101, 0x0000, 0x1101, 0x0000, 0x1101, 0x1101,
0x1102, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101,
@@ -192,16 +192,16 @@ const unsigned short wine_wctype_table[16128] =
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101,
- 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x0000,
+ 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
- 0x1101, 0x1102, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
+ 0x1101, 0x1102, 0x1101, 0x1102, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -222,7 +222,7 @@ const unsigned short wine_wctype_table[16128] =
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
- 0x0010, 0x0010, 0x0000, 0x0010, 0x0010, 0x0010, 0x2010, 0x0010,
+ 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x2010, 0x0010,
0x2010, 0x0010, 0x0010, 0x2010, 0x0010, 0x0010, 0x2010, 0x0010,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100,
@@ -231,7 +231,7 @@ const unsigned short wine_wctype_table[16128] =
0x2100, 0x2100, 0x2100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x2100, 0x2100, 0x2100, 0x2010, 0x2010, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2000, 0x2000, 0x2000, 0x2000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6000, 0x6000, 0x6000, 0x6000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x2010, 0x7010, 0x2010, 0xb010, 0xb010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x2010, 0x0000, 0x0000, 0x2010, 0x2010,
@@ -258,7 +258,7 @@ const unsigned short wine_wctype_table[16128] =
0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100,
0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100,
0x2100, 0x2100, 0x2100, 0x2100, 0x2010, 0x2100, 0x0010, 0x0010,
- 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x2000, 0x0010, 0x0010,
+ 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x6000, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x2010, 0x2010, 0x0010,
0x0010, 0xb010, 0x0010, 0x0010, 0x0010, 0x0010, 0x2100, 0x2100,
0x3004, 0x3004, 0x3004, 0x3004, 0x3004, 0x3004, 0x3004, 0x3004,
@@ -287,14 +287,14 @@ const unsigned short wine_wctype_table[16128] =
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x2100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004,
+ 0x2004, 0x2004, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100,
+ 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100,
+ 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100,
+ 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100,
+ 0x2100, 0x2100, 0x2100, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
+ 0x0010, 0x0010, 0x0010, 0x0010, 0x2010, 0x2010, 0xb010, 0xb010,
+ 0xb010, 0xb010, 0x2010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -342,7 +342,7 @@ const unsigned short wine_wctype_table[16128] =
0x1100, 0x1100, 0x0010, 0x0010, 0x1010, 0x1010, 0x1004, 0x1004,
0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
0x1010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
0x0000, 0x0010, 0x1010, 0x1010, 0x0000, 0x1100, 0x1100, 0x1100,
0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x1100,
0x1100, 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
@@ -451,9 +451,9 @@ const unsigned short wine_wctype_table[16128] =
0x1010, 0x0000, 0x1010, 0x1010, 0x0010, 0x0010, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x0000,
- 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x1004, 0x1004,
+ 0x1100, 0x1100, 0x0010, 0x0010, 0x0000, 0x0000, 0x1004, 0x1004,
0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x1010, 0x1010, 0x0000, 0x1100, 0x1100, 0x1100,
0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100,
@@ -903,6 +903,38 @@ const unsigned short wine_wctype_table[16128] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0010, 0x0010, 0x0010, 0x0010, 0x1010, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x0010, 0x1010, 0x0010, 0x0010,
+ 0x0010, 0x0010, 0x0010, 0x1010, 0x0010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x0010, 0x1010, 0x1010, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
+ 0x1004, 0x1004, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
+ 0x0010, 0x0010, 0x0010, 0x0010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
@@ -927,14 +959,14 @@ const unsigned short wine_wctype_table[16128] =
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
- 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
+ 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
@@ -1028,7 +1060,7 @@ const unsigned short wine_wctype_table[16128] =
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
- 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0xb010, 0xb010, 0x1101, 0xb010, 0xb010, 0xb010, 0xb010, 0x1101,
@@ -1037,17 +1069,17 @@ const unsigned short wine_wctype_table[16128] =
0xb010, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0x1101, 0xb010, 0x1101, 0xb010,
0x1101, 0xb010, 0x1101, 0x1101, 0x1101, 0x1101, 0x5010, 0x1102,
- 0x1101, 0x1101, 0xb010, 0x1101, 0x1102, 0x1100, 0x1100, 0x1100,
+ 0x1101, 0x1101, 0x1101, 0x1101, 0x1102, 0x1100, 0x1100, 0x1100,
0x1100, 0x1102, 0xb010, 0xb010, 0x1102, 0x1102, 0x1101, 0x1101,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x1101, 0x1102, 0x1102,
- 0x1102, 0x1102, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000,
+ 0x1102, 0x1102, 0xb010, 0xb010, 0xb010, 0xb010, 0x1102, 0x0000,
0x0000, 0x0000, 0x0000, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111,
0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111,
0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112,
0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112,
- 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1010, 0x1010, 0x1010, 0x1101, 0x1102, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
@@ -1122,8 +1154,8 @@ const unsigned short wine_wctype_table[16128] =
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
- 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
+ 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -1213,7 +1245,7 @@ const unsigned short wine_wctype_table[16128] =
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0x1010, 0xb010, 0xb010, 0xb010,
- 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -1247,8 +1279,8 @@ const unsigned short wine_wctype_table[16128] =
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0x0000, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000,
- 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
+ 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
@@ -1289,6 +1321,8 @@ const unsigned short wine_wctype_table[16128] =
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
+ 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
+ 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -1317,8 +1351,6 @@ const unsigned short wine_wctype_table[16128] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101,
0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101,
0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101,
@@ -1331,9 +1363,9 @@ const unsigned short wine_wctype_table[16128] =
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102,
0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1101, 0x1102, 0x1101, 0x1101, 0x1101, 0x1102, 0x1102, 0x1101,
+ 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x1102, 0x1101, 0x1102, 0x1102,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102,
@@ -1705,9 +1737,9 @@ const unsigned short wine_wctype_table[16128] =
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
- 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010,
+ 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -1743,13 +1775,13 @@ const unsigned short wine_wctype_table[16128] =
0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100,
+ 0x1100, 0x1100, 0x1100, 0x1100, 0xb010, 0xb010, 0xb010, 0xb010,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
diff --git a/reactos/tools/unicode/wine/unicode.h b/reactos/tools/unicode/wine/unicode.h
index 1a6582bdc42..7f64b3c5f78 100644
--- a/reactos/tools/unicode/wine/unicode.h
+++ b/reactos/tools/unicode/wine/unicode.h
@@ -37,6 +37,7 @@
#define C1_ALPHA 256
#define MB_COMPOSITE 2
#define MB_ERR_INVALID_CHARS 8
+#define MB_USEGLYPHCHARS 0x04
#define WC_COMPOSITECHECK 512
#define WC_DISCARDNS 16
#define WC_DEFAULTCHAR 64
@@ -47,6 +48,10 @@
#define WINE_UNICODE_API DECLSPEC_IMPORT
#endif
+#ifndef WINE_UNICODE_INLINE
+#define WINE_UNICODE_INLINE extern inline
+#endif
+
/* code page info common to SBCS and DBCS */
struct cp_info
{
@@ -61,6 +66,7 @@ struct sbcs_table
{
struct cp_info info;
const WCHAR *cp2uni; /* code page -> Unicode map */
+ const WCHAR *cp2uni_glyphs; /* code page -> Unicode map with glyph chars */
const unsigned char *uni2cp_low; /* Unicode -> code page map */
const unsigned short *uni2cp_high;
};
@@ -111,18 +117,21 @@ extern int snprintfW( WCHAR *str, size_t len, const WCHAR *format, ... );
extern int vsprintfW( WCHAR *str, const WCHAR *format, va_list valist );
extern int vsnprintfW( WCHAR *str, size_t len, const WCHAR *format, va_list valist );
-extern inline int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch )
+WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch );
+WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch )
{
return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]);
}
-extern inline WCHAR tolowerW( WCHAR ch )
+WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch );
+WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch )
{
extern WINE_UNICODE_API const WCHAR wine_casemap_lower[];
return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)];
}
-extern inline WCHAR toupperW( WCHAR ch )
+WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch );
+WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch )
{
extern WINE_UNICODE_API const WCHAR wine_casemap_upper[];
return ch + wine_casemap_upper[wine_casemap_upper[ch >> 8] + (ch & 0xff)];
@@ -130,77 +139,91 @@ extern inline WCHAR toupperW( WCHAR ch )
/* the character type contains the C1_* flags in the low 12 bits */
/* and the C2_* type in the high 4 bits */
-extern inline unsigned short get_char_typeW( WCHAR ch )
+WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch );
+WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch )
{
extern WINE_UNICODE_API const unsigned short wine_wctype_table[];
return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)];
}
-extern inline int iscntrlW( WCHAR wc )
+WINE_UNICODE_INLINE int iscntrlW( WCHAR wc );
+WINE_UNICODE_INLINE int iscntrlW( WCHAR wc )
{
return get_char_typeW(wc) & C1_CNTRL;
}
-extern inline int ispunctW( WCHAR wc )
+WINE_UNICODE_INLINE int ispunctW( WCHAR wc );
+WINE_UNICODE_INLINE int ispunctW( WCHAR wc )
{
return get_char_typeW(wc) & C1_PUNCT;
}
-extern inline int isspaceW( WCHAR wc )
+WINE_UNICODE_INLINE int isspaceW( WCHAR wc );
+WINE_UNICODE_INLINE int isspaceW( WCHAR wc )
{
return get_char_typeW(wc) & C1_SPACE;
}
-extern inline int isdigitW( WCHAR wc )
+WINE_UNICODE_INLINE int isdigitW( WCHAR wc );
+WINE_UNICODE_INLINE int isdigitW( WCHAR wc )
{
return get_char_typeW(wc) & C1_DIGIT;
}
-extern inline int isxdigitW( WCHAR wc )
+WINE_UNICODE_INLINE int isxdigitW( WCHAR wc );
+WINE_UNICODE_INLINE int isxdigitW( WCHAR wc )
{
return get_char_typeW(wc) & C1_XDIGIT;
}
-extern inline int islowerW( WCHAR wc )
+WINE_UNICODE_INLINE int islowerW( WCHAR wc );
+WINE_UNICODE_INLINE int islowerW( WCHAR wc )
{
return get_char_typeW(wc) & C1_LOWER;
}
-extern inline int isupperW( WCHAR wc )
+WINE_UNICODE_INLINE int isupperW( WCHAR wc );
+WINE_UNICODE_INLINE int isupperW( WCHAR wc )
{
return get_char_typeW(wc) & C1_UPPER;
}
-extern inline int isalnumW( WCHAR wc )
+WINE_UNICODE_INLINE int isalnumW( WCHAR wc );
+WINE_UNICODE_INLINE int isalnumW( WCHAR wc )
{
return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER);
}
-extern inline int isalphaW( WCHAR wc )
+WINE_UNICODE_INLINE int isalphaW( WCHAR wc );
+WINE_UNICODE_INLINE int isalphaW( WCHAR wc )
{
return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER);
}
-extern inline int isgraphW( WCHAR wc )
+WINE_UNICODE_INLINE int isgraphW( WCHAR wc );
+WINE_UNICODE_INLINE int isgraphW( WCHAR wc )
{
return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
}
-extern inline int isprintW( WCHAR wc )
+WINE_UNICODE_INLINE int isprintW( WCHAR wc );
+WINE_UNICODE_INLINE int isprintW( WCHAR wc )
{
return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
}
/* some useful string manipulation routines */
-extern inline unsigned int strlenW( const WCHAR *str )
+WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str );
+WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str )
{
const WCHAR *s = str;
while (*s) s++;
return s - str;
}
-extern inline WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )
+WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src );
+WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )
{
WCHAR *p = dst;
while ((*p++ = *src++));
@@ -210,94 +233,111 @@ extern inline WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )
/* strncpy doesn't do what you think, don't use it */
#define strncpyW(d,s,n) error do_not_use_strncpyW_use_lstrcpynW_or_memcpy_instead
-extern inline int strcmpW( const WCHAR *str1, const WCHAR *str2 )
+WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 );
+WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 )
{
while (*str1 && (*str1 == *str2)) { str1++; str2++; }
return *str1 - *str2;
}
-extern inline int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
+WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n );
+WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
{
if (n <= 0) return 0;
while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
return *str1 - *str2;
}
-extern inline WCHAR *strcatW( WCHAR *dst, const WCHAR *src )
+WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src );
+WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src )
{
strcpyW( dst + strlenW(dst), src );
return dst;
}
-extern inline WCHAR *strchrW( const WCHAR *str, WCHAR ch )
+WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch );
+WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch )
{
- do { if (*str == ch) return (WCHAR *)str; } while (*str++);
+ do { if (*str == ch) return (WCHAR *)(ULONG_PTR)str; } while (*str++);
return NULL;
}
-extern inline WCHAR *strrchrW( const WCHAR *str, WCHAR ch )
+WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch );
+WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch )
{
WCHAR *ret = NULL;
- do { if (*str == ch) ret = (WCHAR *)str; } while (*str++);
+ do { if (*str == ch) ret = (WCHAR *)(ULONG_PTR)str; } while (*str++);
return ret;
}
-extern inline WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept )
+WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept );
+WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept )
{
- for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)str;
+ for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)(ULONG_PTR)str;
return NULL;
}
-extern inline size_t strspnW( const WCHAR *str, const WCHAR *accept )
+WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept );
+WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept )
{
const WCHAR *ptr;
for (ptr = str; *ptr; ptr++) if (!strchrW( accept, *ptr )) break;
return ptr - str;
}
-extern inline size_t strcspnW( const WCHAR *str, const WCHAR *reject )
+WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject );
+WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject )
{
const WCHAR *ptr;
for (ptr = str; *ptr; ptr++) if (strchrW( reject, *ptr )) break;
return ptr - str;
}
-extern inline WCHAR *strlwrW( WCHAR *str )
+WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str );
+WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str )
{
WCHAR *ret = str;
while ((*str = tolowerW(*str))) str++;
return ret;
}
-extern inline WCHAR *struprW( WCHAR *str )
+WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str );
+WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str )
{
WCHAR *ret = str;
while ((*str = toupperW(*str))) str++;
return ret;
}
-extern inline WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n );
+WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n )
{
const WCHAR *end;
- for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return (WCHAR *)ptr;
+ for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return (WCHAR *)(ULONG_PTR)ptr;
return NULL;
}
-extern inline WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n );
+WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n )
{
- const WCHAR *end, *ret = NULL;
- for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = ptr;
- return (WCHAR *)ret;
+ const WCHAR *end;
+ WCHAR *ret = NULL;
+ for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = (WCHAR *)(ULONG_PTR)ptr;
+ return ret;
}
-extern inline long int atolW( const WCHAR *str )
+WINE_UNICODE_INLINE long int atolW( const WCHAR *str );
+WINE_UNICODE_INLINE long int atolW( const WCHAR *str )
{
return strtolW( str, (WCHAR **)0, 10 );
}
-extern inline int atoiW( const WCHAR *str )
+WINE_UNICODE_INLINE int atoiW( const WCHAR *str );
+WINE_UNICODE_INLINE int atoiW( const WCHAR *str )
{
return (int)atolW( str );
}
+#undef WINE_UNICODE_INLINE
+
#endif /* __WINE_UNICODE_H */
diff --git a/reactos/tools/widl/client.c b/reactos/tools/widl/client.c
index 1dc1c5832a3..5023dcdcf64 100644
--- a/reactos/tools/widl/client.c
+++ b/reactos/tools/widl/client.c
@@ -102,6 +102,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
const var_t* explicit_generic_handle_var = NULL;
const var_t* context_handle_var = NULL;
int has_full_pointer = is_full_pointer_function(func);
+ const char *callconv = get_attrp(def->type->attrs, ATTR_CALLCONV);
/* check for a defined binding handle */
explicit_handle_var = get_explicit_handle_var(func);
@@ -131,6 +132,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
write_type_decl_left(client, get_func_return_type(func));
if (needs_space_after(get_func_return_type(func)))
fprintf(client, " ");
+ if (callconv) fprintf(client, "%s ", callconv);
write_prefix_name(client, prefix_client, def);
fprintf(client, "(\n");
indent++;
@@ -184,6 +186,16 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
indent--;
fprintf(client, "\n");
+ if (is_attr(def->attrs, ATTR_IDEMPOTENT) || is_attr(def->attrs, ATTR_BROADCAST))
+ {
+ print_client("_RpcMessage.RpcFlags = ( RPC_NCA_FLAGS_DEFAULT ");
+ if (is_attr(def->attrs, ATTR_IDEMPOTENT))
+ fprintf(client, "| RPC_NCA_FLAGS_IDEMPOTENT ");
+ if (is_attr(def->attrs, ATTR_BROADCAST))
+ fprintf(client, "| RPC_NCA_FLAGS_BROADCAST ");
+ fprintf(client, ");\n\n");
+ }
+
if (implicit_handle)
{
print_client("_Handle = %s;\n", implicit_handle);
diff --git a/reactos/tools/widl/header.c b/reactos/tools/widl/header.c
index d3a31e6c5bf..612572d844a 100644
--- a/reactos/tools/widl/header.c
+++ b/reactos/tools/widl/header.c
@@ -737,10 +737,12 @@ static void write_cpp_method_def(const type_t *iface)
{
var_t *def = cur->def;
if (!is_callas(def->attrs)) {
+ const char *callconv = get_attrp(def->type->attrs, ATTR_CALLCONV);
+ if (!callconv) callconv = "";
indent(header, 0);
fprintf(header, "virtual ");
write_type_decl_left(header, get_func_return_type(cur));
- fprintf(header, " STDMETHODCALLTYPE ");
+ fprintf(header, " %s ", callconv);
write_name(header, def);
fprintf(header, "(\n");
write_args(header, cur->args, iface->name, 2, TRUE);
@@ -763,9 +765,11 @@ static void do_write_c_method_def(const type_t *iface, const char *name)
{
const var_t *def = cur->def;
if (!is_callas(def->attrs)) {
+ const char *callconv = get_attrp(def->type->attrs, ATTR_CALLCONV);
+ if (!callconv) callconv = "";
indent(header, 0);
write_type_decl_left(header, get_func_return_type(cur));
- fprintf(header, " (STDMETHODCALLTYPE *");
+ fprintf(header, " (%s *", callconv);
write_name(header, def);
fprintf(header, ")(\n");
write_args(header, cur->args, name, 1, TRUE);
@@ -795,9 +799,11 @@ static void write_method_proto(const type_t *iface)
const var_t *def = cur->def;
if (!is_local(def->attrs)) {
+ const char *callconv = get_attrp(def->type->attrs, ATTR_CALLCONV);
+ if (!callconv) callconv = "";
/* proxy prototype */
write_type_decl_left(header, get_func_return_type(cur));
- fprintf(header, " CALLBACK %s_", iface->name);
+ fprintf(header, " %s %s_", callconv, iface->name);
write_name(header, def);
fprintf(header, "_Proxy(\n");
write_args(header, cur->args, iface->name, 1, TRUE);
@@ -881,10 +887,12 @@ void write_locals(FILE *fp, const type_t *iface, int body)
static void write_function_proto(const type_t *iface, const func_t *fun, const char *prefix)
{
var_t *def = fun->def;
+ const char *callconv = get_attrp(def->type->attrs, ATTR_CALLCONV);
/* FIXME: do we need to handle call_as? */
write_type_decl_left(header, get_func_return_type(fun));
fprintf(header, " ");
+ if (callconv) fprintf(header, "%s ", callconv);
write_prefix_name(header, prefix, def);
fprintf(header, "(\n");
if (fun->args)
diff --git a/reactos/tools/widl/parser.tab.c b/reactos/tools/widl/parser.tab.c
index 8c86e263635..20b4648515b 100644
--- a/reactos/tools/widl/parser.tab.c
+++ b/reactos/tools/widl/parser.tab.c
@@ -414,6 +414,8 @@
unsigned char pointer_default = RPC_FC_UP;
static int is_object_interface = FALSE;
+/* are we inside a library block? */
+static int is_inside_library = FALSE;
typedef struct list typelist_t;
struct typenode {
@@ -476,7 +478,17 @@ static int compute_method_indexes(type_t *iface);
static char *gen_name(void);
static void process_typedefs(var_list_t *names);
static void check_arg(var_t *arg);
+static void check_functions(const type_t *iface);
static void check_all_user_types(ifref_list_t *ifaces);
+static const attr_list_t *check_iface_attrs(const char *name, const attr_list_t *attrs);
+static attr_list_t *check_function_attrs(const char *name, attr_list_t *attrs);
+static attr_list_t *check_typedef_attrs(attr_list_t *attrs);
+static attr_list_t *check_field_attrs(const char *name, attr_list_t *attrs);
+static const attr_list_t *check_library_attrs(const char *name, const attr_list_t *attrs);
+static attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs);
+static const attr_list_t *check_module_attrs(const char *name, const attr_list_t *attrs);
+static const attr_list_t *check_coclass_attrs(const char *name, const attr_list_t *attrs);
+const char *get_attr_display_name(enum attr_type type);
#define tsENUM 1
#define tsSTRUCT 2
@@ -503,7 +515,7 @@ static void check_all_user_types(ifref_list_t *ifaces);
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 139 "parser.y"
+#line 151 "parser.y"
typedef union YYSTYPE {
attr_t *attr;
attr_list_t *attr_list;
@@ -527,7 +539,7 @@ typedef union YYSTYPE {
interface_info_t ifinfo;
} YYSTYPE;
/* Line 196 of yacc.c. */
-#line 531 "parser.tab.c"
+#line 543 "parser.tab.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
@@ -539,7 +551,7 @@ typedef union YYSTYPE {
/* Line 219 of yacc.c. */
-#line 543 "parser.tab.c"
+#line 555 "parser.tab.c"
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
@@ -690,16 +702,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 3
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 1044
+#define YYLAST 1042
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 158
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 78
/* YYNRULES -- Number of rules. */
-#define YYNRULES 277
+#define YYNRULES 278
/* YYNRULES -- Number of states. */
-#define YYNSTATES 506
+#define YYNSTATES 507
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
@@ -764,28 +776,28 @@ static const unsigned short int yyprhs[] =
78, 81, 84, 87, 92, 96, 100, 106, 109, 113,
118, 119, 121, 123, 125, 129, 131, 136, 140, 141,
145, 149, 151, 155, 160, 161, 163, 167, 169, 173,
- 178, 180, 184, 185, 187, 189, 191, 193, 195, 200,
- 205, 207, 209, 211, 213, 215, 217, 222, 227, 229,
- 231, 236, 238, 243, 248, 253, 255, 257, 262, 267,
- 272, 277, 282, 284, 289, 291, 296, 298, 304, 306,
- 308, 313, 315, 317, 319, 321, 323, 325, 327, 329,
- 331, 336, 338, 340, 342, 344, 351, 353, 355, 357,
- 359, 364, 366, 368, 370, 375, 380, 385, 390, 392,
- 394, 399, 404, 406, 408, 410, 412, 414, 416, 418,
- 419, 422, 427, 431, 437, 438, 441, 443, 445, 449,
- 453, 455, 461, 463, 467, 468, 470, 472, 474, 476,
- 478, 480, 482, 488, 492, 496, 500, 504, 508, 512,
- 516, 520, 523, 526, 529, 532, 537, 542, 546, 548,
- 552, 554, 559, 560, 563, 566, 570, 573, 575, 580,
- 584, 585, 587, 588, 590, 592, 594, 596, 598, 600,
- 602, 605, 608, 610, 612, 614, 616, 618, 620, 622,
- 623, 625, 627, 630, 632, 635, 638, 640, 642, 645,
- 648, 651, 657, 658, 661, 664, 667, 670, 673, 676,
- 680, 683, 687, 693, 699, 700, 703, 706, 709, 712,
- 719, 728, 731, 734, 737, 740, 743, 746, 752, 755,
- 758, 761, 763, 768, 770, 774, 776, 778, 782, 784,
- 786, 788, 794, 796, 798, 800, 803, 805, 808, 810,
- 813, 815, 818, 823, 828, 834, 845, 847
+ 178, 180, 184, 185, 187, 189, 191, 193, 195, 197,
+ 202, 207, 209, 211, 213, 215, 217, 219, 224, 229,
+ 231, 233, 238, 240, 245, 250, 255, 257, 259, 264,
+ 269, 274, 279, 284, 286, 291, 293, 298, 300, 306,
+ 308, 310, 315, 317, 319, 321, 323, 325, 327, 329,
+ 331, 333, 338, 340, 342, 344, 346, 353, 355, 357,
+ 359, 361, 366, 368, 370, 372, 377, 382, 387, 392,
+ 394, 396, 401, 406, 408, 410, 412, 414, 416, 418,
+ 420, 421, 424, 429, 433, 439, 440, 443, 445, 447,
+ 451, 455, 457, 463, 465, 469, 470, 472, 474, 476,
+ 478, 480, 482, 484, 490, 494, 498, 502, 506, 510,
+ 514, 518, 522, 525, 528, 531, 534, 539, 544, 548,
+ 550, 554, 556, 561, 562, 565, 568, 572, 575, 577,
+ 582, 586, 587, 589, 590, 592, 594, 596, 598, 600,
+ 602, 604, 607, 610, 612, 614, 616, 618, 620, 622,
+ 624, 625, 627, 629, 632, 634, 637, 640, 642, 644,
+ 647, 650, 653, 659, 660, 663, 666, 669, 672, 675,
+ 678, 682, 685, 689, 695, 701, 702, 705, 708, 711,
+ 714, 721, 730, 733, 736, 739, 742, 745, 748, 754,
+ 757, 760, 763, 765, 770, 772, 776, 778, 780, 784,
+ 786, 788, 790, 796, 798, 800, 802, 805, 807, 810,
+ 812, 815, 817, 820, 825, 830, 836, 847, 849
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -810,106 +822,106 @@ static const short int yyrhs[] =
-1, 179, -1, 154, 180, 155, -1, 182, -1, 180,
135, 182, -1, 180, 155, 154, 182, -1, 8, -1,
181, 135, 8, -1, -1, 13, -1, 15, -1, 16,
- -1, 18, -1, 19, -1, 24, 150, 204, 151, -1,
- 26, 150, 195, 151, -1, 33, -1, 34, -1, 35,
- -1, 36, -1, 38, -1, 39, -1, 40, 150, 196,
- 151, -1, 40, 150, 8, 151, -1, 41, -1, 42,
- -1, 44, 150, 8, 151, -1, 46, -1, 47, 150,
- 181, 151, -1, 48, 150, 8, 151, -1, 48, 150,
- 196, 151, -1, 51, -1, 56, -1, 58, 150, 196,
- 151, -1, 59, 150, 8, 151, -1, 60, 150, 8,
- 151, -1, 61, 150, 196, 151, -1, 62, 150, 8,
- 151, -1, 63, -1, 65, 150, 196, 151, -1, 66,
- -1, 67, 150, 194, 151, -1, 68, -1, 69, 150,
- 57, 3, 151, -1, 72, -1, 74, -1, 79, 150,
- 192, 151, -1, 81, -1, 85, -1, 86, -1, 87,
- -1, 88, -1, 89, -1, 90, -1, 91, -1, 92,
- -1, 94, 150, 230, 151, -1, 96, -1, 97, -1,
- 98, -1, 100, -1, 101, 150, 196, 135, 196, 151,
- -1, 102, -1, 104, -1, 105, -1, 106, -1, 111,
- 150, 192, 151, -1, 114, -1, 116, -1, 117, -1,
- 120, 150, 194, 151, -1, 121, 150, 232, 151, -1,
- 122, 150, 232, 151, -1, 128, 150, 183, 151, -1,
- 129, -1, 130, -1, 131, 150, 235, 151, -1, 134,
- 150, 232, 151, -1, 230, -1, 9, -1, 8, -1,
- 27, -1, 54, -1, 93, -1, 115, -1, -1, 185,
- 186, -1, 26, 194, 137, 199, -1, 38, 137, 199,
- -1, 32, 232, 204, 156, 196, -1, -1, 189, 135,
- -1, 189, -1, 190, -1, 189, 135, 190, -1, 204,
- 156, 196, -1, 204, -1, 49, 203, 152, 188, 153,
- -1, 193, -1, 192, 135, 193, -1, -1, 194, -1,
- 5, -1, 6, -1, 7, -1, 53, -1, 123, -1,
- 3, -1, 194, 136, 194, 137, 194, -1, 194, 138,
- 194, -1, 194, 139, 194, -1, 194, 141, 194, -1,
- 194, 140, 194, -1, 194, 142, 194, -1, 194, 143,
- 194, -1, 194, 11, 194, -1, 194, 12, 194, -1,
- 144, 194, -1, 140, 194, -1, 139, 194, -1, 142,
- 194, -1, 150, 232, 151, 194, -1, 112, 150, 232,
- 151, -1, 150, 194, 151, -1, 196, -1, 195, 135,
- 196, -1, 194, -1, 52, 32, 232, 204, -1, -1,
- 198, 199, -1, 200, 149, -1, 178, 234, 149, -1,
- 179, 149, -1, 149, -1, 178, 232, 226, 176, -1,
- 178, 232, 226, -1, -1, 204, -1, -1, 3, -1,
- 4, -1, 3, -1, 4, -1, 22, -1, 133, -1,
- 207, -1, 109, 207, -1, 127, 207, -1, 127, -1,
- 55, -1, 110, -1, 45, -1, 20, -1, 50, -1,
- 57, -1, -1, 75, -1, 75, -1, 108, 206, -1,
- 113, -1, 82, 206, -1, 64, 206, -1, 76, -1,
- 28, -1, 29, 3, -1, 29, 4, -1, 179, 208,
- -1, 209, 152, 211, 153, 163, -1, -1, 211, 212,
- -1, 178, 222, -1, 43, 3, -1, 43, 4, -1,
- 179, 213, -1, 95, 137, -1, 215, 200, 149, -1,
- 83, 137, -1, 216, 201, 149, -1, 214, 152, 215,
- 216, 153, -1, 214, 152, 219, 149, 153, -1, -1,
- 137, 4, -1, 77, 3, -1, 77, 4, -1, 179,
- 219, -1, 220, 218, 152, 162, 153, 163, -1, 220,
- 137, 3, 152, 167, 162, 153, 163, -1, 217, 163,
- -1, 219, 149, -1, 213, 149, -1, 84, 3, -1,
- 84, 4, -1, 179, 223, -1, 224, 152, 162, 153,
- 163, -1, 142, 226, -1, 32, 226, -1, 184, 226,
- -1, 228, -1, 228, 150, 172, 151, -1, 204, -1,
- 150, 226, 151, -1, 227, -1, 226, -1, 229, 135,
- 226, -1, 103, -1, 126, -1, 99, -1, 118, 203,
- 152, 198, 153, -1, 132, -1, 4, -1, 205, -1,
- 32, 232, -1, 191, -1, 49, 3, -1, 231, -1,
- 118, 3, -1, 234, -1, 125, 3, -1, 107, 150,
- 232, 151, -1, 124, 178, 232, 229, -1, 125, 203,
- 152, 198, 153, -1, 125, 203, 119, 150, 200, 151,
- 202, 152, 185, 153, -1, 5, -1, 5, 157, 5,
- -1
+ -1, 18, -1, 19, -1, 21, -1, 24, 150, 204,
+ 151, -1, 26, 150, 195, 151, -1, 33, -1, 34,
+ -1, 35, -1, 36, -1, 38, -1, 39, -1, 40,
+ 150, 196, 151, -1, 40, 150, 8, 151, -1, 41,
+ -1, 42, -1, 44, 150, 8, 151, -1, 46, -1,
+ 47, 150, 181, 151, -1, 48, 150, 8, 151, -1,
+ 48, 150, 196, 151, -1, 51, -1, 56, -1, 58,
+ 150, 196, 151, -1, 59, 150, 8, 151, -1, 60,
+ 150, 8, 151, -1, 61, 150, 196, 151, -1, 62,
+ 150, 8, 151, -1, 63, -1, 65, 150, 196, 151,
+ -1, 66, -1, 67, 150, 194, 151, -1, 68, -1,
+ 69, 150, 57, 3, 151, -1, 72, -1, 74, -1,
+ 79, 150, 192, 151, -1, 81, -1, 85, -1, 86,
+ -1, 87, -1, 88, -1, 89, -1, 90, -1, 91,
+ -1, 92, -1, 94, 150, 230, 151, -1, 96, -1,
+ 97, -1, 98, -1, 100, -1, 101, 150, 196, 135,
+ 196, 151, -1, 102, -1, 104, -1, 105, -1, 106,
+ -1, 111, 150, 192, 151, -1, 114, -1, 116, -1,
+ 117, -1, 120, 150, 194, 151, -1, 121, 150, 232,
+ 151, -1, 122, 150, 232, 151, -1, 128, 150, 183,
+ 151, -1, 129, -1, 130, -1, 131, 150, 235, 151,
+ -1, 134, 150, 232, 151, -1, 230, -1, 9, -1,
+ 8, -1, 27, -1, 54, -1, 93, -1, 115, -1,
+ -1, 185, 186, -1, 26, 194, 137, 199, -1, 38,
+ 137, 199, -1, 32, 232, 204, 156, 196, -1, -1,
+ 189, 135, -1, 189, -1, 190, -1, 189, 135, 190,
+ -1, 204, 156, 196, -1, 204, -1, 49, 203, 152,
+ 188, 153, -1, 193, -1, 192, 135, 193, -1, -1,
+ 194, -1, 5, -1, 6, -1, 7, -1, 53, -1,
+ 123, -1, 3, -1, 194, 136, 194, 137, 194, -1,
+ 194, 138, 194, -1, 194, 139, 194, -1, 194, 141,
+ 194, -1, 194, 140, 194, -1, 194, 142, 194, -1,
+ 194, 143, 194, -1, 194, 11, 194, -1, 194, 12,
+ 194, -1, 144, 194, -1, 140, 194, -1, 139, 194,
+ -1, 142, 194, -1, 150, 232, 151, 194, -1, 112,
+ 150, 232, 151, -1, 150, 194, 151, -1, 196, -1,
+ 195, 135, 196, -1, 194, -1, 52, 32, 232, 204,
+ -1, -1, 198, 199, -1, 200, 149, -1, 178, 234,
+ 149, -1, 179, 149, -1, 149, -1, 178, 232, 226,
+ 176, -1, 178, 232, 226, -1, -1, 204, -1, -1,
+ 3, -1, 4, -1, 3, -1, 4, -1, 22, -1,
+ 133, -1, 207, -1, 109, 207, -1, 127, 207, -1,
+ 127, -1, 55, -1, 110, -1, 45, -1, 20, -1,
+ 50, -1, 57, -1, -1, 75, -1, 75, -1, 108,
+ 206, -1, 113, -1, 82, 206, -1, 64, 206, -1,
+ 76, -1, 28, -1, 29, 3, -1, 29, 4, -1,
+ 179, 208, -1, 209, 152, 211, 153, 163, -1, -1,
+ 211, 212, -1, 178, 222, -1, 43, 3, -1, 43,
+ 4, -1, 179, 213, -1, 95, 137, -1, 215, 200,
+ 149, -1, 83, 137, -1, 216, 201, 149, -1, 214,
+ 152, 215, 216, 153, -1, 214, 152, 219, 149, 153,
+ -1, -1, 137, 4, -1, 77, 3, -1, 77, 4,
+ -1, 179, 219, -1, 220, 218, 152, 162, 153, 163,
+ -1, 220, 137, 3, 152, 167, 162, 153, 163, -1,
+ 217, 163, -1, 219, 149, -1, 213, 149, -1, 84,
+ 3, -1, 84, 4, -1, 179, 223, -1, 224, 152,
+ 162, 153, 163, -1, 142, 226, -1, 32, 226, -1,
+ 184, 226, -1, 228, -1, 228, 150, 172, 151, -1,
+ 204, -1, 150, 226, 151, -1, 227, -1, 226, -1,
+ 229, 135, 226, -1, 103, -1, 126, -1, 99, -1,
+ 118, 203, 152, 198, 153, -1, 132, -1, 4, -1,
+ 205, -1, 32, 232, -1, 191, -1, 49, 3, -1,
+ 231, -1, 118, 3, -1, 234, -1, 125, 3, -1,
+ 107, 150, 232, 151, -1, 124, 178, 232, 229, -1,
+ 125, 203, 152, 198, 153, -1, 125, 203, 119, 150,
+ 200, 151, 202, 152, 185, 153, -1, 5, -1, 5,
+ 157, 5, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short int yyrline[] =
{
- 0, 292, 292, 301, 302, 303, 304, 308, 313, 314,
- 315, 318, 319, 320, 321, 322, 326, 327, 328, 329,
- 332, 333, 334, 337, 338, 341, 342, 343, 348, 349,
- 350, 355, 356, 363, 365, 371, 375, 379, 381, 386,
- 390, 391, 394, 397, 398, 399, 403, 408, 414, 415,
- 416, 419, 420, 421, 424, 425, 429, 435, 436, 437,
- 440, 441, 444, 445, 446, 447, 448, 449, 450, 451,
- 452, 453, 454, 455, 456, 457, 458, 459, 460, 461,
- 462, 463, 464, 465, 466, 467, 468, 469, 470, 471,
- 472, 473, 474, 475, 476, 477, 478, 479, 480, 481,
- 482, 483, 484, 485, 486, 487, 488, 489, 490, 491,
- 492, 493, 494, 495, 496, 497, 500, 501, 502, 503,
- 504, 505, 506, 507, 508, 509, 510, 511, 512, 513,
- 514, 515, 516, 520, 521, 526, 527, 528, 529, 532,
- 533, 536, 540, 546, 552, 553, 554, 557, 561, 570,
- 574, 579, 588, 589, 602, 603, 606, 607, 608, 609,
- 610, 611, 612, 613, 614, 615, 616, 617, 618, 619,
- 620, 621, 622, 623, 624, 625, 626, 627, 630, 631,
- 634, 640, 645, 646, 649, 650, 651, 652, 655, 663,
- 675, 676, 679, 680, 681, 684, 686, 689, 690, 691,
- 692, 693, 709, 710, 711, 712, 713, 714, 715, 718,
- 719, 722, 723, 724, 725, 726, 727, 728, 731, 732,
- 738, 747, 754, 755, 759, 762, 763, 766, 779, 780,
- 783, 784, 787, 796, 805, 806, 809, 810, 813, 825,
- 837, 849, 853, 854, 857, 858, 861, 866, 873, 874,
- 875, 879, 882, 889, 890, 891, 898, 899, 903, 904,
- 905, 908, 919, 920, 921, 922, 923, 924, 925, 926,
- 927, 928, 929, 932, 937, 942, 959, 960
+ 0, 304, 304, 313, 314, 315, 316, 320, 325, 326,
+ 327, 330, 331, 332, 333, 334, 338, 339, 340, 341,
+ 344, 345, 346, 349, 350, 353, 354, 355, 360, 361,
+ 362, 367, 368, 375, 377, 383, 387, 391, 393, 400,
+ 404, 405, 408, 411, 412, 413, 417, 422, 428, 429,
+ 430, 433, 434, 435, 438, 439, 443, 449, 450, 451,
+ 454, 455, 458, 459, 460, 461, 462, 463, 464, 465,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 490, 491, 492, 493, 494, 495,
+ 496, 497, 498, 499, 500, 501, 502, 503, 504, 505,
+ 506, 507, 508, 509, 510, 511, 512, 515, 516, 517,
+ 518, 519, 520, 521, 522, 523, 524, 525, 526, 527,
+ 528, 529, 530, 531, 535, 536, 541, 542, 543, 544,
+ 547, 548, 551, 555, 561, 567, 568, 569, 572, 576,
+ 585, 589, 594, 603, 604, 617, 618, 621, 622, 623,
+ 624, 625, 626, 627, 628, 629, 630, 631, 632, 633,
+ 634, 635, 636, 637, 638, 639, 640, 641, 642, 645,
+ 646, 649, 655, 660, 661, 664, 665, 666, 667, 670,
+ 678, 687, 688, 691, 692, 693, 696, 698, 701, 702,
+ 703, 704, 705, 721, 722, 723, 724, 725, 726, 727,
+ 730, 731, 734, 735, 736, 737, 738, 739, 740, 743,
+ 744, 750, 759, 766, 767, 771, 774, 775, 778, 791,
+ 792, 795, 796, 799, 808, 817, 818, 821, 822, 825,
+ 837, 850, 862, 866, 867, 870, 871, 874, 879, 886,
+ 887, 888, 892, 895, 902, 903, 904, 911, 912, 916,
+ 917, 918, 921, 932, 933, 934, 935, 936, 937, 938,
+ 939, 940, 941, 942, 945, 950, 955, 972, 973
};
#endif
@@ -1004,21 +1016,21 @@ static const unsigned char yyr1[] =
182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
- 182, 182, 182, 183, 183, 184, 184, 184, 184, 185,
- 185, 186, 186, 187, 188, 188, 188, 189, 189, 190,
- 190, 191, 192, 192, 193, 193, 194, 194, 194, 194,
+ 182, 182, 182, 182, 183, 183, 184, 184, 184, 184,
+ 185, 185, 186, 186, 187, 188, 188, 188, 189, 189,
+ 190, 190, 191, 192, 192, 193, 193, 194, 194, 194,
194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194, 195, 195,
- 196, 197, 198, 198, 199, 199, 199, 199, 200, 201,
- 202, 202, 203, 203, 203, 204, 204, 205, 205, 205,
- 205, 205, 205, 205, 205, 205, 205, 205, 205, 206,
- 206, 207, 207, 207, 207, 207, 207, 207, 208, 208,
- 209, 210, 211, 211, 212, 213, 213, 214, 215, 215,
- 216, 216, 217, 217, 218, 218, 219, 219, 220, 221,
- 221, 221, 222, 222, 223, 223, 224, 225, 226, 226,
- 226, 226, 227, 228, 228, 228, 229, 229, 230, 230,
- 230, 231, 232, 232, 232, 232, 232, 232, 232, 232,
- 232, 232, 232, 233, 234, 234, 235, 235
+ 194, 194, 194, 194, 194, 194, 194, 194, 194, 195,
+ 195, 196, 197, 198, 198, 199, 199, 199, 199, 200,
+ 201, 202, 202, 203, 203, 203, 204, 204, 205, 205,
+ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
+ 206, 206, 207, 207, 207, 207, 207, 207, 207, 208,
+ 208, 209, 210, 211, 211, 212, 213, 213, 214, 215,
+ 215, 216, 216, 217, 217, 218, 218, 219, 219, 220,
+ 221, 221, 221, 222, 222, 223, 223, 224, 225, 226,
+ 226, 226, 226, 227, 228, 228, 228, 229, 229, 230,
+ 230, 230, 231, 232, 232, 232, 232, 232, 232, 232,
+ 232, 232, 232, 232, 233, 234, 234, 235, 235
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -1030,28 +1042,28 @@ static const unsigned char yyr2[] =
2, 2, 2, 4, 3, 3, 5, 2, 3, 4,
0, 1, 1, 1, 3, 1, 4, 3, 0, 3,
3, 1, 3, 4, 0, 1, 3, 1, 3, 4,
- 1, 3, 0, 1, 1, 1, 1, 1, 4, 4,
- 1, 1, 1, 1, 1, 1, 4, 4, 1, 1,
- 4, 1, 4, 4, 4, 1, 1, 4, 4, 4,
- 4, 4, 1, 4, 1, 4, 1, 5, 1, 1,
- 4, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 4, 1, 1, 1, 1, 6, 1, 1, 1, 1,
- 4, 1, 1, 1, 4, 4, 4, 4, 1, 1,
- 4, 4, 1, 1, 1, 1, 1, 1, 1, 0,
- 2, 4, 3, 5, 0, 2, 1, 1, 3, 3,
- 1, 5, 1, 3, 0, 1, 1, 1, 1, 1,
- 1, 1, 5, 3, 3, 3, 3, 3, 3, 3,
- 3, 2, 2, 2, 2, 4, 4, 3, 1, 3,
- 1, 4, 0, 2, 2, 3, 2, 1, 4, 3,
- 0, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 2, 1, 2, 2, 1, 1, 2, 2,
- 2, 5, 0, 2, 2, 2, 2, 2, 2, 3,
- 2, 3, 5, 5, 0, 2, 2, 2, 2, 6,
- 8, 2, 2, 2, 2, 2, 2, 5, 2, 2,
- 2, 1, 4, 1, 3, 1, 1, 3, 1, 1,
- 1, 5, 1, 1, 1, 2, 1, 2, 1, 2,
- 1, 2, 4, 4, 5, 10, 1, 3
+ 1, 3, 0, 1, 1, 1, 1, 1, 1, 4,
+ 4, 1, 1, 1, 1, 1, 1, 4, 4, 1,
+ 1, 4, 1, 4, 4, 4, 1, 1, 4, 4,
+ 4, 4, 4, 1, 4, 1, 4, 1, 5, 1,
+ 1, 4, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 4, 1, 1, 1, 1, 6, 1, 1, 1,
+ 1, 4, 1, 1, 1, 4, 4, 4, 4, 1,
+ 1, 4, 4, 1, 1, 1, 1, 1, 1, 1,
+ 0, 2, 4, 3, 5, 0, 2, 1, 1, 3,
+ 3, 1, 5, 1, 3, 0, 1, 1, 1, 1,
+ 1, 1, 1, 5, 3, 3, 3, 3, 3, 3,
+ 3, 3, 2, 2, 2, 2, 4, 4, 3, 1,
+ 3, 1, 4, 0, 2, 2, 3, 2, 1, 4,
+ 3, 0, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 2, 1, 2, 2, 1, 1, 2,
+ 2, 2, 5, 0, 2, 2, 2, 2, 2, 2,
+ 3, 2, 3, 5, 5, 0, 2, 2, 2, 2,
+ 6, 8, 2, 2, 2, 2, 2, 2, 5, 2,
+ 2, 2, 1, 4, 1, 3, 1, 1, 3, 1,
+ 1, 1, 5, 1, 1, 1, 2, 1, 2, 1,
+ 2, 1, 2, 4, 4, 5, 10, 1, 3
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1059,364 +1071,364 @@ static const unsigned char yyr2[] =
means the default is an error. */
static const unsigned short int yydefact[] =
{
- 3, 0, 2, 1, 0, 0, 0, 0, 192, 0,
- 0, 0, 192, 54, 192, 62, 10, 26, 11, 29,
+ 3, 0, 2, 1, 0, 0, 0, 0, 193, 0,
+ 0, 0, 193, 54, 193, 62, 10, 26, 11, 29,
11, 9, 0, 0, 0, 0, 0, 0, 7, 0,
- 0, 23, 0, 234, 5, 4, 0, 8, 0, 0,
- 0, 218, 219, 263, 206, 197, 217, 0, 205, 192,
- 207, 203, 208, 209, 211, 216, 209, 0, 209, 0,
- 204, 213, 192, 192, 202, 262, 198, 266, 264, 199,
- 268, 0, 270, 0, 225, 226, 193, 194, 0, 0,
- 0, 236, 237, 0, 0, 55, 0, 63, 64, 65,
- 66, 67, 0, 0, 70, 71, 72, 73, 74, 75,
- 0, 78, 79, 0, 81, 0, 0, 85, 86, 0,
- 0, 0, 0, 0, 92, 0, 94, 0, 96, 0,
- 98, 99, 0, 101, 102, 103, 104, 105, 106, 107,
- 108, 109, 0, 111, 112, 113, 260, 114, 0, 116,
- 258, 117, 118, 119, 0, 121, 122, 123, 0, 0,
- 0, 259, 0, 128, 129, 0, 0, 0, 57, 132,
- 0, 0, 0, 0, 0, 220, 227, 238, 246, 25,
- 27, 28, 6, 222, 243, 0, 24, 241, 242, 0,
- 0, 20, 30, 31, 32, 265, 267, 210, 215, 214,
- 0, 212, 200, 269, 271, 201, 195, 196, 0, 0,
- 144, 0, 34, 182, 0, 0, 182, 0, 0, 0,
+ 0, 23, 0, 235, 5, 4, 0, 8, 0, 0,
+ 0, 219, 220, 264, 207, 198, 218, 0, 206, 193,
+ 208, 204, 209, 210, 212, 217, 210, 0, 210, 0,
+ 205, 214, 193, 193, 203, 263, 199, 267, 265, 200,
+ 269, 0, 271, 0, 226, 227, 194, 195, 0, 0,
+ 0, 237, 238, 0, 0, 55, 0, 63, 64, 65,
+ 66, 67, 68, 0, 0, 71, 72, 73, 74, 75,
+ 76, 0, 79, 80, 0, 82, 0, 0, 86, 87,
+ 0, 0, 0, 0, 0, 93, 0, 95, 0, 97,
+ 0, 99, 100, 0, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 0, 112, 113, 114, 261, 115, 0,
+ 117, 259, 118, 119, 120, 0, 122, 123, 124, 0,
+ 0, 0, 260, 0, 129, 130, 0, 0, 0, 57,
+ 133, 0, 0, 0, 0, 0, 221, 228, 239, 247,
+ 25, 27, 28, 6, 223, 244, 0, 24, 242, 243,
+ 0, 0, 20, 30, 31, 32, 266, 268, 211, 216,
+ 215, 0, 213, 201, 270, 272, 202, 196, 197, 0,
+ 0, 145, 0, 34, 183, 0, 0, 183, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 154, 0, 0, 154, 0, 0, 0, 0, 0,
- 0, 62, 56, 35, 0, 17, 18, 19, 0, 15,
- 13, 12, 16, 23, 37, 244, 245, 38, 54, 0,
- 54, 0, 0, 235, 20, 54, 0, 0, 33, 0,
- 146, 147, 150, 181, 54, 135, 0, 136, 137, 138,
- 0, 0, 0, 253, 256, 255, 251, 273, 54, 54,
- 0, 161, 156, 157, 158, 159, 0, 160, 0, 0,
- 0, 0, 0, 180, 0, 178, 0, 0, 0, 60,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 152, 155, 0, 0, 0, 0, 0, 0,
- 134, 133, 0, 276, 0, 0, 58, 62, 0, 14,
- 39, 23, 0, 223, 228, 0, 0, 0, 54, 0,
- 0, 54, 23, 22, 0, 0, 272, 143, 151, 145,
- 0, 187, 261, 0, 55, 183, 0, 249, 248, 0,
- 250, 40, 0, 0, 274, 68, 0, 173, 172, 174,
- 171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 69, 77, 76, 80, 0, 82, 83,
- 84, 87, 88, 89, 90, 91, 93, 95, 0, 154,
- 100, 110, 0, 120, 124, 125, 126, 127, 0, 130,
- 131, 59, 0, 221, 224, 230, 0, 229, 232, 0,
- 233, 20, 23, 247, 0, 21, 148, 149, 270, 186,
- 184, 254, 262, 0, 45, 41, 43, 0, 0, 257,
- 190, 0, 177, 0, 169, 170, 0, 163, 164, 166,
- 165, 167, 168, 179, 61, 97, 153, 0, 277, 23,
- 48, 231, 54, 239, 189, 185, 252, 0, 0, 48,
- 0, 191, 176, 175, 0, 115, 36, 154, 188, 23,
- 44, 48, 47, 139, 162, 0, 0, 51, 240, 46,
- 0, 50, 0, 49, 0, 0, 275, 140, 52, 0,
- 0, 54, 53, 54, 142, 141
+ 0, 0, 155, 0, 0, 155, 0, 0, 0, 0,
+ 0, 0, 62, 56, 35, 0, 17, 18, 19, 0,
+ 15, 13, 12, 16, 23, 37, 245, 246, 38, 54,
+ 0, 54, 0, 0, 236, 20, 54, 0, 0, 33,
+ 0, 147, 148, 151, 182, 54, 136, 0, 137, 138,
+ 139, 0, 0, 0, 254, 257, 256, 252, 274, 54,
+ 54, 0, 162, 157, 158, 159, 160, 0, 161, 0,
+ 0, 0, 0, 0, 181, 0, 179, 0, 0, 0,
+ 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 153, 156, 0, 0, 0, 0, 0,
+ 0, 135, 134, 0, 277, 0, 0, 58, 62, 0,
+ 14, 39, 23, 0, 224, 229, 0, 0, 0, 54,
+ 0, 0, 54, 23, 22, 0, 0, 273, 144, 152,
+ 146, 0, 188, 262, 0, 55, 184, 0, 250, 249,
+ 0, 251, 40, 0, 0, 275, 69, 0, 174, 173,
+ 175, 172, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 70, 78, 77, 81, 0, 83,
+ 84, 85, 88, 89, 90, 91, 92, 94, 96, 0,
+ 155, 101, 111, 0, 121, 125, 126, 127, 128, 0,
+ 131, 132, 59, 0, 222, 225, 231, 0, 230, 233,
+ 0, 234, 20, 23, 248, 0, 21, 149, 150, 271,
+ 187, 185, 255, 263, 0, 45, 41, 43, 0, 0,
+ 258, 191, 0, 178, 0, 170, 171, 0, 164, 165,
+ 167, 166, 168, 169, 180, 61, 98, 154, 0, 278,
+ 23, 48, 232, 54, 240, 190, 186, 253, 0, 0,
+ 48, 0, 192, 177, 176, 0, 116, 36, 155, 189,
+ 23, 44, 48, 47, 140, 163, 0, 0, 51, 241,
+ 46, 0, 50, 0, 49, 0, 0, 276, 141, 52,
+ 0, 0, 54, 53, 54, 143, 142
};
/* YYDEFGOTO[NTERM-NUM]. */
static const short int yydefgoto[] =
{
- -1, 1, 2, 160, 255, 177, 343, 17, 18, 19,
- 236, 164, 20, 237, 433, 434, 435, 436, 478, 486,
- 344, 85, 157, 300, 158, 322, 272, 490, 497, 23,
- 259, 260, 261, 67, 311, 312, 293, 294, 295, 25,
- 264, 355, 356, 345, 470, 78, 273, 68, 188, 69,
- 238, 27, 239, 248, 333, 29, 30, 250, 338, 31,
- 180, 32, 33, 240, 241, 168, 36, 242, 274, 275,
- 276, 277, 159, 70, 416, 39, 72, 324
+ -1, 1, 2, 161, 256, 178, 344, 17, 18, 19,
+ 237, 165, 20, 238, 434, 435, 436, 437, 479, 487,
+ 345, 85, 158, 301, 159, 323, 273, 491, 498, 23,
+ 260, 261, 262, 67, 312, 313, 294, 295, 296, 25,
+ 265, 356, 357, 346, 471, 78, 274, 68, 189, 69,
+ 239, 27, 240, 249, 334, 29, 30, 251, 339, 31,
+ 181, 32, 33, 241, 242, 169, 36, 243, 275, 276,
+ 277, 278, 160, 70, 417, 39, 72, 325
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -463
+#define YYPACT_NINF -455
static const short int yypact[] =
{
- -463, 30, 766, -463, 128, 732, -86, 132, 134, 36,
- 71, 140, 134, -61, 134, 910, -463, -463, -463, -463,
- -463, -463, 23, -47, -43, -36, -33, -13, -463, -30,
- 16, -20, 2, 48, -463, -463, 61, -463, 73, 77,
- 79, -463, -463, -463, -463, -463, -463, 732, -463, 151,
- -463, -463, -463, 146, -463, -463, 146, 81, 146, 532,
- -463, -463, 153, 188, 532, -463, -463, -463, -463, -463,
- -463, 190, -463, 221, -463, -463, -463, -463, 80, 732,
- 85, -463, -463, 88, 732, -463, -93, -463, -463, -463,
- -463, -463, 87, 92, -463, -463, -463, -463, -463, -463,
- 93, -463, -463, 94, -463, 96, 97, -463, -463, 98,
- 99, 103, 104, 105, -463, 107, -463, 108, -463, 110,
- -463, -463, 113, -463, -463, -463, -463, -463, -463, -463,
- -463, -463, 115, -463, -463, -463, -463, -463, 118, -463,
- -463, -463, -463, -463, 119, -463, -463, -463, 121, 122,
- 124, -463, 125, -463, -463, 126, 129, -112, -463, -463,
- 28, 742, 275, 193, 131, -463, -463, -463, -463, -463,
- -463, -463, -463, -463, -463, -23, -463, -463, -463, 195,
- 133, -463, -463, -463, -463, -463, 135, -463, -463, -463,
- 732, -463, -463, 135, -90, -463, -463, -463, 130, 141,
- 190, 190, -463, -463, 91, 143, -463, 190, 536, 291,
- 272, 276, 303, 536, 283, 292, 536, 293, 536, 536,
- 245, 536, -68, 536, 536, 536, 732, 732, 199, 298,
- 732, 910, 150, -463, 155, -463, -463, -463, 158, -463,
- -463, -463, -463, -20, -463, -463, -463, -463, 56, 175,
- -58, 164, 163, -463, -463, 352, 171, 536, -463, 172,
- 189, -463, 170, -463, -39, -463, 91, -463, -463, -463,
- 91, 91, 91, -463, -463, -463, 177, 196, -61, -28,
- 179, -463, -463, -463, -463, -463, 182, -463, 536, 536,
- 536, 536, 524, 599, -111, -463, 185, 186, 187, -463,
- -98, 192, 197, 198, 201, 206, 209, 214, 216, 178,
- 325, -60, -463, 599, 217, 204, -34, 239, 218, 220,
- -463, -463, 225, 176, 232, 234, -463, 910, 332, -463,
- -463, -20, -27, -463, -463, 235, 732, 237, 58, 240,
- 318, 768, -20, -463, 732, 246, -463, -463, -463, 190,
- 536, -463, -463, 732, 247, -463, 249, -463, -463, 243,
- -463, 342, 91, 251, -463, -463, 732, -463, -463, -463,
- -463, 575, 254, 536, 536, 536, 536, 536, 536, 536,
- 536, 536, 536, -463, -463, -463, -463, 392, -463, -463,
- -463, -463, -463, -463, -463, -463, -463, -463, 256, 536,
- -463, -463, 536, -463, -463, -463, -463, -463, 403, -463,
- -463, -463, 258, -463, -463, -463, 91, -463, -463, 261,
- -463, -463, -20, -463, 91, -463, -463, -463, 262, -463,
- -463, -463, -31, 265, -463, 277, -463, 732, 91, -463,
- 190, 268, -463, 536, -463, -463, 481, 62, 7, -1,
- -1, 208, 208, -463, -463, -463, -463, 269, -463, -20,
- 259, -463, 779, -463, -463, -463, -463, 458, 91, 259,
- 271, -463, -463, -463, 536, -463, -463, 548, -463, -20,
- -463, 259, -463, -463, 599, 211, -88, -463, -463, -463,
- 10, -463, 536, 267, 536, 288, -463, -463, 599, 536,
- 591, -71, 599, -71, -463, -463
+ -455, 47, 733, -455, 135, 699, -87, 145, 151, 35,
+ 101, 153, 151, -53, 151, 908, -455, -455, -455, -455,
+ -455, -455, 16, -42, -31, -27, -16, -25, -455, 9,
+ 12, 20, 41, 13, -455, -455, 43, -455, 50, 53,
+ 57, -455, -455, -455, -455, -455, -455, 699, -455, 190,
+ -455, -455, -455, 71, -455, -455, 71, 2, 71, 15,
+ -455, -455, 194, 201, 15, -455, -455, -455, -455, -455,
+ -455, 226, -455, 203, -455, -455, -455, -455, 61, 699,
+ 60, -455, -455, 63, 699, -455, -110, -455, -455, -455,
+ -455, -455, -455, 11, 70, -455, -455, -455, -455, -455,
+ -455, 72, -455, -455, 76, -455, 88, 92, -455, -455,
+ 102, 106, 108, 109, 125, -455, 126, -455, 127, -455,
+ 130, -455, -455, 131, -455, -455, -455, -455, -455, -455,
+ -455, -455, -455, 134, -455, -455, -455, -455, -455, 136,
+ -455, -455, -455, -455, -455, 137, -455, -455, -455, 138,
+ 142, 143, -455, 144, -455, -455, 148, 149, -98, -455,
+ -455, 362, 709, 258, 247, 114, -455, -455, -455, -455,
+ -455, -455, -455, -455, -455, -455, -39, -455, -455, -455,
+ 251, 133, -455, -455, -455, -455, -455, 150, -455, -455,
+ -455, 699, -455, -455, 150, -88, -455, -455, -455, 156,
+ 154, 226, 226, -455, -455, 99, 163, -455, 226, 68,
+ 303, 292, 293, 452, 68, 296, 306, 68, 307, 68,
+ 68, 259, 68, -48, 68, 68, 68, 699, 699, 31,
+ 312, 699, 908, 164, -455, 169, -455, -455, -455, 172,
+ -455, -455, -455, -455, 20, -455, -455, -455, -455, 111,
+ 185, -55, 174, 175, -455, -455, 735, 177, 68, -455,
+ 173, 196, -455, 178, -455, -17, -455, 99, -455, -455,
+ -455, 99, 99, 99, -455, -455, -455, 179, 198, -53,
+ -9, 184, -455, -455, -455, -455, -455, 187, -455, 68,
+ 68, 68, 68, 491, 594, -86, -455, 189, 193, 202,
+ -455, -83, 207, 210, 211, 212, 214, 215, 216, 217,
+ 531, 335, -82, -455, 594, 218, 206, -37, 545, 219,
+ 220, -455, -455, 222, 188, 224, 225, -455, 908, 339,
+ -455, -455, 20, -7, -455, -455, 240, 699, 200, 116,
+ 199, 284, 746, 20, -455, 699, 229, -455, -455, -455,
+ 226, 68, -455, -455, 699, 230, -455, 231, -455, -455,
+ 235, -455, 275, 99, 236, -455, -455, 699, -455, -455,
+ -455, -455, 559, 238, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, -455, -455, -455, -455, 373, -455,
+ -455, -455, -455, -455, -455, -455, -455, -455, -455, 239,
+ 68, -455, -455, 68, -455, -455, -455, -455, -455, 387,
+ -455, -455, -455, 244, -455, -455, -455, 99, -455, -455,
+ 248, -455, -455, 20, -455, 99, -455, -455, -455, 249,
+ -455, -455, -455, -22, 245, -455, 266, -455, 699, 99,
+ -455, 226, 253, -455, 68, -455, -455, 440, 105, 93,
+ 0, 0, 261, 261, -455, -455, -455, -455, 255, -455,
+ 20, 256, -455, 786, -455, -455, -455, -455, 399, 99,
+ 256, 257, -455, -455, -455, 68, -455, -455, 515, -455,
+ 20, -455, 256, -455, -455, 594, 77, -94, -455, -455,
+ -455, -6, -455, 68, 262, 68, 276, -455, -455, 594,
+ 68, 575, -77, 594, -77, -455, -455
};
/* YYPGOTO[NTERM-NUM]. */
static const short int yypgoto[] =
{
- -463, -463, -463, 407, -242, -234, 20, -463, -463, 89,
- -463, -463, -463, 426, -463, -463, -463, -35, -399, -463,
- -12, -2, -463, -463, -218, -463, -463, -463, -463, -463,
- -463, -463, 90, 4, 212, -385, -204, -463, -167, -463,
- 231, -462, -223, 100, -463, 49, -67, -463, 72, 63,
- 67, -463, 438, -463, -463, 422, -463, -463, -463, -463,
- -463, -15, -463, 444, 3, -463, -463, 446, -238, -463,
- -463, -463, 236, 6, -3, -463, 1, -463
+ -455, -455, -455, 392, -240, -237, 23, -455, -455, 79,
+ -455, -455, -455, 415, -455, -455, -455, -50, -358, -455,
+ -12, -2, -455, -455, -209, -455, -455, -455, -455, -455,
+ -455, -455, 73, 4, 197, -370, -204, -455, -200, -455,
+ 221, -454, -225, 85, -455, 48, -67, -455, 36, 56,
+ 44, -455, 423, -455, -455, 408, -455, -455, -455, -455,
+ -455, 5, -455, 432, 3, -455, -455, 434, -238, -455,
+ -455, -455, 223, 6, -3, -455, 1, -455
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -194
+#define YYTABLE_NINF -195
static const short int yytable[] =
{
- 22, 84, 71, 40, 198, 35, 24, 167, 38, 330,
- 373, 374, 341, 326, 456, 309, 7, 313, 373, 374,
- 313, 317, 16, 231, 382, 335, 205, 337, 357, -193,
- 3, 136, 358, 359, 360, 140, 494, 387, 233, 504,
- 383, 505, 297, 232, 185, 302, 303, 492, 495, 306,
- 11, 308, 4, 388, 11, 363, 315, 4, 151, 206,
- 5, 83, -193, 86, 73, 6, 7, 493, 79, 26,
- 482, 7, 249, 373, 374, 399, 201, 8, 351, 80,
- 9, 204, 489, 15, 367, 368, 369, 370, 371, 165,
- 347, 400, 487, 15, 196, 197, 15, 413, 10, 234,
- 11, 399, 169, 162, -42, 11, 170, 163, 423, 411,
- 351, 83, 86, 171, 352, 15, 172, 403, 265, 174,
- -42, 351, 192, 266, 439, 364, 15, 195, 189, 176,
- 191, 41, 42, 262, 263, 74, 75, 76, 77, 173,
- 280, 380, 381, 81, 82, 267, 12, 378, 379, 380,
- 381, 178, 13, 14, 186, 77, 193, 77, 22, 22,
- 251, 40, 40, 496, 24, 24, 38, 38, 175, 444,
- 445, 446, 447, 448, 449, 450, 451, 452, 460, 462,
- 235, 235, 15, 427, 268, 179, 464, 256, 463, 373,
- 374, 194, 77, 196, 197, 313, 245, 246, 252, 253,
- 469, 377, 378, 379, 380, 381, 269, 320, 321, 331,
- 15, 418, 15, 181, 281, 453, 282, 283, 284, 373,
- 374, 187, 182, 318, 319, 476, 183, 325, 184, 199,
- 481, 190, 200, 270, 202, 457, 332, 207, 336, 473,
- 203, 271, 208, 209, 210, 488, 211, 212, 213, 214,
- 373, 374, 353, 215, 216, 217, 40, 218, 219, 24,
- 220, 38, 354, 221, 285, 222, 336, 353, 223, 224,
- 484, 225, 226, 313, 227, 228, 229, 354, 244, 230,
- 298, 369, 262, 247, 299, 254, 257, -193, 498, 372,
- 500, 304, 258, 278, 281, 502, 282, 283, 284, 296,
- 305, 307, 310, 323, 327, 328, 281, 329, 282, 283,
- 284, 301, 334, 339, 375, 340, 376, 377, 378, 379,
- 380, 381, 346, 286, 349, 348, 350, 361, 398, 397,
- 365, 362, 366, 408, 287, 414, 384, 385, 386, 402,
- 412, 424, 40, 389, 285, 24, 43, 38, 390, 391,
- 288, 289, 392, 290, 428, 291, 285, 393, 438, 437,
- 394, 292, 44, 441, 45, 395, 491, 396, 401, 405,
- 46, 406, 415, 471, 47, 375, 407, 376, 377, 378,
- 379, 380, 381, 409, 5, 410, 417, 48, 10, 6,
- 404, 49, 50, 420, 431, 425, 429, 51, 430, 52,
- 454, 8, 440, 286, 9, 443, 53, 455, 458, 459,
- 461, 465, 467, 477, 287, 286, 466, 54, 55, 472,
- 475, 499, 10, 483, 56, 501, 287, 161, 21, 421,
- 288, 289, 480, 290, 468, 291, 316, 279, 419, 426,
- 28, 292, 288, 289, 166, 290, 34, 291, 37, 57,
- 58, 59, 60, 292, 0, 61, 0, 0, 314, 0,
- 62, 0, 43, 40, 438, 437, 24, 63, 38, 64,
- 12, 0, 0, 0, 432, 66, 13, 14, 44, 0,
- 45, 0, 0, 0, 0, 0, 46, 0, 0, 353,
- 47, 353, 373, 374, 0, 0, 15, 0, 0, 354,
- 0, 354, 0, 48, 0, 342, 15, 49, 50, 0,
- 0, 0, 0, 51, 0, 52, 0, 0, 0, 0,
- 0, 0, 53, 0, 0, 0, 0, 281, 43, 282,
- 283, 284, 0, 54, 55, 0, 0, 0, 0, 281,
- 56, 282, 283, 284, 44, 0, 45, 0, 0, 0,
- 0, 281, 46, 282, 283, 284, 47, 0, 0, 0,
- 46, 0, 0, 0, 0, 57, 58, 59, 60, 48,
- 0, 61, 0, 49, 50, 0, 62, 285, 0, 51,
- 0, 52, 0, 63, 0, 64, 373, 374, 53, 285,
- 65, 66, 0, 0, 0, 0, 53, 0, 0, 54,
- 55, 285, 373, 374, 0, 0, 56, 54, 55, 0,
- 373, 374, 15, 0, 56, 0, 0, 375, 474, 376,
- 377, 378, 379, 380, 381, 0, 0, 0, 0, 0,
- 0, 57, 58, 59, 60, 0, 286, 61, 0, 0,
- 58, 0, 62, 0, 0, 61, 0, 287, 286, 63,
- 0, 64, 0, 0, 0, 0, 65, 66, 0, 287,
- 286, 0, 0, 288, 289, 0, 290, 0, 291, 0,
- 0, 287, 0, 0, 292, 288, 289, 0, 290, 0,
- 291, 0, 0, 0, 0, 0, 292, 288, 289, 0,
- 485, 0, 291, 0, 0, 0, 0, 0, 292, 0,
+ 22, 84, 71, 40, 199, 35, 24, 331, 38, 206,
+ 298, 374, 375, 303, 304, 342, 310, 307, 314, 309,
+ 495, 314, 318, 327, 316, 16, 338, 168, 336, 358,
+ 457, -194, 496, 359, 360, 361, 7, 232, 11, 321,
+ 322, 493, 207, 46, 186, 4, 26, 3, 505, 383,
+ 506, 137, 388, 400, 364, 141, 250, 233, 348, 7,
+ 83, 494, 86, 73, -194, 384, 166, 79, 389, 401,
+ 11, 282, 352, 283, 284, 285, 202, 15, 152, 53,
+ 282, 205, 283, 284, 285, 368, 369, 370, 371, 372,
+ 54, 55, 190, 11, 192, 414, 163, 56, 400, 15,
+ 164, 15, 197, 198, 374, 375, 424, 170, 488, 80,
+ 83, 86, 483, -42, 404, 193, 374, 375, 171, 412,
+ 196, 286, 172, 58, 490, 440, 266, 174, 61, -42,
+ 286, 267, 352, 173, 263, 264, 353, 15, 41, 42,
+ 352, 281, 381, 382, 365, 15, 188, 497, 74, 75,
+ 180, 428, 191, 268, 76, 77, 81, 82, 175, 22,
+ 22, 208, 40, 40, 176, 24, 24, 38, 38, 177,
+ 445, 446, 447, 448, 449, 450, 451, 452, 453, 461,
+ 287, 252, 463, 454, 236, 236, 464, 465, 257, 287,
+ 179, 288, 269, 187, 77, 182, 314, 194, 77, 183,
+ 288, 470, 184, 458, 195, 77, 185, 289, 290, 203,
+ 291, 200, 292, 201, 270, 204, 289, 290, 293, 291,
+ 209, 292, 210, 477, 319, 320, 211, 293, 326, 197,
+ 198, 482, 492, 379, 380, 381, 382, 333, 212, 337,
+ 474, 271, 213, 489, 378, 379, 380, 381, 382, 272,
+ 246, 247, 214, 354, 253, 254, 215, 40, 216, 217,
+ 24, 245, 38, 355, 332, 15, 248, 337, 354, 419,
+ 15, 485, 374, 375, 314, 218, 219, 220, 355, 43,
+ 221, 222, 370, 263, 223, 255, 224, 225, 226, 499,
+ 373, 501, 227, 228, 229, 44, 503, 45, 230, 231,
+ 299, 300, -194, 46, 305, 259, 282, 47, 283, 284,
+ 285, 297, 258, 279, 306, 308, 311, 324, 328, 329,
+ 48, 330, 335, 340, 49, 50, 349, 341, 347, 362,
+ 51, 350, 52, 363, 351, 366, 415, 367, 399, 53,
+ 385, 403, 425, 40, 386, 409, 24, 413, 38, 418,
+ 54, 55, 421, 387, 10, 429, 286, 56, 390, 439,
+ 438, 391, 392, 393, 442, 394, 395, 396, 397, 402,
+ 406, 407, 234, 408, 472, 410, 411, 416, 426, 430,
+ 431, 455, 57, 58, 59, 60, 432, 441, 61, 444,
+ 456, 4, 459, 62, 5, 460, 467, 462, 466, 6,
+ 63, 468, 64, 43, 473, 7, 476, 433, 66, 484,
+ 478, 8, 162, 502, 9, 287, 500, 21, 481, 44,
+ 422, 45, 317, 427, 420, 28, 288, 46, 280, 15,
+ 167, 47, 10, 235, 34, 469, 37, 0, 0, 11,
+ 0, 0, 289, 290, 48, 291, 315, 292, 49, 50,
+ 0, 374, 375, 293, 51, 282, 52, 283, 284, 285,
+ 302, 0, 0, 53, 40, 439, 438, 24, 0, 38,
+ 0, 0, 0, 0, 54, 55, 0, 0, 0, 0,
+ 12, 56, 0, 0, 0, 0, 13, 14, 0, 0,
+ 354, 0, 354, 0, 282, 43, 283, 284, 285, 0,
+ 355, 0, 355, 0, 0, 286, 57, 58, 59, 60,
+ 0, 44, 61, 45, 0, 0, 15, 62, 282, 46,
+ 283, 284, 285, 47, 63, 0, 64, 0, 0, 0,
+ 0, 65, 66, 0, 0, 0, 48, 0, 0, 0,
+ 49, 50, 374, 375, 286, 0, 51, 0, 52, 0,
+ 0, 0, 0, 15, 0, 53, 374, 375, 0, 0,
+ 0, 0, 0, 0, 287, 0, 54, 55, 286, 0,
+ 374, 375, 0, 56, 0, 288, 376, 475, 377, 378,
+ 379, 380, 381, 382, 0, 0, 374, 375, 0, 0,
+ 0, 289, 290, 0, 291, 0, 292, 0, 57, 58,
+ 59, 60, 293, 287, 61, 374, 375, 0, 0, 62,
+ 0, 0, 0, 0, 288, 0, 63, 0, 64, 0,
+ 0, 0, 0, 65, 66, 0, 0, 287, 0, 0,
+ 289, 290, 0, 291, 0, 292, 0, 0, 288, 0,
+ 0, 293, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 289, 290, 0, 486, 0, 292,
+ 0, 0, 0, 0, 0, 293, 0, 376, 0, 377,
+ 378, 379, 380, 381, 382, 0, 0, 0, 0, 0,
+ 0, 376, 398, 377, 378, 379, 380, 381, 382, 0,
+ 0, 0, 0, 0, 0, 376, 405, 377, 378, 379,
+ 380, 381, 382, 43, 0, 0, 0, 0, 0, 0,
+ 443, 376, 504, 377, 378, 379, 380, 381, 382, 44,
+ 0, 45, 0, 0, 0, 0, 0, 46, 0, 0,
+ 376, 47, 377, 378, 379, 380, 381, 382, 4, 0,
+ 0, 5, 0, 0, 48, 0, 6, 0, 49, 50,
+ 0, 0, 7, 0, 51, 0, 52, 0, 8, 0,
+ 0, 9, 4, 53, 0, 5, 0, 5, 0, 0,
+ 6, 0, 6, 0, 54, 55, 7, 0, 5, 10,
+ 235, 56, 8, 6, 8, 9, 11, 9, 0, 0,
+ 0, 0, 0, 0, 0, 8, 0, 0, 9, 0,
+ 0, 0, 0, 10, 0, 10, 57, 58, 59, 60,
+ 11, 0, 61, 0, 0, 0, 10, 62, 5, 0,
+ 0, 0, 0, 6, 63, 0, 64, 12, 0, 0,
+ 0, 65, 66, 13, 14, 8, 0, 0, 9, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 375, 0, 376, 377, 378, 379, 380, 381, 0,
- 0, 0, 0, 0, 0, 0, 442, 375, 503, 376,
- 377, 378, 379, 380, 381, 375, 43, 376, 377, 378,
- 379, 380, 381, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 44, 0, 45, 0, 0, 0, 0, 0,
- 46, 0, 0, 0, 47, 0, 0, 0, 0, 0,
- 0, 4, 0, 0, 5, 0, 0, 48, 0, 6,
- 0, 49, 50, 0, 0, 7, 0, 51, 0, 52,
- 0, 8, 0, 0, 9, 4, 53, 0, 5, 0,
- 5, 0, 0, 6, 0, 6, 0, 54, 55, 7,
- 0, 5, 10, 234, 56, 8, 6, 8, 9, 11,
- 9, 0, 0, 0, 0, 0, 0, 0, 8, 0,
- 0, 9, 0, 0, 0, 0, 10, 0, 10, 57,
- 58, 59, 60, 11, 0, 61, 0, 0, 0, 10,
- 62, 0, 0, 0, 0, 0, 0, 63, 0, 64,
- 12, 0, 0, 0, 65, 66, 13, 14, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 12, 0, 12, 0, 0, 0,
- 13, 14, 13, 14, 0, 243, 15, 12, 0, 0,
- 0, 0, 0, 13, 14, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 15, 422, 15, 87, 0, 88, 89, 0, 90, 91,
- 0, 0, 479, 15, 92, 0, 93, 0, 0, 0,
- 0, 0, 0, 94, 95, 96, 97, 0, 98, 99,
- 100, 101, 102, 0, 103, 0, 104, 105, 106, 0,
- 0, 107, 0, 0, 0, 0, 108, 0, 109, 110,
- 111, 112, 113, 114, 0, 115, 116, 117, 118, 119,
- 0, 0, 120, 0, 121, 0, 0, 0, 0, 122,
- 0, 123, 0, 0, 0, 124, 125, 126, 127, 128,
- 129, 130, 131, 0, 132, 0, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 0, 0, 0,
- 0, 144, 0, 0, 145, 0, 146, 147, 0, 0,
- 148, 149, 150, 0, 0, 0, 151, 0, 152, 153,
- 154, 155, 0, 0, 156
+ 0, 12, 0, 12, 0, 0, 10, 13, 14, 13,
+ 14, 0, 244, 15, 12, 0, 0, 0, 0, 0,
+ 13, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 15, 343, 15,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 423,
+ 15, 0, 0, 0, 12, 0, 0, 0, 0, 0,
+ 13, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 87, 0, 88, 89, 0, 90, 91, 0, 92,
+ 0, 0, 93, 0, 94, 0, 0, 0, 0, 480,
+ 15, 95, 96, 97, 98, 0, 99, 100, 101, 102,
+ 103, 0, 104, 0, 105, 106, 107, 0, 0, 108,
+ 0, 0, 0, 0, 109, 0, 110, 111, 112, 113,
+ 114, 115, 0, 116, 117, 118, 119, 120, 0, 0,
+ 121, 0, 122, 0, 0, 0, 0, 123, 0, 124,
+ 0, 0, 0, 125, 126, 127, 128, 129, 130, 131,
+ 132, 0, 133, 0, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 0, 0, 0, 0, 145,
+ 0, 0, 146, 0, 147, 148, 0, 0, 149, 150,
+ 151, 0, 0, 0, 152, 0, 153, 154, 155, 156,
+ 0, 0, 157
};
static const short int yycheck[] =
{
- 2, 13, 5, 2, 71, 2, 2, 22, 2, 243,
- 11, 12, 254, 231, 399, 219, 43, 221, 11, 12,
- 224, 225, 2, 135, 135, 83, 119, 250, 266, 119,
- 0, 99, 270, 271, 272, 103, 26, 135, 10, 501,
- 151, 503, 209, 155, 47, 212, 213, 135, 38, 216,
- 77, 218, 29, 151, 77, 278, 223, 29, 126, 152,
- 32, 12, 152, 14, 150, 37, 43, 155, 32, 2,
- 469, 43, 95, 11, 12, 135, 79, 49, 149, 8,
- 52, 84, 481, 154, 288, 289, 290, 291, 292, 22,
- 257, 151, 477, 154, 3, 4, 154, 331, 70, 71,
- 77, 135, 149, 80, 135, 77, 149, 84, 342, 327,
- 149, 62, 63, 149, 153, 154, 149, 151, 27, 149,
- 151, 149, 59, 32, 362, 153, 154, 64, 56, 149,
- 58, 3, 4, 200, 201, 3, 4, 3, 4, 152,
- 207, 142, 143, 3, 4, 54, 118, 140, 141, 142,
- 143, 149, 124, 125, 3, 4, 3, 4, 160, 161,
- 175, 160, 161, 153, 160, 161, 160, 161, 152, 373,
- 374, 375, 376, 377, 378, 379, 380, 381, 416, 421,
- 160, 161, 154, 350, 93, 137, 424, 190, 422, 11,
- 12, 3, 4, 3, 4, 399, 3, 4, 3, 4,
- 438, 139, 140, 141, 142, 143, 115, 8, 9, 153,
- 154, 153, 154, 152, 3, 382, 5, 6, 7, 11,
- 12, 75, 149, 226, 227, 459, 149, 230, 149, 8,
- 468, 150, 152, 142, 149, 402, 248, 150, 250, 443,
- 152, 150, 150, 150, 150, 479, 150, 150, 150, 150,
- 11, 12, 264, 150, 150, 150, 255, 150, 150, 255,
- 150, 255, 264, 150, 53, 150, 278, 279, 150, 150,
- 474, 150, 150, 477, 150, 150, 150, 279, 3, 150,
- 8, 485, 349, 152, 8, 152, 156, 152, 492, 292,
- 494, 8, 151, 150, 3, 499, 5, 6, 7, 8,
- 8, 8, 57, 5, 154, 150, 3, 149, 5, 6,
- 7, 8, 137, 149, 136, 152, 138, 139, 140, 141,
- 142, 143, 151, 112, 135, 153, 156, 150, 3, 151,
- 151, 135, 150, 157, 123, 332, 151, 151, 151, 135,
- 8, 344, 341, 151, 53, 341, 4, 341, 151, 151,
- 139, 140, 151, 142, 353, 144, 53, 151, 361, 361,
- 151, 150, 20, 366, 22, 151, 155, 151, 151, 151,
- 28, 151, 137, 440, 32, 136, 151, 138, 139, 140,
- 141, 142, 143, 151, 32, 151, 149, 45, 70, 37,
- 151, 49, 50, 153, 151, 149, 149, 55, 149, 57,
- 8, 49, 151, 112, 52, 151, 64, 151, 5, 151,
- 149, 149, 135, 154, 123, 112, 151, 75, 76, 151,
- 151, 154, 70, 152, 82, 137, 123, 20, 2, 340,
- 139, 140, 467, 142, 437, 144, 224, 206, 338, 349,
- 2, 150, 139, 140, 22, 142, 2, 144, 2, 107,
- 108, 109, 110, 150, -1, 113, -1, -1, 222, -1,
- 118, -1, 4, 462, 467, 467, 462, 125, 462, 127,
- 118, -1, -1, -1, 132, 133, 124, 125, 20, -1,
- 22, -1, -1, -1, -1, -1, 28, -1, -1, 501,
- 32, 503, 11, 12, -1, -1, 154, -1, -1, 501,
- -1, 503, -1, 45, -1, 153, 154, 49, 50, -1,
- -1, -1, -1, 55, -1, 57, -1, -1, -1, -1,
- -1, -1, 64, -1, -1, -1, -1, 3, 4, 5,
- 6, 7, -1, 75, 76, -1, -1, -1, -1, 3,
- 82, 5, 6, 7, 20, -1, 22, -1, -1, -1,
- -1, 3, 28, 5, 6, 7, 32, -1, -1, -1,
- 28, -1, -1, -1, -1, 107, 108, 109, 110, 45,
- -1, 113, -1, 49, 50, -1, 118, 53, -1, 55,
- -1, 57, -1, 125, -1, 127, 11, 12, 64, 53,
- 132, 133, -1, -1, -1, -1, 64, -1, -1, 75,
- 76, 53, 11, 12, -1, -1, 82, 75, 76, -1,
- 11, 12, 154, -1, 82, -1, -1, 136, 137, 138,
+ 2, 13, 5, 2, 71, 2, 2, 244, 2, 119,
+ 210, 11, 12, 213, 214, 255, 220, 217, 222, 219,
+ 26, 225, 226, 232, 224, 2, 251, 22, 83, 267,
+ 400, 119, 38, 271, 272, 273, 43, 135, 77, 8,
+ 9, 135, 152, 28, 47, 29, 2, 0, 502, 135,
+ 504, 99, 135, 135, 279, 103, 95, 155, 258, 43,
+ 12, 155, 14, 150, 152, 151, 22, 32, 151, 151,
+ 77, 3, 149, 5, 6, 7, 79, 154, 126, 64,
+ 3, 84, 5, 6, 7, 289, 290, 291, 292, 293,
+ 75, 76, 56, 77, 58, 332, 80, 82, 135, 154,
+ 84, 154, 3, 4, 11, 12, 343, 149, 478, 8,
+ 62, 63, 470, 135, 151, 59, 11, 12, 149, 328,
+ 64, 53, 149, 108, 482, 363, 27, 152, 113, 151,
+ 53, 32, 149, 149, 201, 202, 153, 154, 3, 4,
+ 149, 208, 142, 143, 153, 154, 75, 153, 3, 4,
+ 137, 351, 150, 54, 3, 4, 3, 4, 149, 161,
+ 162, 150, 161, 162, 152, 161, 162, 161, 162, 149,
+ 374, 375, 376, 377, 378, 379, 380, 381, 382, 417,
+ 112, 176, 422, 383, 161, 162, 423, 425, 191, 112,
+ 149, 123, 93, 3, 4, 152, 400, 3, 4, 149,
+ 123, 439, 149, 403, 3, 4, 149, 139, 140, 149,
+ 142, 8, 144, 152, 115, 152, 139, 140, 150, 142,
+ 150, 144, 150, 460, 227, 228, 150, 150, 231, 3,
+ 4, 469, 155, 140, 141, 142, 143, 249, 150, 251,
+ 444, 142, 150, 480, 139, 140, 141, 142, 143, 150,
+ 3, 4, 150, 265, 3, 4, 150, 256, 150, 150,
+ 256, 3, 256, 265, 153, 154, 152, 279, 280, 153,
+ 154, 475, 11, 12, 478, 150, 150, 150, 280, 4,
+ 150, 150, 486, 350, 150, 152, 150, 150, 150, 493,
+ 293, 495, 150, 150, 150, 20, 500, 22, 150, 150,
+ 8, 8, 152, 28, 8, 151, 3, 32, 5, 6,
+ 7, 8, 156, 150, 8, 8, 57, 5, 154, 150,
+ 45, 149, 137, 149, 49, 50, 153, 152, 151, 150,
+ 55, 135, 57, 135, 156, 151, 333, 150, 3, 64,
+ 151, 135, 345, 342, 151, 157, 342, 8, 342, 149,
+ 75, 76, 153, 151, 70, 354, 53, 82, 151, 362,
+ 362, 151, 151, 151, 367, 151, 151, 151, 151, 151,
+ 151, 151, 10, 151, 441, 151, 151, 137, 149, 149,
+ 149, 8, 107, 108, 109, 110, 151, 151, 113, 151,
+ 151, 29, 5, 118, 32, 151, 151, 149, 149, 37,
+ 125, 135, 127, 4, 151, 43, 151, 132, 133, 152,
+ 154, 49, 20, 137, 52, 112, 154, 2, 468, 20,
+ 341, 22, 225, 350, 339, 2, 123, 28, 207, 154,
+ 22, 32, 70, 71, 2, 438, 2, -1, -1, 77,
+ -1, -1, 139, 140, 45, 142, 223, 144, 49, 50,
+ -1, 11, 12, 150, 55, 3, 57, 5, 6, 7,
+ 8, -1, -1, 64, 463, 468, 468, 463, -1, 463,
+ -1, -1, -1, -1, 75, 76, -1, -1, -1, -1,
+ 118, 82, -1, -1, -1, -1, 124, 125, -1, -1,
+ 502, -1, 504, -1, 3, 4, 5, 6, 7, -1,
+ 502, -1, 504, -1, -1, 53, 107, 108, 109, 110,
+ -1, 20, 113, 22, -1, -1, 154, 118, 3, 28,
+ 5, 6, 7, 32, 125, -1, 127, -1, -1, -1,
+ -1, 132, 133, -1, -1, -1, 45, -1, -1, -1,
+ 49, 50, 11, 12, 53, -1, 55, -1, 57, -1,
+ -1, -1, -1, 154, -1, 64, 11, 12, -1, -1,
+ -1, -1, -1, -1, 112, -1, 75, 76, 53, -1,
+ 11, 12, -1, 82, -1, 123, 136, 137, 138, 139,
+ 140, 141, 142, 143, -1, -1, 11, 12, -1, -1,
+ -1, 139, 140, -1, 142, -1, 144, -1, 107, 108,
+ 109, 110, 150, 112, 113, 11, 12, -1, -1, 118,
+ -1, -1, -1, -1, 123, -1, 125, -1, 127, -1,
+ -1, -1, -1, 132, 133, -1, -1, 112, -1, -1,
+ 139, 140, -1, 142, -1, 144, -1, -1, 123, -1,
+ -1, 150, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 139, 140, -1, 142, -1, 144,
+ -1, -1, -1, -1, -1, 150, -1, 136, -1, 138,
139, 140, 141, 142, 143, -1, -1, -1, -1, -1,
- -1, 107, 108, 109, 110, -1, 112, 113, -1, -1,
- 108, -1, 118, -1, -1, 113, -1, 123, 112, 125,
- -1, 127, -1, -1, -1, -1, 132, 133, -1, 123,
- 112, -1, -1, 139, 140, -1, 142, -1, 144, -1,
- -1, 123, -1, -1, 150, 139, 140, -1, 142, -1,
- 144, -1, -1, -1, -1, -1, 150, 139, 140, -1,
- 142, -1, 144, -1, -1, -1, -1, -1, 150, -1,
+ -1, 136, 151, 138, 139, 140, 141, 142, 143, -1,
+ -1, -1, -1, -1, -1, 136, 151, 138, 139, 140,
+ 141, 142, 143, 4, -1, -1, -1, -1, -1, -1,
+ 151, 136, 137, 138, 139, 140, 141, 142, 143, 20,
+ -1, 22, -1, -1, -1, -1, -1, 28, -1, -1,
+ 136, 32, 138, 139, 140, 141, 142, 143, 29, -1,
+ -1, 32, -1, -1, 45, -1, 37, -1, 49, 50,
+ -1, -1, 43, -1, 55, -1, 57, -1, 49, -1,
+ -1, 52, 29, 64, -1, 32, -1, 32, -1, -1,
+ 37, -1, 37, -1, 75, 76, 43, -1, 32, 70,
+ 71, 82, 49, 37, 49, 52, 77, 52, -1, -1,
+ -1, -1, -1, -1, -1, 49, -1, -1, 52, -1,
+ -1, -1, -1, 70, -1, 70, 107, 108, 109, 110,
+ 77, -1, 113, -1, -1, -1, 70, 118, 32, -1,
+ -1, -1, -1, 37, 125, -1, 127, 118, -1, -1,
+ -1, 132, 133, 124, 125, 49, -1, -1, 52, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 136, -1, 138, 139, 140, 141, 142, 143, -1,
- -1, -1, -1, -1, -1, -1, 151, 136, 137, 138,
- 139, 140, 141, 142, 143, 136, 4, 138, 139, 140,
- 141, 142, 143, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 20, -1, 22, -1, -1, -1, -1, -1,
- 28, -1, -1, -1, 32, -1, -1, -1, -1, -1,
- -1, 29, -1, -1, 32, -1, -1, 45, -1, 37,
- -1, 49, 50, -1, -1, 43, -1, 55, -1, 57,
- -1, 49, -1, -1, 52, 29, 64, -1, 32, -1,
- 32, -1, -1, 37, -1, 37, -1, 75, 76, 43,
- -1, 32, 70, 71, 82, 49, 37, 49, 52, 77,
- 52, -1, -1, -1, -1, -1, -1, -1, 49, -1,
- -1, 52, -1, -1, -1, -1, 70, -1, 70, 107,
- 108, 109, 110, 77, -1, 113, -1, -1, -1, 70,
- 118, -1, -1, -1, -1, -1, -1, 125, -1, 127,
- 118, -1, -1, -1, 132, 133, 124, 125, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 118, -1, 118, -1, -1, -1,
- 124, 125, 124, 125, -1, 153, 154, 118, -1, -1,
- -1, -1, -1, 124, 125, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 154, 153, 154, 13, -1, 15, 16, -1, 18, 19,
- -1, -1, 153, 154, 24, -1, 26, -1, -1, -1,
- -1, -1, -1, 33, 34, 35, 36, -1, 38, 39,
- 40, 41, 42, -1, 44, -1, 46, 47, 48, -1,
- -1, 51, -1, -1, -1, -1, 56, -1, 58, 59,
- 60, 61, 62, 63, -1, 65, 66, 67, 68, 69,
- -1, -1, 72, -1, 74, -1, -1, -1, -1, 79,
- -1, 81, -1, -1, -1, 85, 86, 87, 88, 89,
- 90, 91, 92, -1, 94, -1, 96, 97, 98, 99,
- 100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
- -1, 111, -1, -1, 114, -1, 116, 117, -1, -1,
- 120, 121, 122, -1, -1, -1, 126, -1, 128, 129,
- 130, 131, -1, -1, 134
+ -1, 118, -1, 118, -1, -1, 70, 124, 125, 124,
+ 125, -1, 153, 154, 118, -1, -1, -1, -1, -1,
+ 124, 125, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 154, 153, 154,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 153,
+ 154, -1, -1, -1, 118, -1, -1, -1, -1, -1,
+ 124, 125, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 13, -1, 15, 16, -1, 18, 19, -1, 21,
+ -1, -1, 24, -1, 26, -1, -1, -1, -1, 153,
+ 154, 33, 34, 35, 36, -1, 38, 39, 40, 41,
+ 42, -1, 44, -1, 46, 47, 48, -1, -1, 51,
+ -1, -1, -1, -1, 56, -1, 58, 59, 60, 61,
+ 62, 63, -1, 65, 66, 67, 68, 69, -1, -1,
+ 72, -1, 74, -1, -1, -1, -1, 79, -1, 81,
+ -1, -1, -1, 85, 86, 87, 88, 89, 90, 91,
+ 92, -1, 94, -1, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, -1, -1, -1, -1, 111,
+ -1, -1, 114, -1, 116, 117, -1, -1, 120, 121,
+ 122, -1, -1, -1, 126, -1, 128, 129, 130, 131,
+ -1, -1, 134
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1432,48 +1444,48 @@ static const unsigned char yystos[] =
110, 113, 118, 125, 127, 132, 133, 191, 205, 207,
231, 232, 234, 150, 3, 4, 3, 4, 203, 32,
8, 3, 4, 203, 178, 179, 203, 13, 15, 16,
- 18, 19, 24, 26, 33, 34, 35, 36, 38, 39,
- 40, 41, 42, 44, 46, 47, 48, 51, 56, 58,
- 59, 60, 61, 62, 63, 65, 66, 67, 68, 69,
- 72, 74, 79, 81, 85, 86, 87, 88, 89, 90,
- 91, 92, 94, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 111, 114, 116, 117, 120, 121,
- 122, 126, 128, 129, 130, 131, 134, 180, 182, 230,
- 161, 161, 80, 84, 169, 208, 213, 219, 223, 149,
- 149, 149, 149, 152, 149, 152, 149, 163, 149, 137,
- 218, 152, 149, 149, 149, 232, 3, 75, 206, 206,
- 150, 206, 207, 3, 3, 207, 3, 4, 204, 8,
- 152, 232, 149, 152, 232, 119, 152, 150, 150, 150,
+ 18, 19, 21, 24, 26, 33, 34, 35, 36, 38,
+ 39, 40, 41, 42, 44, 46, 47, 48, 51, 56,
+ 58, 59, 60, 61, 62, 63, 65, 66, 67, 68,
+ 69, 72, 74, 79, 81, 85, 86, 87, 88, 89,
+ 90, 91, 92, 94, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 111, 114, 116, 117, 120,
+ 121, 122, 126, 128, 129, 130, 131, 134, 180, 182,
+ 230, 161, 161, 80, 84, 169, 208, 213, 219, 223,
+ 149, 149, 149, 149, 152, 149, 152, 149, 163, 149,
+ 137, 218, 152, 149, 149, 149, 232, 3, 75, 206,
+ 206, 150, 206, 207, 3, 3, 207, 3, 4, 204,
+ 8, 152, 232, 149, 152, 232, 119, 152, 150, 150,
150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
- 150, 135, 155, 10, 71, 164, 168, 171, 208, 210,
- 221, 222, 225, 153, 3, 3, 4, 152, 211, 95,
- 215, 219, 3, 4, 152, 162, 232, 156, 151, 188,
- 189, 190, 204, 204, 198, 27, 32, 54, 93, 115,
- 142, 150, 184, 204, 226, 227, 228, 229, 150, 198,
- 204, 3, 5, 6, 7, 53, 112, 123, 139, 140,
- 142, 144, 150, 194, 195, 196, 8, 196, 8, 8,
- 181, 8, 196, 196, 8, 8, 196, 8, 196, 194,
- 57, 192, 193, 194, 230, 196, 192, 194, 232, 232,
- 8, 9, 183, 5, 235, 232, 182, 154, 150, 149,
- 163, 153, 178, 212, 137, 83, 178, 200, 216, 149,
- 152, 162, 153, 164, 178, 201, 151, 196, 153, 135,
- 156, 149, 153, 178, 179, 199, 200, 226, 226, 226,
- 226, 150, 135, 200, 153, 151, 150, 194, 194, 194,
- 194, 194, 232, 11, 12, 136, 138, 139, 140, 141,
- 142, 143, 135, 151, 151, 151, 151, 135, 151, 151,
- 151, 151, 151, 151, 151, 151, 151, 151, 3, 135,
- 151, 151, 135, 151, 151, 151, 151, 151, 157, 151,
- 151, 182, 8, 163, 222, 137, 232, 149, 153, 201,
- 153, 167, 153, 163, 232, 149, 190, 196, 234, 149,
- 149, 151, 132, 172, 173, 174, 175, 179, 232, 226,
- 151, 232, 151, 151, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 196, 8, 151, 193, 196, 5, 151,
- 226, 149, 162, 163, 226, 149, 151, 135, 232, 226,
- 202, 204, 151, 194, 137, 151, 163, 154, 176, 153,
- 175, 226, 176, 152, 194, 142, 177, 193, 163, 176,
- 185, 155, 135, 155, 26, 38, 153, 186, 194, 154,
- 194, 137, 194, 137, 199, 199
+ 150, 150, 135, 155, 10, 71, 164, 168, 171, 208,
+ 210, 221, 222, 225, 153, 3, 3, 4, 152, 211,
+ 95, 215, 219, 3, 4, 152, 162, 232, 156, 151,
+ 188, 189, 190, 204, 204, 198, 27, 32, 54, 93,
+ 115, 142, 150, 184, 204, 226, 227, 228, 229, 150,
+ 198, 204, 3, 5, 6, 7, 53, 112, 123, 139,
+ 140, 142, 144, 150, 194, 195, 196, 8, 196, 8,
+ 8, 181, 8, 196, 196, 8, 8, 196, 8, 196,
+ 194, 57, 192, 193, 194, 230, 196, 192, 194, 232,
+ 232, 8, 9, 183, 5, 235, 232, 182, 154, 150,
+ 149, 163, 153, 178, 212, 137, 83, 178, 200, 216,
+ 149, 152, 162, 153, 164, 178, 201, 151, 196, 153,
+ 135, 156, 149, 153, 178, 179, 199, 200, 226, 226,
+ 226, 226, 150, 135, 200, 153, 151, 150, 194, 194,
+ 194, 194, 194, 232, 11, 12, 136, 138, 139, 140,
+ 141, 142, 143, 135, 151, 151, 151, 151, 135, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 3,
+ 135, 151, 151, 135, 151, 151, 151, 151, 151, 157,
+ 151, 151, 182, 8, 163, 222, 137, 232, 149, 153,
+ 201, 153, 167, 153, 163, 232, 149, 190, 196, 234,
+ 149, 149, 151, 132, 172, 173, 174, 175, 179, 232,
+ 226, 151, 232, 151, 151, 194, 194, 194, 194, 194,
+ 194, 194, 194, 194, 196, 8, 151, 193, 196, 5,
+ 151, 226, 149, 162, 163, 226, 149, 151, 135, 232,
+ 226, 202, 204, 151, 194, 137, 151, 163, 154, 176,
+ 153, 175, 226, 176, 152, 194, 142, 177, 193, 163,
+ 176, 185, 155, 135, 155, 26, 38, 153, 186, 194,
+ 154, 194, 137, 194, 137, 199, 199
};
#define yyerrok (yyerrstatus = 0)
@@ -2143,7 +2155,7 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 292 "parser.y"
+#line 304 "parser.y"
{ fix_incomplete();
check_all_user_types((yyvsp[0].ifref_list));
write_proxies((yyvsp[0].ifref_list));
@@ -2154,22 +2166,22 @@ yyreduce:
break;
case 3:
-#line 301 "parser.y"
+#line 313 "parser.y"
{ (yyval.ifref_list) = NULL; ;}
break;
case 4:
-#line 302 "parser.y"
+#line 314 "parser.y"
{ (yyval.ifref_list) = (yyvsp[-1].ifref_list); ;}
break;
case 5:
-#line 303 "parser.y"
+#line 315 "parser.y"
{ (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), make_ifref((yyvsp[0].type)) ); ;}
break;
case 6:
-#line 304 "parser.y"
+#line 316 "parser.y"
{ (yyval.ifref_list) = (yyvsp[-2].ifref_list);
reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, 0);
if (!parse_only && do_header) write_coclass_forward((yyvsp[-1].type));
@@ -2177,7 +2189,7 @@ yyreduce:
break;
case 7:
-#line 308 "parser.y"
+#line 320 "parser.y"
{ (yyval.ifref_list) = (yyvsp[-1].ifref_list);
add_typelib_entry((yyvsp[0].type));
reg_type((yyvsp[0].type), (yyvsp[0].type)->name, 0);
@@ -2186,42 +2198,42 @@ yyreduce:
break;
case 8:
-#line 313 "parser.y"
+#line 325 "parser.y"
{ (yyval.ifref_list) = (yyvsp[-1].ifref_list); add_typelib_entry((yyvsp[0].type)); ;}
break;
case 9:
-#line 314 "parser.y"
+#line 326 "parser.y"
{ (yyval.ifref_list) = (yyvsp[-1].ifref_list); ;}
break;
case 10:
-#line 315 "parser.y"
+#line 327 "parser.y"
{ (yyval.ifref_list) = (yyvsp[-1].ifref_list); ;}
break;
case 11:
-#line 318 "parser.y"
+#line 330 "parser.y"
{;}
break;
case 12:
-#line 319 "parser.y"
+#line 331 "parser.y"
{ if (!parse_only) add_typelib_entry((yyvsp[0].type)); ;}
break;
case 13:
-#line 320 "parser.y"
+#line 332 "parser.y"
{ if (!parse_only) add_typelib_entry((yyvsp[0].type)); ;}
break;
case 14:
-#line 321 "parser.y"
+#line 333 "parser.y"
{ reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, 0); if (!parse_only && do_header) write_coclass_forward((yyvsp[-1].type)); ;}
break;
case 15:
-#line 322 "parser.y"
+#line 334 "parser.y"
{ if (!parse_only) add_typelib_entry((yyvsp[0].type));
reg_type((yyvsp[0].type), (yyvsp[0].type)->name, 0);
if (!parse_only && do_header) write_coclass_forward((yyvsp[0].type));
@@ -2229,52 +2241,52 @@ yyreduce:
break;
case 16:
-#line 326 "parser.y"
+#line 338 "parser.y"
{ if (!parse_only) add_typelib_entry((yyvsp[0].type)); ;}
break;
case 17:
-#line 327 "parser.y"
+#line 339 "parser.y"
{;}
break;
case 18:
-#line 328 "parser.y"
+#line 340 "parser.y"
{;}
break;
case 19:
-#line 329 "parser.y"
+#line 341 "parser.y"
{;}
break;
case 20:
-#line 332 "parser.y"
+#line 344 "parser.y"
{ (yyval.func_list) = NULL; ;}
break;
case 21:
-#line 333 "parser.y"
+#line 345 "parser.y"
{ (yyval.func_list) = append_func( (yyvsp[-2].func_list), (yyvsp[-1].func) ); ;}
break;
case 22:
-#line 334 "parser.y"
+#line 346 "parser.y"
{ (yyval.func_list) = (yyvsp[-1].func_list); ;}
break;
case 25:
-#line 341 "parser.y"
+#line 353 "parser.y"
{ if (!parse_only && do_header) { write_constdef((yyvsp[-1].var)); } ;}
break;
case 26:
-#line 342 "parser.y"
+#line 354 "parser.y"
{;}
break;
case 27:
-#line 343 "parser.y"
+#line 355 "parser.y"
{ if (!parse_only && do_header) {
write_type_def_or_decl(header, (yyvsp[-1].type), FALSE, NULL);
fprintf(header, ";\n\n");
@@ -2283,17 +2295,17 @@ yyreduce:
break;
case 28:
-#line 348 "parser.y"
+#line 360 "parser.y"
{ if (!parse_only && do_header) { write_externdef((yyvsp[-1].var)); } ;}
break;
case 29:
-#line 349 "parser.y"
+#line 361 "parser.y"
{;}
break;
case 30:
-#line 350 "parser.y"
+#line 362 "parser.y"
{ if (!parse_only && do_header) {
write_type_def_or_decl(header, (yyvsp[-1].type), FALSE, NULL);
fprintf(header, ";\n\n");
@@ -2302,12 +2314,12 @@ yyreduce:
break;
case 31:
-#line 355 "parser.y"
+#line 367 "parser.y"
{;}
break;
case 32:
-#line 356 "parser.y"
+#line 368 "parser.y"
{ if (!parse_only && do_header) {
write_type_def_or_decl(header, (yyvsp[-1].type), FALSE, NULL);
fprintf(header, ";\n\n");
@@ -2316,12 +2328,12 @@ yyreduce:
break;
case 33:
-#line 363 "parser.y"
+#line 375 "parser.y"
{ if (!parse_only && do_header) fprintf(header, "%s\n", (yyvsp[-1].str)); ;}
break;
case 34:
-#line 365 "parser.y"
+#line 377 "parser.y"
{ assert(yychar == YYEMPTY);
(yyval.num) = do_import((yyvsp[-1].str));
if (!(yyval.num)) yychar = aEOF;
@@ -2329,55 +2341,57 @@ yyreduce:
break;
case 35:
-#line 372 "parser.y"
+#line 384 "parser.y"
{ if ((yyvsp[-2].num)) pop_import(); ;}
break;
case 36:
-#line 376 "parser.y"
+#line 388 "parser.y"
{ if(!parse_only) add_importlib((yyvsp[-2].str)); ;}
break;
case 37:
-#line 379 "parser.y"
+#line 391 "parser.y"
{ (yyval.str) = (yyvsp[0].str); ;}
break;
case 38:
-#line 381 "parser.y"
- { if (!parse_only) start_typelib((yyvsp[-1].str), (yyvsp[-2].attr_list));
+#line 393 "parser.y"
+ { check_library_attrs((yyvsp[-1].str), (yyvsp[-2].attr_list));
+ if (!parse_only) start_typelib((yyvsp[-1].str), (yyvsp[-2].attr_list));
if (!parse_only && do_header) write_library((yyvsp[-1].str), (yyvsp[-2].attr_list));
if (!parse_only && do_idfile) write_libid((yyvsp[-1].str), (yyvsp[-2].attr_list));
+ is_inside_library = TRUE;
;}
break;
case 39:
-#line 387 "parser.y"
- { if (!parse_only) end_typelib(); ;}
+#line 401 "parser.y"
+ { if (!parse_only) end_typelib(); is_inside_library = FALSE; ;}
break;
case 40:
-#line 390 "parser.y"
+#line 404 "parser.y"
{ (yyval.var_list) = NULL; ;}
break;
case 42:
-#line 394 "parser.y"
+#line 408 "parser.y"
{ (yyval.var_list) = NULL; ;}
break;
case 43:
-#line 397 "parser.y"
+#line 411 "parser.y"
{ check_arg((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); ;}
break;
case 44:
-#line 398 "parser.y"
+#line 412 "parser.y"
{ check_arg((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var)); ;}
break;
case 46:
-#line 403 "parser.y"
+#line 417 "parser.y"
{ (yyval.var) = (yyvsp[-1].pident)->var;
(yyval.var)->attrs = (yyvsp[-3].attr_list);
set_type((yyval.var), (yyvsp[-2].type), (yyvsp[-1].pident), (yyvsp[0].array_dims), TRUE);
@@ -2386,7 +2400,7 @@ yyreduce:
break;
case 47:
-#line 408 "parser.y"
+#line 422 "parser.y"
{ (yyval.var) = (yyvsp[-1].pident)->var;
set_type((yyval.var), (yyvsp[-2].type), (yyvsp[-1].pident), (yyvsp[0].array_dims), TRUE);
free((yyvsp[-1].pident));
@@ -2394,42 +2408,42 @@ yyreduce:
break;
case 48:
-#line 414 "parser.y"
+#line 428 "parser.y"
{ (yyval.array_dims) = NULL; ;}
break;
case 49:
-#line 415 "parser.y"
+#line 429 "parser.y"
{ (yyval.array_dims) = (yyvsp[-1].array_dims); ;}
break;
case 50:
-#line 416 "parser.y"
+#line 430 "parser.y"
{ (yyval.array_dims) = append_array( NULL, make_expr(EXPR_VOID) ); ;}
break;
case 51:
-#line 419 "parser.y"
+#line 433 "parser.y"
{ (yyval.array_dims) = append_array( NULL, (yyvsp[0].expr) ); ;}
break;
case 52:
-#line 420 "parser.y"
+#line 434 "parser.y"
{ (yyval.array_dims) = append_array( (yyvsp[-2].array_dims), (yyvsp[0].expr) ); ;}
break;
case 53:
-#line 421 "parser.y"
+#line 435 "parser.y"
{ (yyval.array_dims) = append_array( (yyvsp[-3].array_dims), (yyvsp[0].expr) ); ;}
break;
case 54:
-#line 424 "parser.y"
+#line 438 "parser.y"
{ (yyval.attr_list) = NULL; ;}
break;
case 56:
-#line 429 "parser.y"
+#line 443 "parser.y"
{ (yyval.attr_list) = (yyvsp[-1].attr_list);
if (!(yyval.attr_list))
error_loc("empty attribute lists unsupported\n");
@@ -2437,468 +2451,473 @@ yyreduce:
break;
case 57:
-#line 435 "parser.y"
+#line 449 "parser.y"
{ (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); ;}
break;
case 58:
-#line 436 "parser.y"
+#line 450 "parser.y"
{ (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); ;}
break;
case 59:
-#line 437 "parser.y"
+#line 451 "parser.y"
{ (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); ;}
break;
case 60:
-#line 440 "parser.y"
+#line 454 "parser.y"
{ (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); ;}
break;
case 61:
-#line 441 "parser.y"
+#line 455 "parser.y"
{ (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); ;}
break;
case 62:
-#line 444 "parser.y"
+#line 458 "parser.y"
{ (yyval.attr) = NULL; ;}
break;
case 63:
-#line 445 "parser.y"
+#line 459 "parser.y"
{ (yyval.attr) = make_attr(ATTR_AGGREGATABLE); ;}
break;
case 64:
-#line 446 "parser.y"
+#line 460 "parser.y"
{ (yyval.attr) = make_attr(ATTR_APPOBJECT); ;}
break;
case 65:
-#line 447 "parser.y"
+#line 461 "parser.y"
{ (yyval.attr) = make_attr(ATTR_ASYNC); ;}
break;
case 66:
-#line 448 "parser.y"
+#line 462 "parser.y"
{ (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); ;}
break;
case 67:
-#line 449 "parser.y"
+#line 463 "parser.y"
{ (yyval.attr) = make_attr(ATTR_BINDABLE); ;}
break;
case 68:
-#line 450 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); ;}
+#line 464 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_BROADCAST); ;}
break;
case 69:
-#line 451 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); ;}
+#line 465 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); ;}
break;
case 70:
-#line 452 "parser.y"
- { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); ;}
+#line 466 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); ;}
break;
case 71:
-#line 453 "parser.y"
- { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ ;}
+#line 467 "parser.y"
+ { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); ;}
break;
case 72:
-#line 454 "parser.y"
- { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ ;}
+#line 468 "parser.y"
+ { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ ;}
break;
case 73:
-#line 455 "parser.y"
- { (yyval.attr) = make_attr(ATTR_CONTROL); ;}
+#line 469 "parser.y"
+ { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ ;}
break;
case 74:
-#line 456 "parser.y"
- { (yyval.attr) = make_attr(ATTR_DEFAULT); ;}
+#line 470 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_CONTROL); ;}
break;
case 75:
-#line 457 "parser.y"
- { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); ;}
+#line 471 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_DEFAULT); ;}
break;
case 76:
-#line 458 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE_EXPR, (yyvsp[-1].expr)); ;}
+#line 472 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); ;}
break;
case 77:
-#line 459 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE_STRING, (yyvsp[-1].str)); ;}
+#line 473 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE_EXPR, (yyvsp[-1].expr)); ;}
break;
case 78:
-#line 460 "parser.y"
- { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); ;}
+#line 474 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE_STRING, (yyvsp[-1].str)); ;}
break;
case 79:
-#line 461 "parser.y"
- { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); ;}
+#line 475 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); ;}
break;
case 80:
-#line 462 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); ;}
+#line 476 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); ;}
break;
case 81:
-#line 463 "parser.y"
- { (yyval.attr) = make_attr(ATTR_DUAL); ;}
+#line 477 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); ;}
break;
case 82:
-#line 464 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); ;}
+#line 478 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_DUAL); ;}
break;
case 83:
-#line 465 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_ENTRY_STRING, (yyvsp[-1].str)); ;}
+#line 479 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); ;}
break;
case 84:
-#line 466 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_ENTRY_ORDINAL, (yyvsp[-1].expr)); ;}
+#line 480 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_ENTRY_STRING, (yyvsp[-1].str)); ;}
break;
case 85:
-#line 467 "parser.y"
- { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); ;}
+#line 481 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_ENTRY_ORDINAL, (yyvsp[-1].expr)); ;}
break;
case 86:
-#line 468 "parser.y"
- { (yyval.attr) = make_attr(ATTR_HANDLE); ;}
+#line 482 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); ;}
break;
case 87:
-#line 469 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); ;}
+#line 483 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_HANDLE); ;}
break;
case 88:
-#line 470 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); ;}
+#line 484 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); ;}
break;
case 89:
-#line 471 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); ;}
+#line 485 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); ;}
break;
case 90:
-#line 472 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); ;}
+#line 486 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); ;}
break;
case 91:
-#line 473 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); ;}
+#line 487 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); ;}
break;
case 92:
-#line 474 "parser.y"
- { (yyval.attr) = make_attr(ATTR_HIDDEN); ;}
+#line 488 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); ;}
break;
case 93:
-#line 475 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); ;}
+#line 489 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_HIDDEN); ;}
break;
case 94:
-#line 476 "parser.y"
- { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); ;}
+#line 490 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); ;}
break;
case 95:
-#line 477 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); ;}
+#line 491 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); ;}
break;
case 96:
-#line 478 "parser.y"
- { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); ;}
+#line 492 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); ;}
break;
case 97:
-#line 479 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].str)); ;}
+#line 493 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); ;}
break;
case 98:
-#line 480 "parser.y"
- { (yyval.attr) = make_attr(ATTR_IN); ;}
+#line 494 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].str)); ;}
break;
case 99:
-#line 481 "parser.y"
- { (yyval.attr) = make_attr(ATTR_INPUTSYNC); ;}
+#line 495 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_IN); ;}
break;
case 100:
-#line 482 "parser.y"
- { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); ;}
+#line 496 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_INPUTSYNC); ;}
break;
case 101:
-#line 483 "parser.y"
- { (yyval.attr) = make_attr(ATTR_LOCAL); ;}
+#line 497 "parser.y"
+ { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); ;}
break;
case 102:
-#line 484 "parser.y"
- { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); ;}
+#line 498 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_LOCAL); ;}
break;
case 103:
-#line 485 "parser.y"
- { (yyval.attr) = make_attr(ATTR_NONCREATABLE); ;}
+#line 499 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); ;}
break;
case 104:
-#line 486 "parser.y"
- { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); ;}
+#line 500 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_NONCREATABLE); ;}
break;
case 105:
-#line 487 "parser.y"
- { (yyval.attr) = make_attr(ATTR_OBJECT); ;}
+#line 501 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); ;}
break;
case 106:
-#line 488 "parser.y"
- { (yyval.attr) = make_attr(ATTR_ODL); ;}
+#line 502 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_OBJECT); ;}
break;
case 107:
-#line 489 "parser.y"
- { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); ;}
+#line 503 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_ODL); ;}
break;
case 108:
-#line 490 "parser.y"
- { (yyval.attr) = make_attr(ATTR_OPTIONAL); ;}
+#line 504 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); ;}
break;
case 109:
-#line 491 "parser.y"
- { (yyval.attr) = make_attr(ATTR_OUT); ;}
+#line 505 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_OPTIONAL); ;}
break;
case 110:
-#line 492 "parser.y"
- { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); ;}
+#line 506 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_OUT); ;}
break;
case 111:
-#line 493 "parser.y"
- { (yyval.attr) = make_attr(ATTR_PROPGET); ;}
+#line 507 "parser.y"
+ { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); ;}
break;
case 112:
-#line 494 "parser.y"
- { (yyval.attr) = make_attr(ATTR_PROPPUT); ;}
+#line 508 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_PROPGET); ;}
break;
case 113:
-#line 495 "parser.y"
- { (yyval.attr) = make_attr(ATTR_PROPPUTREF); ;}
+#line 509 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_PROPPUT); ;}
break;
case 114:
-#line 496 "parser.y"
- { (yyval.attr) = make_attr(ATTR_PUBLIC); ;}
+#line 510 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_PROPPUTREF); ;}
break;
case 115:
-#line 497 "parser.y"
+#line 511 "parser.y"
+ { (yyval.attr) = make_attr(ATTR_PUBLIC); ;}
+ break;
+
+ case 116:
+#line 512 "parser.y"
{ expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) );
list = append_expr( list, (yyvsp[-1].expr) );
(yyval.attr) = make_attrp(ATTR_RANGE, list); ;}
break;
- case 116:
-#line 500 "parser.y"
+ case 117:
+#line 515 "parser.y"
{ (yyval.attr) = make_attr(ATTR_READONLY); ;}
break;
- case 117:
-#line 501 "parser.y"
+ case 118:
+#line 516 "parser.y"
{ (yyval.attr) = make_attr(ATTR_REQUESTEDIT); ;}
break;
- case 118:
-#line 502 "parser.y"
+ case 119:
+#line 517 "parser.y"
{ (yyval.attr) = make_attr(ATTR_RESTRICTED); ;}
break;
- case 119:
-#line 503 "parser.y"
+ case 120:
+#line 518 "parser.y"
{ (yyval.attr) = make_attr(ATTR_RETVAL); ;}
break;
- case 120:
-#line 504 "parser.y"
+ case 121:
+#line 519 "parser.y"
{ (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); ;}
break;
- case 121:
-#line 505 "parser.y"
+ case 122:
+#line 520 "parser.y"
{ (yyval.attr) = make_attr(ATTR_SOURCE); ;}
break;
- case 122:
-#line 506 "parser.y"
+ case 123:
+#line 521 "parser.y"
{ (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); ;}
break;
- case 123:
-#line 507 "parser.y"
+ case 124:
+#line 522 "parser.y"
{ (yyval.attr) = make_attr(ATTR_STRING); ;}
break;
- case 124:
-#line 508 "parser.y"
+ case 125:
+#line 523 "parser.y"
{ (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); ;}
break;
- case 125:
-#line 509 "parser.y"
+ case 126:
+#line 524 "parser.y"
{ (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); ;}
break;
- case 126:
-#line 510 "parser.y"
+ case 127:
+#line 525 "parser.y"
{ (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); ;}
break;
- case 127:
-#line 511 "parser.y"
+ case 128:
+#line 526 "parser.y"
{ (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); ;}
break;
- case 128:
-#line 512 "parser.y"
+ case 129:
+#line 527 "parser.y"
{ (yyval.attr) = make_attr(ATTR_V1ENUM); ;}
break;
- case 129:
-#line 513 "parser.y"
+ case 130:
+#line 528 "parser.y"
{ (yyval.attr) = make_attr(ATTR_VARARG); ;}
break;
- case 130:
-#line 514 "parser.y"
+ case 131:
+#line 529 "parser.y"
{ (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); ;}
break;
- case 131:
-#line 515 "parser.y"
+ case 132:
+#line 530 "parser.y"
{ (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); ;}
break;
- case 132:
-#line 516 "parser.y"
+ case 133:
+#line 531 "parser.y"
{ (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); ;}
break;
- case 134:
-#line 521 "parser.y"
+ case 135:
+#line 536 "parser.y"
{ if (!is_valid_uuid((yyvsp[0].str)))
error_loc("invalid UUID: %s\n", (yyvsp[0].str));
(yyval.uuid) = parse_uuid((yyvsp[0].str)); ;}
break;
- case 135:
-#line 526 "parser.y"
- { (yyval.str) = (yyvsp[0].str); ;}
- break;
-
case 136:
-#line 527 "parser.y"
+#line 541 "parser.y"
{ (yyval.str) = (yyvsp[0].str); ;}
break;
case 137:
-#line 528 "parser.y"
+#line 542 "parser.y"
{ (yyval.str) = (yyvsp[0].str); ;}
break;
case 138:
-#line 529 "parser.y"
+#line 543 "parser.y"
{ (yyval.str) = (yyvsp[0].str); ;}
break;
case 139:
-#line 532 "parser.y"
- { (yyval.var_list) = NULL; ;}
+#line 544 "parser.y"
+ { (yyval.str) = (yyvsp[0].str); ;}
break;
case 140:
-#line 533 "parser.y"
- { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); ;}
+#line 547 "parser.y"
+ { (yyval.var_list) = NULL; ;}
break;
case 141:
-#line 536 "parser.y"
+#line 548 "parser.y"
+ { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); ;}
+ break;
+
+ case 142:
+#line 551 "parser.y"
{ attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, (yyvsp[-2].expr) ));
(yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
(yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
;}
break;
- case 142:
-#line 540 "parser.y"
+ case 143:
+#line 555 "parser.y"
{ attr_t *a = make_attr(ATTR_DEFAULT);
(yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
(yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
;}
break;
- case 143:
-#line 546 "parser.y"
+ case 144:
+#line 561 "parser.y"
{ (yyval.var) = reg_const((yyvsp[-2].var));
set_type((yyval.var), (yyvsp[-3].type), NULL, NULL, FALSE);
(yyval.var)->eval = (yyvsp[0].expr);
;}
break;
- case 144:
-#line 552 "parser.y"
+ case 145:
+#line 567 "parser.y"
{ (yyval.var_list) = NULL; ;}
break;
- case 145:
-#line 553 "parser.y"
+ case 146:
+#line 568 "parser.y"
{ (yyval.var_list) = (yyvsp[-1].var_list); ;}
break;
- case 147:
-#line 557 "parser.y"
+ case 148:
+#line 572 "parser.y"
{ if (!(yyvsp[0].var)->eval)
(yyvsp[0].var)->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */);
(yyval.var_list) = append_var( NULL, (yyvsp[0].var) );
;}
break;
- case 148:
-#line 561 "parser.y"
+ case 149:
+#line 576 "parser.y"
{ if (!(yyvsp[0].var)->eval)
{
var_t *last = LIST_ENTRY( list_tail((yyval.var_list)), var_t, entry );
@@ -2908,23 +2927,23 @@ yyreduce:
;}
break;
- case 149:
-#line 570 "parser.y"
+ case 150:
+#line 585 "parser.y"
{ (yyval.var) = reg_const((yyvsp[-2].var));
(yyval.var)->eval = (yyvsp[0].expr);
(yyval.var)->type = make_int(0);
;}
break;
- case 150:
-#line 574 "parser.y"
+ case 151:
+#line 589 "parser.y"
{ (yyval.var) = reg_const((yyvsp[0].var));
(yyval.var)->type = make_int(0);
;}
break;
- case 151:
-#line 579 "parser.y"
+ case 152:
+#line 594 "parser.y"
{ (yyval.type) = get_typev(RPC_FC_ENUM16, (yyvsp[-3].var), tsENUM);
(yyval.type)->kind = TKIND_ENUM;
(yyval.type)->fields_or_args = (yyvsp[-1].var_list);
@@ -2934,256 +2953,253 @@ yyreduce:
;}
break;
- case 152:
-#line 588 "parser.y"
- { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); ;}
- break;
-
case 153:
-#line 589 "parser.y"
- { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); ;}
+#line 603 "parser.y"
+ { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); ;}
break;
case 154:
-#line 602 "parser.y"
- { (yyval.expr) = make_expr(EXPR_VOID); ;}
- break;
-
- case 156:
-#line 606 "parser.y"
- { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); ;}
- break;
-
- case 157:
-#line 607 "parser.y"
- { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); ;}
- break;
-
- case 158:
-#line 608 "parser.y"
- { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); ;}
- break;
-
- case 159:
-#line 609 "parser.y"
- { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); ;}
- break;
-
- case 160:
-#line 610 "parser.y"
- { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); ;}
- break;
-
- case 161:
-#line 611 "parser.y"
- { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); ;}
- break;
-
- case 162:
-#line 612 "parser.y"
- { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
- break;
-
- case 163:
-#line 613 "parser.y"
- { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
- break;
-
- case 164:
-#line 614 "parser.y"
- { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
- break;
-
- case 165:
-#line 615 "parser.y"
- { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
- break;
-
- case 166:
-#line 616 "parser.y"
- { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
- break;
-
- case 167:
-#line 617 "parser.y"
- { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
- break;
-
- case 168:
-#line 618 "parser.y"
- { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
- break;
-
- case 169:
-#line 619 "parser.y"
- { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
- break;
-
- case 170:
-#line 620 "parser.y"
- { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
- break;
-
- case 171:
-#line 621 "parser.y"
- { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); ;}
- break;
-
- case 172:
-#line 622 "parser.y"
- { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); ;}
- break;
-
- case 173:
-#line 623 "parser.y"
- { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); ;}
- break;
-
- case 174:
-#line 624 "parser.y"
- { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); ;}
- break;
-
- case 175:
-#line 625 "parser.y"
- { (yyval.expr) = make_exprt(EXPR_CAST, (yyvsp[-2].type), (yyvsp[0].expr)); ;}
- break;
-
- case 176:
-#line 626 "parser.y"
- { (yyval.expr) = make_exprt(EXPR_SIZEOF, (yyvsp[-1].type), NULL); ;}
- break;
-
- case 177:
-#line 627 "parser.y"
- { (yyval.expr) = (yyvsp[-1].expr); ;}
- break;
-
- case 178:
-#line 630 "parser.y"
- { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); ;}
- break;
-
- case 179:
-#line 631 "parser.y"
+#line 604 "parser.y"
{ (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); ;}
break;
- case 180:
+ case 155:
+#line 617 "parser.y"
+ { (yyval.expr) = make_expr(EXPR_VOID); ;}
+ break;
+
+ case 157:
+#line 621 "parser.y"
+ { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); ;}
+ break;
+
+ case 158:
+#line 622 "parser.y"
+ { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); ;}
+ break;
+
+ case 159:
+#line 623 "parser.y"
+ { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); ;}
+ break;
+
+ case 160:
+#line 624 "parser.y"
+ { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); ;}
+ break;
+
+ case 161:
+#line 625 "parser.y"
+ { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); ;}
+ break;
+
+ case 162:
+#line 626 "parser.y"
+ { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); ;}
+ break;
+
+ case 163:
+#line 627 "parser.y"
+ { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+ break;
+
+ case 164:
+#line 628 "parser.y"
+ { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+ break;
+
+ case 165:
+#line 629 "parser.y"
+ { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+ break;
+
+ case 166:
+#line 630 "parser.y"
+ { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+ break;
+
+ case 167:
+#line 631 "parser.y"
+ { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+ break;
+
+ case 168:
+#line 632 "parser.y"
+ { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+ break;
+
+ case 169:
+#line 633 "parser.y"
+ { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+ break;
+
+ case 170:
#line 634 "parser.y"
+ { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+ break;
+
+ case 171:
+#line 635 "parser.y"
+ { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
+ break;
+
+ case 172:
+#line 636 "parser.y"
+ { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); ;}
+ break;
+
+ case 173:
+#line 637 "parser.y"
+ { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); ;}
+ break;
+
+ case 174:
+#line 638 "parser.y"
+ { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); ;}
+ break;
+
+ case 175:
+#line 639 "parser.y"
+ { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); ;}
+ break;
+
+ case 176:
+#line 640 "parser.y"
+ { (yyval.expr) = make_exprt(EXPR_CAST, (yyvsp[-2].type), (yyvsp[0].expr)); ;}
+ break;
+
+ case 177:
+#line 641 "parser.y"
+ { (yyval.expr) = make_exprt(EXPR_SIZEOF, (yyvsp[-1].type), NULL); ;}
+ break;
+
+ case 178:
+#line 642 "parser.y"
+ { (yyval.expr) = (yyvsp[-1].expr); ;}
+ break;
+
+ case 179:
+#line 645 "parser.y"
+ { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); ;}
+ break;
+
+ case 180:
+#line 646 "parser.y"
+ { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); ;}
+ break;
+
+ case 181:
+#line 649 "parser.y"
{ (yyval.expr) = (yyvsp[0].expr);
if (!(yyval.expr)->is_const)
error_loc("expression is not constant\n");
;}
break;
- case 181:
-#line 640 "parser.y"
+ case 182:
+#line 655 "parser.y"
{ (yyval.var) = (yyvsp[0].var);
set_type((yyval.var), (yyvsp[-1].type), NULL, NULL, FALSE);
;}
break;
- case 182:
-#line 645 "parser.y"
+ case 183:
+#line 660 "parser.y"
{ (yyval.var_list) = NULL; ;}
break;
- case 183:
-#line 646 "parser.y"
+ case 184:
+#line 661 "parser.y"
{ (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); ;}
break;
- case 184:
-#line 649 "parser.y"
+ case 185:
+#line 664 "parser.y"
{ (yyval.var) = (yyvsp[-1].var); ;}
break;
- case 185:
-#line 650 "parser.y"
+ case 186:
+#line 665 "parser.y"
{ (yyval.var) = make_var(NULL); (yyval.var)->type = (yyvsp[-1].type); (yyval.var)->attrs = (yyvsp[-2].attr_list); ;}
break;
- case 186:
-#line 651 "parser.y"
+ case 187:
+#line 666 "parser.y"
{ (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); ;}
break;
- case 187:
-#line 652 "parser.y"
+ case 188:
+#line 667 "parser.y"
{ (yyval.var) = NULL; ;}
break;
- case 188:
-#line 655 "parser.y"
+ case 189:
+#line 670 "parser.y"
{ (yyval.var) = (yyvsp[-1].pident)->var;
- (yyval.var)->attrs = (yyvsp[-3].attr_list);
+ (yyval.var)->attrs = check_field_attrs((yyval.var)->name, (yyvsp[-3].attr_list));
set_type((yyval.var), (yyvsp[-2].type), (yyvsp[-1].pident), (yyvsp[0].array_dims), FALSE);
free((yyvsp[-1].pident));
;}
break;
- case 189:
-#line 663 "parser.y"
+ case 190:
+#line 678 "parser.y"
{ var_t *v = (yyvsp[0].pident)->var;
var_list_t *args = (yyvsp[0].pident)->args;
- v->attrs = (yyvsp[-2].attr_list);
+ v->attrs = check_function_attrs(v->name, (yyvsp[-2].attr_list));
set_type(v, (yyvsp[-1].type), (yyvsp[0].pident), NULL, FALSE);
free((yyvsp[0].pident));
(yyval.func) = make_func(v, args);
- if (is_attr(v->attrs, ATTR_IN)) {
- error_loc("inapplicable attribute [in] for function '%s'\n",(yyval.func)->def->name);
- }
;}
break;
- case 190:
-#line 675 "parser.y"
- { (yyval.var) = NULL; ;}
- break;
-
- case 192:
-#line 679 "parser.y"
+ case 191:
+#line 687 "parser.y"
{ (yyval.var) = NULL; ;}
break;
case 193:
-#line 680 "parser.y"
- { (yyval.var) = make_var((yyvsp[0].str)); ;}
+#line 691 "parser.y"
+ { (yyval.var) = NULL; ;}
break;
case 194:
-#line 681 "parser.y"
+#line 692 "parser.y"
{ (yyval.var) = make_var((yyvsp[0].str)); ;}
break;
case 195:
-#line 684 "parser.y"
+#line 693 "parser.y"
{ (yyval.var) = make_var((yyvsp[0].str)); ;}
break;
case 196:
-#line 686 "parser.y"
+#line 696 "parser.y"
{ (yyval.var) = make_var((yyvsp[0].str)); ;}
break;
case 197:
-#line 689 "parser.y"
- { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
+#line 698 "parser.y"
+ { (yyval.var) = make_var((yyvsp[0].str)); ;}
break;
case 198:
-#line 690 "parser.y"
+#line 701 "parser.y"
{ (yyval.type) = make_builtin((yyvsp[0].str)); ;}
break;
- case 200:
-#line 692 "parser.y"
- { (yyval.type) = (yyvsp[0].type); (yyval.type)->sign = 1; ;}
+ case 199:
+#line 702 "parser.y"
+ { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
break;
case 201:
-#line 693 "parser.y"
+#line 704 "parser.y"
+ { (yyval.type) = (yyvsp[0].type); (yyval.type)->sign = 1; ;}
+ break;
+
+ case 202:
+#line 705 "parser.y"
{ (yyval.type) = (yyvsp[0].type); (yyval.type)->sign = -1;
switch ((yyval.type)->type) {
case RPC_FC_CHAR: break;
@@ -3202,93 +3218,93 @@ yyreduce:
;}
break;
- case 202:
-#line 709 "parser.y"
+ case 203:
+#line 721 "parser.y"
{ (yyval.type) = make_int(-1); ;}
break;
- case 203:
-#line 710 "parser.y"
- { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
- break;
-
case 204:
-#line 711 "parser.y"
- { (yyval.type) = duptype(find_type("float", 0), 1); ;}
- break;
-
- case 205:
-#line 712 "parser.y"
- { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
- break;
-
- case 206:
-#line 713 "parser.y"
- { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
- break;
-
- case 207:
-#line 714 "parser.y"
- { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
- break;
-
- case 208:
-#line 715 "parser.y"
- { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
- break;
-
- case 211:
#line 722 "parser.y"
{ (yyval.type) = make_builtin((yyvsp[0].str)); ;}
break;
- case 212:
+ case 205:
#line 723 "parser.y"
- { (yyval.type) = make_builtin((yyvsp[-1].str)); ;}
+ { (yyval.type) = duptype(find_type("float", 0), 1); ;}
break;
- case 213:
+ case 206:
#line 724 "parser.y"
{ (yyval.type) = make_builtin((yyvsp[0].str)); ;}
break;
- case 214:
+ case 207:
#line 725 "parser.y"
- { (yyval.type) = make_builtin((yyvsp[-1].str)); ;}
+ { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
break;
- case 215:
+ case 208:
#line 726 "parser.y"
- { (yyval.type) = make_builtin((yyvsp[-1].str)); ;}
+ { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
break;
- case 216:
+ case 209:
#line 727 "parser.y"
{ (yyval.type) = make_builtin((yyvsp[0].str)); ;}
break;
+ case 212:
+#line 734 "parser.y"
+ { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
+ break;
+
+ case 213:
+#line 735 "parser.y"
+ { (yyval.type) = make_builtin((yyvsp[-1].str)); ;}
+ break;
+
+ case 214:
+#line 736 "parser.y"
+ { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
+ break;
+
+ case 215:
+#line 737 "parser.y"
+ { (yyval.type) = make_builtin((yyvsp[-1].str)); ;}
+ break;
+
+ case 216:
+#line 738 "parser.y"
+ { (yyval.type) = make_builtin((yyvsp[-1].str)); ;}
+ break;
+
case 217:
-#line 728 "parser.y"
+#line 739 "parser.y"
{ (yyval.type) = make_builtin((yyvsp[0].str)); ;}
break;
case 218:
-#line 731 "parser.y"
- { (yyval.type) = make_class((yyvsp[0].str)); ;}
+#line 740 "parser.y"
+ { (yyval.type) = make_builtin((yyvsp[0].str)); ;}
break;
case 219:
-#line 732 "parser.y"
+#line 743 "parser.y"
+ { (yyval.type) = make_class((yyvsp[0].str)); ;}
+ break;
+
+ case 220:
+#line 744 "parser.y"
{ (yyval.type) = find_type((yyvsp[0].str), 0);
if ((yyval.type)->defined) error_loc("multiple definition error\n");
if ((yyval.type)->kind != TKIND_COCLASS) error_loc("%s was not declared a coclass\n", (yyvsp[0].str));
;}
break;
- case 220:
-#line 738 "parser.y"
+ case 221:
+#line 750 "parser.y"
{ (yyval.type) = (yyvsp[0].type);
- (yyval.type)->attrs = (yyvsp[-1].attr_list);
+ (yyval.type)->attrs = check_coclass_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
if (!parse_only && do_header)
write_coclass((yyval.type));
if (!parse_only && do_idfile)
@@ -3296,47 +3312,47 @@ yyreduce:
;}
break;
- case 221:
-#line 748 "parser.y"
+ case 222:
+#line 760 "parser.y"
{ (yyval.type) = (yyvsp[-4].type);
(yyval.type)->ifaces = (yyvsp[-2].ifref_list);
(yyval.type)->defined = TRUE;
;}
break;
- case 222:
-#line 754 "parser.y"
+ case 223:
+#line 766 "parser.y"
{ (yyval.ifref_list) = NULL; ;}
break;
- case 223:
-#line 755 "parser.y"
+ case 224:
+#line 767 "parser.y"
{ (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), (yyvsp[0].ifref) ); ;}
break;
- case 224:
-#line 759 "parser.y"
+ case 225:
+#line 771 "parser.y"
{ (yyval.ifref) = make_ifref((yyvsp[0].type)); (yyval.ifref)->attrs = (yyvsp[-1].attr_list); ;}
break;
- case 225:
-#line 762 "parser.y"
- { (yyval.type) = get_type(0, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_DISPATCH; ;}
- break;
-
case 226:
-#line 763 "parser.y"
+#line 774 "parser.y"
{ (yyval.type) = get_type(0, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_DISPATCH; ;}
break;
case 227:
-#line 766 "parser.y"
+#line 775 "parser.y"
+ { (yyval.type) = get_type(0, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_DISPATCH; ;}
+ break;
+
+ case 228:
+#line 778 "parser.y"
{ attr_t *attrs;
is_object_interface = TRUE;
(yyval.type) = (yyvsp[0].type);
if ((yyval.type)->defined) error_loc("multiple definition error\n");
attrs = make_attr(ATTR_DISPINTERFACE);
- (yyval.type)->attrs = append_attr( (yyvsp[-1].attr_list), attrs );
+ (yyval.type)->attrs = append_attr( check_dispiface_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list)), attrs );
(yyval.type)->ref = find_type("IDispatch", 0);
if (!(yyval.type)->ref) error_loc("IDispatch is undefined\n");
(yyval.type)->defined = TRUE;
@@ -3344,28 +3360,28 @@ yyreduce:
;}
break;
- case 228:
-#line 779 "parser.y"
+ case 229:
+#line 791 "parser.y"
{ (yyval.var_list) = NULL; ;}
break;
- case 229:
-#line 780 "parser.y"
+ case 230:
+#line 792 "parser.y"
{ (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); ;}
break;
- case 230:
-#line 783 "parser.y"
+ case 231:
+#line 795 "parser.y"
{ (yyval.func_list) = NULL; ;}
break;
- case 231:
-#line 784 "parser.y"
+ case 232:
+#line 796 "parser.y"
{ (yyval.func_list) = append_func( (yyvsp[-2].func_list), (yyvsp[-1].func) ); ;}
break;
- case 232:
-#line 790 "parser.y"
+ case 233:
+#line 802 "parser.y"
{ (yyval.type) = (yyvsp[-4].type);
(yyval.type)->fields_or_args = (yyvsp[-2].var_list);
(yyval.type)->funcs = (yyvsp[-1].func_list);
@@ -3374,8 +3390,8 @@ yyreduce:
;}
break;
- case 233:
-#line 797 "parser.y"
+ case 234:
+#line 809 "parser.y"
{ (yyval.type) = (yyvsp[-4].type);
(yyval.type)->fields_or_args = (yyvsp[-2].type)->fields_or_args;
(yyval.type)->funcs = (yyvsp[-2].type)->funcs;
@@ -3384,45 +3400,46 @@ yyreduce:
;}
break;
- case 234:
-#line 805 "parser.y"
+ case 235:
+#line 817 "parser.y"
{ (yyval.type) = NULL; ;}
break;
- case 235:
-#line 806 "parser.y"
+ case 236:
+#line 818 "parser.y"
{ (yyval.type) = find_type2((yyvsp[0].str), 0); ;}
break;
- case 236:
-#line 809 "parser.y"
- { (yyval.type) = get_type(RPC_FC_IP, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_INTERFACE; ;}
- break;
-
case 237:
-#line 810 "parser.y"
+#line 821 "parser.y"
{ (yyval.type) = get_type(RPC_FC_IP, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_INTERFACE; ;}
break;
case 238:
-#line 813 "parser.y"
+#line 822 "parser.y"
+ { (yyval.type) = get_type(RPC_FC_IP, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_INTERFACE; ;}
+ break;
+
+ case 239:
+#line 825 "parser.y"
{ (yyval.ifinfo).interface = (yyvsp[0].type);
(yyval.ifinfo).old_pointer_default = pointer_default;
if (is_attr((yyvsp[-1].attr_list), ATTR_POINTERDEFAULT))
pointer_default = get_attrv((yyvsp[-1].attr_list), ATTR_POINTERDEFAULT);
is_object_interface = is_object((yyvsp[-1].attr_list));
if ((yyvsp[0].type)->defined) error_loc("multiple definition error\n");
- (yyvsp[0].type)->attrs = (yyvsp[-1].attr_list);
+ (yyvsp[0].type)->attrs = check_iface_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
(yyvsp[0].type)->defined = TRUE;
if (!parse_only && do_header) write_forward((yyvsp[0].type));
;}
break;
- case 239:
-#line 826 "parser.y"
+ case 240:
+#line 838 "parser.y"
{ (yyval.type) = (yyvsp[-5].ifinfo).interface;
(yyval.type)->ref = (yyvsp[-4].type);
(yyval.type)->funcs = (yyvsp[-2].func_list);
+ check_functions((yyval.type));
compute_method_indexes((yyval.type));
if (!parse_only && do_header) write_interface((yyval.type));
if (!parse_only && local_stubs) write_locals(local_stubs, (yyval.type), TRUE);
@@ -3431,8 +3448,8 @@ yyreduce:
;}
break;
- case 240:
-#line 839 "parser.y"
+ case 241:
+#line 852 "parser.y"
{ (yyval.type) = (yyvsp[-7].ifinfo).interface;
(yyval.type)->ref = find_type2((yyvsp[-5].str), 0);
if (!(yyval.type)->ref) error_loc("base class '%s' not found in import\n", (yyvsp[-5].str));
@@ -3445,117 +3462,117 @@ yyreduce:
;}
break;
- case 241:
-#line 849 "parser.y"
+ case 242:
+#line 862 "parser.y"
{ (yyval.type) = (yyvsp[-1].type); ;}
break;
- case 242:
-#line 853 "parser.y"
- { (yyval.type) = (yyvsp[-1].type); if (!parse_only && do_header) write_forward((yyval.type)); ;}
- break;
-
case 243:
-#line 854 "parser.y"
+#line 866 "parser.y"
{ (yyval.type) = (yyvsp[-1].type); if (!parse_only && do_header) write_forward((yyval.type)); ;}
break;
case 244:
-#line 857 "parser.y"
- { (yyval.type) = make_type(0, NULL); (yyval.type)->name = (yyvsp[0].str); (yyval.type)->kind = TKIND_MODULE; ;}
+#line 867 "parser.y"
+ { (yyval.type) = (yyvsp[-1].type); if (!parse_only && do_header) write_forward((yyval.type)); ;}
break;
case 245:
-#line 858 "parser.y"
+#line 870 "parser.y"
{ (yyval.type) = make_type(0, NULL); (yyval.type)->name = (yyvsp[0].str); (yyval.type)->kind = TKIND_MODULE; ;}
break;
case 246:
-#line 861 "parser.y"
- { (yyval.type) = (yyvsp[0].type);
- (yyval.type)->attrs = (yyvsp[-1].attr_list);
- ;}
+#line 871 "parser.y"
+ { (yyval.type) = make_type(0, NULL); (yyval.type)->name = (yyvsp[0].str); (yyval.type)->kind = TKIND_MODULE; ;}
break;
case 247:
-#line 867 "parser.y"
+#line 874 "parser.y"
+ { (yyval.type) = (yyvsp[0].type);
+ (yyval.type)->attrs = check_module_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
+ ;}
+ break;
+
+ case 248:
+#line 880 "parser.y"
{ (yyval.type) = (yyvsp[-4].type);
(yyval.type)->funcs = (yyvsp[-2].func_list);
/* FIXME: if (!parse_only && do_header) write_module($$); */
;}
break;
- case 248:
-#line 873 "parser.y"
+ case 249:
+#line 886 "parser.y"
{ (yyval.pident) = (yyvsp[0].pident); (yyval.pident)->ptr_level++; ;}
break;
- case 249:
-#line 874 "parser.y"
+ case 250:
+#line 887 "parser.y"
{ (yyval.pident) = (yyvsp[0].pident); /* FIXME */ ;}
break;
- case 250:
-#line 875 "parser.y"
+ case 251:
+#line 888 "parser.y"
{ (yyval.pident) = (yyvsp[0].pident);
if ((yyval.pident)->callconv) parser_warning("multiple calling conventions %s, %s for function %s\n", (yyval.pident)->callconv, (yyvsp[-1].str), (yyval.pident)->var->name);
(yyval.pident)->callconv = (yyvsp[-1].str);
;}
break;
- case 252:
-#line 883 "parser.y"
+ case 253:
+#line 896 "parser.y"
{ (yyval.pident) = (yyvsp[-3].pident);
(yyvsp[-3].pident)->args = (yyvsp[-1].var_list);
(yyvsp[-3].pident)->is_func = TRUE;
;}
break;
- case 253:
-#line 889 "parser.y"
+ case 254:
+#line 902 "parser.y"
{ (yyval.pident) = make_pident((yyvsp[0].var)); ;}
break;
- case 254:
-#line 890 "parser.y"
+ case 255:
+#line 903 "parser.y"
{ (yyval.pident) = (yyvsp[-1].pident); ;}
break;
- case 255:
-#line 891 "parser.y"
+ case 256:
+#line 904 "parser.y"
{ (yyval.pident) = (yyvsp[0].pident);
(yyval.pident)->func_ptr_level = (yyval.pident)->ptr_level;
(yyval.pident)->ptr_level = 0;
;}
break;
- case 256:
-#line 898 "parser.y"
+ case 257:
+#line 911 "parser.y"
{ (yyval.pident_list) = append_pident( NULL, (yyvsp[0].pident) ); ;}
break;
- case 257:
-#line 899 "parser.y"
+ case 258:
+#line 912 "parser.y"
{ (yyval.pident_list) = append_pident( (yyvsp[-2].pident_list), (yyvsp[0].pident) ); ;}
break;
- case 258:
-#line 903 "parser.y"
+ case 259:
+#line 916 "parser.y"
{ (yyval.num) = RPC_FC_RP; ;}
break;
- case 259:
-#line 904 "parser.y"
+ case 260:
+#line 917 "parser.y"
{ (yyval.num) = RPC_FC_UP; ;}
break;
- case 260:
-#line 905 "parser.y"
+ case 261:
+#line 918 "parser.y"
{ (yyval.num) = RPC_FC_FP; ;}
break;
- case 261:
-#line 908 "parser.y"
+ case 262:
+#line 921 "parser.y"
{ (yyval.type) = get_typev(RPC_FC_STRUCT, (yyvsp[-3].var), tsSTRUCT);
/* overwrite RPC_FC_STRUCT with a more exact type */
(yyval.type)->type = get_struct_type( (yyvsp[-1].var_list) );
@@ -3567,70 +3584,70 @@ yyreduce:
;}
break;
- case 262:
-#line 919 "parser.y"
+ case 263:
+#line 932 "parser.y"
{ (yyval.type) = duptype(find_type("void", 0), 1); ;}
break;
- case 263:
-#line 920 "parser.y"
+ case 264:
+#line 933 "parser.y"
{ (yyval.type) = find_type((yyvsp[0].str), 0); ;}
break;
- case 264:
-#line 921 "parser.y"
- { (yyval.type) = (yyvsp[0].type); ;}
- break;
-
case 265:
-#line 922 "parser.y"
- { (yyval.type) = duptype((yyvsp[0].type), 1); (yyval.type)->is_const = TRUE; ;}
+#line 934 "parser.y"
+ { (yyval.type) = (yyvsp[0].type); ;}
break;
case 266:
-#line 923 "parser.y"
- { (yyval.type) = (yyvsp[0].type); ;}
+#line 935 "parser.y"
+ { (yyval.type) = duptype((yyvsp[0].type), 1); (yyval.type)->is_const = TRUE; ;}
break;
case 267:
-#line 924 "parser.y"
- { (yyval.type) = find_type2((yyvsp[0].str), tsENUM); ;}
+#line 936 "parser.y"
+ { (yyval.type) = (yyvsp[0].type); ;}
break;
case 268:
-#line 925 "parser.y"
- { (yyval.type) = (yyvsp[0].type); ;}
+#line 937 "parser.y"
+ { (yyval.type) = find_type2((yyvsp[0].str), tsENUM); ;}
break;
case 269:
-#line 926 "parser.y"
- { (yyval.type) = get_type(RPC_FC_STRUCT, (yyvsp[0].str), tsSTRUCT); ;}
- break;
-
- case 270:
-#line 927 "parser.y"
+#line 938 "parser.y"
{ (yyval.type) = (yyvsp[0].type); ;}
break;
+ case 270:
+#line 939 "parser.y"
+ { (yyval.type) = get_type(RPC_FC_STRUCT, (yyvsp[0].str), tsSTRUCT); ;}
+ break;
+
case 271:
-#line 928 "parser.y"
- { (yyval.type) = find_type2((yyvsp[0].str), tsUNION); ;}
+#line 940 "parser.y"
+ { (yyval.type) = (yyvsp[0].type); ;}
break;
case 272:
-#line 929 "parser.y"
- { (yyval.type) = make_safearray((yyvsp[-1].type)); ;}
+#line 941 "parser.y"
+ { (yyval.type) = find_type2((yyvsp[0].str), tsUNION); ;}
break;
case 273:
-#line 932 "parser.y"
- { reg_typedefs((yyvsp[-1].type), (yyvsp[0].pident_list), (yyvsp[-2].attr_list));
+#line 942 "parser.y"
+ { (yyval.type) = make_safearray((yyvsp[-1].type)); ;}
+ break;
+
+ case 274:
+#line 945 "parser.y"
+ { reg_typedefs((yyvsp[-1].type), (yyvsp[0].pident_list), check_typedef_attrs((yyvsp[-2].attr_list)));
process_typedefs((yyvsp[0].pident_list));
;}
break;
- case 274:
-#line 937 "parser.y"
+ case 275:
+#line 950 "parser.y"
{ (yyval.type) = get_typev(RPC_FC_NON_ENCAPSULATED_UNION, (yyvsp[-3].var), tsUNION);
(yyval.type)->kind = TKIND_UNION;
(yyval.type)->fields_or_args = (yyvsp[-1].var_list);
@@ -3638,8 +3655,8 @@ yyreduce:
;}
break;
- case 275:
-#line 944 "parser.y"
+ case 276:
+#line 957 "parser.y"
{ var_t *u = (yyvsp[-3].var);
(yyval.type) = get_typev(RPC_FC_ENCAPSULATED_UNION, (yyvsp[-8].var), tsUNION);
(yyval.type)->kind = TKIND_UNION;
@@ -3654,13 +3671,13 @@ yyreduce:
;}
break;
- case 276:
-#line 959 "parser.y"
+ case 277:
+#line 972 "parser.y"
{ (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); ;}
break;
- case 277:
-#line 960 "parser.y"
+ case 278:
+#line 973 "parser.y"
{ (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); ;}
break;
@@ -3669,7 +3686,7 @@ yyreduce:
}
/* Line 1126 of yacc.c. */
-#line 3673 "parser.tab.c"
+#line 3690 "parser.tab.c"
yyvsp -= yylen;
yyssp -= yylen;
@@ -3937,7 +3954,7 @@ yyreturn:
}
-#line 963 "parser.y"
+#line 976 "parser.y"
static void decl_builtin(const char *name, unsigned char type)
@@ -4003,12 +4020,21 @@ static str_list_t *append_str(str_list_t *list, char *str)
static attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
{
+ attr_t *attr_existing;
if (!attr) return list;
if (!list)
{
list = xmalloc( sizeof(*list) );
list_init( list );
}
+ LIST_FOR_EACH_ENTRY(attr_existing, list, attr_t, entry)
+ if (attr_existing->type == attr->type)
+ {
+ parser_warning("duplicate attribute %s\n", get_attr_display_name(attr->type));
+ /* use the last attribute, like MIDL does */
+ list_remove(&attr_existing->entry);
+ break;
+ }
list_add_tail( list, &attr->entry );
return list;
}
@@ -4146,7 +4172,7 @@ static expr_t *make_expr1(enum expr_type type, expr_t *expr)
{
expr_t *e;
if (type == EXPR_ADDRESSOF && expr->type != EXPR_IDENTIFIER)
- error("address-of operator applied to invalid expression\n");
+ error_loc("address-of operator applied to invalid expression\n");
e = xmalloc(sizeof(expr_t));
e->type = type;
e->ref = expr;
@@ -4313,7 +4339,7 @@ static type_t *make_type(unsigned char type, type_t *ref)
}
static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_t *arr,
- int top)
+ int top)
{
expr_list_t *sizes = get_attrp(v->attrs, ATTR_SIZEIS);
expr_list_t *lengs = get_attrp(v->attrs, ATTR_LENGTHIS);
@@ -4350,7 +4376,7 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
}
}
else if (!arr && ptr_attr)
- error("%s: pointer attribute applied to non-pointer type\n", v->name);
+ error_loc("%s: pointer attribute applied to non-pointer type\n", v->name);
}
if (pident && pident->is_func) {
@@ -4372,7 +4398,7 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
if (arr) LIST_FOR_EACH_ENTRY_REV(dim, arr, expr_t, entry)
{
if (sizeless)
- error("%s: only the first array dimension can be unspecified\n", v->name);
+ error_loc("%s: only the first array dimension can be unspecified\n", v->name);
if (dim->is_const)
{
@@ -4380,10 +4406,10 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
size_t size = type_memsize(v->type, &align);
if (dim->cval <= 0)
- error("%s: array dimension must be positive\n", v->name);
+ error_loc("%s: array dimension must be positive\n", v->name);
if (0xffffffffuL / size < (unsigned long) dim->cval)
- error("%s: total array size is too large\n", v->name);
+ error_loc("%s: total array size is too large\n", v->name);
else if (0xffffuL < size * dim->cval)
v->type = make_type(RPC_FC_LGFARRAY, v->type);
else
@@ -4409,10 +4435,10 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
atype = *ptype = duptype(*ptype, 0);
if (atype->type == RPC_FC_SMFARRAY || atype->type == RPC_FC_LGFARRAY)
- error("%s: cannot specify size_is for a fixed sized array\n", v->name);
+ error_loc("%s: cannot specify size_is for a fixed sized array\n", v->name);
if (atype->type != RPC_FC_CARRAY && !is_ptr(atype))
- error("%s: size_is attribute applied to illegal type\n", v->name);
+ error_loc("%s: size_is attribute applied to illegal type\n", v->name);
atype->type = RPC_FC_CARRAY;
atype->size_is = dim;
@@ -4420,7 +4446,7 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
ptype = &(*ptype)->ref;
if (*ptype == NULL)
- error("%s: too many expressions in size_is attribute\n", v->name);
+ error_loc("%s: too many expressions in size_is attribute\n", v->name);
}
ptype = &v->type;
@@ -4438,14 +4464,14 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
else if (atype->type == RPC_FC_CARRAY)
atype->type = RPC_FC_CVARRAY;
else
- error("%s: length_is attribute applied to illegal type\n", v->name);
+ error_loc("%s: length_is attribute applied to illegal type\n", v->name);
atype->length_is = dim;
}
ptype = &(*ptype)->ref;
if (*ptype == NULL)
- error("%s: too many expressions in length_is attribute\n", v->name);
+ error_loc("%s: too many expressions in length_is attribute\n", v->name);
}
if (has_varconf && !last_array(v->type))
@@ -4521,6 +4547,9 @@ static var_t *make_var(char *name)
v->type = NULL;
v->attrs = NULL;
v->eval = NULL;
+ v->loc_info.input_name = input_name ? input_name : "stdin";
+ v->loc_info.line_number = line_number;
+ v->loc_info.near_text = parser_text;
return v;
}
@@ -5092,12 +5121,287 @@ static void process_typedefs(pident_list_t *pidents)
}
}
+struct allowed_attr
+{
+ unsigned int dce_compatible : 1;
+ unsigned int acf : 1;
+ unsigned int on_interface : 1;
+ unsigned int on_function : 1;
+ unsigned int on_arg : 1;
+ unsigned int on_type : 1;
+ unsigned int on_field : 1;
+ unsigned int on_library : 1;
+ unsigned int on_dispinterface : 1;
+ unsigned int on_module : 1;
+ unsigned int on_coclass : 1;
+ const char *display_name;
+};
+
+struct allowed_attr allowed_attr[] =
+{
+ /* attr { D ACF I Fn ARG T Fi L DI M C } */
+ /* ATTR_AGGREGATABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "aggregatable" },
+ /* ATTR_APPOBJECT */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "appobject" },
+ /* ATTR_ASYNC */ { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, "async" },
+ /* ATTR_AUTO_HANDLE */ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, "auto_handle" },
+ /* ATTR_BINDABLE */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "bindable" },
+ /* ATTR_BROADCAST */ { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "broadcast" },
+ /* ATTR_CALLAS */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "call_as" },
+ /* ATTR_CALLCONV */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
+ /* ATTR_CASE */ { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "case" },
+ /* ATTR_CONTEXTHANDLE */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "context_handle" },
+ /* ATTR_CONTROL */ { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, "control" },
+ /* ATTR_DEFAULT */ { 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, "default" },
+ /* ATTR_DEFAULTCOLLELEM */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "defaultcollelem" },
+ /* ATTR_DEFAULTVALUE_EXPR */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "defaultvalue" },
+ /* ATTR_DEFAULTVALUE_STRING */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "defaultvalue" },
+ /* ATTR_DEFAULTVTABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "defaultvtable" },
+ /* ATTR_DISPINTERFACE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
+ /* ATTR_DISPLAYBIND */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "displaybind" },
+ /* ATTR_DLLNAME */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "dllname" },
+ /* ATTR_DUAL */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "dual" },
+ /* ATTR_ENDPOINT */ { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "endpoint" },
+ /* ATTR_ENTRY_ORDINAL */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "entry" },
+ /* ATTR_ENTRY_STRING */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "entry" },
+ /* ATTR_EXPLICIT_HANDLE */ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, "explicit_handle" },
+ /* ATTR_HANDLE */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "handle" },
+ /* ATTR_HELPCONTEXT */ { 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, "helpcontext" },
+ /* ATTR_HELPFILE */ { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "helpfile" },
+ /* ATTR_HELPSTRING */ { 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, "helpstring" },
+ /* ATTR_HELPSTRINGCONTEXT */ { 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, "helpstringcontext" },
+ /* ATTR_HELPSTRINGDLL */ { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "helpstringdll" },
+ /* ATTR_HIDDEN */ { 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, "hidden" },
+ /* ATTR_ID */ { 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, "id" },
+ /* ATTR_IDEMPOTENT */ { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "idempotent" },
+ /* ATTR_IIDIS */ { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "iid_is" },
+ /* ATTR_IMMEDIATEBIND */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "immediatebind" },
+ /* ATTR_IMPLICIT_HANDLE */ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, "implicit_handle" },
+ /* ATTR_IN */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "in" },
+ /* ATTR_INPUTSYNC */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inputsync" },
+ /* ATTR_LENGTHIS */ { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "length_is" },
+ /* ATTR_LOCAL */ { 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, "local" },
+ /* ATTR_NONBROWSABLE */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "nonbrowsable" },
+ /* ATTR_NONCREATABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "noncreatable" },
+ /* ATTR_NONEXTENSIBLE */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "nonextensible" },
+ /* ATTR_OBJECT */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "object" },
+ /* ATTR_ODL */ { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, "odl" },
+ /* ATTR_OLEAUTOMATION */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "oleautomation" },
+ /* ATTR_OPTIONAL */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "optional" },
+ /* ATTR_OUT */ { 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "out" },
+ /* ATTR_POINTERDEFAULT */ { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "pointer_default" },
+ /* ATTR_POINTERTYPE */ { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, "ref, unique or ptr" },
+ /* ATTR_PROPGET */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "propget" },
+ /* ATTR_PROPPUT */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "propput" },
+ /* ATTR_PROPPUTREF */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "propputref" },
+ /* ATTR_PUBLIC */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "public" },
+ /* ATTR_RANGE */ { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, "range" },
+ /* ATTR_READONLY */ { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "readonly" },
+ /* ATTR_REQUESTEDIT */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "requestedit" },
+ /* ATTR_RESTRICTED */ { 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, "restricted" },
+ /* ATTR_RETVAL */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "retval" },
+ /* ATTR_SIZEIS */ { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "size_is" },
+ /* ATTR_SOURCE */ { 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, "source" },
+ /* ATTR_STRICTCONTEXTHANDLE */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "strict_context_handle" },
+ /* ATTR_STRING */ { 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, "string" },
+ /* ATTR_SWITCHIS */ { 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "switch_is" },
+ /* ATTR_SWITCHTYPE */ { 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, "switch_type" },
+ /* ATTR_TRANSMITAS */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "transmit_as" },
+ /* ATTR_UUID */ { 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, "uuid" },
+ /* ATTR_V1ENUM */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "v1_enum" },
+ /* ATTR_VARARG */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "vararg" },
+ /* ATTR_VERSION */ { 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, "version" },
+ /* ATTR_WIREMARSHAL */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "wire_marshal" },
+};
+
+const char *get_attr_display_name(enum attr_type type)
+{
+ return allowed_attr[type].display_name;
+}
+
+static const attr_list_t *check_iface_attrs(const char *name, const attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_interface)
+ error_loc("inapplicable attribute %s for interface %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+static attr_list_t *check_function_attrs(const char *name, attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_function)
+ error_loc("inapplicable attribute %s for function %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
static void check_arg(var_t *arg)
{
- type_t *t = arg->type;
+ const type_t *t = arg->type;
+ const attr_t *attr;
if (t->type == 0 && ! is_var_ptr(arg))
error_loc("argument '%s' has void type\n", arg->name);
+
+ if (arg->attrs)
+ {
+ LIST_FOR_EACH_ENTRY(attr, arg->attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_arg)
+ error_loc("inapplicable attribute %s for argument %s\n",
+ allowed_attr[attr->type].display_name, arg->name);
+ }
+ }
+}
+
+static attr_list_t *check_typedef_attrs(attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_type)
+ error_loc("inapplicable attribute %s for typedef\n",
+ allowed_attr[attr->type].display_name);
+ }
+ return attrs;
+}
+
+static attr_list_t *check_field_attrs(const char *name, attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_field)
+ error_loc("inapplicable attribute %s for field %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+static const attr_list_t *check_library_attrs(const char *name, const attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_library)
+ error_loc("inapplicable attribute %s for library %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+static attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_dispinterface)
+ error_loc("inapplicable attribute %s for dispinterface %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+static const attr_list_t *check_module_attrs(const char *name, const attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_module)
+ error_loc("inapplicable attribute %s for module %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+static const attr_list_t *check_coclass_attrs(const char *name, const attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_coclass)
+ error_loc("inapplicable attribute %s for coclass %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+/* checks that arguments for a function make sense for marshalling and unmarshalling */
+static void check_remoting_args(const func_t *func)
+{
+ const char *funcname = func->def->name;
+ const var_t *arg;
+
+ if (func->args) LIST_FOR_EACH_ENTRY( arg, func->args, const var_t, entry )
+ {
+ int ptr_level = 0;
+ const type_t *type = arg->type;
+ int is_wire_marshal = 0;
+ int is_context_handle = 0;
+
+ /* get pointer level and fundamental type for the argument */
+ for (;;)
+ {
+ if (!is_wire_marshal && is_attr(type->attrs, ATTR_WIREMARSHAL))
+ is_wire_marshal = 1;
+ if (!is_context_handle && is_attr(type->attrs, ATTR_CONTEXTHANDLE))
+ is_context_handle = 1;
+ if (type->kind == TKIND_ALIAS)
+ type = type->orig;
+ else if (is_ptr(type))
+ {
+ ptr_level++;
+ type = type->ref;
+ }
+ else
+ break;
+ }
+
+ /* check that [out] parameters have enough pointer levels */
+ if (is_attr(arg->attrs, ATTR_OUT))
+ {
+ if (!is_array(type))
+ {
+ if (!ptr_level)
+ error_loc_info(&arg->loc_info, "out parameter \'%s\' of function \'%s\' is not a pointer\n", arg->name, funcname);
+ if (type->type == RPC_FC_IP && ptr_level == 1)
+ error_loc_info(&arg->loc_info, "out interface pointer \'%s\' of function \'%s\' is not a double pointer\n", arg->name, funcname);
+ }
+ }
+
+ if (type->type == 0 && !is_attr(arg->attrs, ATTR_IIDIS) && !is_wire_marshal && !is_context_handle)
+ error_loc_info(&arg->loc_info, "parameter \'%s\' of function \'%s\' cannot derive from void *\n", arg->name, funcname);
+ else if (type->type == RPC_FC_FUNCTION)
+ error_loc_info(&arg->loc_info, "parameter \'%s\' of function \'%s\' cannot be a function pointer\n", arg->name, funcname);
+ }
+}
+
+static void check_functions(const type_t *iface)
+{
+ if (!is_inside_library && !is_attr(iface->attrs, ATTR_LOCAL))
+ {
+ const func_t *func;
+ if (iface->funcs) LIST_FOR_EACH_ENTRY( func, iface->funcs, const func_t, entry )
+ {
+ if (!is_attr(func->def->attrs, ATTR_LOCAL))
+ check_remoting_args(func);
+ }
+ }
}
static void check_all_user_types(ifref_list_t *ifrefs)
diff --git a/reactos/tools/widl/parser.tab.h b/reactos/tools/widl/parser.tab.h
index f6cd0802337..c0b5e9f7a35 100644
--- a/reactos/tools/widl/parser.tab.h
+++ b/reactos/tools/widl/parser.tab.h
@@ -309,7 +309,7 @@
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 139 "parser.y"
+#line 151 "parser.y"
typedef union YYSTYPE {
attr_t *attr;
attr_list_t *attr_list;
diff --git a/reactos/tools/widl/parser.y b/reactos/tools/widl/parser.y
index 46418a33049..5d00305c5c2 100644
--- a/reactos/tools/widl/parser.y
+++ b/reactos/tools/widl/parser.y
@@ -67,6 +67,8 @@
unsigned char pointer_default = RPC_FC_UP;
static int is_object_interface = FALSE;
+/* are we inside a library block? */
+static int is_inside_library = FALSE;
typedef struct list typelist_t;
struct typenode {
@@ -129,7 +131,17 @@ static int compute_method_indexes(type_t *iface);
static char *gen_name(void);
static void process_typedefs(var_list_t *names);
static void check_arg(var_t *arg);
+static void check_functions(const type_t *iface);
static void check_all_user_types(ifref_list_t *ifaces);
+static const attr_list_t *check_iface_attrs(const char *name, const attr_list_t *attrs);
+static attr_list_t *check_function_attrs(const char *name, attr_list_t *attrs);
+static attr_list_t *check_typedef_attrs(attr_list_t *attrs);
+static attr_list_t *check_field_attrs(const char *name, attr_list_t *attrs);
+static const attr_list_t *check_library_attrs(const char *name, const attr_list_t *attrs);
+static attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs);
+static const attr_list_t *check_module_attrs(const char *name, const attr_list_t *attrs);
+static const attr_list_t *check_coclass_attrs(const char *name, const attr_list_t *attrs);
+const char *get_attr_display_name(enum attr_type type);
#define tsENUM 1
#define tsSTRUCT 2
@@ -378,13 +390,15 @@ importlib: tIMPORTLIB '(' aSTRING ')'
libraryhdr: tLIBRARY aIDENTIFIER { $$ = $2; }
;
-library_start: attributes libraryhdr '{' { if (!parse_only) start_typelib($2, $1);
+library_start: attributes libraryhdr '{' { check_library_attrs($2, $1);
+ if (!parse_only) start_typelib($2, $1);
if (!parse_only && do_header) write_library($2, $1);
if (!parse_only && do_idfile) write_libid($2, $1);
+ is_inside_library = TRUE;
}
;
librarydef: library_start imp_statements '}'
- semicolon_opt { if (!parse_only) end_typelib(); }
+ semicolon_opt { if (!parse_only) end_typelib(); is_inside_library = FALSE; }
;
m_args: { $$ = NULL; }
@@ -447,6 +461,7 @@ attribute: { $$ = NULL; }
| tASYNC { $$ = make_attr(ATTR_ASYNC); }
| tAUTOHANDLE { $$ = make_attr(ATTR_AUTO_HANDLE); }
| tBINDABLE { $$ = make_attr(ATTR_BINDABLE); }
+ | tBROADCAST { $$ = make_attr(ATTR_BROADCAST); }
| tCALLAS '(' ident ')' { $$ = make_attrp(ATTR_CALLAS, $3); }
| tCASE '(' expr_list_const ')' { $$ = make_attrp(ATTR_CASE, $3); }
| tCONTEXTHANDLE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); }
@@ -653,7 +668,7 @@ field: s_field ';' { $$ = $1; }
;
s_field: m_attributes type pident array { $$ = $3->var;
- $$->attrs = $1;
+ $$->attrs = check_field_attrs($$->name, $1);
set_type($$, $2, $3, $4, FALSE);
free($3);
}
@@ -662,13 +677,10 @@ s_field: m_attributes type pident array { $$ = $3->var;
funcdef:
m_attributes type pident { var_t *v = $3->var;
var_list_t *args = $3->args;
- v->attrs = $1;
+ v->attrs = check_function_attrs(v->name, $1);
set_type(v, $2, $3, NULL, FALSE);
free($3);
$$ = make_func(v, args);
- if (is_attr(v->attrs, ATTR_IN)) {
- error_loc("inapplicable attribute [in] for function '%s'\n",$$->def->name);
- }
}
;
@@ -736,7 +748,7 @@ coclass: tCOCLASS aIDENTIFIER { $$ = make_class($2); }
;
coclasshdr: attributes coclass { $$ = $2;
- $$->attrs = $1;
+ $$->attrs = check_coclass_attrs($2->name, $1);
if (!parse_only && do_header)
write_coclass($$);
if (!parse_only && do_idfile)
@@ -768,7 +780,7 @@ dispinterfacehdr: attributes dispinterface { attr_t *attrs;
$$ = $2;
if ($$->defined) error_loc("multiple definition error\n");
attrs = make_attr(ATTR_DISPINTERFACE);
- $$->attrs = append_attr( $1, attrs );
+ $$->attrs = append_attr( check_dispiface_attrs($2->name, $1), attrs );
$$->ref = find_type("IDispatch", 0);
if (!$$->ref) error_loc("IDispatch is undefined\n");
$$->defined = TRUE;
@@ -816,7 +828,7 @@ interfacehdr: attributes interface { $$.interface = $2;
pointer_default = get_attrv($1, ATTR_POINTERDEFAULT);
is_object_interface = is_object($1);
if ($2->defined) error_loc("multiple definition error\n");
- $2->attrs = $1;
+ $2->attrs = check_iface_attrs($2->name, $1);
$2->defined = TRUE;
if (!parse_only && do_header) write_forward($2);
}
@@ -826,6 +838,7 @@ interfacedef: interfacehdr inherit
'{' int_statements '}' semicolon_opt { $$ = $1.interface;
$$->ref = $2;
$$->funcs = $4;
+ check_functions($$);
compute_method_indexes($$);
if (!parse_only && do_header) write_interface($$);
if (!parse_only && local_stubs) write_locals(local_stubs, $$, TRUE);
@@ -859,7 +872,7 @@ module: tMODULE aIDENTIFIER { $$ = make_type(0, NULL); $$->name = $2; $$->ki
;
modulehdr: attributes module { $$ = $2;
- $$->attrs = $1;
+ $$->attrs = check_module_attrs($2->name, $1);
}
;
@@ -929,7 +942,7 @@ type: tVOID { $$ = duptype(find_type("void", 0), 1); }
| tSAFEARRAY '(' type ')' { $$ = make_safearray($3); }
;
-typedef: tTYPEDEF m_attributes type pident_list { reg_typedefs($3, $4, $2);
+typedef: tTYPEDEF m_attributes type pident_list { reg_typedefs($3, $4, check_typedef_attrs($2));
process_typedefs($4);
}
;
@@ -1025,12 +1038,21 @@ static str_list_t *append_str(str_list_t *list, char *str)
static attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
{
+ attr_t *attr_existing;
if (!attr) return list;
if (!list)
{
list = xmalloc( sizeof(*list) );
list_init( list );
}
+ LIST_FOR_EACH_ENTRY(attr_existing, list, attr_t, entry)
+ if (attr_existing->type == attr->type)
+ {
+ parser_warning("duplicate attribute %s\n", get_attr_display_name(attr->type));
+ /* use the last attribute, like MIDL does */
+ list_remove(&attr_existing->entry);
+ break;
+ }
list_add_tail( list, &attr->entry );
return list;
}
@@ -1168,7 +1190,7 @@ static expr_t *make_expr1(enum expr_type type, expr_t *expr)
{
expr_t *e;
if (type == EXPR_ADDRESSOF && expr->type != EXPR_IDENTIFIER)
- error("address-of operator applied to invalid expression\n");
+ error_loc("address-of operator applied to invalid expression\n");
e = xmalloc(sizeof(expr_t));
e->type = type;
e->ref = expr;
@@ -1372,7 +1394,7 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
}
}
else if (!arr && ptr_attr)
- error("%s: pointer attribute applied to non-pointer type\n", v->name);
+ error_loc("%s: pointer attribute applied to non-pointer type\n", v->name);
}
if (pident && pident->is_func) {
@@ -1394,7 +1416,7 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
if (arr) LIST_FOR_EACH_ENTRY_REV(dim, arr, expr_t, entry)
{
if (sizeless)
- error("%s: only the first array dimension can be unspecified\n", v->name);
+ error_loc("%s: only the first array dimension can be unspecified\n", v->name);
if (dim->is_const)
{
@@ -1402,10 +1424,10 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
size_t size = type_memsize(v->type, &align);
if (dim->cval <= 0)
- error("%s: array dimension must be positive\n", v->name);
+ error_loc("%s: array dimension must be positive\n", v->name);
if (0xffffffffuL / size < (unsigned long) dim->cval)
- error("%s: total array size is too large\n", v->name);
+ error_loc("%s: total array size is too large\n", v->name);
else if (0xffffuL < size * dim->cval)
v->type = make_type(RPC_FC_LGFARRAY, v->type);
else
@@ -1431,10 +1453,10 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
atype = *ptype = duptype(*ptype, 0);
if (atype->type == RPC_FC_SMFARRAY || atype->type == RPC_FC_LGFARRAY)
- error("%s: cannot specify size_is for a fixed sized array\n", v->name);
+ error_loc("%s: cannot specify size_is for a fixed sized array\n", v->name);
if (atype->type != RPC_FC_CARRAY && !is_ptr(atype))
- error("%s: size_is attribute applied to illegal type\n", v->name);
+ error_loc("%s: size_is attribute applied to illegal type\n", v->name);
atype->type = RPC_FC_CARRAY;
atype->size_is = dim;
@@ -1442,7 +1464,7 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
ptype = &(*ptype)->ref;
if (*ptype == NULL)
- error("%s: too many expressions in size_is attribute\n", v->name);
+ error_loc("%s: too many expressions in size_is attribute\n", v->name);
}
ptype = &v->type;
@@ -1460,14 +1482,14 @@ static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_
else if (atype->type == RPC_FC_CARRAY)
atype->type = RPC_FC_CVARRAY;
else
- error("%s: length_is attribute applied to illegal type\n", v->name);
+ error_loc("%s: length_is attribute applied to illegal type\n", v->name);
atype->length_is = dim;
}
ptype = &(*ptype)->ref;
if (*ptype == NULL)
- error("%s: too many expressions in length_is attribute\n", v->name);
+ error_loc("%s: too many expressions in length_is attribute\n", v->name);
}
if (has_varconf && !last_array(v->type))
@@ -1543,6 +1565,9 @@ static var_t *make_var(char *name)
v->type = NULL;
v->attrs = NULL;
v->eval = NULL;
+ v->loc_info.input_name = input_name ? input_name : "stdin";
+ v->loc_info.line_number = line_number;
+ v->loc_info.near_text = parser_text;
return v;
}
@@ -2114,12 +2139,287 @@ static void process_typedefs(pident_list_t *pidents)
}
}
+struct allowed_attr
+{
+ unsigned int dce_compatible : 1;
+ unsigned int acf : 1;
+ unsigned int on_interface : 1;
+ unsigned int on_function : 1;
+ unsigned int on_arg : 1;
+ unsigned int on_type : 1;
+ unsigned int on_field : 1;
+ unsigned int on_library : 1;
+ unsigned int on_dispinterface : 1;
+ unsigned int on_module : 1;
+ unsigned int on_coclass : 1;
+ const char *display_name;
+};
+
+struct allowed_attr allowed_attr[] =
+{
+ /* attr { D ACF I Fn ARG T Fi L DI M C } */
+ /* ATTR_AGGREGATABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "aggregatable" },
+ /* ATTR_APPOBJECT */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "appobject" },
+ /* ATTR_ASYNC */ { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, "async" },
+ /* ATTR_AUTO_HANDLE */ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, "auto_handle" },
+ /* ATTR_BINDABLE */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "bindable" },
+ /* ATTR_BROADCAST */ { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "broadcast" },
+ /* ATTR_CALLAS */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "call_as" },
+ /* ATTR_CALLCONV */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
+ /* ATTR_CASE */ { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "case" },
+ /* ATTR_CONTEXTHANDLE */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "context_handle" },
+ /* ATTR_CONTROL */ { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, "control" },
+ /* ATTR_DEFAULT */ { 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, "default" },
+ /* ATTR_DEFAULTCOLLELEM */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "defaultcollelem" },
+ /* ATTR_DEFAULTVALUE_EXPR */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "defaultvalue" },
+ /* ATTR_DEFAULTVALUE_STRING */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "defaultvalue" },
+ /* ATTR_DEFAULTVTABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "defaultvtable" },
+ /* ATTR_DISPINTERFACE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
+ /* ATTR_DISPLAYBIND */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "displaybind" },
+ /* ATTR_DLLNAME */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "dllname" },
+ /* ATTR_DUAL */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "dual" },
+ /* ATTR_ENDPOINT */ { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "endpoint" },
+ /* ATTR_ENTRY_ORDINAL */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "entry" },
+ /* ATTR_ENTRY_STRING */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "entry" },
+ /* ATTR_EXPLICIT_HANDLE */ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, "explicit_handle" },
+ /* ATTR_HANDLE */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "handle" },
+ /* ATTR_HELPCONTEXT */ { 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, "helpcontext" },
+ /* ATTR_HELPFILE */ { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "helpfile" },
+ /* ATTR_HELPSTRING */ { 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, "helpstring" },
+ /* ATTR_HELPSTRINGCONTEXT */ { 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, "helpstringcontext" },
+ /* ATTR_HELPSTRINGDLL */ { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "helpstringdll" },
+ /* ATTR_HIDDEN */ { 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, "hidden" },
+ /* ATTR_ID */ { 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, "id" },
+ /* ATTR_IDEMPOTENT */ { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "idempotent" },
+ /* ATTR_IIDIS */ { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "iid_is" },
+ /* ATTR_IMMEDIATEBIND */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "immediatebind" },
+ /* ATTR_IMPLICIT_HANDLE */ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, "implicit_handle" },
+ /* ATTR_IN */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "in" },
+ /* ATTR_INPUTSYNC */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inputsync" },
+ /* ATTR_LENGTHIS */ { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "length_is" },
+ /* ATTR_LOCAL */ { 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, "local" },
+ /* ATTR_NONBROWSABLE */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "nonbrowsable" },
+ /* ATTR_NONCREATABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "noncreatable" },
+ /* ATTR_NONEXTENSIBLE */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "nonextensible" },
+ /* ATTR_OBJECT */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "object" },
+ /* ATTR_ODL */ { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, "odl" },
+ /* ATTR_OLEAUTOMATION */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "oleautomation" },
+ /* ATTR_OPTIONAL */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "optional" },
+ /* ATTR_OUT */ { 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "out" },
+ /* ATTR_POINTERDEFAULT */ { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "pointer_default" },
+ /* ATTR_POINTERTYPE */ { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, "ref, unique or ptr" },
+ /* ATTR_PROPGET */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "propget" },
+ /* ATTR_PROPPUT */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "propput" },
+ /* ATTR_PROPPUTREF */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "propputref" },
+ /* ATTR_PUBLIC */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "public" },
+ /* ATTR_RANGE */ { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, "range" },
+ /* ATTR_READONLY */ { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "readonly" },
+ /* ATTR_REQUESTEDIT */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "requestedit" },
+ /* ATTR_RESTRICTED */ { 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, "restricted" },
+ /* ATTR_RETVAL */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "retval" },
+ /* ATTR_SIZEIS */ { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "size_is" },
+ /* ATTR_SOURCE */ { 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, "source" },
+ /* ATTR_STRICTCONTEXTHANDLE */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "strict_context_handle" },
+ /* ATTR_STRING */ { 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, "string" },
+ /* ATTR_SWITCHIS */ { 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "switch_is" },
+ /* ATTR_SWITCHTYPE */ { 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, "switch_type" },
+ /* ATTR_TRANSMITAS */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "transmit_as" },
+ /* ATTR_UUID */ { 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, "uuid" },
+ /* ATTR_V1ENUM */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "v1_enum" },
+ /* ATTR_VARARG */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "vararg" },
+ /* ATTR_VERSION */ { 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, "version" },
+ /* ATTR_WIREMARSHAL */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "wire_marshal" },
+};
+
+const char *get_attr_display_name(enum attr_type type)
+{
+ return allowed_attr[type].display_name;
+}
+
+static const attr_list_t *check_iface_attrs(const char *name, const attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_interface)
+ error_loc("inapplicable attribute %s for interface %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+static attr_list_t *check_function_attrs(const char *name, attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_function)
+ error_loc("inapplicable attribute %s for function %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
static void check_arg(var_t *arg)
{
- type_t *t = arg->type;
+ const type_t *t = arg->type;
+ const attr_t *attr;
if (t->type == 0 && ! is_var_ptr(arg))
error_loc("argument '%s' has void type\n", arg->name);
+
+ if (arg->attrs)
+ {
+ LIST_FOR_EACH_ENTRY(attr, arg->attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_arg)
+ error_loc("inapplicable attribute %s for argument %s\n",
+ allowed_attr[attr->type].display_name, arg->name);
+ }
+ }
+}
+
+static attr_list_t *check_typedef_attrs(attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_type)
+ error_loc("inapplicable attribute %s for typedef\n",
+ allowed_attr[attr->type].display_name);
+ }
+ return attrs;
+}
+
+static attr_list_t *check_field_attrs(const char *name, attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_field)
+ error_loc("inapplicable attribute %s for field %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+static const attr_list_t *check_library_attrs(const char *name, const attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_library)
+ error_loc("inapplicable attribute %s for library %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+static attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_dispinterface)
+ error_loc("inapplicable attribute %s for dispinterface %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+static const attr_list_t *check_module_attrs(const char *name, const attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_module)
+ error_loc("inapplicable attribute %s for module %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+static const attr_list_t *check_coclass_attrs(const char *name, const attr_list_t *attrs)
+{
+ const attr_t *attr;
+ if (!attrs) return attrs;
+ LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+ {
+ if (!allowed_attr[attr->type].on_coclass)
+ error_loc("inapplicable attribute %s for coclass %s\n",
+ allowed_attr[attr->type].display_name, name);
+ }
+ return attrs;
+}
+
+/* checks that arguments for a function make sense for marshalling and unmarshalling */
+static void check_remoting_args(const func_t *func)
+{
+ const char *funcname = func->def->name;
+ const var_t *arg;
+
+ if (func->args) LIST_FOR_EACH_ENTRY( arg, func->args, const var_t, entry )
+ {
+ int ptr_level = 0;
+ const type_t *type = arg->type;
+ int is_wire_marshal = 0;
+ int is_context_handle = 0;
+
+ /* get pointer level and fundamental type for the argument */
+ for (;;)
+ {
+ if (!is_wire_marshal && is_attr(type->attrs, ATTR_WIREMARSHAL))
+ is_wire_marshal = 1;
+ if (!is_context_handle && is_attr(type->attrs, ATTR_CONTEXTHANDLE))
+ is_context_handle = 1;
+ if (type->kind == TKIND_ALIAS)
+ type = type->orig;
+ else if (is_ptr(type))
+ {
+ ptr_level++;
+ type = type->ref;
+ }
+ else
+ break;
+ }
+
+ /* check that [out] parameters have enough pointer levels */
+ if (is_attr(arg->attrs, ATTR_OUT))
+ {
+ if (!is_array(type))
+ {
+ if (!ptr_level)
+ error_loc_info(&arg->loc_info, "out parameter \'%s\' of function \'%s\' is not a pointer\n", arg->name, funcname);
+ if (type->type == RPC_FC_IP && ptr_level == 1)
+ error_loc_info(&arg->loc_info, "out interface pointer \'%s\' of function \'%s\' is not a double pointer\n", arg->name, funcname);
+ }
+ }
+
+ if (type->type == 0 && !is_attr(arg->attrs, ATTR_IIDIS) && !is_wire_marshal && !is_context_handle)
+ error_loc_info(&arg->loc_info, "parameter \'%s\' of function \'%s\' cannot derive from void *\n", arg->name, funcname);
+ else if (type->type == RPC_FC_FUNCTION)
+ error_loc_info(&arg->loc_info, "parameter \'%s\' of function \'%s\' cannot be a function pointer\n", arg->name, funcname);
+ }
+}
+
+static void check_functions(const type_t *iface)
+{
+ if (!is_inside_library && !is_attr(iface->attrs, ATTR_LOCAL))
+ {
+ const func_t *func;
+ if (iface->funcs) LIST_FOR_EACH_ENTRY( func, iface->funcs, const func_t, entry )
+ {
+ if (!is_attr(func->def->attrs, ATTR_LOCAL))
+ check_remoting_args(func);
+ }
+ }
}
static void check_all_user_types(ifref_list_t *ifrefs)
diff --git a/reactos/tools/widl/proxy.c b/reactos/tools/widl/proxy.c
index b818288b810..e3c89eeac00 100644
--- a/reactos/tools/widl/proxy.c
+++ b/reactos/tools/widl/proxy.c
@@ -253,10 +253,12 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
var_t *def = cur->def;
int has_ret = !is_void(get_func_return_type(cur));
int has_full_pointer = is_full_pointer_function(cur);
+ const char *callconv = get_attrp(def->type->attrs, ATTR_CALLCONV);
+ if (!callconv) callconv = "";
indent = 0;
write_type_decl_left(proxy, get_func_return_type(cur));
- print_proxy( " STDMETHODCALLTYPE %s_", iface->name);
+ print_proxy( " %s %s_", callconv, iface->name);
write_name(proxy, def);
print_proxy( "_Proxy(\n");
write_args(proxy, cur->args, iface->name, 1, TRUE);
diff --git a/reactos/tools/widl/typelib.c b/reactos/tools/widl/typelib.c
index 43d16ec2760..a126debc9eb 100644
--- a/reactos/tools/widl/typelib.c
+++ b/reactos/tools/widl/typelib.c
@@ -240,7 +240,7 @@ unsigned short get_type_vt(type_t *t)
return 0;
}
-void start_typelib(char *name, attr_list_t *attrs)
+void start_typelib(char *name, const attr_list_t *attrs)
{
in_typelib++;
if (!do_typelib) return;
diff --git a/reactos/tools/widl/typelib.h b/reactos/tools/widl/typelib.h
index b17387dfc39..9dce14ae072 100644
--- a/reactos/tools/widl/typelib.h
+++ b/reactos/tools/widl/typelib.h
@@ -22,7 +22,7 @@
#define __WIDL_TYPELIB_H
extern int in_typelib;
-extern void start_typelib(char *name, attr_list_t *attrs);
+extern void start_typelib(char *name, const attr_list_t *attrs);
extern void end_typelib(void);
extern void add_typelib_entry(type_t *t);
extern void add_importlib(const char *name);
diff --git a/reactos/tools/widl/utils.c b/reactos/tools/widl/utils.c
index ed950f6095d..9c4452fa6af 100644
--- a/reactos/tools/widl/utils.c
+++ b/reactos/tools/widl/utils.c
@@ -33,6 +33,8 @@
#include "utils.h"
#include "parser.h"
+#define CURRENT_LOCATION { input_name ? input_name : "stdin", line_number, parser_text }
+
static const int want_near_indication = 0;
static void make_print(char *str)
@@ -45,17 +47,17 @@ static void make_print(char *str)
}
}
-static void generic_msg(const char *s, const char *t, const char *n, va_list ap)
+static void generic_msg(const loc_info_t *loc_info, const char *s, const char *t, va_list ap)
{
- fprintf(stderr, "%s:%d: %s: ", input_name ? input_name : "stdin", line_number, t);
+ fprintf(stderr, "%s:%d: %s: ", loc_info->input_name, loc_info->line_number, t);
vfprintf(stderr, s, ap);
if (want_near_indication)
{
char *cpy;
- if(n)
+ if(loc_info->near_text)
{
- cpy = xstrdup(n);
+ cpy = xstrdup(loc_info->near_text);
make_print(cpy);
fprintf(stderr, " near '%s'", cpy);
free(cpy);
@@ -67,9 +69,10 @@ static void generic_msg(const char *s, const char *t, const char *n, va_list ap)
/* yyerror: yacc assumes this is not newline terminated. */
int parser_error(const char *s, ...)
{
+ loc_info_t cur_location = CURRENT_LOCATION;
va_list ap;
va_start(ap, s);
- generic_msg(s, "Error", parser_text, ap);
+ generic_msg(&cur_location, s, "Error", ap);
fprintf(stderr, "\n");
va_end(ap);
exit(1);
@@ -78,18 +81,29 @@ int parser_error(const char *s, ...)
void error_loc(const char *s, ...)
{
+ loc_info_t cur_loc = CURRENT_LOCATION;
va_list ap;
va_start(ap, s);
- generic_msg(s, "Error", parser_text, ap);
+ generic_msg(&cur_loc, s, "Error", ap);
+ va_end(ap);
+ exit(1);
+}
+
+void error_loc_info(const loc_info_t *loc_info, const char *s, ...)
+{
+ va_list ap;
+ va_start(ap, s);
+ generic_msg(loc_info, s, "Error", ap);
va_end(ap);
exit(1);
}
int parser_warning(const char *s, ...)
{
+ loc_info_t cur_loc = CURRENT_LOCATION;
va_list ap;
va_start(ap, s);
- generic_msg(s, "Warning", parser_text, ap);
+ generic_msg(&cur_loc, s, "Warning", ap);
va_end(ap);
return 0;
}
@@ -113,6 +127,14 @@ void warning(const char *s, ...)
va_end(ap);
}
+void warning_loc_info(const loc_info_t *loc_info, const char *s, ...)
+{
+ va_list ap;
+ va_start(ap, s);
+ generic_msg(loc_info, s, "Warning", ap);
+ va_end(ap);
+}
+
void chat(const char *s, ...)
{
if(debuglevel & DEBUGLEVEL_CHAT)
diff --git a/reactos/tools/widl/utils.h b/reactos/tools/widl/utils.h
index 7d6ce5c5f30..73adf54ad80 100644
--- a/reactos/tools/widl/utils.h
+++ b/reactos/tools/widl/utils.h
@@ -37,7 +37,9 @@ int parser_error(const char *s, ...) __attribute__((format (printf, 1, 2)));
int parser_warning(const char *s, ...) __attribute__((format (printf, 1, 2)));
void error_loc(const char *s, ...) __attribute__((format (printf, 1, 2)));
void error(const char *s, ...) __attribute__((format (printf, 1, 2)));
+void error_loc_info(const loc_info_t *, const char *s, ...) __attribute__((format (printf, 2, 3)));
void warning(const char *s, ...) __attribute__((format (printf, 1, 2)));
+void warning_loc_info(const loc_info_t *, const char *s, ...) __attribute__((format (printf, 2, 3)));
void chat(const char *s, ...) __attribute__((format (printf, 1, 2)));
char *dup_basename(const char *name, const char *ext);
diff --git a/reactos/tools/widl/widltypes.h b/reactos/tools/widl/widltypes.h
index f99e31af585..48a426bed77 100644
--- a/reactos/tools/widl/widltypes.h
+++ b/reactos/tools/widl/widltypes.h
@@ -45,6 +45,7 @@ typedef GUID UUID;
#define RPC_FC_FUNCTION 0xfe
+typedef struct _loc_info_t loc_info_t;
typedef struct _attr_t attr_t;
typedef struct _expr_t expr_t;
typedef struct _type_t type_t;
@@ -78,6 +79,7 @@ enum attr_type
ATTR_ASYNC,
ATTR_AUTO_HANDLE,
ATTR_BINDABLE,
+ ATTR_BROADCAST,
ATTR_CALLAS,
ATTR_CALLCONV, /* calling convention pseudo-attribute */
ATTR_CASE,
@@ -184,6 +186,13 @@ enum type_kind
TKIND_MAX
};
+struct _loc_info_t
+{
+ const char *input_name;
+ int line_number;
+ const char *near_text;
+};
+
struct str_list_entry_t
{
char *str;
@@ -248,6 +257,8 @@ struct _var_t {
attr_list_t *attrs;
expr_t *eval;
+ struct _loc_info_t loc_info;
+
/* parser-internal */
struct list entry;
};
@@ -316,7 +327,7 @@ struct _importlib_t {
struct _typelib_t {
char *name;
char *filename;
- attr_list_t *attrs;
+ const attr_list_t *attrs;
struct list entries;
struct list importlibs;
};
diff --git a/reactos/tools/widl/write_msft.c b/reactos/tools/widl/write_msft.c
index 7b3878d7b45..3ecd5c4740f 100644
--- a/reactos/tools/widl/write_msft.c
+++ b/reactos/tools/widl/write_msft.c
@@ -1317,10 +1317,14 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, const func_t *func, int
expr_t *expr = attr->u.pval;
switch(attr->type) {
case ATTR_BINDABLE:
- funcflags |= 0x4; /* FUNCFLAG_BINDABLE */
+ funcflags |= 0x4; /* FUNCFLAG_FBINDABLE */
+ break;
+ /* FIXME: FUNCFLAG_FDEFAULTBIND */
+ case ATTR_DEFAULTCOLLELEM:
+ funcflags |= 0x100; /* FUNCFLAG_FDEFAULTCOLLELEM */
break;
case ATTR_DISPLAYBIND:
- funcflags |= 0x10; /* FUNCFLAG_DISPLAYBIND */
+ funcflags |= 0x10; /* FUNCFLAG_FDISPLAYBIND */
break;
case ATTR_ENTRY_ORDINAL:
extra_attr = max(extra_attr, 3);
@@ -1349,8 +1353,11 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, const func_t *func, int
case ATTR_ID:
id = expr->cval;
break;
+ case ATTR_IMMEDIATEBIND:
+ funcflags |= 0x1000; /* FUNCFLAG_FIMMEDIATEBIND */
+ break;
case ATTR_NONBROWSABLE:
- funcflags |= 0x400; /* FUNCFLAG_NONBROWSABLE */
+ funcflags |= 0x400; /* FUNCFLAG_FNONBROWSABLE */
break;
case ATTR_OUT:
break;
@@ -1363,9 +1370,18 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, const func_t *func, int
case ATTR_PROPPUTREF:
invokekind = 0x8; /* INVOKE_PROPERTYPUTREF */
break;
+ /* FIXME: FUNCFLAG_FREPLACEABLE */
+ case ATTR_REQUESTEDIT:
+ funcflags |= 0x8; /* FUNCFLAG_FREQUESTEDIT */
+ break;
case ATTR_RESTRICTED:
funcflags |= 0x1; /* FUNCFLAG_FRESTRICTED */
break;
+ case ATTR_SOURCE:
+ funcflags |= 0x2; /* FUNCFLAG_FSOURCE */
+ break;
+ /* FIXME: FUNCFLAG_FUIDEFAULT */
+ /* FIXME: FUNCFLAG_FUSESGETLASTERROR */
case ATTR_VARARG:
if (num_optional || num_defaults)
warning("add_func_desc: ignoring vararg in function with optional or defaultvalue params\n");
@@ -1373,7 +1389,6 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, const func_t *func, int
num_optional = -1;
break;
default:
- warning("add_func_desc: ignoring attr %d\n", attr->type);
break;
}
}
@@ -1595,23 +1610,44 @@ static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var)
if (var->attrs) LIST_FOR_EACH_ENTRY( attr, var->attrs, const attr_t, entry ) {
expr_t *expr = attr->u.pval;
switch(attr->type) {
+ case ATTR_BINDABLE:
+ varflags |= 0x04; /* VARFLAG_FBINDABLE */
+ break;
+ /* FIXME: VARFLAG_FDEFAULTBIND */
+ case ATTR_DEFAULTCOLLELEM:
+ varflags |= 0x100; /* VARFLAG_FDEFAULTCOLLELEM */
+ break;
+ case ATTR_DISPLAYBIND:
+ varflags |= 0x10; /* VARFLAG_FDISPLAYBIND */
+ break;
case ATTR_HIDDEN:
varflags |= 0x40; /* VARFLAG_FHIDDEN */
break;
case ATTR_ID:
id = expr->cval;
break;
+ case ATTR_IMMEDIATEBIND:
+ varflags |= 0x1000; /* VARFLAG_FIMMEDIATEBIND */
+ break;
+ case ATTR_NONBROWSABLE:
+ varflags |= 0x400; /* VARFLAG_FNONBROWSABLE */
+ break;
case ATTR_READONLY:
varflags |= 0x01; /* VARFLAG_FREADONLY */
break;
+ /* FIXME: VARFLAG_FREPLACEABLE */
+ break;
+ case ATTR_REQUESTEDIT:
+ varflags |= 0x08; /* VARFLAG_FREQUESTEDIT */
+ break;
case ATTR_RESTRICTED:
varflags |= 0x80; /* VARFLAG_FRESTRICTED */
break;
case ATTR_SOURCE:
varflags |= 0x02; /* VARFLAG_FSOURCE */
break;
+ /* FIXME: VARFLAG_FUIDEFAULT */
default:
- warning("AddVarDesc: unhandled attr type %d\n", attr->type);
break;
}
}
@@ -1799,9 +1835,6 @@ static msft_typeinfo_t *create_msft_typeinfo(msft_typelib_t *typelib, enum type_
typeinfo->flags |= 0x20; /* TYPEFLAG_FCONTROL */
break;
- case ATTR_DISPINTERFACE:
- break;
-
case ATTR_DLLNAME:
{
int offset = ctl2_alloc_string(typelib, attr->u.pval);
@@ -1838,8 +1871,7 @@ static msft_typeinfo_t *create_msft_typeinfo(msft_typelib_t *typelib, enum type_
typeinfo->flags |= 0x10; /* TYPEFLAG_FHIDDEN */
break;
- case ATTR_LOCAL:
- break;
+ /* FIXME: TYPEFLAG_FLICENSED */
case ATTR_NONCREATABLE:
typeinfo->flags &= ~0x2; /* TYPEFLAG_FCANCREATE */
@@ -1849,18 +1881,15 @@ static msft_typeinfo_t *create_msft_typeinfo(msft_typelib_t *typelib, enum type_
typeinfo->flags |= 0x80; /* TYPEFLAG_FNONEXTENSIBLE */
break;
- case ATTR_OBJECT:
- break;
-
- case ATTR_ODL:
- break;
-
case ATTR_OLEAUTOMATION:
typeinfo->flags |= 0x100; /* TYPEFLAG_FOLEAUTOMATION */
break;
- case ATTR_PUBLIC:
- break;
+ /* FIXME: TYPEFLAG_FPREDCLID */
+
+ /* FIXME: TYPEFLAG_FPROXY */
+
+ /* FIXME: TYPEFLAG_FREPLACEABLE */
case ATTR_RESTRICTED:
typeinfo->flags |= 0x200; /* TYPEFLAG_FRESTRICTED */
@@ -1883,7 +1912,6 @@ static msft_typeinfo_t *create_msft_typeinfo(msft_typelib_t *typelib, enum type_
break;
default:
- warning("create_msft_typeinfo: ignoring attr %d\n", attr->type);
break;
}
}
@@ -2102,6 +2130,9 @@ static void add_coclass_typeinfo(msft_typelib_t *typelib, type_t *cls)
case ATTR_DEFAULT:
ref->flags |= 0x1; /* IMPLTYPEFLAG_FDEFAULT */
break;
+ case ATTR_DEFAULTVTABLE:
+ ref->flags |= 0x8; /* IMPLTYPEFLAG_FDEFAULTVTABLE */
+ break;
case ATTR_RESTRICTED:
ref->flags |= 0x4; /* IMPLTYPEFLAG_FRESTRICTED */
break;
diff --git a/reactos/tools/winebuild/build.h b/reactos/tools/winebuild/build.h
index 1aff91b9841..e14b1ae9304 100644
--- a/reactos/tools/winebuild/build.h
+++ b/reactos/tools/winebuild/build.h
@@ -117,7 +117,7 @@ enum target_cpu
enum target_platform
{
- PLATFORM_UNSPECIFIED, PLATFORM_APPLE, PLATFORM_WINDOWS
+ PLATFORM_UNSPECIFIED, PLATFORM_APPLE, PLATFORM_SOLARIS, PLATFORM_WINDOWS
};
extern enum target_cpu target_cpu;
@@ -144,14 +144,22 @@ extern enum target_platform target_platform;
#define __attribute__(X)
#endif
+#ifndef DECLSPEC_NORETURN
+# if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS)
+# define DECLSPEC_NORETURN __declspec(noreturn)
+# else
+# define DECLSPEC_NORETURN __attribute__((noreturn))
+# endif
+#endif
+
extern void *xmalloc (size_t size);
extern void *xrealloc (void *ptr, size_t size);
extern char *xstrdup( const char *str );
extern char *strupper(char *s);
extern int strendswith(const char* str, const char* end);
-extern void fatal_error( const char *msg, ... )
+extern DECLSPEC_NORETURN void fatal_error( const char *msg, ... )
__attribute__ ((__format__ (__printf__, 1, 2)));
-extern void fatal_perror( const char *msg, ... )
+extern DECLSPEC_NORETURN void fatal_perror( const char *msg, ... )
__attribute__ ((__format__ (__printf__, 1, 2)));
extern void error( const char *msg, ... )
__attribute__ ((__format__ (__printf__, 1, 2)));
diff --git a/reactos/tools/winebuild/import.c b/reactos/tools/winebuild/import.c
index 5c54527ccf2..e5223ecfe4d 100644
--- a/reactos/tools/winebuild/import.c
+++ b/reactos/tools/winebuild/import.c
@@ -698,30 +698,20 @@ static void output_import_thunk( const char *name, const char *table, int pos )
output( "\tjmp $31,($0)\n" );
break;
case CPU_POWERPC:
- output( "\taddi %s, %s, -0x4\n", ppc_reg(1), ppc_reg(1) );
- output( "\tstw %s, 0(%s)\n", ppc_reg(9), ppc_reg(1) );
- output( "\taddi %s, %s, -0x4\n", ppc_reg(1), ppc_reg(1) );
- output( "\tstw %s, 0(%s)\n", ppc_reg(8), ppc_reg(1) );
- output( "\taddi %s, %s, -0x4\n", ppc_reg(1), ppc_reg(1) );
- output( "\tstw %s, 0(%s)\n", ppc_reg(7), ppc_reg(1) );
+ output( "\tmr %s, %s\n", ppc_reg(0), ppc_reg(31) );
if (target_platform == PLATFORM_APPLE)
{
- output( "\tlis %s, ha16(%s+%d)\n", ppc_reg(9), table, pos );
- output( "\tla %s, lo16(%s+%d)(%s)\n", ppc_reg(8), table, pos, ppc_reg(9) );
+ output( "\tlis %s, ha16(%s+%d+32768)\n", ppc_reg(31), table, pos );
+ output( "\tla %s, lo16(%s+%d)(%s)\n", ppc_reg(31), table, pos, ppc_reg(31) );
}
else
{
- output( "\tlis %s, (%s+%d)@h\n", ppc_reg(9), table, pos );
- output( "\tla %s, (%s+%d)@l(%s)\n", ppc_reg(8), table, pos, ppc_reg(9) );
+ output( "\tlis %s, (%s+%d+32768)@h\n", ppc_reg(31), table, pos );
+ output( "\tla %s, (%s+%d)@l(%s)\n", ppc_reg(31), table, pos, ppc_reg(31) );
}
- output( "\tlwz %s, 0(%s)\n", ppc_reg(7), ppc_reg(8) );
- output( "\tmtctr %s\n", ppc_reg(7) );
- output( "\tlwz %s, 0(%s)\n", ppc_reg(7), ppc_reg(1) );
- output( "\taddi %s, %s, 0x4\n", ppc_reg(1), ppc_reg(1) );
- output( "\tlwz %s, 0(%s)\n", ppc_reg(8), ppc_reg(1) );
- output( "\taddi %s, %s, 0x4\n", ppc_reg(1), ppc_reg(1) );
- output( "\tlwz %s, 0(%s)\n", ppc_reg(9), ppc_reg(1) );
- output( "\taddi %s, %s, 0x4\n", ppc_reg(1), ppc_reg(1) );
+ output( "\tlwz %s, 0(%s)\n", ppc_reg(31), ppc_reg(31) );
+ output( "\tmtctr %s\n", ppc_reg(31) );
+ output( "\tmr %s, %s\n", ppc_reg(31), ppc_reg(0) );
output( "\tbctr\n" );
break;
}
diff --git a/reactos/tools/winebuild/main.c b/reactos/tools/winebuild/main.c
index f588132950d..e80b08e402d 100644
--- a/reactos/tools/winebuild/main.c
+++ b/reactos/tools/winebuild/main.c
@@ -58,6 +58,8 @@ enum target_cpu target_cpu = CPU_x86_64;
#ifdef __APPLE__
enum target_platform target_platform = PLATFORM_APPLE;
+#elif defined(__sun)
+enum target_platform target_platform = PLATFORM_SOLARIS;
#elif defined(_WINDOWS)
enum target_platform target_platform = PLATFORM_WINDOWS;
#else
@@ -118,6 +120,7 @@ static const struct
{
{ "macos", PLATFORM_APPLE },
{ "darwin", PLATFORM_APPLE },
+ { "solaris", PLATFORM_SOLARIS },
{ "windows", PLATFORM_WINDOWS },
{ "winnt", PLATFORM_WINDOWS }
};
@@ -598,10 +601,12 @@ int main(int argc, char **argv)
case MODE_DLL:
if (spec->subsystem != IMAGE_SUBSYSTEM_NATIVE)
spec->characteristics |= IMAGE_FILE_DLL;
+ if (!spec_file_name) fatal_error( "missing .spec file\n" );
+ /* fall through */
+ case MODE_EXE:
load_resources( argv, spec );
load_import_libs( argv );
- if (!spec_file_name) fatal_error( "missing .spec file\n" );
- if (!parse_input_file( spec )) break;
+ if (spec_file_name && !parse_input_file( spec )) break;
switch (spec->type)
{
case SPEC_WIN16:
@@ -614,15 +619,6 @@ int main(int argc, char **argv)
default: assert(0);
}
break;
- case MODE_EXE:
- if (spec->type == SPEC_WIN16) fatal_error( "Cannot build 16-bit exe files\n" );
- if (!spec->file_name) fatal_error( "executable must be named via the -F option\n" );
- load_resources( argv, spec );
- load_import_libs( argv );
- if (spec_file_name && !parse_input_file( spec )) break;
- read_undef_symbols( spec, argv );
- BuildSpec32File( spec );
- break;
case MODE_DEF:
if (argv[0]) fatal_error( "file argument '%s' not allowed in this mode\n", argv[0] );
if (spec->type == SPEC_WIN16) fatal_error( "Cannot yet build .def file for 16-bit dlls\n" );
diff --git a/reactos/tools/winebuild/relay.c b/reactos/tools/winebuild/relay.c
index 0ddcc55f51e..4ec0dbfb2f3 100644
--- a/reactos/tools/winebuild/relay.c
+++ b/reactos/tools/winebuild/relay.c
@@ -26,8 +26,10 @@
#include "wine/port.h"
#include
+#include
-#include "thread.h"
+#define __WINESRC__ /* FIXME: for WINE_VM86_TEB_INFO */
+#include "winternl.h"
#include "wine/winbase16.h"
#include "build.h"
@@ -383,7 +385,7 @@ static void BuildCallFrom16Core( int reg_func, int thunk )
* All routines expect that the 16-bit stack contents (arguments) and the
* return address (segptr to CallTo16_Ret) were already set up by the
* caller; nb_args must contain the number of bytes to be conserved. The
- * 16-bit SS:SP will be set accordinly.
+ * 16-bit SS:SP will be set accordingly.
*
* All other registers are either taken from the CONTEXT86 structure
* or else set to default values. The target routine address is either
@@ -891,9 +893,11 @@ static void BuildPendingEventCheck(void)
/* Check for pending events. */
- output( "\t.byte 0x64\n\ttestl $0xffffffff,(%d)\n", STRUCTOFFSET(TEB,vm86_pending) );
+ output( "\t.byte 0x64\n\ttestl $0xffffffff,(%d)\n",
+ STRUCTOFFSET(TEB,GdiTebBatch) + STRUCTOFFSET(WINE_VM86_TEB_INFO,vm86_pending) );
output( "\tje %s\n", asm_name("DPMI_PendingEventCheck_Cleanup") );
- output( "\t.byte 0x64\n\ttestl $0xffffffff,(%d)\n", STRUCTOFFSET(TEB,dpmi_vif) );
+ output( "\t.byte 0x64\n\ttestl $0xffffffff,(%d)\n",
+ STRUCTOFFSET(TEB,GdiTebBatch) + STRUCTOFFSET(WINE_VM86_TEB_INFO,dpmi_vif) );
output( "\tje %s\n", asm_name("DPMI_PendingEventCheck_Cleanup") );
/* Process pending events. */
diff --git a/reactos/tools/winebuild/spec16.c b/reactos/tools/winebuild/spec16.c
index dc86b1b40ae..8fda97806a9 100644
--- a/reactos/tools/winebuild/spec16.c
+++ b/reactos/tools/winebuild/spec16.c
@@ -435,6 +435,7 @@ static int sort_func_list( ORDDEF **list, int count,
{
int i, j;
+ if (!count) return 0;
qsort( list, count, sizeof(*list), compare );
for (i = j = 0; i < count; i++)
@@ -461,7 +462,7 @@ static void output_init_code( const DLLSPEC *spec, const char *header_name )
output( "\t.align 4\n" );
output( "\t%s\n", func_declaration(name) );
output( "%s:\n", name );
- output( "subl $4,%%esp\n" );
+ output( "\tsubl $4,%%esp\n" );
if (UsePIC)
{
output( "\tcall %s\n", asm_name("__wine_spec_get_pc_thunk_eax") );
@@ -485,7 +486,7 @@ static void output_init_code( const DLLSPEC *spec, const char *header_name )
output( "\t.align 4\n" );
output( "\t%s\n", func_declaration(name) );
output( "%s:\n", name );
- output( "subl $8,%%esp\n" );
+ output( "\tsubl $8,%%esp\n" );
if (UsePIC)
{
output( "\tcall %s\n", asm_name("__wine_spec_get_pc_thunk_eax") );
@@ -528,6 +529,7 @@ static void output_init_code( const DLLSPEC *spec, const char *header_name )
void BuildSpec16File( DLLSPEC *spec )
{
ORDDEF **typelist;
+ ORDDEF *entry_point = NULL;
int i, j, nb_funcs;
char header_name[256];
@@ -535,6 +537,12 @@ void BuildSpec16File( DLLSPEC *spec )
output_standard_file_header();
+ if (!spec->file_name)
+ {
+ char *p;
+ spec->file_name = xstrdup( output_file_name );
+ if ((p = strrchr( spec->file_name, '.' ))) *p = 0;
+ }
if (!spec->dll_name) /* set default name from file name */
{
char *p;
@@ -542,6 +550,28 @@ void BuildSpec16File( DLLSPEC *spec )
if ((p = strrchr( spec->dll_name, '.' ))) *p = 0;
}
+ /* store the main entry point as ordinal 0 */
+
+ if (!spec->ordinals)
+ {
+ spec->ordinals = xmalloc( sizeof(spec->ordinals[0]) );
+ spec->ordinals[0] = NULL;
+ }
+ if (spec->init_func && !(spec->characteristics & IMAGE_FILE_DLL))
+ {
+ entry_point = xmalloc( sizeof(*entry_point) );
+ entry_point->type = TYPE_PASCAL;
+ entry_point->ordinal = 0;
+ entry_point->lineno = 0;
+ entry_point->flags = FLAG_REGISTER;
+ entry_point->name = NULL;
+ entry_point->link_name = xstrdup( spec->init_func );
+ entry_point->export_name = NULL;
+ entry_point->u.func.arg_types[0] = 0;
+ assert( !spec->ordinals[0] );
+ spec->ordinals[0] = entry_point;
+ }
+
/* Build sorted list of all argument types, without duplicates */
typelist = xmalloc( (spec->limit + 1) * sizeof(*typelist) );
@@ -594,12 +624,15 @@ void BuildSpec16File( DLLSPEC *spec )
get_asm_short_keyword() );
output( "\t.long 0\n" ); /* ne_crc */
output( "\t%s 0x%04x\n", get_asm_short_keyword(), /* ne_flags */
- NE_FFLAGS_SINGLEDATA | NE_FFLAGS_LIBMODULE );
+ NE_FFLAGS_SINGLEDATA |
+ ((spec->characteristics & IMAGE_FILE_DLL) ? NE_FFLAGS_LIBMODULE : 0) );
output( "\t%s 2\n", get_asm_short_keyword() ); /* ne_autodata */
output( "\t%s %u\n", get_asm_short_keyword(), spec->heap_size ); /* ne_heap */
output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_stack */
- output( "\t.long 0\n" ); /* ne_csip */
- output( "\t.long 0\n" ); /* ne_sssp */
+ if (!entry_point) output( "\t.long 0\n" ); /* ne_csip */
+ else output( "\t%s .L__wine_%s_0-.L__wine_spec_code_segment,1\n",
+ get_asm_short_keyword(), make_c_identifier(spec->dll_name) );
+ output( "\t%s 0,2\n", get_asm_short_keyword() ); /* ne_sssp */
output( "\t%s 2\n", get_asm_short_keyword() ); /* ne_cseg */
output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_cmod */
output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_cbnrestab */
diff --git a/reactos/tools/winebuild/spec32.c b/reactos/tools/winebuild/spec32.c
index d4671928da6..0adcc4ef6e0 100644
--- a/reactos/tools/winebuild/spec32.c
+++ b/reactos/tools/winebuild/spec32.c
@@ -417,13 +417,38 @@ void BuildSpec32File( DLLSPEC *spec )
/* Reserve some space for the PE header */
- output( "\t.text\n" );
- output( "\t.align %d\n", get_alignment(page_size) );
- output( "__wine_spec_pe_header:\n" );
- if (target_platform == PLATFORM_APPLE)
+ switch (target_platform)
+ {
+ case PLATFORM_APPLE:
+ output( "\t.text\n" );
+ output( "\t.align %d\n", get_alignment(page_size) );
+ output( "__wine_spec_pe_header:\n" );
output( "\t.space 65536\n" );
- else
- output( "\t.skip 65536\n" );
+ break;
+ case PLATFORM_SOLARIS:
+ output( "\n\t.section \".text\",\"ax\"\n" );
+ output( "__wine_spec_pe_header:\n" );
+ output( "\t.skip %u\n", 65536 + page_size );
+ break;
+ default:
+ output( "\n\t.section \".init\",\"ax\"\n" );
+ switch(target_cpu)
+ {
+ case CPU_x86:
+ case CPU_x86_64:
+ case CPU_ALPHA:
+ case CPU_SPARC:
+ output( "\tjmp 1f\n" );
+ break;
+ case CPU_POWERPC:
+ output( "\tb 1f\n" );
+ break;
+ }
+ output( "__wine_spec_pe_header:\n" );
+ output( "\t.skip %u\n", 65536 + page_size );
+ output( "1:\n" );
+ break;
+ }
/* Output the NT header */
diff --git a/reactos/tools/wmc/lang.c b/reactos/tools/wmc/lang.c
index e33a655be8d..b045612bb65 100644
--- a/reactos/tools/wmc/lang.c
+++ b/reactos/tools/wmc/lang.c
@@ -50,7 +50,7 @@ static const language_t languages[] = {
{0x0011, 932, 932, "Japanese", NULL},
{0x0012, 949, 949, "Korean", NULL},
{0x0013, 850, 1252, "Dutch", NULL},
- {0x0014, 850, 1252, "Norwegian (Bokmеl)", NULL},
+ {0x0014, 850, 1252, "Norwegian (BokmГҐl)", NULL},
{0x0015, 852, 1250, "Polish", NULL},
{0x0016, 850, 1252, "Portuguese", NULL},
{0x0018, 852, 1250, "Romanian", NULL},
@@ -90,7 +90,7 @@ static const language_t languages[] = {
{0x0411, 932, 932, "Japanese", "Japan"},
{0x0412, 949, 949, "Korean", "Korea (south)"},
{0x0413, 850, 1252, "Dutch", "Netherlands"},
- {0x0414, 850, 1252, "Norwegian (Bokmеl)", "Norway"},
+ {0x0414, 850, 1252, "Norwegian (BokmГҐl)", "Norway"},
{0x0415, 852, 1250, "Polish", "Poland"},
{0x0416, 850, 1252, "Portuguese", "Brazil"},
{0x0418, 852, 1250, "Romanian", "Romania"},
diff --git a/reactos/tools/wmc/mcl.c b/reactos/tools/wmc/mcl.c
index 380c06c7e34..be016914c77 100644
--- a/reactos/tools/wmc/mcl.c
+++ b/reactos/tools/wmc/mcl.c
@@ -33,7 +33,7 @@
#include "mcy.tab.h"
/*
- * Keywords are case insenitive. All normal input is treated as
+ * Keywords are case insensitive. All normal input is treated as
* being in codepage iso-8859-1 for ascii input files (unicode
* page 0) and as equivalent unicode if unicode input is selected.
* All normal input, which is not part of a message text, is
@@ -205,7 +205,7 @@ try_again:
if(n < 0)
internal_error(__FILE__, __LINE__, "Could not translate to unicode (%d)\n", n);
if(n <= 1)
- goto try_again; /* Should not hapen */
+ goto try_again; /* Should not happen */
n--; /* Strip added conversion '\0' from input length */
/*
* FIXME:
diff --git a/reactos/tools/wmc/write.c b/reactos/tools/wmc/write.c
index 2e92359636b..2e4d4e341be 100644
--- a/reactos/tools/wmc/write.c
+++ b/reactos/tools/wmc/write.c
@@ -243,7 +243,7 @@ void write_h_file(const char *fname)
cptr = dup_u2c(ndp->u.msg->msgs[idx_en]->cp, ndp->u.msg->msgs[idx_en]->msg);
killnl(cptr, 0);
killcomment(cptr);
- fprintf(fp, "/* Approx. msg: %s */\n", cptr);
+ fprintf(fp, "/* Approximate msg: %s */\n", cptr);
free(cptr);
cptr = dup_u2c(WMC_DEFAULT_CODEPAGE, ndp->u.msg->sym);
if(ndp->u.msg->cast)
@@ -274,8 +274,7 @@ void write_h_file(const char *fname)
internal_error(__FILE__, __LINE__, "Invalid base for number print\n");
}
free(cptr);
- if(cast)
- free(cast);
+ free(cast);
break;
default:
internal_error(__FILE__, __LINE__, "Invalid node type %d\n", ndp->type);
diff --git a/reactos/tools/wpp/lex.yy.c b/reactos/tools/wpp/lex.yy.c
index 25716f55d16..d213332f431 100644
--- a/reactos/tools/wpp/lex.yy.c
+++ b/reactos/tools/wpp/lex.yy.c
@@ -16,7 +16,7 @@
#define yytext ppy_text
#define yywrap ppy_wrap
-#line 20 "tools\\wpp_new\\lex.yy.c"
+#line 20 "lex.yy.c"
/* A lexical scanner generated by flex */
/* Scanner skeleton version:
@@ -921,7 +921,7 @@ static char *yy_last_accepting_cpos;
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
-#line 1 "tools\\wpp_new\\ppl.l"
+#line 1 "ppl.l"
#define INITIAL 0
/* -*-C-*-
* Wrc preprocessor lexical analysis
@@ -1050,6 +1050,7 @@ char *yytext;
*/
#define YY_STACK_USED 1
#define YY_NEVER_INTERACTIVE 1
+#define YY_NO_INPUT 1
#define YY_NO_UNPUT 1
#define pp_pp 1
@@ -1093,13 +1094,28 @@ char *yytext;
#define RCINCL 21
-#line 159 "tools\\wpp_new\\ppl.l"
-#include
+#line 159 "ppl.l"
+#include "config.h"
+#include "wine/port.h"
#include
#include
#include
#include
#include
+#include
+#include
+
+#ifndef LLONG_MAX
+# define LLONG_MAX ((long long)0x7fffffff << 32 | 0xffffffff)
+# define LLONG_MIN (-LLONG_MAX - 1)
+#endif
+#ifndef ULLONG_MAX
+# define ULLONG_MAX ((long long)0xffffffff << 32 | 0xffffffff)
+#endif
+
+#ifndef HAVE_UNISTD_H
+#define YY_NO_UNISTD_H
+#endif
#include "wpp_private.h"
#include "ppy.tab.h"
@@ -1138,7 +1154,6 @@ typedef struct bufferstackentry {
/* Include management */
include_state_t incl;
char *include_filename;
- int pass_data;
} bufferstackentry_t;
#define ALLOCBLOCKSIZE (1 << 10) /* Allocate these chunks at a time for string-buffers */
@@ -1171,7 +1186,6 @@ typedef struct macexpstackentry {
static void newline(int);
static int make_number(int radix, YYSTYPE *val, const char *str, int len);
static void put_buffer(const char *s, int len);
-static int is_c_h_include(char *fname, int quoted);
/* Buffer management */
static void push_buffer(pp_entry_t *ppp, char *filename, char *incname, int pop);
static bufferstackentry_t *pop_buffer(void);
@@ -1210,8 +1224,6 @@ static int macexpstackidx = 0;
static bufferstackentry_t bufferstack[MAXBUFFERSTACK];
static int bufferstackidx = 0;
-static int pass_data=1;
-
/*
* Global variables
*/
@@ -1230,7 +1242,7 @@ includelogicentry_t *pp_includelogiclist = NULL;
* The scanner starts here
**************************************************************************
*/
-#line 1234 "tools\\wpp_new\\lex.yy.c"
+#line 1246 "lex.yy.c"
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -1384,7 +1396,7 @@ YY_DECL
register char *yy_cp, *yy_bp;
register int yy_act;
-#line 298 "tools\\wpp_new\\ppl.l"
+#line 309 "ppl.l"
/*
* Catch line-continuations.
@@ -1398,7 +1410,7 @@ YY_DECL
/*
* Detect the leading # of a preprocessor directive.
*/
-#line 1402 "tools\\wpp_new\\lex.yy.c"
+#line 1414 "lex.yy.c"
if ( yy_init )
{
@@ -1484,7 +1496,7 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 311 "tools\\wpp_new\\ppl.l"
+#line 322 "ppl.l"
pp_incl_state.seen_junk++; yy_push_state(pp_pp);
YY_BREAK
/*
@@ -1492,102 +1504,102 @@ pp_incl_state.seen_junk++; yy_push_state(pp_pp);
*/
case 2:
YY_RULE_SETUP
-#line 316 "tools\\wpp_new\\ppl.l"
+#line 327 "ppl.l"
if(yy_top_state() != pp_ignore) {yy_pp_state(pp_inc); return tINCLUDE;} else {yy_pp_state(pp_eol);}
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 317 "tools\\wpp_new\\ppl.l"
+#line 328 "ppl.l"
yy_pp_state(yy_current_state() != pp_ignore ? pp_def : pp_eol);
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 318 "tools\\wpp_new\\ppl.l"
+#line 329 "ppl.l"
yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tERROR;
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 319 "tools\\wpp_new\\ppl.l"
+#line 330 "ppl.l"
yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tWARNING;
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 320 "tools\\wpp_new\\ppl.l"
+#line 331 "ppl.l"
yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tPRAGMA;
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 321 "tools\\wpp_new\\ppl.l"
+#line 332 "ppl.l"
yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tPPIDENT;
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 322 "tools\\wpp_new\\ppl.l"
+#line 333 "ppl.l"
if(yy_top_state() != pp_ignore) {yy_pp_state(pp_ifd); return tUNDEF;} else {yy_pp_state(pp_eol);}
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 323 "tools\\wpp_new\\ppl.l"
+#line 334 "ppl.l"
yy_pp_state(pp_ifd); return tIFDEF;
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 324 "tools\\wpp_new\\ppl.l"
+#line 335 "ppl.l"
pp_incl_state.seen_junk--; yy_pp_state(pp_ifd); return tIFNDEF;
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 325 "tools\\wpp_new\\ppl.l"
+#line 336 "ppl.l"
yy_pp_state(pp_if); return tIF;
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 326 "tools\\wpp_new\\ppl.l"
+#line 337 "ppl.l"
yy_pp_state(pp_if); return tELIF;
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 327 "tools\\wpp_new\\ppl.l"
+#line 338 "ppl.l"
yy_pp_state(pp_endif); return tELSE;
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 328 "tools\\wpp_new\\ppl.l"
+#line 339 "ppl.l"
yy_pp_state(pp_endif); return tENDIF;
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 329 "tools\\wpp_new\\ppl.l"
+#line 340 "ppl.l"
if(yy_top_state() != pp_ignore) {yy_pp_state(pp_line); return tLINE;} else {yy_pp_state(pp_eol);}
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 330 "tools\\wpp_new\\ppl.l"
+#line 341 "ppl.l"
if(yy_top_state() != pp_ignore) {yy_pp_state(pp_line); return tGCCLINE;} else {yy_pp_state(pp_eol);}
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 331 "tools\\wpp_new\\ppl.l"
+#line 342 "ppl.l"
ppy_error("Invalid preprocessor token '%s'", ppy_text);
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 332 "tools\\wpp_new\\ppl.l"
+#line 343 "ppl.l"
newline(1); yy_pop_state(); return tNL; /* This could be the null-token */
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 333 "tools\\wpp_new\\ppl.l"
+#line 344 "ppl.l"
newline(0);
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 334 "tools\\wpp_new\\ppl.l"
+#line 345 "ppl.l"
ppy_error("Preprocessor junk '%s'", ppy_text);
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 335 "tools\\wpp_new\\ppl.l"
+#line 346 "ppl.l"
return *ppy_text;
YY_BREAK
/*
@@ -1595,37 +1607,37 @@ return *ppy_text;
*/
case 22:
YY_RULE_SETUP
-#line 340 "tools\\wpp_new\\ppl.l"
+#line 351 "ppl.l"
return make_number(10, &ppy_lval, ppy_text, ppy_leng);
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 341 "tools\\wpp_new\\ppl.l"
+#line 352 "ppl.l"
new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_iqs);
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 342 "tools\\wpp_new\\ppl.l"
+#line 353 "ppl.l"
new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 343 "tools\\wpp_new\\ppl.l"
+#line 354 "ppl.l"
;
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 344 "tools\\wpp_new\\ppl.l"
+#line 355 "ppl.l"
newline(1); yy_pop_state(); return tNL;
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 345 "tools\\wpp_new\\ppl.l"
+#line 356 "ppl.l"
newline(0);
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 346 "tools\\wpp_new\\ppl.l"
+#line 357 "ppl.l"
ppy_error(yy_current_state() == pp_inc ? "Trailing junk in #include" : "Trailing junk in #line");
YY_BREAK
/*
@@ -1633,22 +1645,22 @@ ppy_error(yy_current_state() == pp_inc ? "Trailing junk in #include" : "Trailing
*/
case 29:
YY_RULE_SETUP
-#line 351 "tools\\wpp_new\\ppl.l"
+#line 362 "ppl.l"
;
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 352 "tools\\wpp_new\\ppl.l"
+#line 363 "ppl.l"
newline(1);
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 353 "tools\\wpp_new\\ppl.l"
+#line 364 "ppl.l"
newline(0);
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 354 "tools\\wpp_new\\ppl.l"
+#line 365 "ppl.l"
;
YY_BREAK
/*
@@ -1659,107 +1671,107 @@ YY_RULE_SETUP
*/
case 33:
YY_RULE_SETUP
-#line 363 "tools\\wpp_new\\ppl.l"
+#line 374 "ppl.l"
return make_number(8, &ppy_lval, ppy_text, ppy_leng);
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 364 "tools\\wpp_new\\ppl.l"
+#line 375 "ppl.l"
ppy_error("Invalid octal digit");
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 365 "tools\\wpp_new\\ppl.l"
+#line 376 "ppl.l"
return make_number(10, &ppy_lval, ppy_text, ppy_leng);
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 366 "tools\\wpp_new\\ppl.l"
+#line 377 "ppl.l"
return make_number(16, &ppy_lval, ppy_text, ppy_leng);
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 367 "tools\\wpp_new\\ppl.l"
+#line 378 "ppl.l"
ppy_error("Invalid hex number");
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 368 "tools\\wpp_new\\ppl.l"
+#line 379 "ppl.l"
yy_push_state(pp_defined); return tDEFINED;
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 369 "tools\\wpp_new\\ppl.l"
+#line 380 "ppl.l"
return tLSHIFT;
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 370 "tools\\wpp_new\\ppl.l"
+#line 381 "ppl.l"
return tRSHIFT;
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 371 "tools\\wpp_new\\ppl.l"
+#line 382 "ppl.l"
return tLOGAND;
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 372 "tools\\wpp_new\\ppl.l"
+#line 383 "ppl.l"
return tLOGOR;
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 373 "tools\\wpp_new\\ppl.l"
+#line 384 "ppl.l"
return tEQ;
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 374 "tools\\wpp_new\\ppl.l"
+#line 385 "ppl.l"
return tNE;
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 375 "tools\\wpp_new\\ppl.l"
+#line 386 "ppl.l"
return tLTE;
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 376 "tools\\wpp_new\\ppl.l"
+#line 387 "ppl.l"
return tGTE;
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 377 "tools\\wpp_new\\ppl.l"
+#line 388 "ppl.l"
newline(1); yy_pop_state(); return tNL;
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 378 "tools\\wpp_new\\ppl.l"
+#line 389 "ppl.l"
newline(0);
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 379 "tools\\wpp_new\\ppl.l"
+#line 390 "ppl.l"
ppy_error("Junk in conditional expression");
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 380 "tools\\wpp_new\\ppl.l"
+#line 391 "ppl.l"
;
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 381 "tools\\wpp_new\\ppl.l"
+#line 392 "ppl.l"
new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 382 "tools\\wpp_new\\ppl.l"
+#line 393 "ppl.l"
ppy_error("String constants not allowed in conditionals");
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 383 "tools\\wpp_new\\ppl.l"
+#line 394 "ppl.l"
return *ppy_text;
YY_BREAK
/*
@@ -1768,27 +1780,27 @@ return *ppy_text;
*/
case 54:
YY_RULE_SETUP
-#line 389 "tools\\wpp_new\\ppl.l"
+#line 400 "ppl.l"
ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 390 "tools\\wpp_new\\ppl.l"
+#line 401 "ppl.l"
;
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 391 "tools\\wpp_new\\ppl.l"
+#line 402 "ppl.l"
newline(1); yy_pop_state(); return tNL;
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 392 "tools\\wpp_new\\ppl.l"
+#line 403 "ppl.l"
newline(0);
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 393 "tools\\wpp_new\\ppl.l"
+#line 404 "ppl.l"
ppy_error("Identifier expected");
YY_BREAK
/*
@@ -1796,22 +1808,22 @@ ppy_error("Identifier expected");
*/
case 59:
YY_RULE_SETUP
-#line 398 "tools\\wpp_new\\ppl.l"
+#line 409 "ppl.l"
;
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 399 "tools\\wpp_new\\ppl.l"
+#line 410 "ppl.l"
newline(1); yy_pop_state(); return tNL;
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 400 "tools\\wpp_new\\ppl.l"
+#line 411 "ppl.l"
newline(0);
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 401 "tools\\wpp_new\\ppl.l"
+#line 412 "ppl.l"
ppy_error("Garbage after #else or #endif.");
YY_BREAK
/*
@@ -1821,27 +1833,27 @@ ppy_error("Garbage after #else or #endif.");
*/
case 63:
YY_RULE_SETUP
-#line 408 "tools\\wpp_new\\ppl.l"
+#line 419 "ppl.l"
yy_pop_state(); ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 409 "tools\\wpp_new\\ppl.l"
+#line 420 "ppl.l"
;
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 410 "tools\\wpp_new\\ppl.l"
+#line 421 "ppl.l"
return *ppy_text;
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 411 "tools\\wpp_new\\ppl.l"
+#line 422 "ppl.l"
newline(0);
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 412 "tools\\wpp_new\\ppl.l"
+#line 423 "ppl.l"
ppy_error("Identifier expected");
YY_BREAK
/*
@@ -1852,27 +1864,27 @@ ppy_error("Identifier expected");
*/
case 68:
YY_RULE_SETUP
-#line 420 "tools\\wpp_new\\ppl.l"
+#line 431 "ppl.l"
if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 421 "tools\\wpp_new\\ppl.l"
+#line 432 "ppl.l"
if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 422 "tools\\wpp_new\\ppl.l"
+#line 433 "ppl.l"
if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 423 "tools\\wpp_new\\ppl.l"
+#line 434 "ppl.l"
newline(1); yy_pop_state(); if(yy_current_state() != pp_ignore) { return tNL; }
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 424 "tools\\wpp_new\\ppl.l"
+#line 435 "ppl.l"
newline(0);
YY_BREAK
/*
@@ -1880,27 +1892,27 @@ newline(0);
*/
case 73:
YY_RULE_SETUP
-#line 429 "tools\\wpp_new\\ppl.l"
+#line 440 "ppl.l"
ppy_lval.cptr = pp_xstrdup(ppy_text); ppy_lval.cptr[ppy_leng-1] = '\0'; yy_pp_state(pp_macro); return tMACRO;
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 430 "tools\\wpp_new\\ppl.l"
+#line 441 "ppl.l"
ppy_lval.cptr = pp_xstrdup(ppy_text); yy_pp_state(pp_define); return tDEFINE;
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 431 "tools\\wpp_new\\ppl.l"
+#line 442 "ppl.l"
;
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 432 "tools\\wpp_new\\ppl.l"
+#line 443 "ppl.l"
newline(0);
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 433 "tools\\wpp_new\\ppl.l"
+#line 444 "ppl.l"
perror("Identifier expected");
YY_BREAK
/*
@@ -1908,37 +1920,37 @@ perror("Identifier expected");
*/
case 78:
YY_RULE_SETUP
-#line 438 "tools\\wpp_new\\ppl.l"
+#line 449 "ppl.l"
ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 439 "tools\\wpp_new\\ppl.l"
+#line 450 "ppl.l"
ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 440 "tools\\wpp_new\\ppl.l"
+#line 451 "ppl.l"
newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL;
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 441 "tools\\wpp_new\\ppl.l"
+#line 452 "ppl.l"
newline(0);
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 442 "tools\\wpp_new\\ppl.l"
+#line 453 "ppl.l"
newline(1); yy_pop_state(); return tNL;
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 443 "tools\\wpp_new\\ppl.l"
+#line 454 "ppl.l"
new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 444 "tools\\wpp_new\\ppl.l"
+#line 455 "ppl.l"
new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
YY_BREAK
/*
@@ -1946,37 +1958,37 @@ new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
*/
case 85:
YY_RULE_SETUP
-#line 449 "tools\\wpp_new\\ppl.l"
+#line 460 "ppl.l"
yy_pp_state(pp_mbody); return tMACROEND;
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 450 "tools\\wpp_new\\ppl.l"
+#line 461 "ppl.l"
;
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 451 "tools\\wpp_new\\ppl.l"
+#line 462 "ppl.l"
ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 452 "tools\\wpp_new\\ppl.l"
+#line 463 "ppl.l"
return ',';
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 453 "tools\\wpp_new\\ppl.l"
+#line 464 "ppl.l"
return tELIPSIS;
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 454 "tools\\wpp_new\\ppl.l"
+#line 465 "ppl.l"
ppy_error("Argument identifier expected");
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 455 "tools\\wpp_new\\ppl.l"
+#line 466 "ppl.l"
newline(0);
YY_BREAK
/*
@@ -1984,57 +1996,57 @@ newline(0);
*/
case 92:
YY_RULE_SETUP
-#line 460 "tools\\wpp_new\\ppl.l"
+#line 471 "ppl.l"
ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 461 "tools\\wpp_new\\ppl.l"
+#line 472 "ppl.l"
ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 462 "tools\\wpp_new\\ppl.l"
+#line 473 "ppl.l"
return tCONCAT;
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 463 "tools\\wpp_new\\ppl.l"
+#line 474 "ppl.l"
return tSTRINGIZE;
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 464 "tools\\wpp_new\\ppl.l"
+#line 475 "ppl.l"
ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 465 "tools\\wpp_new\\ppl.l"
+#line 476 "ppl.l"
ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 466 "tools\\wpp_new\\ppl.l"
+#line 477 "ppl.l"
newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL;
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 467 "tools\\wpp_new\\ppl.l"
+#line 478 "ppl.l"
newline(0);
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 468 "tools\\wpp_new\\ppl.l"
+#line 479 "ppl.l"
newline(1); yy_pop_state(); return tNL;
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 469 "tools\\wpp_new\\ppl.l"
+#line 480 "ppl.l"
new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 470 "tools\\wpp_new\\ppl.l"
+#line 481 "ppl.l"
new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
YY_BREAK
/*
@@ -2051,12 +2063,12 @@ case 103:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 481 "tools\\wpp_new\\ppl.l"
+#line 492 "ppl.l"
yy_pp_state(pp_macscan);
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 482 "tools\\wpp_new\\ppl.l"
+#line 493 "ppl.l"
{
if(yy_top_state() != pp_macscan)
newline(0);
@@ -2064,12 +2076,12 @@ YY_RULE_SETUP
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 486 "tools\\wpp_new\\ppl.l"
+#line 497 "ppl.l"
newline(0);
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 487 "tools\\wpp_new\\ppl.l"
+#line 498 "ppl.l"
{
macexpstackentry_t *mac = pop_macro();
yy_pop_state();
@@ -2084,7 +2096,7 @@ YY_RULE_SETUP
*/
case 107:
YY_RULE_SETUP
-#line 499 "tools\\wpp_new\\ppl.l"
+#line 510 "ppl.l"
{
if(++MACROPARENTHESES() > 1)
add_text_to_macro(ppy_text, ppy_leng);
@@ -2092,7 +2104,7 @@ YY_RULE_SETUP
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 503 "tools\\wpp_new\\ppl.l"
+#line 514 "ppl.l"
{
if(--MACROPARENTHESES() == 0)
{
@@ -2105,7 +2117,7 @@ YY_RULE_SETUP
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 512 "tools\\wpp_new\\ppl.l"
+#line 523 "ppl.l"
{
if(MACROPARENTHESES() > 1)
add_text_to_macro(ppy_text, ppy_leng);
@@ -2115,32 +2127,32 @@ YY_RULE_SETUP
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 518 "tools\\wpp_new\\ppl.l"
+#line 529 "ppl.l"
new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 519 "tools\\wpp_new\\ppl.l"
+#line 530 "ppl.l"
new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 520 "tools\\wpp_new\\ppl.l"
+#line 531 "ppl.l"
yy_push_state(pp_comment); add_text_to_macro(" ", 1);
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 521 "tools\\wpp_new\\ppl.l"
+#line 532 "ppl.l"
pp_status.line_number++; pp_status.char_number = 1; add_text_to_macro(ppy_text, ppy_leng);
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 522 "tools\\wpp_new\\ppl.l"
+#line 533 "ppl.l"
add_text_to_macro(ppy_text, ppy_leng);
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 523 "tools\\wpp_new\\ppl.l"
+#line 534 "ppl.l"
newline(0);
YY_BREAK
/*
@@ -2148,22 +2160,22 @@ newline(0);
*/
case 116:
YY_RULE_SETUP
-#line 528 "tools\\wpp_new\\ppl.l"
+#line 539 "ppl.l"
yy_push_state(pp_comment);
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 529 "tools\\wpp_new\\ppl.l"
+#line 540 "ppl.l"
;
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 530 "tools\\wpp_new\\ppl.l"
+#line 541 "ppl.l"
newline(0);
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 531 "tools\\wpp_new\\ppl.l"
+#line 542 "ppl.l"
yy_pop_state();
YY_BREAK
/*
@@ -2171,7 +2183,7 @@ yy_pop_state();
*/
case 120:
YY_RULE_SETUP
-#line 536 "tools\\wpp_new\\ppl.l"
+#line 547 "ppl.l"
{
if(ppy_text[ppy_leng-1] == '\\')
ppy_warning("C++ style comment ends with an escaped newline (escape ignored)");
@@ -2182,22 +2194,22 @@ YY_RULE_SETUP
*/
case 121:
YY_RULE_SETUP
-#line 544 "tools\\wpp_new\\ppl.l"
+#line 555 "ppl.l"
pp_incl_state.seen_junk++; new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 545 "tools\\wpp_new\\ppl.l"
+#line 556 "ppl.l"
pp_incl_state.seen_junk++; new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 546 "tools\\wpp_new\\ppl.l"
+#line 557 "ppl.l"
add_string(ppy_text, ppy_leng);
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 547 "tools\\wpp_new\\ppl.l"
+#line 558 "ppl.l"
{
add_string(ppy_text, ppy_leng);
yy_pop_state();
@@ -2213,8 +2225,6 @@ YY_RULE_SETUP
return tDQSTRING;
case pp_line:
ppy_lval.cptr = get_string();
- if (is_c_h_include(ppy_lval.cptr, 1)) pass_data=0;
- else pass_data=1;
return tDQSTRING;
default:
put_string();
@@ -2223,12 +2233,12 @@ YY_RULE_SETUP
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 569 "tools\\wpp_new\\ppl.l"
+#line 578 "ppl.l"
add_string(ppy_text, ppy_leng);
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 570 "tools\\wpp_new\\ppl.l"
+#line 579 "ppl.l"
{
add_string(ppy_text, ppy_leng);
yy_pop_state();
@@ -2246,12 +2256,12 @@ YY_RULE_SETUP
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 584 "tools\\wpp_new\\ppl.l"
+#line 593 "ppl.l"
add_string(ppy_text, ppy_leng);
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 585 "tools\\wpp_new\\ppl.l"
+#line 594 "ppl.l"
{
add_string(ppy_text, ppy_leng);
yy_pop_state();
@@ -2261,7 +2271,7 @@ YY_RULE_SETUP
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 591 "tools\\wpp_new\\ppl.l"
+#line 600 "ppl.l"
{
/*
* This is tricky; we need to remove the line-continuation
@@ -2289,12 +2299,12 @@ YY_RULE_SETUP
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 615 "tools\\wpp_new\\ppl.l"
+#line 624 "ppl.l"
add_string(ppy_text, ppy_leng);
YY_BREAK
case 131:
YY_RULE_SETUP
-#line 616 "tools\\wpp_new\\ppl.l"
+#line 625 "ppl.l"
{
newline(1);
add_string(ppy_text, ppy_leng);
@@ -2306,7 +2316,7 @@ YY_RULE_SETUP
*/
case 132:
YY_RULE_SETUP
-#line 625 "tools\\wpp_new\\ppl.l"
+#line 634 "ppl.l"
{
pp_entry_t *ppp;
pp_incl_state.seen_junk++;
@@ -2355,27 +2365,27 @@ YY_RULE_SETUP
*/
case 133:
YY_RULE_SETUP
-#line 671 "tools\\wpp_new\\ppl.l"
+#line 680 "ppl.l"
pp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng);
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 672 "tools\\wpp_new\\ppl.l"
+#line 681 "ppl.l"
put_buffer(ppy_text, ppy_leng);
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 673 "tools\\wpp_new\\ppl.l"
+#line 682 "ppl.l"
newline(1);
YY_BREAK
case 136:
YY_RULE_SETUP
-#line 674 "tools\\wpp_new\\ppl.l"
+#line 683 "ppl.l"
newline(0);
YY_BREAK
case 137:
YY_RULE_SETUP
-#line 675 "tools\\wpp_new\\ppl.l"
+#line 684 "ppl.l"
pp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng);
YY_BREAK
/*
@@ -2384,12 +2394,12 @@ pp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng);
*/
case 138:
YY_RULE_SETUP
-#line 681 "tools\\wpp_new\\ppl.l"
+#line 690 "ppl.l"
put_buffer(ppy_text, ppy_leng);
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 683 "tools\\wpp_new\\ppl.l"
+#line 692 "ppl.l"
{
ppy_lval.cptr=pp_xstrdup(ppy_text);
yy_pop_state();
@@ -2398,12 +2408,12 @@ YY_RULE_SETUP
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 689 "tools\\wpp_new\\ppl.l"
+#line 698 "ppl.l"
;
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 691 "tools\\wpp_new\\ppl.l"
+#line 700 "ppl.l"
{
new_string(); add_string(ppy_text,ppy_leng);yy_push_state(pp_dqs);
}
@@ -2414,7 +2424,7 @@ YY_RULE_SETUP
*/
case 142:
YY_RULE_SETUP
-#line 699 "tools\\wpp_new\\ppl.l"
+#line 708 "ppl.l"
pp_incl_state.seen_junk++; ppy_warning("Unmatched text '%c' (0x%02x); please report\n", isprint(*ppy_text & 0xff) ? *ppy_text : ' ', *ppy_text);
YY_BREAK
case YY_STATE_EOF(INITIAL):
@@ -2439,7 +2449,7 @@ case YY_STATE_EOF(pp_line):
case YY_STATE_EOF(pp_defined):
case YY_STATE_EOF(pp_ignore):
case YY_STATE_EOF(RCINCL):
-#line 701 "tools\\wpp_new\\ppl.l"
+#line 710 "ppl.l"
{
YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
bufferstackentry_t *bep = pop_buffer();
@@ -2464,10 +2474,10 @@ case YY_STATE_EOF(RCINCL):
YY_BREAK
case 143:
YY_RULE_SETUP
-#line 723 "tools\\wpp_new\\ppl.l"
+#line 732 "ppl.l"
ECHO;
YY_BREAK
-#line 2471 "tools\\wpp_new\\lex.yy.c"
+#line 2481 "lex.yy.c"
case YY_END_OF_BUFFER:
{
@@ -3353,7 +3363,7 @@ int main()
return 0;
}
#endif
-#line 723 "tools\\wpp_new\\ppl.l"
+#line 732 "ppl.l"
/*
**************************************************************************
@@ -3425,6 +3435,7 @@ static int make_number(int radix, YYSTYPE *val, const char *str, int len)
int is_ll = 0;
int is_u = 0;
char ext[4];
+ long l;
ext[3] = '\0';
ext[2] = toupper(str[len-1]);
@@ -3462,12 +3473,18 @@ static int make_number(int radix, YYSTYPE *val, const char *str, int len)
#ifdef HAVE_LONG_LONG
if (is_u)
{
+ errno = 0;
val->ull = strtoull(str, NULL, radix);
+ if (val->ull == ULLONG_MAX && errno == ERANGE)
+ ppy_error("integer constant %s is too large\n", str);
return tULONGLONG;
}
else
{
+ errno = 0;
val->sll = strtoll(str, NULL, radix);
+ if ((val->sll == LLONG_MIN || val->sll == LLONG_MAX) && errno == ERANGE)
+ ppy_error("integer constant %s is too large\n", str);
return tSLONGLONG;
}
#else
@@ -3476,22 +3493,38 @@ static int make_number(int radix, YYSTYPE *val, const char *str, int len)
}
else if(is_u && is_l)
{
+ errno = 0;
val->ulong = strtoul(str, NULL, radix);
+ if (val->ulong == ULONG_MAX && errno == ERANGE)
+ ppy_error("integer constant %s is too large\n", str);
return tULONG;
}
else if(!is_u && is_l)
{
+ errno = 0;
val->slong = strtol(str, NULL, radix);
+ if ((val->slong == LONG_MIN || val->slong == LONG_MAX) && errno == ERANGE)
+ ppy_error("integer constant %s is too large\n", str);
return tSLONG;
}
else if(is_u && !is_l)
{
- val->uint = (unsigned int)strtoul(str, NULL, radix);
+ unsigned long ul;
+ errno = 0;
+ ul = strtoul(str, NULL, radix);
+ if ((ul == ULONG_MAX && errno == ERANGE) || (ul > UINT_MAX))
+ ppy_error("integer constant %s is too large\n", str);
+ val->uint = (unsigned int)ul;
return tUINT;
}
/* Else it must be an int... */
- val->sint = (int)strtol(str, NULL, radix);
+ errno = 0;
+ l = strtol(str, NULL, radix);
+ if (((l == LONG_MIN || l == LONG_MAX) && errno == ERANGE) ||
+ (l > INT_MAX) || (l < INT_MIN))
+ ppy_error("integer constant %s is too large\n", str);
+ val->sint = (int)l;
return tSINT;
}
@@ -3825,7 +3858,6 @@ static void push_buffer(pp_entry_t *ppp, char *filename, char *incname, int pop)
bufferstack[bufferstackidx].ncontinuations = ncontinuations;
bufferstack[bufferstackidx].incl = pp_incl_state;
bufferstack[bufferstackidx].include_filename = incname;
- bufferstack[bufferstackidx].pass_data = pass_data;
if(ppp)
ppp->expanding = 1;
@@ -3888,7 +3920,6 @@ static bufferstackentry_t *pop_buffer(void)
}
free(pp_incl_state.ppp);
pp_incl_state = bufferstack[bufferstackidx].incl;
- pass_data = bufferstack[bufferstackidx].pass_data;
}
}
@@ -4044,10 +4075,8 @@ static void put_buffer(const char *s, int len)
{
if(top_macro())
add_text_to_macro(s, len);
- else {
- if(pass_data)
+ else
fwrite(s, 1, len, ppy_out);
- }
}
@@ -4056,15 +4085,6 @@ static void put_buffer(const char *s, int len)
* Include management
*-------------------------------------------------------------------------
*/
-static int is_c_h_include(char *fname, int quoted)
-{
- int sl=strlen(fname);
- if (sl < 2 + 2 * quoted) return 0;
- if ((toupper(fname[sl-1-quoted])!='H') && (toupper(fname[sl-1-quoted])!='C')) return 0;
- if (fname[sl-2-quoted]!='.') return 0;
- return 1;
-}
-
void pp_do_include(char *fname, int type)
{
char *newpath;
@@ -4100,12 +4120,10 @@ void pp_do_include(char *fname, int type)
pp_incl_state.seen_junk = 0;
pp_incl_state.state = 0;
pp_incl_state.ppp = NULL;
- if (is_c_h_include(newpath, 0)) pass_data=0;
- else pass_data=1;
if(pp_status.debug)
- fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d ,pass_data=%d\n",
- pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth, pass_data);
+ fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n",
+ pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);
ppy__switch_to_buffer(ppy__create_buffer(ppy_in, YY_BUF_SIZE));
fprintf(ppy_out, "# 1 \"%s\" 1%s\n", newpath, type ? "" : " 3");
diff --git a/reactos/tools/wpp/ppl.l b/reactos/tools/wpp/ppl.l
index 58fda7bc30b..e71bf6ecf20 100644
--- a/reactos/tools/wpp/ppl.l
+++ b/reactos/tools/wpp/ppl.l
@@ -126,7 +126,7 @@
*/
%option stack
%option 8bit never-interactive
-%option nounput
+%option noinput nounput
%option prefix="ppy_"
%x pp_pp
@@ -156,12 +156,27 @@ cident [a-zA-Z_][0-9a-zA-Z_]*
ul [uUlL]|[uUlL][lL]|[lL][uU]|[lL][lL][uU]|[uU][lL][lL]|[lL][uU][lL]
%{
-#include
+#include "config.h"
+#include "wine/port.h"
#include
#include
#include
#include
#include
+#include
+#include
+
+#ifndef LLONG_MAX
+# define LLONG_MAX ((long long)0x7fffffff << 32 | 0xffffffff)
+# define LLONG_MIN (-LLONG_MAX - 1)
+#endif
+#ifndef ULLONG_MAX
+# define ULLONG_MAX ((long long)0xffffffff << 32 | 0xffffffff)
+#endif
+
+#ifndef HAVE_UNISTD_H
+#define YY_NO_UNISTD_H
+#endif
#include "wpp_private.h"
#include "ppy.tab.h"
@@ -200,7 +215,6 @@ typedef struct bufferstackentry {
/* Include management */
include_state_t incl;
char *include_filename;
- int pass_data;
} bufferstackentry_t;
#define ALLOCBLOCKSIZE (1 << 10) /* Allocate these chunks at a time for string-buffers */
@@ -233,7 +247,6 @@ typedef struct macexpstackentry {
static void newline(int);
static int make_number(int radix, YYSTYPE *val, const char *str, int len);
static void put_buffer(const char *s, int len);
-static int is_c_h_include(char *fname, int quoted);
/* Buffer management */
static void push_buffer(pp_entry_t *ppp, char *filename, char *incname, int pop);
static bufferstackentry_t *pop_buffer(void);
@@ -272,8 +285,6 @@ static int macexpstackidx = 0;
static bufferstackentry_t bufferstack[MAXBUFFERSTACK];
static int bufferstackidx = 0;
-static int pass_data=1;
-
/*
* Global variables
*/
@@ -559,8 +570,6 @@ includelogicentry_t *pp_includelogiclist = NULL;
return tDQSTRING;
case pp_line:
ppy_lval.cptr = get_string();
- if (is_c_h_include(ppy_lval.cptr, 1)) pass_data=0;
- else pass_data=1;
return tDQSTRING;
default:
put_string();
@@ -791,6 +800,7 @@ static int make_number(int radix, YYSTYPE *val, const char *str, int len)
int is_ll = 0;
int is_u = 0;
char ext[4];
+ long l;
ext[3] = '\0';
ext[2] = toupper(str[len-1]);
@@ -828,12 +838,18 @@ static int make_number(int radix, YYSTYPE *val, const char *str, int len)
#ifdef HAVE_LONG_LONG
if (is_u)
{
+ errno = 0;
val->ull = strtoull(str, NULL, radix);
+ if (val->ull == ULLONG_MAX && errno == ERANGE)
+ ppy_error("integer constant %s is too large\n", str);
return tULONGLONG;
}
else
{
+ errno = 0;
val->sll = strtoll(str, NULL, radix);
+ if ((val->sll == LLONG_MIN || val->sll == LLONG_MAX) && errno == ERANGE)
+ ppy_error("integer constant %s is too large\n", str);
return tSLONGLONG;
}
#else
@@ -842,22 +858,38 @@ static int make_number(int radix, YYSTYPE *val, const char *str, int len)
}
else if(is_u && is_l)
{
+ errno = 0;
val->ulong = strtoul(str, NULL, radix);
+ if (val->ulong == ULONG_MAX && errno == ERANGE)
+ ppy_error("integer constant %s is too large\n", str);
return tULONG;
}
else if(!is_u && is_l)
{
+ errno = 0;
val->slong = strtol(str, NULL, radix);
+ if ((val->slong == LONG_MIN || val->slong == LONG_MAX) && errno == ERANGE)
+ ppy_error("integer constant %s is too large\n", str);
return tSLONG;
}
else if(is_u && !is_l)
{
- val->uint = (unsigned int)strtoul(str, NULL, radix);
+ unsigned long ul;
+ errno = 0;
+ ul = strtoul(str, NULL, radix);
+ if ((ul == ULONG_MAX && errno == ERANGE) || (ul > UINT_MAX))
+ ppy_error("integer constant %s is too large\n", str);
+ val->uint = (unsigned int)ul;
return tUINT;
}
/* Else it must be an int... */
- val->sint = (int)strtol(str, NULL, radix);
+ errno = 0;
+ l = strtol(str, NULL, radix);
+ if (((l == LONG_MIN || l == LONG_MAX) && errno == ERANGE) ||
+ (l > INT_MAX) || (l < INT_MIN))
+ ppy_error("integer constant %s is too large\n", str);
+ val->sint = (int)l;
return tSINT;
}
@@ -1191,7 +1223,6 @@ static void push_buffer(pp_entry_t *ppp, char *filename, char *incname, int pop)
bufferstack[bufferstackidx].ncontinuations = ncontinuations;
bufferstack[bufferstackidx].incl = pp_incl_state;
bufferstack[bufferstackidx].include_filename = incname;
- bufferstack[bufferstackidx].pass_data = pass_data;
if(ppp)
ppp->expanding = 1;
@@ -1254,7 +1285,6 @@ static bufferstackentry_t *pop_buffer(void)
}
free(pp_incl_state.ppp);
pp_incl_state = bufferstack[bufferstackidx].incl;
- pass_data = bufferstack[bufferstackidx].pass_data;
}
}
@@ -1410,10 +1440,8 @@ static void put_buffer(const char *s, int len)
{
if(top_macro())
add_text_to_macro(s, len);
- else {
- if(pass_data)
+ else
fwrite(s, 1, len, ppy_out);
- }
}
@@ -1422,15 +1450,6 @@ static void put_buffer(const char *s, int len)
* Include management
*-------------------------------------------------------------------------
*/
-static int is_c_h_include(char *fname, int quoted)
-{
- int sl=strlen(fname);
- if (sl < 2 + 2 * quoted) return 0;
- if ((toupper(fname[sl-1-quoted])!='H') && (toupper(fname[sl-1-quoted])!='C')) return 0;
- if (fname[sl-2-quoted]!='.') return 0;
- return 1;
-}
-
void pp_do_include(char *fname, int type)
{
char *newpath;
@@ -1466,12 +1485,10 @@ void pp_do_include(char *fname, int type)
pp_incl_state.seen_junk = 0;
pp_incl_state.state = 0;
pp_incl_state.ppp = NULL;
- if (is_c_h_include(newpath, 0)) pass_data=0;
- else pass_data=1;
if(pp_status.debug)
- fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d ,pass_data=%d\n",
- pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth, pass_data);
+ fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n",
+ pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);
ppy__switch_to_buffer(ppy__create_buffer(ppy_in, YY_BUF_SIZE));
fprintf(ppy_out, "# 1 \"%s\" 1%s\n", newpath, type ? "" : " 3");
diff --git a/reactos/tools/wpp/ppy.tab.c b/reactos/tools/wpp/ppy.tab.c
index fab635acf3c..116821d2d35 100644
--- a/reactos/tools/wpp/ppy.tab.c
+++ b/reactos/tools/wpp/ppy.tab.c
@@ -158,7 +158,7 @@
/* Copy the first part of user declarations. */
-#line 30 "tools\\wpp_new\\ppy.y"
+#line 30 "ppy.y"
#include "config.h"
#include "wine/port.h"
@@ -274,7 +274,7 @@ static int nmacro_args;
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 126 "tools\\wpp_new\\ppy.y"
+#line 126 "ppy.y"
typedef union YYSTYPE {
int sint;
unsigned int uint;
@@ -289,7 +289,7 @@ typedef union YYSTYPE {
mtext_t *mtext;
} YYSTYPE;
/* Line 196 of yacc.c. */
-#line 293 "tools\\wpp_new\\ppy.tab.c"
+#line 293 "ppy.tab.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
@@ -301,7 +301,7 @@ typedef union YYSTYPE {
/* Line 219 of yacc.c. */
-#line 305 "tools\\wpp_new\\ppy.tab.c"
+#line 305 "ppy.tab.c"
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
@@ -1214,7 +1214,7 @@ yyparse ()
#endif
#endif
{
-
+
int yystate;
int yyn;
int yyresult;
@@ -1457,27 +1457,27 @@ yyreduce:
switch (yyn)
{
case 4:
-#line 186 "tools\\wpp_new\\ppy.y"
+#line 186 "ppy.y"
{ pp_do_include((yyvsp[-1].cptr), 1); ;}
break;
case 5:
-#line 187 "tools\\wpp_new\\ppy.y"
+#line 187 "ppy.y"
{ pp_do_include((yyvsp[-1].cptr), 0); ;}
break;
case 6:
-#line 188 "tools\\wpp_new\\ppy.y"
+#line 188 "ppy.y"
{ pp_next_if_state(boolean(&(yyvsp[-1].cval))); ;}
break;
case 7:
-#line 189 "tools\\wpp_new\\ppy.y"
+#line 189 "ppy.y"
{ pp_next_if_state(pplookup((yyvsp[-1].cptr)) != NULL); free((yyvsp[-1].cptr)); ;}
break;
case 8:
-#line 190 "tools\\wpp_new\\ppy.y"
+#line 190 "ppy.y"
{
int t = pplookup((yyvsp[-1].cptr)) == NULL;
if(pp_incl_state.state == 0 && t && !pp_incl_state.seen_junk)
@@ -1501,7 +1501,7 @@ yyreduce:
break;
case 9:
-#line 210 "tools\\wpp_new\\ppy.y"
+#line 210 "ppy.y"
{
pp_if_state_t s = pp_pop_if();
switch(s)
@@ -1526,7 +1526,7 @@ yyreduce:
break;
case 10:
-#line 231 "tools\\wpp_new\\ppy.y"
+#line 231 "ppy.y"
{
pp_if_state_t s = pp_pop_if();
switch(s)
@@ -1553,7 +1553,7 @@ yyreduce:
break;
case 11:
-#line 254 "tools\\wpp_new\\ppy.y"
+#line 254 "ppy.y"
{
pp_pop_if();
if(pp_incl_state.ifdepth == pp_get_if_depth() && pp_incl_state.state == 1)
@@ -1572,74 +1572,74 @@ yyreduce:
break;
case 12:
-#line 269 "tools\\wpp_new\\ppy.y"
+#line 269 "ppy.y"
{ pp_del_define((yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); ;}
break;
case 13:
-#line 270 "tools\\wpp_new\\ppy.y"
+#line 270 "ppy.y"
{ pp_add_define((yyvsp[-2].cptr), (yyvsp[-1].cptr)); ;}
break;
case 14:
-#line 271 "tools\\wpp_new\\ppy.y"
+#line 271 "ppy.y"
{
pp_add_macro((yyvsp[-5].cptr), macro_args, nmacro_args, (yyvsp[-1].mtext));
;}
break;
case 15:
-#line 274 "tools\\wpp_new\\ppy.y"
+#line 274 "ppy.y"
{ fprintf(ppy_out, "# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); ;}
break;
case 16:
-#line 275 "tools\\wpp_new\\ppy.y"
+#line 275 "ppy.y"
{ fprintf(ppy_out, "# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); ;}
break;
case 17:
-#line 277 "tools\\wpp_new\\ppy.y"
+#line 277 "ppy.y"
{ fprintf(ppy_out, "# %d %s %d\n", (yyvsp[-3].sint), (yyvsp[-2].cptr), (yyvsp[-1].sint)); free((yyvsp[-2].cptr)); ;}
break;
case 18:
-#line 279 "tools\\wpp_new\\ppy.y"
+#line 279 "ppy.y"
{ fprintf(ppy_out, "# %d %s %d %d\n", (yyvsp[-4].sint) ,(yyvsp[-3].cptr), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-3].cptr)); ;}
break;
case 19:
-#line 281 "tools\\wpp_new\\ppy.y"
+#line 281 "ppy.y"
{ fprintf(ppy_out, "# %d %s %d %d %d\n", (yyvsp[-5].sint) ,(yyvsp[-4].cptr) ,(yyvsp[-3].sint) ,(yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-4].cptr)); ;}
break;
case 20:
-#line 283 "tools\\wpp_new\\ppy.y"
+#line 283 "ppy.y"
{ fprintf(ppy_out, "# %d %s %d %d %d %d\n", (yyvsp[-6].sint) ,(yyvsp[-5].cptr) ,(yyvsp[-4].sint) ,(yyvsp[-3].sint), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-5].cptr)); ;}
break;
case 22:
-#line 285 "tools\\wpp_new\\ppy.y"
- { ppy_error("#error directive: '%s'", (yyvsp[-1].cptr)); if((yyvsp[-1].cptr)) free((yyvsp[-1].cptr)); ;}
+#line 285 "ppy.y"
+ { ppy_error("#error directive: '%s'", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); ;}
break;
case 23:
-#line 286 "tools\\wpp_new\\ppy.y"
- { ppy_warning("#warning directive: '%s'", (yyvsp[-1].cptr)); if((yyvsp[-1].cptr)) free((yyvsp[-1].cptr)); ;}
+#line 286 "ppy.y"
+ { ppy_warning("#warning directive: '%s'", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); ;}
break;
case 24:
-#line 287 "tools\\wpp_new\\ppy.y"
- { fprintf(ppy_out, "#pragma %s\n", (yyvsp[-1].cptr) ? (yyvsp[-1].cptr) : ""); if ((yyvsp[-1].cptr)) free((yyvsp[-1].cptr)); ;}
+#line 287 "ppy.y"
+ { fprintf(ppy_out, "#pragma %s\n", (yyvsp[-1].cptr) ? (yyvsp[-1].cptr) : ""); free((yyvsp[-1].cptr)); ;}
break;
case 25:
-#line 288 "tools\\wpp_new\\ppy.y"
- { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", (yyvsp[-1].cptr)); if((yyvsp[-1].cptr)) free((yyvsp[-1].cptr)); ;}
+#line 288 "ppy.y"
+ { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); ;}
break;
case 26:
-#line 289 "tools\\wpp_new\\ppy.y"
+#line 289 "ppy.y"
{
int nl=strlen((yyvsp[0].cptr)) +3;
char *fn=pp_xmalloc(nl);
@@ -1650,94 +1650,94 @@ yyreduce:
break;
case 27:
-#line 296 "tools\\wpp_new\\ppy.y"
+#line 296 "ppy.y"
{
pp_do_include((yyvsp[0].cptr),1);
;}
break;
case 28:
-#line 302 "tools\\wpp_new\\ppy.y"
+#line 302 "ppy.y"
{ (yyval.cptr) = NULL; ;}
break;
case 29:
-#line 303 "tools\\wpp_new\\ppy.y"
+#line 303 "ppy.y"
{ (yyval.cptr) = (yyvsp[0].cptr); ;}
break;
case 30:
-#line 306 "tools\\wpp_new\\ppy.y"
+#line 306 "ppy.y"
{ (yyval.cptr) = (yyvsp[0].cptr); ;}
break;
case 31:
-#line 307 "tools\\wpp_new\\ppy.y"
+#line 307 "ppy.y"
{ (yyval.cptr) = (yyvsp[0].cptr); ;}
break;
case 32:
-#line 308 "tools\\wpp_new\\ppy.y"
+#line 308 "ppy.y"
{ (yyval.cptr) = (yyvsp[0].cptr); ;}
break;
case 33:
-#line 309 "tools\\wpp_new\\ppy.y"
+#line 309 "ppy.y"
{ (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); ;}
break;
case 34:
-#line 310 "tools\\wpp_new\\ppy.y"
+#line 310 "ppy.y"
{ (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); ;}
break;
case 35:
-#line 311 "tools\\wpp_new\\ppy.y"
+#line 311 "ppy.y"
{ (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); ;}
break;
case 36:
-#line 314 "tools\\wpp_new\\ppy.y"
+#line 314 "ppy.y"
{ macro_args = NULL; nmacro_args = 0; ;}
break;
case 37:
-#line 317 "tools\\wpp_new\\ppy.y"
+#line 317 "ppy.y"
{ (yyval.sint) = 0; macro_args = NULL; nmacro_args = 0; ;}
break;
case 38:
-#line 318 "tools\\wpp_new\\ppy.y"
+#line 318 "ppy.y"
{ (yyval.sint) = nmacro_args; ;}
break;
case 39:
-#line 321 "tools\\wpp_new\\ppy.y"
+#line 321 "ppy.y"
{ (yyval.marg) = (yyvsp[0].marg); ;}
break;
case 40:
-#line 322 "tools\\wpp_new\\ppy.y"
+#line 322 "ppy.y"
{ (yyval.marg) = add_new_marg(NULL, arg_list); nmacro_args *= -1; ;}
break;
case 41:
-#line 325 "tools\\wpp_new\\ppy.y"
+#line 325 "ppy.y"
{ (yyval.marg) = add_new_marg((yyvsp[0].cptr), arg_single); ;}
break;
case 42:
-#line 326 "tools\\wpp_new\\ppy.y"
+#line 326 "ppy.y"
{ (yyval.marg) = add_new_marg((yyvsp[0].cptr), arg_single); ;}
break;
case 43:
-#line 330 "tools\\wpp_new\\ppy.y"
+#line 330 "ppy.y"
{ (yyval.mtext) = NULL; ;}
break;
case 44:
-#line 331 "tools\\wpp_new\\ppy.y"
+#line 331 "ppy.y"
{
for((yyval.mtext) = (yyvsp[0].mtext); (yyval.mtext) && (yyval.mtext)->prev; (yyval.mtext) = (yyval.mtext)->prev)
;
@@ -1745,37 +1745,37 @@ yyreduce:
break;
case 45:
-#line 337 "tools\\wpp_new\\ppy.y"
+#line 337 "ppy.y"
{ (yyval.mtext) = (yyvsp[0].mtext); ;}
break;
case 46:
-#line 338 "tools\\wpp_new\\ppy.y"
+#line 338 "ppy.y"
{ (yyval.mtext) = combine_mtext((yyvsp[-1].mtext), (yyvsp[0].mtext)); ;}
break;
case 47:
-#line 341 "tools\\wpp_new\\ppy.y"
+#line 341 "ppy.y"
{ (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); ;}
break;
case 48:
-#line 342 "tools\\wpp_new\\ppy.y"
+#line 342 "ppy.y"
{ (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); ;}
break;
case 49:
-#line 343 "tools\\wpp_new\\ppy.y"
+#line 343 "ppy.y"
{ (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); ;}
break;
case 50:
-#line 344 "tools\\wpp_new\\ppy.y"
+#line 344 "ppy.y"
{ (yyval.mtext) = new_mtext(NULL, 0, exp_concat); ;}
break;
case 51:
-#line 345 "tools\\wpp_new\\ppy.y"
+#line 345 "ppy.y"
{
int mat = marg_index((yyvsp[0].cptr));
if(mat < 0)
@@ -1785,7 +1785,7 @@ yyreduce:
break;
case 52:
-#line 351 "tools\\wpp_new\\ppy.y"
+#line 351 "ppy.y"
{
int mat = marg_index((yyvsp[0].cptr));
if(mat >= 0)
@@ -1796,162 +1796,162 @@ yyreduce:
break;
case 53:
-#line 360 "tools\\wpp_new\\ppy.y"
+#line 360 "ppy.y"
{ (yyval.cval).type = cv_sint; (yyval.cval).val.si = (yyvsp[0].sint); ;}
break;
case 54:
-#line 361 "tools\\wpp_new\\ppy.y"
+#line 361 "ppy.y"
{ (yyval.cval).type = cv_uint; (yyval.cval).val.ui = (yyvsp[0].uint); ;}
break;
case 55:
-#line 362 "tools\\wpp_new\\ppy.y"
+#line 362 "ppy.y"
{ (yyval.cval).type = cv_slong; (yyval.cval).val.sl = (yyvsp[0].slong); ;}
break;
case 56:
-#line 363 "tools\\wpp_new\\ppy.y"
+#line 363 "ppy.y"
{ (yyval.cval).type = cv_ulong; (yyval.cval).val.ul = (yyvsp[0].ulong); ;}
break;
case 57:
-#line 364 "tools\\wpp_new\\ppy.y"
+#line 364 "ppy.y"
{ (yyval.cval).type = cv_sll; (yyval.cval).val.sll = (yyvsp[0].sll); ;}
break;
case 58:
-#line 365 "tools\\wpp_new\\ppy.y"
+#line 365 "ppy.y"
{ (yyval.cval).type = cv_ull; (yyval.cval).val.ull = (yyvsp[0].ull); ;}
break;
case 59:
-#line 366 "tools\\wpp_new\\ppy.y"
+#line 366 "ppy.y"
{ (yyval.cval).type = cv_sint; (yyval.cval).val.si = pplookup((yyvsp[0].cptr)) != NULL; ;}
break;
case 60:
-#line 367 "tools\\wpp_new\\ppy.y"
+#line 367 "ppy.y"
{ (yyval.cval).type = cv_sint; (yyval.cval).val.si = pplookup((yyvsp[-1].cptr)) != NULL; ;}
break;
case 61:
-#line 368 "tools\\wpp_new\\ppy.y"
+#line 368 "ppy.y"
{ (yyval.cval).type = cv_sint; (yyval.cval).val.si = 0; ;}
break;
case 62:
-#line 369 "tools\\wpp_new\\ppy.y"
+#line 369 "ppy.y"
{ (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[-2].cval)) || boolean(&(yyvsp[0].cval)); ;}
break;
case 63:
-#line 370 "tools\\wpp_new\\ppy.y"
+#line 370 "ppy.y"
{ (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[-2].cval)) && boolean(&(yyvsp[0].cval)); ;}
break;
case 64:
-#line 371 "tools\\wpp_new\\ppy.y"
+#line 371 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), ==) ;}
break;
case 65:
-#line 372 "tools\\wpp_new\\ppy.y"
+#line 372 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), !=) ;}
break;
case 66:
-#line 373 "tools\\wpp_new\\ppy.y"
+#line 373 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <) ;}
break;
case 67:
-#line 374 "tools\\wpp_new\\ppy.y"
+#line 374 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >) ;}
break;
case 68:
-#line 375 "tools\\wpp_new\\ppy.y"
+#line 375 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <=) ;}
break;
case 69:
-#line 376 "tools\\wpp_new\\ppy.y"
+#line 376 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >=) ;}
break;
case 70:
-#line 377 "tools\\wpp_new\\ppy.y"
+#line 377 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), +) ;}
break;
case 71:
-#line 378 "tools\\wpp_new\\ppy.y"
+#line 378 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), -) ;}
break;
case 72:
-#line 379 "tools\\wpp_new\\ppy.y"
+#line 379 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), ^) ;}
break;
case 73:
-#line 380 "tools\\wpp_new\\ppy.y"
+#line 380 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), &) ;}
break;
case 74:
-#line 381 "tools\\wpp_new\\ppy.y"
+#line 381 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), |) ;}
break;
case 75:
-#line 382 "tools\\wpp_new\\ppy.y"
+#line 382 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), *) ;}
break;
case 76:
-#line 383 "tools\\wpp_new\\ppy.y"
+#line 383 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), /) ;}
break;
case 77:
-#line 384 "tools\\wpp_new\\ppy.y"
+#line 384 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <<) ;}
break;
case 78:
-#line 385 "tools\\wpp_new\\ppy.y"
+#line 385 "ppy.y"
{ promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >>) ;}
break;
case 79:
-#line 386 "tools\\wpp_new\\ppy.y"
+#line 386 "ppy.y"
{ (yyval.cval) = (yyvsp[0].cval); ;}
break;
case 80:
-#line 387 "tools\\wpp_new\\ppy.y"
+#line 387 "ppy.y"
{ UNARY_OP((yyval.cval), (yyvsp[0].cval), -) ;}
break;
case 81:
-#line 388 "tools\\wpp_new\\ppy.y"
+#line 388 "ppy.y"
{ UNARY_OP((yyval.cval), (yyvsp[0].cval), ~) ;}
break;
case 82:
-#line 389 "tools\\wpp_new\\ppy.y"
+#line 389 "ppy.y"
{ (yyval.cval).type = cv_sint; (yyval.cval).val.si = !boolean(&(yyvsp[0].cval)); ;}
break;
case 83:
-#line 390 "tools\\wpp_new\\ppy.y"
+#line 390 "ppy.y"
{ (yyval.cval) = (yyvsp[-1].cval); ;}
break;
case 84:
-#line 391 "tools\\wpp_new\\ppy.y"
+#line 391 "ppy.y"
{ (yyval.cval) = boolean(&(yyvsp[-4].cval)) ? (yyvsp[-2].cval) : (yyvsp[0].cval); ;}
break;
@@ -1960,7 +1960,7 @@ yyreduce:
}
/* Line 1126 of yacc.c. */
-#line 1964 "tools\\wpp_new\\ppy.tab.c"
+#line 1964 "ppy.tab.c"
yyvsp -= yylen;
yyssp -= yylen;
@@ -2228,7 +2228,7 @@ yyreturn:
}
-#line 394 "tools\\wpp_new\\ppy.y"
+#line 394 "ppy.y"
/*
diff --git a/reactos/tools/wpp/ppy.tab.h b/reactos/tools/wpp/ppy.tab.h
index d152cc64534..4a503f1a1f1 100644
--- a/reactos/tools/wpp/ppy.tab.h
+++ b/reactos/tools/wpp/ppy.tab.h
@@ -123,7 +123,7 @@
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 126 "tools\\wpp_new\\ppy.y"
+#line 126 "ppy.y"
typedef union YYSTYPE {
int sint;
unsigned int uint;
@@ -138,7 +138,7 @@ typedef union YYSTYPE {
mtext_t *mtext;
} YYSTYPE;
/* Line 1447 of yacc.c. */
-#line 142 "tools\\wpp_new\\ppy.tab.h"
+#line 142 "ppy.tab.h"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
diff --git a/reactos/tools/wpp/ppy.y b/reactos/tools/wpp/ppy.y
index 3209ee2cc36..fc94bb54aca 100644
--- a/reactos/tools/wpp/ppy.y
+++ b/reactos/tools/wpp/ppy.y
@@ -282,10 +282,10 @@ preprocessor
| tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tSINT tNL
{ fprintf(ppy_out, "# %d %s %d %d %d %d\n", $2 ,$3 ,$4 ,$5, $6, $7); free($3); }
| tGCCLINE tNL /* The null-token */
- | tERROR opt_text tNL { ppy_error("#error directive: '%s'", $2); if($2) free($2); }
- | tWARNING opt_text tNL { ppy_warning("#warning directive: '%s'", $2); if($2) free($2); }
- | tPRAGMA opt_text tNL { fprintf(ppy_out, "#pragma %s\n", $2 ? $2 : ""); if ($2) free($2); }
- | tPPIDENT opt_text tNL { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", $2); if($2) free($2); }
+ | tERROR opt_text tNL { ppy_error("#error directive: '%s'", $2); free($2); }
+ | tWARNING opt_text tNL { ppy_warning("#warning directive: '%s'", $2); free($2); }
+ | tPRAGMA opt_text tNL { fprintf(ppy_out, "#pragma %s\n", $2 ? $2 : ""); free($2); }
+ | tPPIDENT opt_text tNL { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", $2); free($2); }
| tRCINCLUDE tRCINCLUDEPATH {
int nl=strlen($2) +3;
char *fn=pp_xmalloc(nl);
diff --git a/reactos/tools/wpp/wpp.c b/reactos/tools/wpp/wpp.c
index 7b87c367c15..d149591f790 100644
--- a/reactos/tools/wpp/wpp.c
+++ b/reactos/tools/wpp/wpp.c
@@ -1,7 +1,7 @@
/*
* Exported functions of the Wine preprocessor
*
- * Copyrignt 1998 Bertho A. Stultiens
+ * Copyright 1998 Bertho A. Stultiens
* Copyright 2002 Alexandre Julliard
*
* This library is free software; you can redistribute it and/or
diff --git a/reactos/tools/wpp/wpp_private.h b/reactos/tools/wpp/wpp_private.h
index ff0fae7a2f5..24ed6b844b5 100644
--- a/reactos/tools/wpp/wpp_private.h
+++ b/reactos/tools/wpp/wpp_private.h
@@ -181,7 +181,7 @@ typedef struct cval {
ctype_t type;
union {
#if 0
- signed char sc; /* Explicitely signed because compilers are stupid */
+ signed char sc; /* Explicitly signed because compilers are stupid */
unsigned char uc;
short ss;
unsigned short us;
diff --git a/reactos/tools/wrc/genres.c b/reactos/tools/wrc/genres.c
index 05b1dd533b7..5853ce3fcd6 100644
--- a/reactos/tools/wrc/genres.c
+++ b/reactos/tools/wrc/genres.c
@@ -51,7 +51,7 @@ typedef unsigned long HOST_DWORD;
res_t *new_res(void)
{
res_t *r;
- r = (res_t *)xmalloc(sizeof(res_t));
+ r = xmalloc(sizeof(res_t));
r->allocsize = RES_BLOCKSIZE;
r->size = 0;
r->dataidx = 0;
@@ -62,7 +62,7 @@ res_t *new_res(void)
res_t *grow_res(res_t *r, unsigned int add)
{
r->allocsize += add;
- r->data = (char *)xrealloc(r->data, r->allocsize);
+ r->data = xrealloc(r->data, r->allocsize);
return r;
}
@@ -118,9 +118,7 @@ void put_word(res_t *res, unsigned w)
void put_dword(res_t *res, unsigned d)
{
- assert(sizeof(HOST_DWORD) == 4);
-
- if(res->allocsize - res->size < sizeof(HOST_DWORD))
+ if(res->allocsize - res->size < sizeof(DWORD))
grow_res(res, RES_BLOCKSIZE);
switch(byteorder)
{
@@ -144,7 +142,7 @@ void put_dword(res_t *res, unsigned d)
res->data[res->size+0] = LOBYTE(LOWORD(d));
break;
}
- res->size += sizeof(HOST_DWORD);
+ res->size += sizeof(DWORD);
}
static void put_pad(res_t *res)
@@ -229,7 +227,7 @@ static void set_dword(res_t *res, int ofs, unsigned d)
* Remarks :
*****************************************************************************
*/
-static HOST_DWORD get_dword(res_t *res, int ofs)
+static DWORD get_dword(res_t *res, int ofs)
{
switch(byteorder)
{
@@ -423,7 +421,7 @@ static void put_raw_data(res_t *res, raw_data_t *raw, int offset)
/*
*****************************************************************************
* Function : put_res_header
- * Syntax : intput_res_header(res_t *res, int type, name_id_t *ntype,
+ * Syntax : input_res_header(res_t *res, int type, name_id_t *ntype,
* name_id_t *name, DWORD memopt, lvc_t *lvc)
*
* Input :
@@ -440,7 +438,7 @@ static void put_raw_data(res_t *res, raw_data_t *raw, int offset)
*****************************************************************************
*/
static int put_res_header(res_t *res, int type, name_id_t *ntype, name_id_t *name,
- HOST_DWORD memopt, lvc_t *lvc)
+ DWORD memopt, lvc_t *lvc)
{
if(win32)
{
@@ -458,8 +456,8 @@ static int put_res_header(res_t *res, int type, name_id_t *ntype, name_id_t *nam
put_dword(res, 0); /* DataVersion */
put_word(res, memopt); /* Memory options */
put_lvc(res, lvc); /* Language, version and characts */
- set_dword(res, 0*sizeof(HOST_DWORD), res->size); /* Set preliminary resource */
- set_dword(res, 1*sizeof(HOST_DWORD), res->size); /* Set HeaderSize */
+ set_dword(res, 0*sizeof(DWORD), res->size); /* Set preliminary resource */
+ set_dword(res, 1*sizeof(DWORD), res->size); /* Set HeaderSize */
res->dataidx = res->size;
return 0;
}
@@ -721,7 +719,7 @@ static res_t *dialogex2res(name_id_t *name, dialogex_t *dlgex)
{
restag = put_res_header(res, WRC_RT_DIALOG, NULL, name, dlgex->memopt, &(dlgex->lvc));
- /* FIXME: MS doc says thet the first word must contain 0xffff
+ /* FIXME: MS doc says that the first word must contain 0xffff
* and the second 0x0001 to signal a DLGTEMPLATEEX. Borland's
* compiler reverses the two words.
* I don't know which one to choose, but I write it as Mr. B
@@ -754,8 +752,8 @@ static res_t *dialogex2res(name_id_t *name, dialogex_t *dlgex)
{
put_word(res, dlgex->font->size);
put_word(res, dlgex->font->weight);
- /* FIXME: ? TRUE should be sufficient to say that its
- * italic, but Borland's compiler says its 0x0101.
+ /* FIXME: ? TRUE should be sufficient to say that it's
+ * italic, but Borland's compiler says it's 0x0101.
* I just copy it here, and hope for the best.
*/
put_word(res, dlgex->font->italic ? 0x0101 : 0);
@@ -1025,7 +1023,7 @@ static res_t *cursorgroup2res(name_id_t *name, cursor_group_t *curg)
put_word(res, cur->planes);
put_word(res, cur->bits);
/* FIXME: The +4 is the hotspot in the cursor resource.
- * However, I cound not find this in the documentation.
+ * However, I could not find this in the documentation.
* The hotspot bytes must either be included or MS
* doesn't care.
*/
@@ -1062,7 +1060,7 @@ static res_t *cursorgroup2res(name_id_t *name, cursor_group_t *curg)
put_word(res, cur->planes);
put_word(res, cur->bits);
/* FIXME: The +4 is the hotspot in the cursor resource.
- * However, I cound not find this in the documentation.
+ * However, I could not find this in the documentation.
* The hotspot bytes must either be included or MS
* doesn't care.
*/
@@ -1450,7 +1448,7 @@ static res_t *stringtable2res(stringtable_t *stt)
name_id_t name;
int i;
int restag;
- HOST_DWORD lastsize = 0;
+ DWORD lastsize = 0;
assert(stt != NULL);
res = new_res();
@@ -1852,7 +1850,7 @@ char *make_c_name(const char *base, const name_id_t *nid, const language_t *lan)
buf = prep_nid_for_label(nid);
nlen = strlen(buf) + strlen(lanbuf);
nlen += strlen(base) + 4; /* three time '_' and '\0' */
- ret = (char *)xmalloc(nlen);
+ ret = xmalloc(nlen);
strcpy(ret, "_");
strcat(ret, base);
strcat(ret, "_");
diff --git a/reactos/tools/wrc/lex.yy.c b/reactos/tools/wrc/lex.yy.c
index 5e979fed17e..b72d0a651a3 100644
--- a/reactos/tools/wrc/lex.yy.c
+++ b/reactos/tools/wrc/lex.yy.c
@@ -19,7 +19,7 @@
/* A lexical scanner generated by flex */
/* Scanner skeleton version:
- * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.85 95/04/24 10:48:47 vern Exp $
+ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
*/
#define FLEX_SCANNER
@@ -144,6 +144,7 @@ extern FILE *yyin, *yyout;
{ \
/* Undo effects of setting up yytext. */ \
*yy_cp = yy_hold_char; \
+ YY_RESTORE_YY_MORE_OFFSET \
yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
YY_DO_BEFORE_ACTION; /* set up yytext again */ \
} \
@@ -253,7 +254,7 @@ void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
@@ -586,6 +587,7 @@ static char *yy_last_accepting_cpos;
#define REJECT reject_used_but_not_detected
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "parser.l"
#define INITIAL 0
@@ -681,6 +683,7 @@ char *yytext;
#define pp_code_page 8
#define YY_STACK_USED 1
+#define YY_NO_INPUT 1
#define YY_NO_UNPUT 1
#define YY_NO_TOP_STATE 1
#define YY_NEVER_INTERACTIVE 1
@@ -689,11 +692,19 @@ char *yytext;
/*#define LEX_DEBUG*/
+#include "config.h"
+
#include
#include
#include
#include
#include
+#include
+#include
+
+#ifndef HAVE_UNISTD_H
+#define YY_NO_UNISTD_H
+#endif
#include "wine/unicode.h"
#include "wrc.h"
@@ -882,12 +893,25 @@ static struct keyword *iskeyword(char *kw)
return kwp;
}
+/* converts an integer in string form to an unsigned long and prints an error
+ * on overflow */
+static unsigned long xstrtoul(const char *nptr, char **endptr, int base)
+{
+ unsigned long l;
+
+ errno = 0;
+ l = strtoul(nptr, endptr, base);
+ if (l == ULONG_MAX && errno == ERANGE)
+ parser_error("integer constant %s is too large\n", nptr);
+ return l;
+}
+
/*
**************************************************************************
* The flexer starts here
**************************************************************************
*/
-#line 891 "lex.yy.c"
+#line 915 "lex.yy.c"
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -909,6 +933,10 @@ static void yyunput YY_PROTO(( int c, char *buf_ptr ));
static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
#endif
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput YY_PROTO(( void ));
@@ -1037,7 +1065,7 @@ YY_DECL
register char *yy_cp, *yy_bp;
register int yy_act;
-#line 299 "parser.l"
+#line 320 "parser.l"
/*
* Catch the GCC-style line statements here and parse them.
@@ -1057,7 +1085,7 @@ YY_DECL
* because we only want to know the linenumber and
* filename.
*/
-#line 1061 "lex.yy.c"
+#line 1089 "lex.yy.c"
if ( yy_init )
{
@@ -1143,17 +1171,17 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 318 "parser.l"
+#line 339 "parser.l"
yy_push_state(pp_pragma);
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 319 "parser.l"
+#line 340 "parser.l"
yy_push_state(pp_line);
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 320 "parser.l"
+#line 341 "parser.l"
{
int lineno, len;
char *cptr;
@@ -1161,10 +1189,10 @@ YY_RULE_SETUP
yy_pop_state();
lineno = (int)strtol(yytext, &cptr, 10);
if(!lineno)
- parser_error("Malformed '#...' line-directive; invalid linenumber\n");
+ parser_error("Malformed '#...' line-directive; invalid linenumber");
fname = strchr(cptr, '"');
if(!fname)
- parser_error("Malformed '#...' line-directive; missing filename\n");
+ parser_error("Malformed '#...' line-directive; missing filename");
fname++;
cptr = strchr(fname, '"');
if(!cptr)
@@ -1182,43 +1210,43 @@ YY_RULE_SETUP
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 346 "parser.l"
+#line 367 "parser.l"
yyless(9); yy_pop_state(); yy_push_state(pp_code_page);
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 347 "parser.l"
+#line 368 "parser.l"
yy_pop_state(); if (pedantic) parser_warning("Unrecognized #pragma directive '%s'\n",yytext);
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 349 "parser.l"
+#line 370 "parser.l"
current_codepage = -1; yy_pop_state();
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 350 "parser.l"
+#line 371 "parser.l"
current_codepage = CP_UTF8; yy_pop_state();
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 351 "parser.l"
+#line 372 "parser.l"
{
char *p = yytext;
yy_pop_state();
while (*p < '0' || *p > '9') p++;
current_codepage = strtol( p, NULL, 10 );
- if (current_codepage && current_codepage != CP_UTF8 && !wine_cp_get_table( current_codepage ))
+ if (current_codepage != CP_UTF8 && !wine_cp_get_table( current_codepage ))
{
- parser_error("Codepage %d not supported\n", current_codepage);
+ parser_error("Codepage %d not supported", current_codepage);
current_codepage = 0;
}
}
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 362 "parser.l"
-yy_pop_state(); parser_error("Malformed #pragma code_page directive\n");
+#line 383 "parser.l"
+yy_pop_state(); parser_error("Malformed #pragma code_page directive");
YY_BREAK
/*
* Strip everything until a ';' taking
@@ -1227,38 +1255,38 @@ yy_pop_state(); parser_error("Malformed #pragma code_page directive\n");
*/
case 10:
YY_RULE_SETUP
-#line 369 "parser.l"
+#line 390 "parser.l"
line_number++; char_number = 1;
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 370 "parser.l"
+#line 391 "parser.l"
; /* ignore */
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 372 "parser.l"
+#line 393 "parser.l"
return tBEGIN;
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 373 "parser.l"
+#line 394 "parser.l"
return tEND;
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 375 "parser.l"
-{ parser_lval.num = strtoul(yytext, 0, 10); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
+#line 396 "parser.l"
+{ parser_lval.num = xstrtoul(yytext, 0, 10); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 376 "parser.l"
-{ parser_lval.num = strtoul(yytext, 0, 16); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
+#line 397 "parser.l"
+{ parser_lval.num = xstrtoul(yytext, 0, 16); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 377 "parser.l"
-{ parser_lval.num = strtoul(yytext+2, 0, 8); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
+#line 398 "parser.l"
+{ parser_lval.num = xstrtoul(yytext+2, 0, 8); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
YY_BREAK
/*
* The next two rules scan identifiers and filenames.
@@ -1269,7 +1297,7 @@ YY_RULE_SETUP
*/
case 17:
YY_RULE_SETUP
-#line 386 "parser.l"
+#line 407 "parser.l"
{
struct keyword *tok = iskeyword(yytext);
@@ -1292,7 +1320,7 @@ YY_RULE_SETUP
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 405 "parser.l"
+#line 426 "parser.l"
parser_lval.str = make_string(yytext); return tFILENAME;
YY_BREAK
/*
@@ -1300,7 +1328,7 @@ parser_lval.str = make_string(yytext); return tFILENAME;
*/
case 19:
YY_RULE_SETUP
-#line 410 "parser.l"
+#line 431 "parser.l"
{
yy_push_state(tklstr);
wbufidx = 0;
@@ -1309,10 +1337,10 @@ YY_RULE_SETUP
}
YY_BREAK
case 20:
-#line 417 "parser.l"
+#line 438 "parser.l"
case 21:
YY_RULE_SETUP
-#line 417 "parser.l"
+#line 438 "parser.l"
{
yy_pop_state();
parser_lval.str = get_buffered_wstring();
@@ -1321,18 +1349,18 @@ YY_RULE_SETUP
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 422 "parser.l"
+#line 443 "parser.l"
{ /* octal escape sequence */
unsigned int result;
result = strtoul(yytext+1, 0, 8);
if ( result > 0xffff )
- parser_error("Character constant out of range\n");
+ parser_error("Character constant out of range");
addwchar((WCHAR)result);
}
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 429 "parser.l"
+#line 450 "parser.l"
{ /* hex escape sequence */
unsigned int result;
result = strtoul(yytext+2, 0, 16);
@@ -1341,82 +1369,82 @@ YY_RULE_SETUP
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 434 "parser.l"
-{ parser_error("Invalid hex escape sequence '%s'\n", yytext); }
+#line 455 "parser.l"
+{ parser_error("Invalid hex escape sequence '%s'", yytext); }
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 436 "parser.l"
-parser_error("Bad escape sequence\n");
+#line 457 "parser.l"
+parser_error("Bad escape sequence");
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 437 "parser.l"
+#line 458 "parser.l"
line_number++; char_number = 1; /* backslash at EOL continues string after leading whitespace on next line */
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 438 "parser.l"
+#line 459 "parser.l"
addwchar('\a');
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 439 "parser.l"
+#line 460 "parser.l"
addwchar('\b');
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 440 "parser.l"
+#line 461 "parser.l"
addwchar('\f');
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 441 "parser.l"
+#line 462 "parser.l"
addwchar('\n');
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 442 "parser.l"
+#line 463 "parser.l"
addwchar('\r');
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 443 "parser.l"
+#line 464 "parser.l"
addwchar('\t');
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 444 "parser.l"
+#line 465 "parser.l"
addwchar('\v');
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 445 "parser.l"
+#line 466 "parser.l"
addwchar(yytext[1]);
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 446 "parser.l"
+#line 467 "parser.l"
addwchar(yytext[2]); line_number++; char_number = 1;
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 447 "parser.l"
+#line 468 "parser.l"
addwchar('\"'); /* "bla""bla" -> "bla\"bla" */
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 448 "parser.l"
+#line 469 "parser.l"
addwchar('\"'); /* "bla\""bla" -> "bla\"bla" */
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 449 "parser.l"
+#line 470 "parser.l"
; /* "bla" "bla" -> "blabla" */
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 450 "parser.l"
+#line 471 "parser.l"
{
char *yptr = yytext;
while(*yptr) /* FIXME: codepage translation */
@@ -1425,22 +1453,22 @@ YY_RULE_SETUP
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 455 "parser.l"
-parser_error("Unterminated string\n");
+#line 476 "parser.l"
+parser_error("Unterminated string");
YY_BREAK
/*
* Normal string scanning
*/
case 41:
YY_RULE_SETUP
-#line 460 "parser.l"
+#line 481 "parser.l"
yy_push_state(tkstr); cbufidx = 0;
YY_BREAK
case 42:
-#line 462 "parser.l"
+#line 483 "parser.l"
case 43:
YY_RULE_SETUP
-#line 462 "parser.l"
+#line 483 "parser.l"
{
yy_pop_state();
parser_lval.str = get_buffered_cstring();
@@ -1449,18 +1477,18 @@ YY_RULE_SETUP
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 467 "parser.l"
+#line 488 "parser.l"
{ /* octal escape sequence */
int result;
result = strtol(yytext+1, 0, 8);
if ( result > 0xff )
- parser_error("Character constant out of range\n");
+ parser_error("Character constant out of range");
addcchar((char)result);
}
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 474 "parser.l"
+#line 495 "parser.l"
{ /* hex escape sequence */
int result;
result = strtol(yytext+2, 0, 16);
@@ -1469,67 +1497,67 @@ YY_RULE_SETUP
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 479 "parser.l"
-{ parser_error("Invalid hex escape sequence '%s'\n", yytext); }
+#line 500 "parser.l"
+{ parser_error("Invalid hex escape sequence '%s'", yytext); }
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 481 "parser.l"
-parser_error("Bad escape sequence\n");
+#line 502 "parser.l"
+parser_error("Bad escape sequence");
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 482 "parser.l"
+#line 503 "parser.l"
line_number++; char_number = 1; /* backslash at EOL continues string after leading whitespace on next line */
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 483 "parser.l"
+#line 504 "parser.l"
addcchar('\a');
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 484 "parser.l"
+#line 505 "parser.l"
addcchar('\b');
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 485 "parser.l"
+#line 506 "parser.l"
addcchar('\f');
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 486 "parser.l"
+#line 507 "parser.l"
addcchar('\n');
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 487 "parser.l"
+#line 508 "parser.l"
addcchar('\r');
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 488 "parser.l"
+#line 509 "parser.l"
addcchar('\t');
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 489 "parser.l"
+#line 510 "parser.l"
addcchar('\v');
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 490 "parser.l"
+#line 511 "parser.l"
addcchar(yytext[1]);
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 491 "parser.l"
+#line 512 "parser.l"
addcchar(yytext[2]); line_number++; char_number = 1;
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 492 "parser.l"
+#line 513 "parser.l"
{
char *yptr = yytext;
while(*yptr)
@@ -1538,35 +1566,35 @@ YY_RULE_SETUP
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 497 "parser.l"
+#line 518 "parser.l"
addcchar('\"'); /* "bla""bla" -> "bla\"bla" */
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 498 "parser.l"
+#line 519 "parser.l"
addcchar('\"'); /* "bla\""bla" -> "bla\"bla" */
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 499 "parser.l"
+#line 520 "parser.l"
; /* "bla" "bla" -> "blabla" */
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 500 "parser.l"
-parser_error("Unterminated string\n");
+#line 521 "parser.l"
+parser_error("Unterminated string");
YY_BREAK
/*
* Raw data scanning
*/
case 63:
YY_RULE_SETUP
-#line 505 "parser.l"
+#line 526 "parser.l"
yy_push_state(tkrcd); cbufidx = 0;
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 506 "parser.l"
+#line 527 "parser.l"
{
yy_pop_state();
parser_lval.raw = new_raw_data();
@@ -1578,7 +1606,7 @@ YY_RULE_SETUP
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 514 "parser.l"
+#line 535 "parser.l"
{
int result;
result = strtol(yytext, 0, 16);
@@ -1587,18 +1615,18 @@ YY_RULE_SETUP
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 519 "parser.l"
+#line 540 "parser.l"
; /* Ignore space */
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 520 "parser.l"
+#line 541 "parser.l"
line_number++; char_number = 1;
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 521 "parser.l"
-parser_error("Malformed data-line\n");
+#line 542 "parser.l"
+parser_error("Malformed data-line");
YY_BREAK
/*
* Comment stripping
@@ -1606,7 +1634,7 @@ parser_error("Malformed data-line\n");
*/
case 69:
YY_RULE_SETUP
-#line 527 "parser.l"
+#line 548 "parser.l"
{
yy_push_state(comment);
save_wanted_id = wanted_id;
@@ -1616,37 +1644,37 @@ YY_RULE_SETUP
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 533 "parser.l"
+#line 554 "parser.l"
;
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 534 "parser.l"
+#line 555 "parser.l"
;
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 535 "parser.l"
+#line 556 "parser.l"
line_number++; char_number = 1;
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 536 "parser.l"
+#line 557 "parser.l"
yy_pop_state(); want_id = save_wanted_id;
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 538 "parser.l"
+#line 559 "parser.l"
want_id = wanted_id; /* not really comment, but left-over c-junk */
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 539 "parser.l"
+#line 560 "parser.l"
want_id = wanted_id; if(!no_preprocess) parser_warning("Found comments after preprocessing, please report\n");
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 541 "parser.l"
+#line 562 "parser.l"
{
want_id = wanted_id;
line_number++;
@@ -1660,17 +1688,17 @@ YY_RULE_SETUP
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 551 "parser.l"
+#line 572 "parser.l"
want_id = wanted_id; /* Eat whitespace */
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 553 "parser.l"
+#line 574 "parser.l"
return yytext[0];
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 555 "parser.l"
+#line 576 "parser.l"
{
/* Catch all rule to find any unmatched text */
if(*yytext == '\n')
@@ -1684,10 +1712,10 @@ YY_RULE_SETUP
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 566 "parser.l"
+#line 587 "parser.l"
ECHO;
YY_BREAK
-#line 1691 "lex.yy.c"
+#line 1719 "lex.yy.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(tkstr):
case YY_STATE_EOF(tklstr):
@@ -1706,6 +1734,7 @@ case YY_STATE_EOF(pp_code_page):
/* Undo the effects of YY_DO_BEFORE_ACTION. */
*yy_cp = yy_hold_char;
+ YY_RESTORE_YY_MORE_OFFSET
if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
{
@@ -1851,7 +1880,7 @@ static int yy_get_next_buffer()
{ /* Don't try to fill the buffer, so this is an EOF. */
if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
{
- /* We matched a singled characater, the EOB, so
+ /* We matched a single character, the EOB, so
* treat this as a final EOF.
*/
return EOB_ACT_END_OF_FILE;
@@ -1878,7 +1907,7 @@ static int yy_get_next_buffer()
/* don't do the read, it's not guaranteed to return an EOF,
* just force an EOF
*/
- yy_n_chars = 0;
+ yy_current_buffer->yy_n_chars = yy_n_chars = 0;
else
{
@@ -1933,6 +1962,8 @@ static int yy_get_next_buffer()
/* Read in more data. */
YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
yy_n_chars, num_to_read );
+
+ yy_current_buffer->yy_n_chars = yy_n_chars;
}
if ( yy_n_chars == 0 )
@@ -2058,7 +2089,8 @@ register char *yy_bp;
yy_cp += (int) (dest - source);
yy_bp += (int) (dest - source);
- yy_n_chars = yy_current_buffer->yy_buf_size;
+ yy_current_buffer->yy_n_chars =
+ yy_n_chars = yy_current_buffer->yy_buf_size;
if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
YY_FATAL_ERROR( "flex scanner push-back overflow" );
@@ -2096,19 +2128,31 @@ static int input()
else
{ /* need more input */
- yytext_ptr = yy_c_buf_p;
+ int offset = yy_c_buf_p - yytext_ptr;
++yy_c_buf_p;
switch ( yy_get_next_buffer() )
{
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart( yyin );
+
+ /* fall through */
+
case EOB_ACT_END_OF_FILE:
{
if ( yywrap() )
- {
- yy_c_buf_p =
- yytext_ptr + YY_MORE_ADJ;
return EOF;
- }
if ( ! yy_did_buffer_switch_on_eof )
YY_NEW_FILE;
@@ -2120,17 +2164,8 @@ static int input()
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+ yy_c_buf_p = yytext_ptr + offset;
break;
-
- case EOB_ACT_LAST_MATCH:
-#ifdef __cplusplus
- YY_FATAL_ERROR(
- "unexpected last match in yyinput()" );
-#else
- YY_FATAL_ERROR(
- "unexpected last match in input()" );
-#endif
}
}
}
@@ -2295,6 +2330,9 @@ YY_BUFFER_STATE b;
#endif
{
+ if ( ! b )
+ return;
+
b->yy_n_chars = 0;
/* We always need two end-of-buffer characters. The first causes
@@ -2354,17 +2392,17 @@ yy_size_t size;
#ifndef YY_NO_SCAN_STRING
#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *str )
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
#else
-YY_BUFFER_STATE yy_scan_string( str )
-yyconst char *str;
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
#endif
{
int len;
- for ( len = 0; str[len]; ++len )
+ for ( len = 0; yy_str[len]; ++len )
;
- return yy_scan_bytes( str, len );
+ return yy_scan_bytes( yy_str, len );
}
#endif
@@ -2485,7 +2523,7 @@ char msg[];
{ \
/* Undo effects of setting up yytext. */ \
yytext[yyleng] = yy_hold_char; \
- yy_c_buf_p = yytext + n - YY_MORE_ADJ; \
+ yy_c_buf_p = yytext + n; \
yy_hold_char = *yy_c_buf_p; \
*yy_c_buf_p = '\0'; \
yyleng = n; \
@@ -2511,6 +2549,22 @@ int n;
}
#endif
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+ {
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+ }
+#endif
+
#ifdef YY_USE_PROTOS
static void *yy_flex_alloc( yy_size_t size )
@@ -2557,7 +2611,7 @@ int main()
return 0;
}
#endif
-#line 566 "parser.l"
+#line 587 "parser.l"
/* These dup functions copy the enclosed '\0' from
@@ -2599,7 +2653,7 @@ static string_t *get_buffered_cstring(void)
if (!current_codepage || current_codepage == -1 || !win32) /* store as ANSI string */
{
- if (!current_codepage) parser_error("Codepage set to Unicode only, cannot use ASCII string here\n");
+ if (!current_codepage) parser_error("Codepage set to Unicode only, cannot use ASCII string here");
return str;
}
else /* convert to Unicode before storing */
@@ -2607,7 +2661,7 @@ static string_t *get_buffered_cstring(void)
string_t *str_w = convert_string( str, str_unicode, current_codepage );
if (!check_unicode_conversion( str, str_w, current_codepage ))
parser_error("String %s does not convert identically to Unicode and back in codepage %d. "
- "Try using a Unicode string instead\n", str->str.cstr, current_codepage );
+ "Try using a Unicode string instead", str->str.cstr, current_codepage );
free_string( str );
return str_w;
}
diff --git a/reactos/tools/wrc/newstruc.c b/reactos/tools/wrc/newstruc.c
index 88d1c7a1127..7df5d294ab3 100644
--- a/reactos/tools/wrc/newstruc.c
+++ b/reactos/tools/wrc/newstruc.c
@@ -792,7 +792,7 @@ static void handle_ani_list(riff_tag_t *lst, enum res_e type, int isswapped)
}
else if(!memcmp(rtp->tag, iart, sizeof(iart)))
{
- /* Ignore the author's name; its a string */
+ /* Ignore the author's name; it's a string */
rtp = NEXT_TAG(rtp);
}
else if(!memcmp(rtp->tag, fram, sizeof(fram)))
@@ -1154,6 +1154,7 @@ stringtable_t *new_stringtable(lvc_t *lvc)
toolbar_t *new_toolbar(int button_width, int button_height, toolbar_item_t *items, int nitems)
{
toolbar_t *tb = (toolbar_t *)xmalloc(sizeof(toolbar_t));
+ memset( tb, 0, sizeof(*tb) );
tb->button_width = button_width;
tb->button_height = button_height;
tb->nitems = nitems;
diff --git a/reactos/tools/wrc/parser.h b/reactos/tools/wrc/parser.h
index 8be2269dc12..b9e204589db 100644
--- a/reactos/tools/wrc/parser.h
+++ b/reactos/tools/wrc/parser.h
@@ -23,7 +23,7 @@
/* From parser.y */
extern int parser_debug;
-extern int want_nl; /* Set when getting line-numers */
+extern int want_nl; /* Set when getting line-numbers */
extern int want_id; /* Set when getting the resource name */
int parser_parse(void);
@@ -36,4 +36,3 @@ extern int yy_flex_debug;
int parser_lex(void);
#endif
-
diff --git a/reactos/tools/wrc/parser.l b/reactos/tools/wrc/parser.l
index 98f9c85d778..2ed5f4b29ef 100644
--- a/reactos/tools/wrc/parser.l
+++ b/reactos/tools/wrc/parser.l
@@ -84,7 +84,7 @@
%x pp_code_page
%option stack
-%option nounput noyy_top_state noyywrap
+%option noinput nounput noyy_top_state noyywrap
%option 8bit never-interactive
%option prefix="parser_"
@@ -96,11 +96,19 @@ cident [a-zA-Z_][0-9a-zA-Z_]*
/*#define LEX_DEBUG*/
+#include "config.h"
+
#include
#include
#include
#include
#include
+#include
+#include
+
+#ifndef HAVE_UNISTD_H
+#define YY_NO_UNISTD_H
+#endif
#include "wine/unicode.h"
#include "wrc.h"
@@ -289,6 +297,19 @@ static struct keyword *iskeyword(char *kw)
return kwp;
}
+/* converts an integer in string form to an unsigned long and prints an error
+ * on overflow */
+static unsigned long xstrtoul(const char *nptr, char **endptr, int base)
+{
+ unsigned long l;
+
+ errno = 0;
+ l = strtoul(nptr, endptr, base);
+ if (l == ULONG_MAX && errno == ERANGE)
+ parser_error("integer constant %s is too large\n", nptr);
+ return l;
+}
+
%}
/*
@@ -324,10 +345,10 @@ static struct keyword *iskeyword(char *kw)
yy_pop_state();
lineno = (int)strtol(yytext, &cptr, 10);
if(!lineno)
- parser_error("Malformed '#...' line-directive; invalid linenumber\n");
+ parser_error("Malformed '#...' line-directive; invalid linenumber");
fname = strchr(cptr, '"');
if(!fname)
- parser_error("Malformed '#...' line-directive; missing filename\n");
+ parser_error("Malformed '#...' line-directive; missing filename");
fname++;
cptr = strchr(fname, '"');
if(!cptr)
@@ -353,13 +374,13 @@ static struct keyword *iskeyword(char *kw)
yy_pop_state();
while (*p < '0' || *p > '9') p++;
current_codepage = strtol( p, NULL, 10 );
- if (current_codepage && current_codepage != CP_UTF8 && !wine_cp_get_table( current_codepage ))
+ if (current_codepage != CP_UTF8 && !wine_cp_get_table( current_codepage ))
{
- parser_error("Codepage %d not supported\n", current_codepage);
+ parser_error("Codepage %d not supported", current_codepage);
current_codepage = 0;
}
}
-[^\n]* yy_pop_state(); parser_error("Malformed #pragma code_page directive\n");
+[^\n]* yy_pop_state(); parser_error("Malformed #pragma code_page directive");
/*
* Strip everything until a ';' taking
@@ -372,9 +393,9 @@ static struct keyword *iskeyword(char *kw)
\{ return tBEGIN;
\} return tEND;
-[0-9]+[lL]? { parser_lval.num = strtoul(yytext, 0, 10); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
-0[xX][0-9A-Fa-f]+[lL]? { parser_lval.num = strtoul(yytext, 0, 16); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
-0[oO][0-7]+[lL]? { parser_lval.num = strtoul(yytext+2, 0, 8); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
+[0-9]+[lL]? { parser_lval.num = xstrtoul(yytext, 0, 10); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
+0[xX][0-9A-Fa-f]+[lL]? { parser_lval.num = xstrtoul(yytext, 0, 16); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
+0[oO][0-7]+[lL]? { parser_lval.num = xstrtoul(yytext+2, 0, 8); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; }
/*
* The next two rules scan identifiers and filenames.
@@ -423,7 +444,7 @@ L\" {
unsigned int result;
result = strtoul(yytext+1, 0, 8);
if ( result > 0xffff )
- parser_error("Character constant out of range\n");
+ parser_error("Character constant out of range");
addwchar((WCHAR)result);
}
\\x[0-9a-fA-F]{4} { /* hex escape sequence */
@@ -431,9 +452,9 @@ L\" {
result = strtoul(yytext+2, 0, 16);
addwchar((WCHAR)result);
}
-\\x[0-9a-fA-F]{1,3} { parser_error("Invalid hex escape sequence '%s'\n", yytext); }
+\\x[0-9a-fA-F]{1,3} { parser_error("Invalid hex escape sequence '%s'", yytext); }
-\\[0-9]+ parser_error("Bad escape sequence\n");
+\\[0-9]+ parser_error("Bad escape sequence");
\\\n{ws}* line_number++; char_number = 1; /* backslash at EOL continues string after leading whitespace on next line */
\\a addwchar('\a');
\\b addwchar('\b');
@@ -452,7 +473,7 @@ L\" {
while(*yptr) /* FIXME: codepage translation */
addwchar(*yptr++ & 0xff);
}
-\n parser_error("Unterminated string\n");
+\n parser_error("Unterminated string");
/*
* Normal string scanning
@@ -468,7 +489,7 @@ L\" {
int result;
result = strtol(yytext+1, 0, 8);
if ( result > 0xff )
- parser_error("Character constant out of range\n");
+ parser_error("Character constant out of range");
addcchar((char)result);
}
\\x[0-9a-fA-F]{2} { /* hex escape sequence */
@@ -476,9 +497,9 @@ L\" {
result = strtol(yytext+2, 0, 16);
addcchar((char)result);
}
-\\x[0-9a-fA-F] { parser_error("Invalid hex escape sequence '%s'\n", yytext); }
+\\x[0-9a-fA-F] { parser_error("Invalid hex escape sequence '%s'", yytext); }
-\\[0-9]+ parser_error("Bad escape sequence\n");
+\\[0-9]+ parser_error("Bad escape sequence");
\\\n{ws}* line_number++; char_number = 1; /* backslash at EOL continues string after leading whitespace on next line */
\\a addcchar('\a');
\\b addcchar('\b');
@@ -497,7 +518,7 @@ L\" {
\"\" addcchar('\"'); /* "bla""bla" -> "bla\"bla" */
\\\"\" addcchar('\"'); /* "bla\""bla" -> "bla\"bla" */
\"{ws}+\" ; /* "bla" "bla" -> "blabla" */
-\n parser_error("Unterminated string\n");
+\n parser_error("Unterminated string");
/*
* Raw data scanning
@@ -518,7 +539,7 @@ L\" {
}
{ws}+ ; /* Ignore space */
\n line_number++; char_number = 1;
-. parser_error("Malformed data-line\n");
+. parser_error("Malformed data-line");
/*
* Comment stripping
@@ -604,7 +625,7 @@ static string_t *get_buffered_cstring(void)
if (!current_codepage || current_codepage == -1 || !win32) /* store as ANSI string */
{
- if (!current_codepage) parser_error("Codepage set to Unicode only, cannot use ASCII string here\n");
+ if (!current_codepage) parser_error("Codepage set to Unicode only, cannot use ASCII string here");
return str;
}
else /* convert to Unicode before storing */
@@ -612,7 +633,7 @@ static string_t *get_buffered_cstring(void)
string_t *str_w = convert_string( str, str_unicode, current_codepage );
if (!check_unicode_conversion( str, str_w, current_codepage ))
parser_error("String %s does not convert identically to Unicode and back in codepage %d. "
- "Try using a Unicode string instead\n", str->str.cstr, current_codepage );
+ "Try using a Unicode string instead", str->str.cstr, current_codepage );
free_string( str );
return str_w;
}
diff --git a/reactos/tools/wrc/parser.tab.c b/reactos/tools/wrc/parser.tab.c
index 990cfbc1211..73805837b43 100644
--- a/reactos/tools/wrc/parser.tab.c
+++ b/reactos/tools/wrc/parser.tab.c
@@ -495,7 +495,7 @@ static int rsrcid_to_token(int lookahead);
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 237 "parser.y"
+#line 241 "parser.y"
typedef union YYSTYPE {
string_t *str;
int num;
@@ -540,7 +540,7 @@ typedef union YYSTYPE {
ani_any_t *ani;
} YYSTYPE;
/* Line 196 of yacc.c. */
-#line 544 "parser.tab.c"
+#line 548 "parser.tab.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
@@ -552,7 +552,7 @@ typedef union YYSTYPE {
/* Line 219 of yacc.c. */
-#line 556 "parser.tab.c"
+#line 560 "parser.tab.c"
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
@@ -902,32 +902,32 @@ static const short int yyrhs[] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short int yyrline[] =
{
- 0, 359, 359, 393, 394, 464, 470, 482, 492, 500,
- 500, 543, 549, 556, 566, 567, 576, 577, 578, 602,
- 603, 609, 610, 611, 612, 636, 637, 643, 644, 645,
- 646, 647, 648, 652, 653, 654, 658, 662, 678, 700,
- 710, 718, 726, 730, 734, 738, 749, 754, 763, 787,
- 788, 789, 798, 799, 802, 803, 806, 807, 808, 809,
- 810, 811, 816, 851, 852, 853, 854, 855, 856, 857,
- 858, 859, 860, 863, 864, 865, 866, 867, 868, 869,
- 870, 871, 872, 874, 875, 876, 877, 878, 879, 880,
- 881, 883, 893, 916, 938, 940, 945, 952, 963, 977,
- 992, 997, 998, 999, 1003, 1004, 1005, 1006, 1010, 1015,
- 1023, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075,
- 1076, 1077, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
- 1088, 1089, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098,
- 1100, 1110, 1135, 1151, 1177, 1200, 1201, 1204, 1205, 1209,
- 1216, 1217, 1221, 1244, 1248, 1249, 1258, 1264, 1283, 1284,
- 1285, 1286, 1287, 1288, 1289, 1293, 1318, 1322, 1323, 1339,
- 1345, 1365, 1366, 1370, 1378, 1389, 1390, 1394, 1400, 1408,
- 1428, 1466, 1476, 1477, 1510, 1512, 1517, 1533, 1534, 1544,
- 1554, 1561, 1568, 1575, 1582, 1592, 1593, 1602, 1610, 1611,
- 1620, 1625, 1631, 1640, 1641, 1645, 1671, 1672, 1677, 1686,
- 1687, 1697, 1712, 1713, 1714, 1715, 1718, 1719, 1720, 1724,
- 1725, 1733, 1741, 1759, 1766, 1770, 1774, 1789, 1790, 1791,
- 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1804,
- 1805, 1812, 1813, 1817, 1820, 1821, 1822, 1823, 1824, 1825,
- 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1835, 1836
+ 0, 363, 363, 397, 398, 469, 475, 487, 497, 505,
+ 505, 548, 554, 561, 571, 572, 581, 582, 583, 607,
+ 608, 614, 615, 616, 617, 641, 642, 648, 649, 650,
+ 651, 652, 653, 657, 658, 659, 663, 667, 683, 705,
+ 715, 723, 731, 735, 739, 743, 754, 759, 768, 792,
+ 793, 794, 803, 804, 807, 808, 811, 812, 813, 814,
+ 815, 816, 821, 856, 857, 858, 859, 860, 861, 862,
+ 863, 864, 865, 868, 869, 870, 871, 872, 873, 874,
+ 875, 876, 877, 879, 880, 881, 882, 883, 884, 885,
+ 886, 888, 898, 921, 943, 945, 950, 957, 968, 982,
+ 997, 1002, 1003, 1004, 1008, 1009, 1010, 1011, 1015, 1020,
+ 1028, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080,
+ 1081, 1082, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092,
+ 1093, 1094, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103,
+ 1105, 1115, 1140, 1156, 1182, 1205, 1206, 1209, 1210, 1214,
+ 1221, 1222, 1226, 1249, 1253, 1254, 1263, 1269, 1288, 1289,
+ 1290, 1291, 1292, 1293, 1294, 1298, 1323, 1327, 1328, 1344,
+ 1350, 1370, 1371, 1375, 1383, 1394, 1395, 1399, 1405, 1413,
+ 1433, 1471, 1481, 1482, 1515, 1517, 1522, 1538, 1539, 1549,
+ 1559, 1566, 1573, 1580, 1587, 1597, 1598, 1607, 1615, 1616,
+ 1625, 1630, 1636, 1645, 1646, 1650, 1676, 1677, 1682, 1691,
+ 1692, 1702, 1717, 1718, 1719, 1720, 1723, 1724, 1725, 1729,
+ 1730, 1738, 1746, 1764, 1771, 1775, 1779, 1794, 1795, 1796,
+ 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1809,
+ 1810, 1817, 1818, 1822, 1825, 1826, 1827, 1828, 1829, 1830,
+ 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1840, 1841
};
#endif
@@ -2089,7 +2089,7 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 359 "parser.y"
+#line 363 "parser.y"
{
resource_t *rsc;
/* First add stringtables to the resource-list */
@@ -2123,12 +2123,12 @@ yyreduce:
break;
case 3:
-#line 393 "parser.y"
+#line 397 "parser.y"
{ (yyval.res) = NULL; want_id = 1; ;}
break;
case 4:
-#line 394 "parser.y"
+#line 398 "parser.y"
{
if((yyvsp[0].res))
{
@@ -2151,9 +2151,10 @@ yyreduce:
if(rsc->type == head->type
&& rsc->lan->id == head->lan->id
&& rsc->lan->sub == head->lan->sub
- && !compare_name_id(rsc->name, head->name))
+ && !compare_name_id(rsc->name, head->name)
+ && (rsc->type != res_usr || !compare_name_id(rsc->res.usr->type,head->res.usr->type)))
{
- parser_error("Duplicate resource name '%s'\n", get_nameid_str(rsc->name));
+ yyerror("Duplicate resource name '%s'", get_nameid_str(rsc->name));
}
rsc = rsc->prev;
}
@@ -2177,13 +2178,13 @@ yyreduce:
break;
case 6:
-#line 470 "parser.y"
+#line 475 "parser.y"
{
(yyval.res) = (yyvsp[0].res);
if((yyval.res))
{
if((yyvsp[-2].num) > 65535 || (yyvsp[-2].num) < -32768)
- parser_error("Resource's ID out of range (%d)\n", (yyvsp[-2].num));
+ yyerror("Resource's ID out of range (%d)", (yyvsp[-2].num));
(yyval.res)->name = new_name_id();
(yyval.res)->name->type = name_ord;
(yyval.res)->name->name.i_name = (yyvsp[-2].num);
@@ -2193,7 +2194,7 @@ yyreduce:
break;
case 7:
-#line 482 "parser.y"
+#line 487 "parser.y"
{
(yyval.res) = (yyvsp[0].res);
if((yyval.res))
@@ -2207,7 +2208,7 @@ yyreduce:
break;
case 8:
-#line 492 "parser.y"
+#line 497 "parser.y"
{
/* Don't do anything, stringtables are converted to
* resource_t structures when we are finished parsing and
@@ -2219,12 +2220,12 @@ yyreduce:
break;
case 9:
-#line 500 "parser.y"
+#line 505 "parser.y"
{want_nl = 1; ;}
break;
case 10:
-#line 500 "parser.y"
+#line 505 "parser.y"
{
/* We *NEED* the newline to delimit the expression.
* Otherwise, we would not be able to set the next
@@ -2233,7 +2234,7 @@ yyreduce:
* However, we can test the lookahead-token for
* being "non-expression" type, in which case we
* continue. Fortunately, tNL is the only token that
- * will break expression parsing and is implicitely
+ * will break expression parsing and is implicitly
* void, so we just remove it. This scheme makes it
* possible to do some (not all) fancy preprocessor
* stuff.
@@ -2257,7 +2258,7 @@ yyreduce:
parser_warning("LANGUAGE not supported in 16-bit mode\n");
free(currentlanguage);
if (get_language_codepage((yyvsp[-2].num), (yyvsp[0].num)) == -1)
- parser_error( "Language %04x is not supported\n", ((yyvsp[0].num)<<10) + (yyvsp[-2].num));
+ yyerror( "Language %04x is not supported", ((yyvsp[0].num)<<10) + (yyvsp[-2].num));
currentlanguage = new_language((yyvsp[-2].num), (yyvsp[0].num));
(yyval.res) = NULL;
chat("Got LANGUAGE %d,%d (0x%04x)\n", (yyvsp[-2].num), (yyvsp[0].num), ((yyvsp[0].num)<<10) + (yyvsp[-2].num));
@@ -2265,15 +2266,15 @@ yyreduce:
break;
case 11:
-#line 543 "parser.y"
+#line 548 "parser.y"
{ yychar = rsrcid_to_token(yychar); ;}
break;
case 12:
-#line 549 "parser.y"
+#line 554 "parser.y"
{
if((yyvsp[0].num) > 65535 || (yyvsp[0].num) < -32768)
- parser_error("Resource's ID out of range (%d)\n", (yyvsp[0].num));
+ yyerror("Resource's ID out of range (%d)", (yyvsp[0].num));
(yyval.nid) = new_name_id();
(yyval.nid)->type = name_ord;
(yyval.nid)->name.i_name = (yyvsp[0].num);
@@ -2281,7 +2282,7 @@ yyreduce:
break;
case 13:
-#line 556 "parser.y"
+#line 561 "parser.y"
{
(yyval.nid) = new_name_id();
(yyval.nid)->type = name_str;
@@ -2290,12 +2291,12 @@ yyreduce:
break;
case 14:
-#line 566 "parser.y"
+#line 571 "parser.y"
{ (yyval.nid) = (yyvsp[0].nid); ;}
break;
case 15:
-#line 567 "parser.y"
+#line 572 "parser.y"
{
(yyval.nid) = new_name_id();
(yyval.nid)->type = name_str;
@@ -2304,17 +2305,17 @@ yyreduce:
break;
case 16:
-#line 576 "parser.y"
+#line 581 "parser.y"
{ (yyval.res) = new_resource(res_acc, (yyvsp[0].acc), (yyvsp[0].acc)->memopt, (yyvsp[0].acc)->lvc.language); ;}
break;
case 17:
-#line 577 "parser.y"
+#line 582 "parser.y"
{ (yyval.res) = new_resource(res_bmp, (yyvsp[0].bmp), (yyvsp[0].bmp)->memopt, (yyvsp[0].bmp)->data->lvc.language); ;}
break;
case 18:
-#line 578 "parser.y"
+#line 583 "parser.y"
{
resource_t *rsc;
if((yyvsp[0].ani)->type == res_anicur)
@@ -2342,12 +2343,12 @@ yyreduce:
break;
case 19:
-#line 602 "parser.y"
+#line 607 "parser.y"
{ (yyval.res) = new_resource(res_dlg, (yyvsp[0].dlg), (yyvsp[0].dlg)->memopt, (yyvsp[0].dlg)->lvc.language); ;}
break;
case 20:
-#line 603 "parser.y"
+#line 608 "parser.y"
{
if(win32)
(yyval.res) = new_resource(res_dlgex, (yyvsp[0].dlgex), (yyvsp[0].dlgex)->memopt, (yyvsp[0].dlgex)->lvc.language);
@@ -2357,22 +2358,22 @@ yyreduce:
break;
case 21:
-#line 609 "parser.y"
+#line 614 "parser.y"
{ (yyval.res) = new_resource(res_dlginit, (yyvsp[0].dginit), (yyvsp[0].dginit)->memopt, (yyvsp[0].dginit)->data->lvc.language); ;}
break;
case 22:
-#line 610 "parser.y"
+#line 615 "parser.y"
{ (yyval.res) = new_resource(res_fnt, (yyvsp[0].fnt), (yyvsp[0].fnt)->memopt, (yyvsp[0].fnt)->data->lvc.language); ;}
break;
case 23:
-#line 611 "parser.y"
+#line 616 "parser.y"
{ (yyval.res) = new_resource(res_fntdir, (yyvsp[0].fnd), (yyvsp[0].fnd)->memopt, (yyvsp[0].fnd)->data->lvc.language); ;}
break;
case 24:
-#line 612 "parser.y"
+#line 617 "parser.y"
{
resource_t *rsc;
if((yyvsp[0].ani)->type == res_aniico)
@@ -2400,12 +2401,12 @@ yyreduce:
break;
case 25:
-#line 636 "parser.y"
+#line 641 "parser.y"
{ (yyval.res) = new_resource(res_men, (yyvsp[0].men), (yyvsp[0].men)->memopt, (yyvsp[0].men)->lvc.language); ;}
break;
case 26:
-#line 637 "parser.y"
+#line 642 "parser.y"
{
if(win32)
(yyval.res) = new_resource(res_menex, (yyvsp[0].menex), (yyvsp[0].menex)->memopt, (yyvsp[0].menex)->lvc.language);
@@ -2415,57 +2416,57 @@ yyreduce:
break;
case 27:
-#line 643 "parser.y"
+#line 648 "parser.y"
{ (yyval.res) = new_resource(res_msg, (yyvsp[0].msg), WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE, (yyvsp[0].msg)->data->lvc.language); ;}
break;
case 28:
-#line 644 "parser.y"
+#line 649 "parser.y"
{ (yyval.res) = new_resource(res_html, (yyvsp[0].html), (yyvsp[0].html)->memopt, (yyvsp[0].html)->data->lvc.language); ;}
break;
case 29:
-#line 645 "parser.y"
+#line 650 "parser.y"
{ (yyval.res) = new_resource(res_rdt, (yyvsp[0].rdt), (yyvsp[0].rdt)->memopt, (yyvsp[0].rdt)->data->lvc.language); ;}
break;
case 30:
-#line 646 "parser.y"
+#line 651 "parser.y"
{ (yyval.res) = new_resource(res_toolbar, (yyvsp[0].tlbar), (yyvsp[0].tlbar)->memopt, (yyvsp[0].tlbar)->lvc.language); ;}
break;
case 31:
-#line 647 "parser.y"
+#line 652 "parser.y"
{ (yyval.res) = new_resource(res_usr, (yyvsp[0].usr), (yyvsp[0].usr)->memopt, (yyvsp[0].usr)->data->lvc.language); ;}
break;
case 32:
-#line 648 "parser.y"
+#line 653 "parser.y"
{ (yyval.res) = new_resource(res_ver, (yyvsp[0].veri), WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE, (yyvsp[0].veri)->lvc.language); ;}
break;
case 33:
-#line 652 "parser.y"
+#line 657 "parser.y"
{ (yyval.str) = make_filename((yyvsp[0].str)); ;}
break;
case 34:
-#line 653 "parser.y"
+#line 658 "parser.y"
{ (yyval.str) = make_filename((yyvsp[0].str)); ;}
break;
case 35:
-#line 654 "parser.y"
+#line 659 "parser.y"
{ (yyval.str) = make_filename((yyvsp[0].str)); ;}
break;
case 36:
-#line 658 "parser.y"
+#line 663 "parser.y"
{ (yyval.bmp) = new_bitmap((yyvsp[0].raw), (yyvsp[-1].iptr)); ;}
break;
case 37:
-#line 662 "parser.y"
+#line 667 "parser.y"
{
(yyval.ani) = new_ani_any();
if((yyvsp[0].raw)->size > 4 && !memcmp((yyvsp[0].raw)->data, riff, sizeof(riff)))
@@ -2482,7 +2483,7 @@ yyreduce:
break;
case 38:
-#line 678 "parser.y"
+#line 683 "parser.y"
{
(yyval.ani) = new_ani_any();
if((yyvsp[0].raw)->size > 4 && !memcmp((yyvsp[0].raw)->data, riff, sizeof(riff)))
@@ -2499,17 +2500,17 @@ yyreduce:
break;
case 39:
-#line 700 "parser.y"
+#line 705 "parser.y"
{ (yyval.fnt) = new_font((yyvsp[0].raw), (yyvsp[-1].iptr)); ;}
break;
case 40:
-#line 710 "parser.y"
+#line 715 "parser.y"
{ (yyval.fnd) = new_fontdir((yyvsp[0].raw), (yyvsp[-1].iptr)); ;}
break;
case 41:
-#line 718 "parser.y"
+#line 723 "parser.y"
{
if(!win32)
parser_warning("MESSAGETABLE not supported in 16-bit mode\n");
@@ -2518,22 +2519,22 @@ yyreduce:
break;
case 42:
-#line 726 "parser.y"
+#line 731 "parser.y"
{ (yyval.html) = new_html((yyvsp[0].raw), (yyvsp[-1].iptr)); ;}
break;
case 43:
-#line 730 "parser.y"
+#line 735 "parser.y"
{ (yyval.rdt) = new_rcdata((yyvsp[0].raw), (yyvsp[-1].iptr)); ;}
break;
case 44:
-#line 734 "parser.y"
+#line 739 "parser.y"
{ (yyval.dginit) = new_dlginit((yyvsp[0].raw), (yyvsp[-1].iptr)); ;}
break;
case 45:
-#line 738 "parser.y"
+#line 743 "parser.y"
{
#ifdef WORDS_BIGENDIAN
if(pedantic && byteorder != WRC_BO_LITTLE)
@@ -2546,7 +2547,7 @@ yyreduce:
break;
case 46:
-#line 749 "parser.y"
+#line 754 "parser.y"
{
(yyval.nid) = new_name_id();
(yyval.nid)->type = name_ord;
@@ -2555,7 +2556,7 @@ yyreduce:
break;
case 47:
-#line 754 "parser.y"
+#line 759 "parser.y"
{
(yyval.nid) = new_name_id();
(yyval.nid)->type = name_str;
@@ -2564,7 +2565,7 @@ yyreduce:
break;
case 48:
-#line 763 "parser.y"
+#line 768 "parser.y"
{
(yyval.acc) = new_accelerator();
if((yyvsp[-4].iptr))
@@ -2577,7 +2578,7 @@ yyreduce:
(yyval.acc)->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE;
}
if(!(yyvsp[-1].event))
- parser_error("Accelerator table must have at least one entry\n");
+ yyerror("Accelerator table must have at least one entry");
(yyval.acc)->events = get_event_head((yyvsp[-1].event));
if((yyvsp[-3].lvc))
{
@@ -2590,72 +2591,72 @@ yyreduce:
break;
case 49:
-#line 787 "parser.y"
+#line 792 "parser.y"
{ (yyval.event)=NULL; ;}
break;
case 50:
-#line 788 "parser.y"
+#line 793 "parser.y"
{ (yyval.event)=add_string_event((yyvsp[-3].str), (yyvsp[-1].num), (yyvsp[0].num), (yyvsp[-4].event)); ;}
break;
case 51:
-#line 789 "parser.y"
+#line 794 "parser.y"
{ (yyval.event)=add_event((yyvsp[-3].num), (yyvsp[-1].num), (yyvsp[0].num), (yyvsp[-4].event)); ;}
break;
case 52:
-#line 798 "parser.y"
+#line 803 "parser.y"
{ (yyval.num) = 0; ;}
break;
case 53:
-#line 799 "parser.y"
+#line 804 "parser.y"
{ (yyval.num) = (yyvsp[0].num); ;}
break;
case 54:
-#line 802 "parser.y"
+#line 807 "parser.y"
{ (yyval.num) = (yyvsp[0].num); ;}
break;
case 55:
-#line 803 "parser.y"
+#line 808 "parser.y"
{ (yyval.num) = (yyvsp[-2].num) | (yyvsp[0].num); ;}
break;
case 56:
-#line 806 "parser.y"
+#line 811 "parser.y"
{ (yyval.num) = WRC_AF_NOINVERT; ;}
break;
case 57:
-#line 807 "parser.y"
+#line 812 "parser.y"
{ (yyval.num) = WRC_AF_SHIFT; ;}
break;
case 58:
-#line 808 "parser.y"
+#line 813 "parser.y"
{ (yyval.num) = WRC_AF_CONTROL; ;}
break;
case 59:
-#line 809 "parser.y"
+#line 814 "parser.y"
{ (yyval.num) = WRC_AF_ALT; ;}
break;
case 60:
-#line 810 "parser.y"
+#line 815 "parser.y"
{ (yyval.num) = WRC_AF_ASCII; ;}
break;
case 61:
-#line 811 "parser.y"
+#line 816 "parser.y"
{ (yyval.num) = WRC_AF_VIRTKEY; ;}
break;
case 62:
-#line 817 "parser.y"
+#line 822 "parser.y"
{
if((yyvsp[-11].iptr))
{
@@ -2690,147 +2691,147 @@ yyreduce:
break;
case 63:
-#line 851 "parser.y"
+#line 856 "parser.y"
{ (yyval.dlg)=new_dialog(); ;}
break;
case 64:
-#line 852 "parser.y"
+#line 857 "parser.y"
{ (yyval.dlg)=dialog_style((yyvsp[0].style),(yyvsp[-2].dlg)); ;}
break;
case 65:
-#line 853 "parser.y"
+#line 858 "parser.y"
{ (yyval.dlg)=dialog_exstyle((yyvsp[0].style),(yyvsp[-2].dlg)); ;}
break;
case 66:
-#line 854 "parser.y"
+#line 859 "parser.y"
{ (yyval.dlg)=dialog_caption((yyvsp[0].str),(yyvsp[-2].dlg)); ;}
break;
case 67:
-#line 855 "parser.y"
+#line 860 "parser.y"
{ (yyval.dlg)=dialog_font((yyvsp[0].fntid),(yyvsp[-1].dlg)); ;}
break;
case 68:
-#line 856 "parser.y"
+#line 861 "parser.y"
{ (yyval.dlg)=dialog_class((yyvsp[0].nid),(yyvsp[-2].dlg)); ;}
break;
case 69:
-#line 857 "parser.y"
+#line 862 "parser.y"
{ (yyval.dlg)=dialog_menu((yyvsp[0].nid),(yyvsp[-2].dlg)); ;}
break;
case 70:
-#line 858 "parser.y"
+#line 863 "parser.y"
{ (yyval.dlg)=dialog_language((yyvsp[0].lan),(yyvsp[-1].dlg)); ;}
break;
case 71:
-#line 859 "parser.y"
+#line 864 "parser.y"
{ (yyval.dlg)=dialog_characteristics((yyvsp[0].chars),(yyvsp[-1].dlg)); ;}
break;
case 72:
-#line 860 "parser.y"
+#line 865 "parser.y"
{ (yyval.dlg)=dialog_version((yyvsp[0].ver),(yyvsp[-1].dlg)); ;}
break;
case 73:
-#line 863 "parser.y"
+#line 868 "parser.y"
{ (yyval.ctl) = NULL; ;}
break;
case 74:
-#line 864 "parser.y"
+#line 869 "parser.y"
{ (yyval.ctl)=ins_ctrl(-1, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 75:
-#line 865 "parser.y"
+#line 870 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_EDIT, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 76:
-#line 866 "parser.y"
+#line 871 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_LISTBOX, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 77:
-#line 867 "parser.y"
+#line 872 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_COMBOBOX, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 78:
-#line 868 "parser.y"
+#line 873 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_SCROLLBAR, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 79:
-#line 869 "parser.y"
+#line 874 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_CHECKBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 80:
-#line 870 "parser.y"
+#line 875 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_DEFPUSHBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 81:
-#line 871 "parser.y"
+#line 876 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_GROUPBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl));;}
break;
case 82:
-#line 872 "parser.y"
+#line 877 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_PUSHBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 83:
-#line 874 "parser.y"
+#line 879 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_RADIOBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 84:
-#line 875 "parser.y"
+#line 880 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTO3STATE, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 85:
-#line 876 "parser.y"
+#line 881 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_3STATE, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 86:
-#line 877 "parser.y"
+#line 882 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTOCHECKBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 87:
-#line 878 "parser.y"
+#line 883 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTORADIOBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 88:
-#line 879 "parser.y"
+#line 884 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_STATIC, SS_LEFT, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 89:
-#line 880 "parser.y"
+#line 885 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_STATIC, SS_CENTER, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 90:
-#line 881 "parser.y"
+#line 886 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_STATIC, SS_RIGHT, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 91:
-#line 883 "parser.y"
+#line 888 "parser.y"
{
(yyvsp[0].ctl)->title = (yyvsp[-7].nid);
(yyvsp[0].ctl)->id = (yyvsp[-5].num);
@@ -2841,7 +2842,7 @@ yyreduce:
break;
case 92:
-#line 893 "parser.y"
+#line 898 "parser.y"
{
(yyval.ctl)=new_control();
(yyval.ctl)->title = (yyvsp[-11].nid);
@@ -2865,7 +2866,7 @@ yyreduce:
break;
case 93:
-#line 916 "parser.y"
+#line 921 "parser.y"
{
(yyval.ctl) = new_control();
(yyval.ctl)->id = (yyvsp[-9].num);
@@ -2888,12 +2889,12 @@ yyreduce:
break;
case 94:
-#line 938 "parser.y"
+#line 943 "parser.y"
{ (yyval.ctl) = new_control(); ;}
break;
case 95:
-#line 940 "parser.y"
+#line 945 "parser.y"
{
(yyval.ctl) = new_control();
(yyval.ctl)->width = (yyvsp[-2].num);
@@ -2902,7 +2903,7 @@ yyreduce:
break;
case 96:
-#line 945 "parser.y"
+#line 950 "parser.y"
{
(yyval.ctl) = new_control();
(yyval.ctl)->width = (yyvsp[-4].num);
@@ -2913,7 +2914,7 @@ yyreduce:
break;
case 97:
-#line 952 "parser.y"
+#line 957 "parser.y"
{
(yyval.ctl) = new_control();
(yyval.ctl)->width = (yyvsp[-6].num);
@@ -2926,7 +2927,7 @@ yyreduce:
break;
case 98:
-#line 963 "parser.y"
+#line 968 "parser.y"
{
(yyval.ctl)=new_control();
(yyval.ctl)->title = (yyvsp[-16].nid);
@@ -2944,7 +2945,7 @@ yyreduce:
break;
case 99:
-#line 977 "parser.y"
+#line 982 "parser.y"
{
(yyval.ctl)=new_control();
(yyval.ctl)->title = (yyvsp[-14].nid);
@@ -2960,47 +2961,47 @@ yyreduce:
break;
case 100:
-#line 992 "parser.y"
+#line 997 "parser.y"
{ (yyval.fntid) = new_font_id((yyvsp[-2].num), (yyvsp[0].str), 0, 0); ;}
break;
case 101:
-#line 997 "parser.y"
+#line 1002 "parser.y"
{ (yyval.styles) = NULL; ;}
break;
case 102:
-#line 998 "parser.y"
+#line 1003 "parser.y"
{ (yyval.styles) = new_style_pair((yyvsp[0].style), 0); ;}
break;
case 103:
-#line 999 "parser.y"
+#line 1004 "parser.y"
{ (yyval.styles) = new_style_pair((yyvsp[-2].style), (yyvsp[0].style)); ;}
break;
case 104:
-#line 1003 "parser.y"
+#line 1008 "parser.y"
{ (yyval.style) = new_style((yyvsp[-2].style)->or_mask | (yyvsp[0].style)->or_mask, (yyvsp[-2].style)->and_mask | (yyvsp[0].style)->and_mask); free((yyvsp[-2].style)); free((yyvsp[0].style));;}
break;
case 105:
-#line 1004 "parser.y"
+#line 1009 "parser.y"
{ (yyval.style) = (yyvsp[-1].style); ;}
break;
case 106:
-#line 1005 "parser.y"
+#line 1010 "parser.y"
{ (yyval.style) = new_style((yyvsp[0].num), 0); ;}
break;
case 107:
-#line 1006 "parser.y"
+#line 1011 "parser.y"
{ (yyval.style) = new_style(0, (yyvsp[0].num)); ;}
break;
case 108:
-#line 1010 "parser.y"
+#line 1015 "parser.y"
{
(yyval.nid) = new_name_id();
(yyval.nid)->type = name_ord;
@@ -3009,7 +3010,7 @@ yyreduce:
break;
case 109:
-#line 1015 "parser.y"
+#line 1020 "parser.y"
{
(yyval.nid) = new_name_id();
(yyval.nid)->type = name_str;
@@ -3018,7 +3019,7 @@ yyreduce:
break;
case 110:
-#line 1024 "parser.y"
+#line 1029 "parser.y"
{
if(!win32)
parser_warning("DIALOGEX not supported in 16-bit mode\n");
@@ -3062,152 +3063,152 @@ yyreduce:
break;
case 111:
-#line 1067 "parser.y"
+#line 1072 "parser.y"
{ (yyval.dlgex)=new_dialogex(); ;}
break;
case 112:
-#line 1068 "parser.y"
+#line 1073 "parser.y"
{ (yyval.dlgex)=dialogex_style((yyvsp[0].style),(yyvsp[-2].dlgex)); ;}
break;
case 113:
-#line 1069 "parser.y"
+#line 1074 "parser.y"
{ (yyval.dlgex)=dialogex_exstyle((yyvsp[0].style),(yyvsp[-2].dlgex)); ;}
break;
case 114:
-#line 1070 "parser.y"
+#line 1075 "parser.y"
{ (yyval.dlgex)=dialogex_caption((yyvsp[0].str),(yyvsp[-2].dlgex)); ;}
break;
case 115:
-#line 1071 "parser.y"
+#line 1076 "parser.y"
{ (yyval.dlgex)=dialogex_font((yyvsp[0].fntid),(yyvsp[-1].dlgex)); ;}
break;
case 116:
-#line 1072 "parser.y"
+#line 1077 "parser.y"
{ (yyval.dlgex)=dialogex_font((yyvsp[0].fntid),(yyvsp[-1].dlgex)); ;}
break;
case 117:
-#line 1073 "parser.y"
+#line 1078 "parser.y"
{ (yyval.dlgex)=dialogex_class((yyvsp[0].nid),(yyvsp[-2].dlgex)); ;}
break;
case 118:
-#line 1074 "parser.y"
+#line 1079 "parser.y"
{ (yyval.dlgex)=dialogex_menu((yyvsp[0].nid),(yyvsp[-2].dlgex)); ;}
break;
case 119:
-#line 1075 "parser.y"
+#line 1080 "parser.y"
{ (yyval.dlgex)=dialogex_language((yyvsp[0].lan),(yyvsp[-1].dlgex)); ;}
break;
case 120:
-#line 1076 "parser.y"
+#line 1081 "parser.y"
{ (yyval.dlgex)=dialogex_characteristics((yyvsp[0].chars),(yyvsp[-1].dlgex)); ;}
break;
case 121:
-#line 1077 "parser.y"
+#line 1082 "parser.y"
{ (yyval.dlgex)=dialogex_version((yyvsp[0].ver),(yyvsp[-1].dlgex)); ;}
break;
case 122:
-#line 1080 "parser.y"
+#line 1085 "parser.y"
{ (yyval.ctl) = NULL; ;}
break;
case 123:
-#line 1081 "parser.y"
+#line 1086 "parser.y"
{ (yyval.ctl)=ins_ctrl(-1, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 124:
-#line 1082 "parser.y"
+#line 1087 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_EDIT, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 125:
-#line 1083 "parser.y"
+#line 1088 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_LISTBOX, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 126:
-#line 1084 "parser.y"
+#line 1089 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_COMBOBOX, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 127:
-#line 1085 "parser.y"
+#line 1090 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_SCROLLBAR, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 128:
-#line 1086 "parser.y"
+#line 1091 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_CHECKBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 129:
-#line 1087 "parser.y"
+#line 1092 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_DEFPUSHBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 130:
-#line 1088 "parser.y"
+#line 1093 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_GROUPBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl));;}
break;
case 131:
-#line 1089 "parser.y"
+#line 1094 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_PUSHBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 132:
-#line 1091 "parser.y"
+#line 1096 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_RADIOBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 133:
-#line 1092 "parser.y"
+#line 1097 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTO3STATE, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 134:
-#line 1093 "parser.y"
+#line 1098 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_3STATE, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 135:
-#line 1094 "parser.y"
+#line 1099 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTOCHECKBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 136:
-#line 1095 "parser.y"
+#line 1100 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTORADIOBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 137:
-#line 1096 "parser.y"
+#line 1101 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_STATIC, SS_LEFT, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 138:
-#line 1097 "parser.y"
+#line 1102 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_STATIC, SS_CENTER, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 139:
-#line 1098 "parser.y"
+#line 1103 "parser.y"
{ (yyval.ctl)=ins_ctrl(CT_STATIC, SS_RIGHT, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;}
break;
case 140:
-#line 1100 "parser.y"
+#line 1105 "parser.y"
{
(yyvsp[0].ctl)->title = (yyvsp[-7].nid);
(yyvsp[0].ctl)->id = (yyvsp[-5].num);
@@ -3218,7 +3219,7 @@ yyreduce:
break;
case 141:
-#line 1111 "parser.y"
+#line 1116 "parser.y"
{
(yyval.ctl)=new_control();
(yyval.ctl)->title = (yyvsp[-18].nid);
@@ -3246,7 +3247,7 @@ yyreduce:
break;
case 142:
-#line 1135 "parser.y"
+#line 1140 "parser.y"
{
(yyval.ctl)=new_control();
(yyval.ctl)->title = (yyvsp[-15].nid);
@@ -3263,7 +3264,7 @@ yyreduce:
break;
case 143:
-#line 1151 "parser.y"
+#line 1156 "parser.y"
{
(yyval.ctl)=new_control();
(yyval.ctl)->title = (yyvsp[-13].nid);
@@ -3290,7 +3291,7 @@ yyreduce:
break;
case 144:
-#line 1177 "parser.y"
+#line 1182 "parser.y"
{
(yyval.ctl) = new_control();
(yyval.ctl)->id = (yyvsp[-11].num);
@@ -3315,45 +3316,45 @@ yyreduce:
break;
case 145:
-#line 1200 "parser.y"
+#line 1205 "parser.y"
{ (yyval.raw) = NULL; ;}
break;
case 146:
-#line 1201 "parser.y"
+#line 1206 "parser.y"
{ (yyval.raw) = (yyvsp[0].raw); ;}
break;
case 147:
-#line 1204 "parser.y"
+#line 1209 "parser.y"
{ (yyval.iptr) = NULL; ;}
break;
case 148:
-#line 1205 "parser.y"
+#line 1210 "parser.y"
{ (yyval.iptr) = new_int((yyvsp[0].num)); ;}
break;
case 149:
-#line 1209 "parser.y"
+#line 1214 "parser.y"
{ (yyval.fntid) = new_font_id((yyvsp[-7].num), (yyvsp[-5].str), (yyvsp[-3].num), (yyvsp[-1].num)); ;}
break;
case 150:
-#line 1216 "parser.y"
+#line 1221 "parser.y"
{ (yyval.fntid) = NULL; ;}
break;
case 151:
-#line 1217 "parser.y"
+#line 1222 "parser.y"
{ (yyval.fntid) = NULL; ;}
break;
case 152:
-#line 1221 "parser.y"
+#line 1226 "parser.y"
{
if(!(yyvsp[0].menitm))
- parser_error("Menu must contain items\n");
+ yyerror("Menu must contain items");
(yyval.men) = new_menu();
if((yyvsp[-2].iptr))
{
@@ -3374,17 +3375,17 @@ yyreduce:
break;
case 153:
-#line 1244 "parser.y"
+#line 1249 "parser.y"
{ (yyval.menitm) = (yyvsp[-1].menitm); ;}
break;
case 154:
-#line 1248 "parser.y"
+#line 1253 "parser.y"
{(yyval.menitm) = NULL;;}
break;
case 155:
-#line 1249 "parser.y"
+#line 1254 "parser.y"
{
(yyval.menitm)=new_menu_item();
(yyval.menitm)->prev = (yyvsp[-5].menitm);
@@ -3397,7 +3398,7 @@ yyreduce:
break;
case 156:
-#line 1258 "parser.y"
+#line 1263 "parser.y"
{
(yyval.menitm)=new_menu_item();
(yyval.menitm)->prev = (yyvsp[-2].menitm);
@@ -3407,7 +3408,7 @@ yyreduce:
break;
case 157:
-#line 1264 "parser.y"
+#line 1269 "parser.y"
{
(yyval.menitm) = new_menu_item();
(yyval.menitm)->prev = (yyvsp[-4].menitm);
@@ -3419,47 +3420,47 @@ yyreduce:
break;
case 158:
-#line 1283 "parser.y"
+#line 1288 "parser.y"
{ (yyval.num) = 0; ;}
break;
case 159:
-#line 1284 "parser.y"
+#line 1289 "parser.y"
{ (yyval.num) = (yyvsp[0].num) | MF_CHECKED; ;}
break;
case 160:
-#line 1285 "parser.y"
+#line 1290 "parser.y"
{ (yyval.num) = (yyvsp[0].num) | MF_GRAYED; ;}
break;
case 161:
-#line 1286 "parser.y"
+#line 1291 "parser.y"
{ (yyval.num) = (yyvsp[0].num) | MF_HELP; ;}
break;
case 162:
-#line 1287 "parser.y"
+#line 1292 "parser.y"
{ (yyval.num) = (yyvsp[0].num) | MF_DISABLED; ;}
break;
case 163:
-#line 1288 "parser.y"
+#line 1293 "parser.y"
{ (yyval.num) = (yyvsp[0].num) | MF_MENUBARBREAK; ;}
break;
case 164:
-#line 1289 "parser.y"
+#line 1294 "parser.y"
{ (yyval.num) = (yyvsp[0].num) | MF_MENUBREAK; ;}
break;
case 165:
-#line 1293 "parser.y"
+#line 1298 "parser.y"
{
if(!win32)
parser_warning("MENUEX not supported in 16-bit mode\n");
if(!(yyvsp[0].menexitm))
- parser_error("MenuEx must contain items\n");
+ yyerror("MenuEx must contain items");
(yyval.menex) = new_menuex();
if((yyvsp[-2].iptr))
{
@@ -3480,17 +3481,17 @@ yyreduce:
break;
case 166:
-#line 1318 "parser.y"
+#line 1323 "parser.y"
{ (yyval.menexitm) = (yyvsp[-1].menexitm); ;}
break;
case 167:
-#line 1322 "parser.y"
+#line 1327 "parser.y"
{(yyval.menexitm) = NULL; ;}
break;
case 168:
-#line 1323 "parser.y"
+#line 1328 "parser.y"
{
(yyval.menexitm) = new_menuex_item();
(yyval.menexitm)->prev = (yyvsp[-3].menexitm);
@@ -3510,7 +3511,7 @@ yyreduce:
break;
case 169:
-#line 1339 "parser.y"
+#line 1344 "parser.y"
{
(yyval.menexitm) = new_menuex_item();
(yyval.menexitm)->prev = (yyvsp[-2].menexitm);
@@ -3520,7 +3521,7 @@ yyreduce:
break;
case 170:
-#line 1345 "parser.y"
+#line 1350 "parser.y"
{
(yyval.menexitm) = new_menuex_item();
(yyval.menexitm)->prev = (yyvsp[-4].menexitm);
@@ -3541,12 +3542,12 @@ yyreduce:
break;
case 171:
-#line 1365 "parser.y"
+#line 1370 "parser.y"
{ (yyval.exopt) = new_itemex_opt(0, 0, 0, 0); ;}
break;
case 172:
-#line 1366 "parser.y"
+#line 1371 "parser.y"
{
(yyval.exopt) = new_itemex_opt((yyvsp[0].num), 0, 0, 0);
(yyval.exopt)->gotid = TRUE;
@@ -3554,7 +3555,7 @@ yyreduce:
break;
case 173:
-#line 1370 "parser.y"
+#line 1375 "parser.y"
{
(yyval.exopt) = new_itemex_opt((yyvsp[-3].iptr) ? *((yyvsp[-3].iptr)) : 0, (yyvsp[-1].iptr) ? *((yyvsp[-1].iptr)) : 0, (yyvsp[0].num), 0);
(yyval.exopt)->gotid = TRUE;
@@ -3566,7 +3567,7 @@ yyreduce:
break;
case 174:
-#line 1378 "parser.y"
+#line 1383 "parser.y"
{
(yyval.exopt) = new_itemex_opt((yyvsp[-4].iptr) ? *((yyvsp[-4].iptr)) : 0, (yyvsp[-2].iptr) ? *((yyvsp[-2].iptr)) : 0, (yyvsp[0].num), 0);
(yyval.exopt)->gotid = TRUE;
@@ -3578,12 +3579,12 @@ yyreduce:
break;
case 175:
-#line 1389 "parser.y"
+#line 1394 "parser.y"
{ (yyval.exopt) = new_itemex_opt(0, 0, 0, 0); ;}
break;
case 176:
-#line 1390 "parser.y"
+#line 1395 "parser.y"
{
(yyval.exopt) = new_itemex_opt((yyvsp[0].num), 0, 0, 0);
(yyval.exopt)->gotid = TRUE;
@@ -3591,7 +3592,7 @@ yyreduce:
break;
case 177:
-#line 1394 "parser.y"
+#line 1399 "parser.y"
{
(yyval.exopt) = new_itemex_opt((yyvsp[-2].iptr) ? *((yyvsp[-2].iptr)) : 0, (yyvsp[0].num), 0, 0);
free((yyvsp[-2].iptr));
@@ -3601,7 +3602,7 @@ yyreduce:
break;
case 178:
-#line 1400 "parser.y"
+#line 1405 "parser.y"
{
(yyval.exopt) = new_itemex_opt((yyvsp[-4].iptr) ? *((yyvsp[-4].iptr)) : 0, (yyvsp[-2].iptr) ? *((yyvsp[-2].iptr)) : 0, (yyvsp[0].num), 0);
free((yyvsp[-4].iptr));
@@ -3613,7 +3614,7 @@ yyreduce:
break;
case 179:
-#line 1408 "parser.y"
+#line 1413 "parser.y"
{
(yyval.exopt) = new_itemex_opt((yyvsp[-6].iptr) ? *((yyvsp[-6].iptr)) : 0, (yyvsp[-4].iptr) ? *((yyvsp[-4].iptr)) : 0, (yyvsp[-2].iptr) ? *((yyvsp[-2].iptr)) : 0, (yyvsp[0].num));
free((yyvsp[-6].iptr));
@@ -3627,11 +3628,11 @@ yyreduce:
break;
case 180:
-#line 1428 "parser.y"
+#line 1433 "parser.y"
{
if(!(yyvsp[-1].stt))
{
- parser_error("Stringtable must have at least one entry\n");
+ yyerror("Stringtable must have at least one entry");
}
else
{
@@ -3666,7 +3667,7 @@ yyreduce:
break;
case 181:
-#line 1466 "parser.y"
+#line 1471 "parser.y"
{
if((tagstt = find_stringtable((yyvsp[0].lvc))) == NULL)
tagstt = new_stringtable((yyvsp[0].lvc));
@@ -3678,22 +3679,22 @@ yyreduce:
break;
case 182:
-#line 1476 "parser.y"
+#line 1481 "parser.y"
{ (yyval.stt) = NULL; ;}
break;
case 183:
-#line 1477 "parser.y"
+#line 1482 "parser.y"
{
int i;
assert(tagstt != NULL);
if((yyvsp[-2].num) > 65535 || (yyvsp[-2].num) < -32768)
- parser_error("Stringtable entry's ID out of range (%d)\n", (yyvsp[-2].num));
+ yyerror("Stringtable entry's ID out of range (%d)", (yyvsp[-2].num));
/* Search for the ID */
for(i = 0; i < tagstt->nentries; i++)
{
if(tagstt->entries[i].id == (yyvsp[-2].num))
- parser_error("Stringtable ID %d already in use\n", (yyvsp[-2].num));
+ yyerror("Stringtable ID %d already in use", (yyvsp[-2].num));
}
/* If we get here, then we have a new unique entry */
tagstt->nentries++;
@@ -3710,15 +3711,15 @@ yyreduce:
if(pedantic && !(yyvsp[0].str)->size)
parser_warning("Zero length strings make no sense\n");
if(!win32 && (yyvsp[0].str)->size > 254)
- parser_error("Stringtable entry more than 254 characters\n");
+ yyerror("Stringtable entry more than 254 characters");
if(win32 && (yyvsp[0].str)->size > 65534) /* Hmm..., does this happen? */
- parser_error("Stringtable entry more than 65534 characters (probably something else that went wrong)\n");
+ yyerror("Stringtable entry more than 65534 characters (probably something else that went wrong)");
(yyval.stt) = tagstt;
;}
break;
case 186:
-#line 1517 "parser.y"
+#line 1522 "parser.y"
{
(yyval.veri) = (yyvsp[-3].veri);
if((yyvsp[-4].iptr))
@@ -3735,15 +3736,15 @@ yyreduce:
break;
case 187:
-#line 1533 "parser.y"
+#line 1538 "parser.y"
{ (yyval.veri) = new_versioninfo(); ;}
break;
case 188:
-#line 1534 "parser.y"
+#line 1539 "parser.y"
{
if((yyvsp[-8].veri)->gotit.fv)
- parser_error("FILEVERSION already defined\n");
+ yyerror("FILEVERSION already defined");
(yyval.veri) = (yyvsp[-8].veri);
(yyval.veri)->filever_maj1 = (yyvsp[-6].num);
(yyval.veri)->filever_maj2 = (yyvsp[-4].num);
@@ -3754,10 +3755,10 @@ yyreduce:
break;
case 189:
-#line 1544 "parser.y"
+#line 1549 "parser.y"
{
if((yyvsp[-8].veri)->gotit.pv)
- parser_error("PRODUCTVERSION already defined\n");
+ yyerror("PRODUCTVERSION already defined");
(yyval.veri) = (yyvsp[-8].veri);
(yyval.veri)->prodver_maj1 = (yyvsp[-6].num);
(yyval.veri)->prodver_maj2 = (yyvsp[-4].num);
@@ -3768,10 +3769,10 @@ yyreduce:
break;
case 190:
-#line 1554 "parser.y"
+#line 1559 "parser.y"
{
if((yyvsp[-2].veri)->gotit.ff)
- parser_error("FILEFLAGS already defined\n");
+ yyerror("FILEFLAGS already defined");
(yyval.veri) = (yyvsp[-2].veri);
(yyval.veri)->fileflags = (yyvsp[0].num);
(yyval.veri)->gotit.ff = 1;
@@ -3779,10 +3780,10 @@ yyreduce:
break;
case 191:
-#line 1561 "parser.y"
+#line 1566 "parser.y"
{
if((yyvsp[-2].veri)->gotit.ffm)
- parser_error("FILEFLAGSMASK already defined\n");
+ yyerror("FILEFLAGSMASK already defined");
(yyval.veri) = (yyvsp[-2].veri);
(yyval.veri)->fileflagsmask = (yyvsp[0].num);
(yyval.veri)->gotit.ffm = 1;
@@ -3790,10 +3791,10 @@ yyreduce:
break;
case 192:
-#line 1568 "parser.y"
+#line 1573 "parser.y"
{
if((yyvsp[-2].veri)->gotit.fo)
- parser_error("FILEOS already defined\n");
+ yyerror("FILEOS already defined");
(yyval.veri) = (yyvsp[-2].veri);
(yyval.veri)->fileos = (yyvsp[0].num);
(yyval.veri)->gotit.fo = 1;
@@ -3801,10 +3802,10 @@ yyreduce:
break;
case 193:
-#line 1575 "parser.y"
+#line 1580 "parser.y"
{
if((yyvsp[-2].veri)->gotit.ft)
- parser_error("FILETYPE already defined\n");
+ yyerror("FILETYPE already defined");
(yyval.veri) = (yyvsp[-2].veri);
(yyval.veri)->filetype = (yyvsp[0].num);
(yyval.veri)->gotit.ft = 1;
@@ -3812,10 +3813,10 @@ yyreduce:
break;
case 194:
-#line 1582 "parser.y"
+#line 1587 "parser.y"
{
if((yyvsp[-2].veri)->gotit.fst)
- parser_error("FILESUBTYPE already defined\n");
+ yyerror("FILESUBTYPE already defined");
(yyval.veri) = (yyvsp[-2].veri);
(yyval.veri)->filesubtype = (yyvsp[0].num);
(yyval.veri)->gotit.fst = 1;
@@ -3823,12 +3824,12 @@ yyreduce:
break;
case 195:
-#line 1592 "parser.y"
+#line 1597 "parser.y"
{ (yyval.blk) = NULL; ;}
break;
case 196:
-#line 1593 "parser.y"
+#line 1598 "parser.y"
{
(yyval.blk) = (yyvsp[0].blk);
(yyval.blk)->prev = (yyvsp[-1].blk);
@@ -3838,7 +3839,7 @@ yyreduce:
break;
case 197:
-#line 1602 "parser.y"
+#line 1607 "parser.y"
{
(yyval.blk) = new_ver_block();
(yyval.blk)->name = (yyvsp[-3].str);
@@ -3847,12 +3848,12 @@ yyreduce:
break;
case 198:
-#line 1610 "parser.y"
+#line 1615 "parser.y"
{ (yyval.val) = NULL; ;}
break;
case 199:
-#line 1611 "parser.y"
+#line 1616 "parser.y"
{
(yyval.val) = (yyvsp[0].val);
(yyval.val)->prev = (yyvsp[-1].val);
@@ -3862,7 +3863,7 @@ yyreduce:
break;
case 200:
-#line 1620 "parser.y"
+#line 1625 "parser.y"
{
(yyval.val) = new_ver_value();
(yyval.val)->type = val_block;
@@ -3871,7 +3872,7 @@ yyreduce:
break;
case 201:
-#line 1625 "parser.y"
+#line 1630 "parser.y"
{
(yyval.val) = new_ver_value();
(yyval.val)->type = val_str;
@@ -3881,7 +3882,7 @@ yyreduce:
break;
case 202:
-#line 1631 "parser.y"
+#line 1636 "parser.y"
{
(yyval.val) = new_ver_value();
(yyval.val)->type = val_words;
@@ -3891,17 +3892,17 @@ yyreduce:
break;
case 203:
-#line 1640 "parser.y"
+#line 1645 "parser.y"
{ (yyval.verw) = new_ver_words((yyvsp[0].num)); ;}
break;
case 204:
-#line 1641 "parser.y"
+#line 1646 "parser.y"
{ (yyval.verw) = add_ver_words((yyvsp[-2].verw), (yyvsp[0].num)); ;}
break;
case 205:
-#line 1645 "parser.y"
+#line 1650 "parser.y"
{
int nitems;
toolbar_item_t *items = get_tlbr_buttons_head((yyvsp[-1].tlbarItems), &nitems);
@@ -3928,12 +3929,12 @@ yyreduce:
break;
case 206:
-#line 1671 "parser.y"
+#line 1676 "parser.y"
{ (yyval.tlbarItems) = NULL; ;}
break;
case 207:
-#line 1672 "parser.y"
+#line 1677 "parser.y"
{
toolbar_item_t *idrec = new_toolbar_item();
idrec->id = (yyvsp[0].num);
@@ -3942,7 +3943,7 @@ yyreduce:
break;
case 208:
-#line 1677 "parser.y"
+#line 1682 "parser.y"
{
toolbar_item_t *idrec = new_toolbar_item();
idrec->id = 0;
@@ -3951,12 +3952,12 @@ yyreduce:
break;
case 209:
-#line 1686 "parser.y"
+#line 1691 "parser.y"
{ (yyval.iptr) = NULL; ;}
break;
case 210:
-#line 1687 "parser.y"
+#line 1692 "parser.y"
{
if((yyvsp[-1].iptr))
{
@@ -3970,7 +3971,7 @@ yyreduce:
break;
case 211:
-#line 1697 "parser.y"
+#line 1702 "parser.y"
{
if((yyvsp[-1].iptr))
{
@@ -3987,101 +3988,101 @@ yyreduce:
break;
case 212:
-#line 1712 "parser.y"
+#line 1717 "parser.y"
{ (yyval.iptr) = new_int(WRC_MO_PRELOAD); ;}
break;
case 213:
-#line 1713 "parser.y"
+#line 1718 "parser.y"
{ (yyval.iptr) = new_int(WRC_MO_MOVEABLE); ;}
break;
case 214:
-#line 1714 "parser.y"
+#line 1719 "parser.y"
{ (yyval.iptr) = new_int(WRC_MO_DISCARDABLE); ;}
break;
case 215:
-#line 1715 "parser.y"
+#line 1720 "parser.y"
{ (yyval.iptr) = new_int(WRC_MO_PURE); ;}
break;
case 216:
-#line 1718 "parser.y"
+#line 1723 "parser.y"
{ (yyval.iptr) = new_int(~WRC_MO_PRELOAD); ;}
break;
case 217:
-#line 1719 "parser.y"
+#line 1724 "parser.y"
{ (yyval.iptr) = new_int(~WRC_MO_MOVEABLE); ;}
break;
case 218:
-#line 1720 "parser.y"
+#line 1725 "parser.y"
{ (yyval.iptr) = new_int(~WRC_MO_PURE); ;}
break;
case 219:
-#line 1724 "parser.y"
+#line 1729 "parser.y"
{ (yyval.lvc) = new_lvc(); ;}
break;
case 220:
-#line 1725 "parser.y"
+#line 1730 "parser.y"
{
if(!win32)
parser_warning("LANGUAGE not supported in 16-bit mode\n");
if((yyvsp[-1].lvc)->language)
- parser_error("Language already defined\n");
+ yyerror("Language already defined");
(yyval.lvc) = (yyvsp[-1].lvc);
(yyvsp[-1].lvc)->language = (yyvsp[0].lan);
;}
break;
case 221:
-#line 1733 "parser.y"
+#line 1738 "parser.y"
{
if(!win32)
parser_warning("CHARACTERISTICS not supported in 16-bit mode\n");
if((yyvsp[-1].lvc)->characts)
- parser_error("Characteristics already defined\n");
+ yyerror("Characteristics already defined");
(yyval.lvc) = (yyvsp[-1].lvc);
(yyvsp[-1].lvc)->characts = (yyvsp[0].chars);
;}
break;
case 222:
-#line 1741 "parser.y"
+#line 1746 "parser.y"
{
if(!win32)
parser_warning("VERSION not supported in 16-bit mode\n");
if((yyvsp[-1].lvc)->version)
- parser_error("Version already defined\n");
+ yyerror("Version already defined");
(yyval.lvc) = (yyvsp[-1].lvc);
(yyvsp[-1].lvc)->version = (yyvsp[0].ver);
;}
break;
case 223:
-#line 1759 "parser.y"
+#line 1764 "parser.y"
{ (yyval.lan) = new_language((yyvsp[-2].num), (yyvsp[0].num));
if (get_language_codepage((yyvsp[-2].num), (yyvsp[0].num)) == -1)
- parser_error( "Language %04x is not supported\n", ((yyvsp[0].num)<<10) + (yyvsp[-2].num));
+ yyerror( "Language %04x is not supported", ((yyvsp[0].num)<<10) + (yyvsp[-2].num));
;}
break;
case 224:
-#line 1766 "parser.y"
+#line 1771 "parser.y"
{ (yyval.chars) = new_characts((yyvsp[0].num)); ;}
break;
case 225:
-#line 1770 "parser.y"
+#line 1775 "parser.y"
{ (yyval.ver) = new_version((yyvsp[0].num)); ;}
break;
case 226:
-#line 1774 "parser.y"
+#line 1779 "parser.y"
{
if((yyvsp[-3].lvc))
{
@@ -4097,162 +4098,162 @@ yyreduce:
break;
case 227:
-#line 1789 "parser.y"
+#line 1794 "parser.y"
{ (yyval.raw) = (yyvsp[0].raw); ;}
break;
case 228:
-#line 1790 "parser.y"
+#line 1795 "parser.y"
{ (yyval.raw) = int2raw_data((yyvsp[0].num)); ;}
break;
case 229:
-#line 1791 "parser.y"
+#line 1796 "parser.y"
{ (yyval.raw) = int2raw_data(-((yyvsp[0].num))); ;}
break;
case 230:
-#line 1792 "parser.y"
+#line 1797 "parser.y"
{ (yyval.raw) = long2raw_data((yyvsp[0].num)); ;}
break;
case 231:
-#line 1793 "parser.y"
+#line 1798 "parser.y"
{ (yyval.raw) = long2raw_data(-((yyvsp[0].num))); ;}
break;
case 232:
-#line 1794 "parser.y"
+#line 1799 "parser.y"
{ (yyval.raw) = str2raw_data((yyvsp[0].str)); ;}
break;
case 233:
-#line 1795 "parser.y"
+#line 1800 "parser.y"
{ (yyval.raw) = merge_raw_data((yyvsp[-2].raw), (yyvsp[0].raw)); free((yyvsp[0].raw)->data); free((yyvsp[0].raw)); ;}
break;
case 234:
-#line 1796 "parser.y"
+#line 1801 "parser.y"
{ (yyval.raw) = merge_raw_data_int((yyvsp[-2].raw), (yyvsp[0].num)); ;}
break;
case 235:
-#line 1797 "parser.y"
+#line 1802 "parser.y"
{ (yyval.raw) = merge_raw_data_int((yyvsp[-3].raw), -((yyvsp[0].num))); ;}
break;
case 236:
-#line 1798 "parser.y"
+#line 1803 "parser.y"
{ (yyval.raw) = merge_raw_data_long((yyvsp[-2].raw), (yyvsp[0].num)); ;}
break;
case 237:
-#line 1799 "parser.y"
+#line 1804 "parser.y"
{ (yyval.raw) = merge_raw_data_long((yyvsp[-3].raw), -((yyvsp[0].num))); ;}
break;
case 238:
-#line 1800 "parser.y"
+#line 1805 "parser.y"
{ (yyval.raw) = merge_raw_data_str((yyvsp[-2].raw), (yyvsp[0].str)); ;}
break;
case 239:
-#line 1804 "parser.y"
+#line 1809 "parser.y"
{ (yyval.raw) = load_file((yyvsp[0].str),dup_language(currentlanguage)); ;}
break;
case 240:
-#line 1805 "parser.y"
+#line 1810 "parser.y"
{ (yyval.raw) = (yyvsp[0].raw); ;}
break;
case 241:
-#line 1812 "parser.y"
+#line 1817 "parser.y"
{ (yyval.iptr) = 0; ;}
break;
case 242:
-#line 1813 "parser.y"
+#line 1818 "parser.y"
{ (yyval.iptr) = new_int((yyvsp[0].num)); ;}
break;
case 243:
-#line 1817 "parser.y"
+#line 1822 "parser.y"
{ (yyval.num) = ((yyvsp[0].num)); ;}
break;
case 244:
-#line 1820 "parser.y"
+#line 1825 "parser.y"
{ (yyval.num) = ((yyvsp[-2].num)) + ((yyvsp[0].num)); ;}
break;
case 245:
-#line 1821 "parser.y"
+#line 1826 "parser.y"
{ (yyval.num) = ((yyvsp[-2].num)) - ((yyvsp[0].num)); ;}
break;
case 246:
-#line 1822 "parser.y"
+#line 1827 "parser.y"
{ (yyval.num) = ((yyvsp[-2].num)) | ((yyvsp[0].num)); ;}
break;
case 247:
-#line 1823 "parser.y"
+#line 1828 "parser.y"
{ (yyval.num) = ((yyvsp[-2].num)) & ((yyvsp[0].num)); ;}
break;
case 248:
-#line 1824 "parser.y"
+#line 1829 "parser.y"
{ (yyval.num) = ((yyvsp[-2].num)) * ((yyvsp[0].num)); ;}
break;
case 249:
-#line 1825 "parser.y"
+#line 1830 "parser.y"
{ (yyval.num) = ((yyvsp[-2].num)) / ((yyvsp[0].num)); ;}
break;
case 250:
-#line 1826 "parser.y"
+#line 1831 "parser.y"
{ (yyval.num) = ((yyvsp[-2].num)) ^ ((yyvsp[0].num)); ;}
break;
case 251:
-#line 1827 "parser.y"
- { (yyval.num) = ~((yyvsp[0].num)); ;}
- break;
-
- case 252:
-#line 1828 "parser.y"
- { (yyval.num) = -((yyvsp[0].num)); ;}
- break;
-
- case 253:
-#line 1829 "parser.y"
- { (yyval.num) = (yyvsp[0].num); ;}
- break;
-
- case 254:
-#line 1830 "parser.y"
- { (yyval.num) = (yyvsp[-1].num); ;}
- break;
-
- case 255:
-#line 1831 "parser.y"
- { (yyval.num) = (yyvsp[0].num); ;}
- break;
-
- case 256:
#line 1832 "parser.y"
{ (yyval.num) = ~((yyvsp[0].num)); ;}
break;
- case 257:
+ case 252:
+#line 1833 "parser.y"
+ { (yyval.num) = -((yyvsp[0].num)); ;}
+ break;
+
+ case 253:
+#line 1834 "parser.y"
+ { (yyval.num) = (yyvsp[0].num); ;}
+ break;
+
+ case 254:
#line 1835 "parser.y"
+ { (yyval.num) = (yyvsp[-1].num); ;}
+ break;
+
+ case 255:
+#line 1836 "parser.y"
+ { (yyval.num) = (yyvsp[0].num); ;}
+ break;
+
+ case 256:
+#line 1837 "parser.y"
+ { (yyval.num) = ~((yyvsp[0].num)); ;}
+ break;
+
+ case 257:
+#line 1840 "parser.y"
{ (yyval.num) = (yyvsp[0].num); ;}
break;
case 258:
-#line 1836 "parser.y"
+#line 1841 "parser.y"
{ (yyval.num) = (yyvsp[0].num); ;}
break;
@@ -4261,7 +4262,7 @@ yyreduce:
}
/* Line 1126 of yacc.c. */
-#line 4265 "parser.tab.c"
+#line 4270 "parser.tab.c"
yyvsp -= yylen;
yyssp -= yylen;
@@ -4529,7 +4530,7 @@ yyreturn:
}
-#line 1839 "parser.y"
+#line 1844 "parser.y"
/* Dialog specific functions */
static dialog_t *dialog_style(style_t * st, dialog_t *dlg)
@@ -4584,7 +4585,7 @@ static dialog_t *dialog_caption(string_t *s, dialog_t *dlg)
{
assert(dlg != NULL);
if(dlg->title)
- parser_error("Caption already defined\n");
+ yyerror("Caption already defined");
dlg->title = s;
return dlg;
}
@@ -4593,7 +4594,7 @@ static dialog_t *dialog_font(font_id_t *f, dialog_t *dlg)
{
assert(dlg != NULL);
if(dlg->font)
- parser_error("Font already defined\n");
+ yyerror("Font already defined");
dlg->font = f;
return dlg;
}
@@ -4602,7 +4603,7 @@ static dialog_t *dialog_class(name_id_t *n, dialog_t *dlg)
{
assert(dlg != NULL);
if(dlg->dlgclass)
- parser_error("Class already defined\n");
+ yyerror("Class already defined");
dlg->dlgclass = n;
return dlg;
}
@@ -4769,34 +4770,63 @@ byebye:
return ctrl;
}
+static int get_class_idW(const WCHAR *cc)
+{
+ static const WCHAR szBUTTON[] = {'B','U','T','T','O','N',0};
+ static const WCHAR szCOMBOBOX[] = {'C','O','M','B','O','B','O','X',0};
+ static const WCHAR szLISTBOX[] = {'L','I','S','T','B','O','X',0};
+ static const WCHAR szEDIT[] = {'E','D','I','T',0};
+ static const WCHAR szSTATIC[] = {'S','T','A','T','I','C',0};
+ static const WCHAR szSCROLLBAR[] = {'S','C','R','O','L','L','B','A','R',0};
+
+ if(!strcmpiW(szBUTTON, cc))
+ return CT_BUTTON;
+ if(!strcmpiW(szCOMBOBOX, cc))
+ return CT_COMBOBOX;
+ if(!strcmpiW(szLISTBOX, cc))
+ return CT_LISTBOX;
+ if(!strcmpiW(szEDIT, cc))
+ return CT_EDIT;
+ if(!strcmpiW(szSTATIC, cc))
+ return CT_STATIC;
+ if(!strcmpiW(szSCROLLBAR, cc))
+ return CT_SCROLLBAR;
+
+ return -1;
+}
+
+static int get_class_idA(const char *cc)
+{
+ if(!strcasecmp("BUTTON", cc))
+ return CT_BUTTON;
+ if(!strcasecmp("COMBOBOX", cc))
+ return CT_COMBOBOX;
+ if(!strcasecmp("LISTBOX", cc))
+ return CT_LISTBOX;
+ if(!strcasecmp("EDIT", cc))
+ return CT_EDIT;
+ if(!strcasecmp("STATIC", cc))
+ return CT_STATIC;
+ if(!strcasecmp("SCROLLBAR", cc))
+ return CT_SCROLLBAR;
+
+ return -1;
+}
+
+
static name_id_t *convert_ctlclass(name_id_t *cls)
{
- char *cc = NULL;
int iclass;
if(cls->type == name_ord)
return cls;
assert(cls->type == name_str);
- if(cls->type == str_unicode)
- {
- yyerror("Don't yet support unicode class comparison");
- }
- else
- cc = cls->name.s_name->str.cstr;
+ if(cls->name.s_name->type == str_unicode)
+ iclass = get_class_idW(cls->name.s_name->str.wstr);
+ else
+ iclass = get_class_idA(cls->name.s_name->str.cstr);
- if(!strcasecmp("BUTTON", cc))
- iclass = CT_BUTTON;
- else if(!strcasecmp("COMBOBOX", cc))
- iclass = CT_COMBOBOX;
- else if(!strcasecmp("LISTBOX", cc))
- iclass = CT_LISTBOX;
- else if(!strcasecmp("EDIT", cc))
- iclass = CT_EDIT;
- else if(!strcasecmp("STATIC", cc))
- iclass = CT_STATIC;
- else if(!strcasecmp("SCROLLBAR", cc))
- iclass = CT_SCROLLBAR;
- else
+ if (iclass == -1)
return cls; /* No default, return user controlclass */
free(cls->name.s_name->str.cstr);
@@ -4937,39 +4967,53 @@ static event_t *add_event(int key, int id, int flags, event_t *prev)
static event_t *add_string_event(string_t *key, int id, int flags, event_t *prev)
{
- int keycode = 0, keysym = 0;
- event_t *ev = new_event();
+ int keycode = 0;
+ event_t *ev = new_event();
- if(key->type == str_char)
- keysym = key->str.cstr[0];
- else
- keysym = key->str.wstr[0];
-
- if((flags & WRC_AF_VIRTKEY) && (!isupper(keysym & 0xff) && !isdigit(keysym & 0xff)))
+ if(key->type == str_char)
+ {
+ if((flags & WRC_AF_VIRTKEY) && (!isupper(key->str.cstr[0] & 0xff) && !isdigit(key->str.cstr[0] & 0xff)))
yyerror("VIRTKEY code is not equal to ascii value");
- if(keysym == '^' && (flags & WRC_AF_CONTROL) != 0)
+ if(key->str.cstr[0] == '^' && (flags & WRC_AF_CONTROL) != 0)
{
yyerror("Cannot use both '^' and CONTROL modifier");
}
- else if(keysym == '^')
+ else if(key->str.cstr[0] == '^')
{
- if(key->type == str_char)
- keycode = toupper(key->str.cstr[1]) - '@';
- else
- keycode = toupper(key->str.wstr[1]) - '@';
+ keycode = toupper(key->str.cstr[1]) - '@';
if(keycode >= ' ')
yyerror("Control-code out of range");
}
else
- keycode = keysym;
- ev->key = keycode;
- ev->id = id;
- ev->flags = flags & ~WRC_AF_ASCII;
- ev->prev = prev;
- if(prev)
- prev->next = ev;
- return ev;
+ keycode = key->str.cstr[0];
+ }
+ else
+ {
+ if((flags & WRC_AF_VIRTKEY) && !isupperW(key->str.wstr[0]) && !isdigitW(key->str.wstr[0]))
+ yyerror("VIRTKEY code is not equal to ascii value");
+
+ if(key->str.wstr[0] == '^' && (flags & WRC_AF_CONTROL) != 0)
+ {
+ yyerror("Cannot use both '^' and CONTROL modifier");
+ }
+ else if(key->str.wstr[0] == '^')
+ {
+ keycode = toupperW(key->str.wstr[1]) - '@';
+ if(keycode >= ' ')
+ yyerror("Control-code out of range");
+ }
+ else
+ keycode = key->str.wstr[0];
+ }
+
+ ev->key = keycode;
+ ev->id = id;
+ ev->flags = flags & ~WRC_AF_ASCII;
+ ev->prev = prev;
+ if(prev)
+ prev->next = ev;
+ return ev;
}
/* MenuEx specific functions */
diff --git a/reactos/tools/wrc/parser.tab.h b/reactos/tools/wrc/parser.tab.h
index 6eeddcc86bb..d5a98cd10a8 100644
--- a/reactos/tools/wrc/parser.tab.h
+++ b/reactos/tools/wrc/parser.tab.h
@@ -203,7 +203,7 @@
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 237 "parser.y"
+#line 241 "parser.y"
typedef union YYSTYPE {
string_t *str;
int num;
diff --git a/reactos/tools/wrc/parser.y b/reactos/tools/wrc/parser.y
index 63c63a12a19..c0cc2ba5f0a 100644
--- a/reactos/tools/wrc/parser.y
+++ b/reactos/tools/wrc/parser.y
@@ -140,6 +140,10 @@
#include "wine/wpp.h"
#include "wine/unicode.h"
#include "parser.h"
+#include "windef.h"
+#include "winbase.h"
+#include "wingdi.h"
+#include "winuser.h"
#if defined(YYBYACC)
/* Berkeley yacc (byacc) doesn't seem to know about these */
@@ -413,9 +417,10 @@ resources
if(rsc->type == head->type
&& rsc->lan->id == head->lan->id
&& rsc->lan->sub == head->lan->sub
- && !compare_name_id(rsc->name, head->name))
+ && !compare_name_id(rsc->name, head->name)
+ && (rsc->type != res_usr || !compare_name_id(rsc->res.usr->type,head->res.usr->type)))
{
- parser_error("Duplicate resource name '%s'\n", get_nameid_str(rsc->name));
+ yyerror("Duplicate resource name '%s'", get_nameid_str(rsc->name));
}
rsc = rsc->prev;
}
@@ -438,7 +443,7 @@ resources
}
/*
* The following newline rule will never get reduced because we never
- * get the tNL token, unless we explicitely set the 'want_nl'
+ * get the tNL token, unless we explicitly set the 'want_nl'
* flag, which we don't.
* The *ONLY* reason for this to be here is because Berkeley
* yacc (byacc), at least version 1.9, has a bug.
@@ -472,7 +477,7 @@ resource
if($$)
{
if($1 > 65535 || $1 < -32768)
- parser_error("Resource's ID out of range (%d)\n", $1);
+ yyerror("Resource's ID out of range (%d)", $1);
$$->name = new_name_id();
$$->name->type = name_ord;
$$->name->name.i_name = $1;
@@ -505,7 +510,7 @@ resource
* However, we can test the lookahead-token for
* being "non-expression" type, in which case we
* continue. Fortunately, tNL is the only token that
- * will break expression parsing and is implicitely
+ * will break expression parsing and is implicitly
* void, so we just remove it. This scheme makes it
* possible to do some (not all) fancy preprocessor
* stuff.
@@ -529,7 +534,7 @@ resource
parser_warning("LANGUAGE not supported in 16-bit mode\n");
free(currentlanguage);
if (get_language_codepage($3, $5) == -1)
- parser_error( "Language %04x is not supported\n", ($5<<10) + $3);
+ yyerror( "Language %04x is not supported", ($5<<10) + $3);
currentlanguage = new_language($3, $5);
$$ = NULL;
chat("Got LANGUAGE %d,%d (0x%04x)\n", $3, $5, ($5<<10) + $3);
@@ -548,7 +553,7 @@ usrcvt : /* Empty */ { yychar = rsrcid_to_token(yychar); }
*/
nameid : expr {
if($1 > 65535 || $1 < -32768)
- parser_error("Resource's ID out of range (%d)\n", $1);
+ yyerror("Resource's ID out of range (%d)", $1);
$$ = new_name_id();
$$->type = name_ord;
$$->name.i_name = $1;
@@ -772,7 +777,7 @@ accelerators
$$->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE;
}
if(!$5)
- parser_error("Accelerator table must have at least one entry\n");
+ yyerror("Accelerator table must have at least one entry");
$$->events = get_event_head($5);
if($3)
{
@@ -1220,7 +1225,7 @@ opt_expr: /* Empty */ { $$ = NULL; }
/* ------------------------------ Menu ------------------------------ */
menu : tMENU loadmemopts opt_lvc menu_body {
if(!$4)
- parser_error("Menu must contain items\n");
+ yyerror("Menu must contain items");
$$ = new_menu();
if($2)
{
@@ -1294,7 +1299,7 @@ menuex : tMENUEX loadmemopts opt_lvc menuex_body {
if(!win32)
parser_warning("MENUEX not supported in 16-bit mode\n");
if(!$4)
- parser_error("MenuEx must contain items\n");
+ yyerror("MenuEx must contain items");
$$ = new_menuex();
if($2)
{
@@ -1428,7 +1433,7 @@ stringtable
: stt_head tBEGIN strings tEND {
if(!$3)
{
- parser_error("Stringtable must have at least one entry\n");
+ yyerror("Stringtable must have at least one entry");
}
else
{
@@ -1478,12 +1483,12 @@ strings : /* Empty */ { $$ = NULL; }
int i;
assert(tagstt != NULL);
if($2 > 65535 || $2 < -32768)
- parser_error("Stringtable entry's ID out of range (%d)\n", $2);
+ yyerror("Stringtable entry's ID out of range (%d)", $2);
/* Search for the ID */
for(i = 0; i < tagstt->nentries; i++)
{
if(tagstt->entries[i].id == $2)
- parser_error("Stringtable ID %d already in use\n", $2);
+ yyerror("Stringtable ID %d already in use", $2);
}
/* If we get here, then we have a new unique entry */
tagstt->nentries++;
@@ -1500,9 +1505,9 @@ strings : /* Empty */ { $$ = NULL; }
if(pedantic && !$4->size)
parser_warning("Zero length strings make no sense\n");
if(!win32 && $4->size > 254)
- parser_error("Stringtable entry more than 254 characters\n");
+ yyerror("Stringtable entry more than 254 characters");
if(win32 && $4->size > 65534) /* Hmm..., does this happen? */
- parser_error("Stringtable entry more than 65534 characters (probably something else that went wrong)\n");
+ yyerror("Stringtable entry more than 65534 characters (probably something else that went wrong)");
$$ = tagstt;
}
;
@@ -1533,7 +1538,7 @@ fix_version
: /* Empty */ { $$ = new_versioninfo(); }
| fix_version tFILEVERSION expr ',' expr ',' expr ',' expr {
if($1->gotit.fv)
- parser_error("FILEVERSION already defined\n");
+ yyerror("FILEVERSION already defined");
$$ = $1;
$$->filever_maj1 = $3;
$$->filever_maj2 = $5;
@@ -1543,7 +1548,7 @@ fix_version
}
| fix_version tPRODUCTVERSION expr ',' expr ',' expr ',' expr {
if($1->gotit.pv)
- parser_error("PRODUCTVERSION already defined\n");
+ yyerror("PRODUCTVERSION already defined");
$$ = $1;
$$->prodver_maj1 = $3;
$$->prodver_maj2 = $5;
@@ -1553,35 +1558,35 @@ fix_version
}
| fix_version tFILEFLAGS expr {
if($1->gotit.ff)
- parser_error("FILEFLAGS already defined\n");
+ yyerror("FILEFLAGS already defined");
$$ = $1;
$$->fileflags = $3;
$$->gotit.ff = 1;
}
| fix_version tFILEFLAGSMASK expr {
if($1->gotit.ffm)
- parser_error("FILEFLAGSMASK already defined\n");
+ yyerror("FILEFLAGSMASK already defined");
$$ = $1;
$$->fileflagsmask = $3;
$$->gotit.ffm = 1;
}
| fix_version tFILEOS expr {
if($1->gotit.fo)
- parser_error("FILEOS already defined\n");
+ yyerror("FILEOS already defined");
$$ = $1;
$$->fileos = $3;
$$->gotit.fo = 1;
}
| fix_version tFILETYPE expr {
if($1->gotit.ft)
- parser_error("FILETYPE already defined\n");
+ yyerror("FILETYPE already defined");
$$ = $1;
$$->filetype = $3;
$$->gotit.ft = 1;
}
| fix_version tFILESUBTYPE expr {
if($1->gotit.fst)
- parser_error("FILESUBTYPE already defined\n");
+ yyerror("FILESUBTYPE already defined");
$$ = $1;
$$->filesubtype = $3;
$$->gotit.fst = 1;
@@ -1726,7 +1731,7 @@ opt_lvc : /* Empty */ { $$ = new_lvc(); }
if(!win32)
parser_warning("LANGUAGE not supported in 16-bit mode\n");
if($1->language)
- parser_error("Language already defined\n");
+ yyerror("Language already defined");
$$ = $1;
$1->language = $2;
}
@@ -1734,7 +1739,7 @@ opt_lvc : /* Empty */ { $$ = new_lvc(); }
if(!win32)
parser_warning("CHARACTERISTICS not supported in 16-bit mode\n");
if($1->characts)
- parser_error("Characteristics already defined\n");
+ yyerror("Characteristics already defined");
$$ = $1;
$1->characts = $2;
}
@@ -1742,7 +1747,7 @@ opt_lvc : /* Empty */ { $$ = new_lvc(); }
if(!win32)
parser_warning("VERSION not supported in 16-bit mode\n");
if($1->version)
- parser_error("Version already defined\n");
+ yyerror("Version already defined");
$$ = $1;
$1->version = $2;
}
@@ -1758,7 +1763,7 @@ opt_lvc : /* Empty */ { $$ = new_lvc(); }
opt_language
: tLANGUAGE expr ',' expr { $$ = new_language($2, $4);
if (get_language_codepage($2, $4) == -1)
- parser_error( "Language %04x is not supported\n", ($4<<10) + $2);
+ yyerror( "Language %04x is not supported", ($4<<10) + $2);
}
;
@@ -1890,7 +1895,7 @@ static dialog_t *dialog_caption(string_t *s, dialog_t *dlg)
{
assert(dlg != NULL);
if(dlg->title)
- parser_error("Caption already defined\n");
+ yyerror("Caption already defined");
dlg->title = s;
return dlg;
}
@@ -1899,7 +1904,7 @@ static dialog_t *dialog_font(font_id_t *f, dialog_t *dlg)
{
assert(dlg != NULL);
if(dlg->font)
- parser_error("Font already defined\n");
+ yyerror("Font already defined");
dlg->font = f;
return dlg;
}
@@ -1908,7 +1913,7 @@ static dialog_t *dialog_class(name_id_t *n, dialog_t *dlg)
{
assert(dlg != NULL);
if(dlg->dlgclass)
- parser_error("Class already defined\n");
+ yyerror("Class already defined");
dlg->dlgclass = n;
return dlg;
}
@@ -2075,34 +2080,63 @@ byebye:
return ctrl;
}
+static int get_class_idW(const WCHAR *cc)
+{
+ static const WCHAR szBUTTON[] = {'B','U','T','T','O','N',0};
+ static const WCHAR szCOMBOBOX[] = {'C','O','M','B','O','B','O','X',0};
+ static const WCHAR szLISTBOX[] = {'L','I','S','T','B','O','X',0};
+ static const WCHAR szEDIT[] = {'E','D','I','T',0};
+ static const WCHAR szSTATIC[] = {'S','T','A','T','I','C',0};
+ static const WCHAR szSCROLLBAR[] = {'S','C','R','O','L','L','B','A','R',0};
+
+ if(!strcmpiW(szBUTTON, cc))
+ return CT_BUTTON;
+ if(!strcmpiW(szCOMBOBOX, cc))
+ return CT_COMBOBOX;
+ if(!strcmpiW(szLISTBOX, cc))
+ return CT_LISTBOX;
+ if(!strcmpiW(szEDIT, cc))
+ return CT_EDIT;
+ if(!strcmpiW(szSTATIC, cc))
+ return CT_STATIC;
+ if(!strcmpiW(szSCROLLBAR, cc))
+ return CT_SCROLLBAR;
+
+ return -1;
+}
+
+static int get_class_idA(const char *cc)
+{
+ if(!strcasecmp("BUTTON", cc))
+ return CT_BUTTON;
+ if(!strcasecmp("COMBOBOX", cc))
+ return CT_COMBOBOX;
+ if(!strcasecmp("LISTBOX", cc))
+ return CT_LISTBOX;
+ if(!strcasecmp("EDIT", cc))
+ return CT_EDIT;
+ if(!strcasecmp("STATIC", cc))
+ return CT_STATIC;
+ if(!strcasecmp("SCROLLBAR", cc))
+ return CT_SCROLLBAR;
+
+ return -1;
+}
+
+
static name_id_t *convert_ctlclass(name_id_t *cls)
{
- char *cc = NULL;
int iclass;
if(cls->type == name_ord)
return cls;
assert(cls->type == name_str);
- if(cls->type == str_unicode)
- {
- yyerror("Don't yet support unicode class comparison");
- }
- else
- cc = cls->name.s_name->str.cstr;
+ if(cls->name.s_name->type == str_unicode)
+ iclass = get_class_idW(cls->name.s_name->str.wstr);
+ else
+ iclass = get_class_idA(cls->name.s_name->str.cstr);
- if(!strcasecmp("BUTTON", cc))
- iclass = CT_BUTTON;
- else if(!strcasecmp("COMBOBOX", cc))
- iclass = CT_COMBOBOX;
- else if(!strcasecmp("LISTBOX", cc))
- iclass = CT_LISTBOX;
- else if(!strcasecmp("EDIT", cc))
- iclass = CT_EDIT;
- else if(!strcasecmp("STATIC", cc))
- iclass = CT_STATIC;
- else if(!strcasecmp("SCROLLBAR", cc))
- iclass = CT_SCROLLBAR;
- else
+ if (iclass == -1)
return cls; /* No default, return user controlclass */
free(cls->name.s_name->str.cstr);
@@ -2243,12 +2277,11 @@ static event_t *add_event(int key, int id, int flags, event_t *prev)
static event_t *add_string_event(string_t *key, int id, int flags, event_t *prev)
{
- int keycode = 0;
- event_t *ev = new_event();
-
- if(key->type != str_char)
- yyerror("Key code must be an ascii string");
+ int keycode = 0;
+ event_t *ev = new_event();
+ if(key->type == str_char)
+ {
if((flags & WRC_AF_VIRTKEY) && (!isupper(key->str.cstr[0] & 0xff) && !isdigit(key->str.cstr[0] & 0xff)))
yyerror("VIRTKEY code is not equal to ascii value");
@@ -2264,13 +2297,33 @@ static event_t *add_string_event(string_t *key, int id, int flags, event_t *prev
}
else
keycode = key->str.cstr[0];
- ev->key = keycode;
- ev->id = id;
- ev->flags = flags & ~WRC_AF_ASCII;
- ev->prev = prev;
- if(prev)
- prev->next = ev;
- return ev;
+ }
+ else
+ {
+ if((flags & WRC_AF_VIRTKEY) && !isupperW(key->str.wstr[0]) && !isdigitW(key->str.wstr[0]))
+ yyerror("VIRTKEY code is not equal to ascii value");
+
+ if(key->str.wstr[0] == '^' && (flags & WRC_AF_CONTROL) != 0)
+ {
+ yyerror("Cannot use both '^' and CONTROL modifier");
+ }
+ else if(key->str.wstr[0] == '^')
+ {
+ keycode = toupperW(key->str.wstr[1]) - '@';
+ if(keycode >= ' ')
+ yyerror("Control-code out of range");
+ }
+ else
+ keycode = key->str.wstr[0];
+ }
+
+ ev->key = keycode;
+ ev->id = id;
+ ev->flags = flags & ~WRC_AF_ASCII;
+ ev->prev = prev;
+ if(prev)
+ prev->next = ev;
+ return ev;
}
/* MenuEx specific functions */
diff --git a/reactos/tools/wrc/readres.c b/reactos/tools/wrc/readres.c
index 35a01768fc1..e3a4db74d25 100644
--- a/reactos/tools/wrc/readres.c
+++ b/reactos/tools/wrc/readres.c
@@ -19,6 +19,7 @@
*/
#include "config.h"
+#include "wine/port.h"
#include
#include
diff --git a/reactos/tools/wrc/translation.c b/reactos/tools/wrc/translation.c
index 2721fa71b9d..7262a658476 100644
--- a/reactos/tools/wrc/translation.c
+++ b/reactos/tools/wrc/translation.c
@@ -1,5 +1,6 @@
/*
- * Copyright 2003 Vincent Bйron
+ * Copyright 2003 Vincent BГ©ron
+ * Copyright 2007, 2008 Mikolaj Zalewski
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,6 +19,7 @@
#include
#include
+#include
#include "dumpres.h"
#include "utils.h"
@@ -279,6 +281,7 @@ static int compare_cursor_group(cursor_group_t *cursor_group1, cursor_group_t *c
static int compare_control(control_t *control1, control_t *control2) {
int different = 0;
char *nameid = NULL;
+ int ignore_style;
if(!different &&
((control1 && !control2) ||
(!control1 && control2)))
@@ -289,13 +292,21 @@ static int compare_control(control_t *control1, control_t *control2) {
if(!different && strcmp(nameid, get_nameid_str(control2->ctlclass)))
different = 1;
free(nameid);
+ if (different)
+ return different;
+
+ /* allow the translators to set some styles */
+ ignore_style = 0;
+ if (control1->ctlclass->type == name_ord && control1->ctlclass->name.i_name == CT_BUTTON)
+ ignore_style = 0x2000; /* BS_MULTILINE*/
+
if(!different &&
(control1->id != control2->id))
different = 1;
if(!different && control1->gotstyle && control2->gotstyle) {
if((!control1->style || !control2->style) ||
(control1->style->and_mask || control2->style->and_mask) ||
- (control1->style->or_mask != control2->style->or_mask))
+ ((control1->style->or_mask & ~ignore_style) != (control2->style->or_mask & ~ignore_style)))
different = 1;
} else if(!different &&
((control1->gotstyle && !control2->gotstyle) ||
@@ -323,6 +334,7 @@ static int compare_control(control_t *control1, control_t *control2) {
static int compare_dialog(dialog_t *dialog1, dialog_t *dialog2) {
int different = 0;
char *nameid = NULL;
+ control_t *ctrl1, *ctrl2;
if(!different &&
((dialog1->memopt != dialog2->memopt) ||
(dialog1->lvc.version != dialog2->lvc.version) ||
@@ -354,14 +366,22 @@ static int compare_dialog(dialog_t *dialog1, dialog_t *dialog2) {
if(!different && strcmp(nameid, get_nameid_str(dialog2->dlgclass)))
different = 1;
free(nameid);
- if(!different)
- different = compare_control(dialog1->controls, dialog2->controls);
+
+ ctrl1 = dialog1->controls;
+ ctrl2 = dialog2->controls;
+ while(!different && (ctrl1 || ctrl2))
+ {
+ different = compare_control(ctrl1, ctrl2);
+ if (ctrl1) ctrl1 = ctrl1->next;
+ if (ctrl2) ctrl2 = ctrl2->next;
+ }
return different;
}
static int compare_dialogex(dialogex_t *dialogex1, dialogex_t *dialogex2) {
int different = 0;
char *nameid = NULL;
+ control_t *ctrl1, *ctrl2;
if(!different &&
((dialogex1->memopt != dialogex2->memopt) ||
(dialogex1->lvc.version != dialogex2->lvc.version) ||
@@ -400,8 +420,15 @@ static int compare_dialogex(dialogex_t *dialogex1, dialogex_t *dialogex2) {
if(!different && strcmp(nameid, get_nameid_str(dialogex2->dlgclass)))
different = 1;
free(nameid);
- if(!different)
- different = compare_control(dialogex1->controls, dialogex2->controls);
+
+ ctrl1 = dialogex1->controls;
+ ctrl2 = dialogex2->controls;
+ while(!different && (ctrl1 || ctrl2))
+ {
+ different = compare_control(ctrl1, ctrl2);
+ if (ctrl1) ctrl1 = ctrl1->next;
+ if (ctrl2) ctrl2 = ctrl2->next;
+ }
return different;
}
@@ -938,49 +965,6 @@ static int compare(resource_t *resource1, resource_t *resource2) {
}
}
-static void dump_stringtable(resource_t *res)
-{
- stringtable_t *stt = res->res.stt;
- int j;
-
- printf("DUMP ");
- assert((stt->idbase%16) == 0);
- assert(stt->nentries == 16);
- for (j = 0; j < stt->nentries; j++)
- {
- stt_entry_t *entry = &stt->entries[j];
- language_t *lang = stt->lvc.language;
- string_t *newstr;
- WCHAR *wstr;
- int k;
-
- if (entry->str)
- {
- newstr = convert_string(entry->str, str_unicode, get_language_codepage(lang->id, lang->sub));
- printf("%02x%02x", newstr->size & 0xff, (newstr->size >> 8) & 0xff);
- wstr = newstr->str.wstr;
- for (k = 0; k < newstr->size; k++)
- printf("%02x%02x", wstr[k] & 0xff, wstr[k] >> 8);
- free_string(newstr);
- }
- else
- printf("0000");
- }
- putchar('\n');
-}
-
-static void dump(resource_t *res)
-{
- switch (res->type)
- {
- case res_stt:
- dump_stringtable(res);
- return;
- default:
- break;
- }
-}
-
typedef struct resource_lang_node
{
language_t lang;
@@ -1141,7 +1125,6 @@ void verify_translations(resource_t *top) {
for (langnode = idnode->langs; langnode; langnode = langnode->next)
{
printf("EXIST %03x:%02x\n", langnode->lang.id, langnode->lang.sub);
- dump(langnode->res);
if (compare(langnode->res, mainres))
{
printf("DIFF %03x:%02x\n", langnode->lang.id, langnode->lang.sub);
diff --git a/reactos/tools/wrc/utils.c b/reactos/tools/wrc/utils.c
index 14373645314..0f9b31e2e67 100644
--- a/reactos/tools/wrc/utils.c
+++ b/reactos/tools/wrc/utils.c
@@ -19,13 +19,13 @@
*/
#include "config.h"
+#include "wine/port.h"
#include
#include
#include
#include
#include
-#include
#include
#include "wine/unicode.h"
@@ -71,6 +71,7 @@ int parser_error(const char *s, ...)
va_list ap;
va_start(ap, s);
generic_msg(s, "Error", parser_text, ap);
+ fputc( '\n', stderr );
va_end(ap);
exit(1);
return 1;
@@ -241,7 +242,7 @@ string_t *convert_string(const string_t *str, enum str_e type, int codepage)
int res;
if (!codepage && str->type != type)
- parser_error( "Current language is Unicode only, cannot convert string\n" );
+ parser_error( "Current language is Unicode only, cannot convert string" );
if((str->type == str_char) && (type == str_unicode))
{
@@ -256,7 +257,7 @@ string_t *convert_string(const string_t *str, enum str_e type, int codepage)
res = wine_utf8_mbstowcs( MB_ERR_INVALID_CHARS, str->str.cstr, str->size,
ret->str.wstr, ret->size );
if (res == -2)
- parser_error( "Invalid character in string '%.*s' for codepage %u\n",
+ parser_error( "Invalid character in string '%.*s' for codepage %u",
str->size, str->str.cstr, codepage );
ret->str.wstr[ret->size] = 0;
}
@@ -343,18 +344,18 @@ static const struct lang2cp lang2cps[] =
{ LANG_ALBANIAN, SUBLANG_NEUTRAL, 1250 },
{ LANG_ARABIC, SUBLANG_NEUTRAL, 1256 },
{ LANG_ARMENIAN, SUBLANG_NEUTRAL, 0 },
+ { LANG_ASSAMESE, SUBLANG_NEUTRAL, 0 },
{ LANG_AZERI, SUBLANG_NEUTRAL, 1254 },
{ LANG_AZERI, SUBLANG_AZERI_CYRILLIC, 1251 },
{ LANG_BASQUE, SUBLANG_NEUTRAL, 1252 },
{ LANG_BELARUSIAN, SUBLANG_NEUTRAL, 1251 },
-#ifdef LANG_BRETON
+ { LANG_BENGALI, SUBLANG_NEUTRAL, 0 },
{ LANG_BRETON, SUBLANG_NEUTRAL, 1252 },
-#endif /* LANG_BRETON */
{ LANG_BULGARIAN, SUBLANG_NEUTRAL, 1251 },
{ LANG_CATALAN, SUBLANG_NEUTRAL, 1252 },
{ LANG_CHINESE, SUBLANG_NEUTRAL, 950 },
- { LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE, 936 },
{ LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED, 936 },
+ { LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE, 936 },
#ifdef LANG_CORNISH
{ LANG_CORNISH, SUBLANG_NEUTRAL, 1252 },
#endif /* LANG_CORNISH */
@@ -385,6 +386,7 @@ static const struct lang2cp lang2cps[] =
{ LANG_HUNGARIAN, SUBLANG_NEUTRAL, 1250 },
{ LANG_ICELANDIC, SUBLANG_NEUTRAL, 1252 },
{ LANG_INDONESIAN, SUBLANG_NEUTRAL, 1252 },
+ { LANG_IRISH, SUBLANG_NEUTRAL, 1252 },
{ LANG_ITALIAN, SUBLANG_NEUTRAL, 1252 },
{ LANG_JAPANESE, SUBLANG_NEUTRAL, 932 },
{ LANG_KANNADA, SUBLANG_NEUTRAL, 0 },
@@ -394,17 +396,24 @@ static const struct lang2cp lang2cps[] =
{ LANG_KYRGYZ, SUBLANG_NEUTRAL, 1251 },
{ LANG_LATVIAN, SUBLANG_NEUTRAL, 1257 },
{ LANG_LITHUANIAN, SUBLANG_NEUTRAL, 1257 },
+ { LANG_LOWER_SORBIAN, SUBLANG_NEUTRAL, 1252 },
{ LANG_MACEDONIAN, SUBLANG_NEUTRAL, 1251 },
{ LANG_MALAY, SUBLANG_NEUTRAL, 1252 },
+ { LANG_MALAYALAM, SUBLANG_NEUTRAL, 0 },
+ { LANG_MALTESE, SUBLANG_NEUTRAL, 0 },
{ LANG_MARATHI, SUBLANG_NEUTRAL, 0 },
{ LANG_MONGOLIAN, SUBLANG_NEUTRAL, 1251 },
+ { LANG_NEPALI, SUBLANG_NEUTRAL, 0 },
{ LANG_NEUTRAL, SUBLANG_NEUTRAL, 1252 },
{ LANG_NORWEGIAN, SUBLANG_NEUTRAL, 1252 },
+ { LANG_ORIYA, SUBLANG_NEUTRAL, 0 },
{ LANG_POLISH, SUBLANG_NEUTRAL, 1250 },
{ LANG_PORTUGUESE, SUBLANG_NEUTRAL, 1252 },
{ LANG_PUNJABI, SUBLANG_NEUTRAL, 0 },
{ LANG_ROMANIAN, SUBLANG_NEUTRAL, 1250 },
+ { LANG_ROMANSH, SUBLANG_NEUTRAL, 1252 },
{ LANG_RUSSIAN, SUBLANG_NEUTRAL, 1251 },
+ { LANG_SAMI, SUBLANG_NEUTRAL, 1252 },
{ LANG_SANSKRIT, SUBLANG_NEUTRAL, 0 },
{ LANG_SERBIAN, SUBLANG_NEUTRAL, 1250 },
{ LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC, 1251 },
@@ -414,22 +423,27 @@ static const struct lang2cp lang2cps[] =
{ LANG_SWAHILI, SUBLANG_NEUTRAL, 1252 },
{ LANG_SWEDISH, SUBLANG_NEUTRAL, 1252 },
{ LANG_SYRIAC, SUBLANG_NEUTRAL, 0 },
+ { LANG_TAJIK, SUBLANG_NEUTRAL, 1251 },
{ LANG_TAMIL, SUBLANG_NEUTRAL, 0 },
{ LANG_TATAR, SUBLANG_NEUTRAL, 1251 },
{ LANG_TELUGU, SUBLANG_NEUTRAL, 0 },
{ LANG_THAI, SUBLANG_NEUTRAL, 874 },
+ { LANG_TSWANA, SUBLANG_NEUTRAL, 1252 },
{ LANG_TURKISH, SUBLANG_NEUTRAL, 1254 },
{ LANG_UKRAINIAN, SUBLANG_NEUTRAL, 1251 },
+ { LANG_UPPER_SORBIAN, SUBLANG_NEUTRAL, 1252 },
{ LANG_URDU, SUBLANG_NEUTRAL, 1256 },
{ LANG_UZBEK, SUBLANG_NEUTRAL, 1254 },
{ LANG_UZBEK, SUBLANG_UZBEK_CYRILLIC, 1251 },
- { LANG_VIETNAMESE, SUBLANG_NEUTRAL, 1258 }
+ { LANG_VIETNAMESE, SUBLANG_NEUTRAL, 1258 },
#ifdef LANG_WALON
- , { LANG_WALON, SUBLANG_NEUTRAL, 1252 }
+ { LANG_WALON, SUBLANG_NEUTRAL, 1252 },
#endif /* LANG_WALON */
#ifdef LANG_WELSH
- , { LANG_WELSH, SUBLANG_NEUTRAL, 1252 }
-#endif /* LANG_WELSH */
+ { LANG_WELSH, SUBLANG_NEUTRAL, 1252 },
+#endif
+ { LANG_XHOSA, SUBLANG_NEUTRAL, 1252 },
+ { LANG_ZULU, SUBLANG_NEUTRAL, 1252 }
};
int get_language_codepage( unsigned short lang, unsigned short sublang )
diff --git a/reactos/tools/wrc/wrc.c b/reactos/tools/wrc/wrc.c
index 6d6a1158fb1..b752499783c 100644
--- a/reactos/tools/wrc/wrc.c
+++ b/reactos/tools/wrc/wrc.c
@@ -1,6 +1,6 @@
/*
* Copyright 1994 Martin von Loewis
- * Copyrignt 1998 Bertho A. Stultiens (BS)
+ * Copyright 1998 Bertho A. Stultiens (BS)
* Copyright 2003 Dimitrie O. Paun
*
* This library is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
*/
#include "config.h"
+#include "wine/port.h"
#include
#include
@@ -113,7 +114,7 @@ int win32 = 1;
/*
* debuglevel == DEBUGLEVEL_NONE Don't bother
- * debuglevel & DEBUGLEVEL_CHAT Say whats done
+ * debuglevel & DEBUGLEVEL_CHAT Say what's done
* debuglevel & DEBUGLEVEL_DUMP Dump internal structures
* debuglevel & DEBUGLEVEL_TRACE Create parser trace
* debuglevel & DEBUGLEVEL_PPMSG Preprocessor messages
diff --git a/reactos/tools/wrc/writeres.c b/reactos/tools/wrc/writeres.c
index 5771b8ea17e..e26a559e765 100644
--- a/reactos/tools/wrc/writeres.c
+++ b/reactos/tools/wrc/writeres.c
@@ -19,6 +19,7 @@
*/
#include "config.h"
+#include "wine/port.h"
#include
#include
@@ -69,7 +70,7 @@ void write_resfile(char *outname, resource_t *top)
put_word(res, 0); /* Memory options */
put_word(res, 0); /* Language */
put_dword(res, 0); /* Version */
- put_dword(res, 0); /* Charateristics */
+ put_dword(res, 0); /* Characteristics */
ret = fwrite(res->data, 1, res->size, fo);
if(ret != res->size)
{
diff --git a/reactos/tools/xml.cpp b/reactos/tools/xml.cpp
index 2a2b7fd7102..12b81f01e1d 100644
--- a/reactos/tools/xml.cpp
+++ b/reactos/tools/xml.cpp
@@ -38,7 +38,7 @@
#include
#include
#include
-
+#include
#include "xml.h"
#include "ssprintf.h"