mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 04:43:51 +00:00
[INTL]
Advanced page: Show code pages again. - Use SetupFindFirstLine and SetupFindNextLine to enumerate all code pages. - Use heap memory functions instead of global memory functions. - Get rid of TCHAR. - Rename LPCPAGE to PCPAGE. - Hack: Do not fail if EnumSystemCodePages returns FALSE. svn path=/trunk/; revision=74555
This commit is contained in:
parent
6ac34f176c
commit
4021832267
1 changed files with 74 additions and 59 deletions
|
@ -1,60 +1,68 @@
|
||||||
#include "intl.h"
|
#include "intl.h"
|
||||||
|
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
typedef struct CPStruct
|
typedef struct CPStruct
|
||||||
{
|
{
|
||||||
WORD Status;
|
WORD Status;
|
||||||
UINT CPage;
|
UINT CodePage;
|
||||||
HANDLE hCPage;
|
WCHAR Name[MAX_PATH];
|
||||||
TCHAR Name[MAX_PATH];
|
struct CPStruct *NextItem;
|
||||||
struct CPStruct *NextItem;
|
} CPAGE, *PCPAGE;
|
||||||
} CPAGE, *LPCPAGE;
|
|
||||||
|
|
||||||
static LPCPAGE PCPage = NULL;
|
static PCPAGE PCPage = NULL;
|
||||||
static HINF hIntlInf;
|
|
||||||
static BOOL bSpain = FALSE;
|
static BOOL bSpain = FALSE;
|
||||||
static HWND hLangList;
|
static HWND hLangList;
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
GetSupportedCP(VOID)
|
GetSupportedCP(
|
||||||
|
HINF hInf)
|
||||||
{
|
{
|
||||||
UINT uiCPage, Number;
|
INFCONTEXT Context;
|
||||||
LONG Count;
|
PCPAGE pCodePage;
|
||||||
INFCONTEXT infCont;
|
|
||||||
LPCPAGE lpCPage;
|
|
||||||
HANDLE hCPage;
|
|
||||||
CPINFOEX cpInfEx;
|
CPINFOEX cpInfEx;
|
||||||
//TCHAR Section[MAX_PATH];
|
UINT uiCodePage;
|
||||||
|
|
||||||
Count = SetupGetLineCountW(hIntlInf, L"CodePages");
|
if (!SetupFindFirstLine(hInf,
|
||||||
if (Count <= 0) return FALSE;
|
L"CodePages",
|
||||||
|
NULL,
|
||||||
|
&Context))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
for (Number = 0; Number < (UINT)Count; Number++)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (SetupGetLineByIndexW(hIntlInf, L"CodePages", Number, &infCont) &&
|
if (SetupGetIntField(&Context, 0, (PINT)&uiCodePage))
|
||||||
SetupGetIntField(&infCont, 0, (PINT)&uiCPage))
|
|
||||||
{
|
{
|
||||||
if (!(hCPage = GlobalAlloc(GHND, sizeof(CPAGE)))) return FALSE;
|
pCodePage = HeapAlloc(GetProcessHeap(), 0, sizeof(CPAGE));
|
||||||
|
if (pCodePage == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
lpCPage = GlobalLock(hCPage);
|
pCodePage->CodePage = uiCodePage;
|
||||||
lpCPage->CPage = uiCPage;
|
pCodePage->Status = 0;
|
||||||
lpCPage->hCPage = hCPage;
|
(pCodePage->Name)[0] = UNICODE_NULL;
|
||||||
lpCPage->Status = 0;
|
|
||||||
(lpCPage->Name)[0] = 0;
|
|
||||||
|
|
||||||
if (GetCPInfoEx(uiCPage, 0, &cpInfEx))
|
if (GetCPInfoExW(uiCodePage, 0, &cpInfEx))
|
||||||
{
|
{
|
||||||
wcscpy(lpCPage->Name, cpInfEx.CodePageName);
|
wcscpy(pCodePage->Name, cpInfEx.CodePageName);
|
||||||
}
|
}
|
||||||
else if (!SetupGetStringFieldW(&infCont, 1, lpCPage->Name, MAX_PATH, NULL))
|
else
|
||||||
{
|
{
|
||||||
GlobalUnlock(hCPage);
|
SetupGetStringFieldW(&Context, 1, pCodePage->Name, MAX_PATH, NULL);
|
||||||
GlobalFree(hCPage);
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lpCPage->NextItem = PCPage;
|
if (wcslen(pCodePage->Name) != 0)
|
||||||
PCPage = lpCPage;
|
{
|
||||||
|
pCodePage->NextItem = PCPage;
|
||||||
|
PCPage = pCodePage;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HeapFree(GetProcessHeap(), 0, pCodePage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!SetupFindNextLine(&Context, &Context))
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -63,7 +71,7 @@ GetSupportedCP(VOID)
|
||||||
static BOOL CALLBACK
|
static BOOL CALLBACK
|
||||||
InstalledCPProc(PWSTR lpStr)
|
InstalledCPProc(PWSTR lpStr)
|
||||||
{
|
{
|
||||||
LPCPAGE lpCP;
|
PCPAGE lpCP;
|
||||||
UINT uiCP;
|
UINT uiCP;
|
||||||
|
|
||||||
lpCP = PCPage;
|
lpCP = PCPage;
|
||||||
|
@ -71,12 +79,15 @@ InstalledCPProc(PWSTR lpStr)
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (!lpCP) break;
|
if (!lpCP)
|
||||||
if (lpCP->CPage == uiCP)
|
break;
|
||||||
|
|
||||||
|
if (lpCP->CodePage == uiCP)
|
||||||
{
|
{
|
||||||
lpCP->Status |= 0x0001;
|
lpCP->Status |= 0x0001;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpCP = lpCP->NextItem;
|
lpCP = lpCP->NextItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,17 +97,15 @@ InstalledCPProc(PWSTR lpStr)
|
||||||
static VOID
|
static VOID
|
||||||
InitCodePagesList(HWND hwndDlg)
|
InitCodePagesList(HWND hwndDlg)
|
||||||
{
|
{
|
||||||
LPCPAGE lpCPage;
|
PCPAGE pCodePage;
|
||||||
INT ItemIndex;
|
INT ItemIndex;
|
||||||
HWND hList;
|
HWND hList;
|
||||||
LV_COLUMN column;
|
LV_COLUMN column;
|
||||||
LV_ITEM item;
|
LV_ITEM item;
|
||||||
RECT ListRect;
|
RECT ListRect;
|
||||||
|
HINF hIntlInf;
|
||||||
hList = GetDlgItem(hwndDlg, IDC_CONV_TABLES);
|
|
||||||
|
|
||||||
hIntlInf = SetupOpenInfFileW(L"intl.inf", NULL, INF_STYLE_WIN4, NULL);
|
hIntlInf = SetupOpenInfFileW(L"intl.inf", NULL, INF_STYLE_WIN4, NULL);
|
||||||
|
|
||||||
if (hIntlInf == INVALID_HANDLE_VALUE)
|
if (hIntlInf == INVALID_HANDLE_VALUE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -107,40 +116,46 @@ InitCodePagesList(HWND hwndDlg)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!GetSupportedCP())
|
if (!GetSupportedCP(hIntlInf))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SetupCloseInfFile(hIntlInf);
|
SetupCloseInfFile(hIntlInf);
|
||||||
|
|
||||||
if (!EnumSystemCodePages(InstalledCPProc, CP_INSTALLED))
|
if (!EnumSystemCodePagesW(InstalledCPProc, CP_INSTALLED))
|
||||||
return;
|
{
|
||||||
|
/* Hack: EnumSystemCodePages returns FALSE on successful completion! */
|
||||||
|
/* return; */
|
||||||
|
}
|
||||||
|
|
||||||
|
hList = GetDlgItem(hwndDlg, IDC_CONV_TABLES);
|
||||||
|
|
||||||
ZeroMemory(&column, sizeof(LV_COLUMN));
|
ZeroMemory(&column, sizeof(LV_COLUMN));
|
||||||
column.mask = LVCF_FMT|LVCF_TEXT|LVCF_WIDTH;
|
column.mask = LVCF_FMT | LVCF_WIDTH;
|
||||||
column.fmt = LVCFMT_LEFT;
|
column.fmt = LVCFMT_LEFT;
|
||||||
GetClientRect(hList, &ListRect);
|
GetClientRect(hList, &ListRect);
|
||||||
column.cx = ListRect.right - GetSystemMetrics(SM_CYHSCROLL);
|
column.cx = ListRect.right - GetSystemMetrics(SM_CYHSCROLL);
|
||||||
(VOID) ListView_InsertColumn(hList, 0, &column);
|
ListView_InsertColumn(hList, 0, &column);
|
||||||
|
|
||||||
(VOID) ListView_SetExtendedListViewStyle(hList, LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT);
|
(VOID) ListView_SetExtendedListViewStyle(hList, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
|
||||||
|
|
||||||
lpCPage = PCPage;
|
pCodePage = PCPage;
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (!lpCPage) break;
|
if (pCodePage == NULL)
|
||||||
|
break;
|
||||||
|
|
||||||
ZeroMemory(&item, sizeof(LV_ITEM));
|
ZeroMemory(&item, sizeof(LV_ITEM));
|
||||||
item.mask = LVIF_TEXT|LVIF_PARAM|LVIF_STATE;
|
item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;
|
||||||
item.state = 0;
|
item.state = 0;
|
||||||
item.stateMask = LVIS_STATEIMAGEMASK;
|
item.stateMask = LVIS_STATEIMAGEMASK;
|
||||||
item.pszText = lpCPage->Name;
|
item.pszText = pCodePage->Name;
|
||||||
item.lParam = (LPARAM)lpCPage;
|
item.lParam = (LPARAM)pCodePage;
|
||||||
|
|
||||||
ItemIndex = ListView_InsertItem(hList, &item);
|
ItemIndex = ListView_InsertItem(hList, &item);
|
||||||
|
if (ItemIndex != -1)
|
||||||
if (ItemIndex >= 0)
|
|
||||||
{
|
{
|
||||||
if (lpCPage->Status & 0x0001)
|
if (pCodePage->Status & 0x0001)
|
||||||
{
|
{
|
||||||
ListView_SetItemState(hList, ItemIndex,
|
ListView_SetItemState(hList, ItemIndex,
|
||||||
INDEXTOSTATEIMAGEMASK(LVIS_SELECTED),
|
INDEXTOSTATEIMAGEMASK(LVIS_SELECTED),
|
||||||
|
@ -154,7 +169,7 @@ InitCodePagesList(HWND hwndDlg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lpCPage = lpCPage->NextItem;
|
pCodePage = pCodePage->NextItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,7 +293,7 @@ SaveFontSubstitutionSettings(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Count = (UINT) SetupGetLineCount(hFontInf, szSection);
|
Count = (UINT)SetupGetLineCount(hFontInf, szSection);
|
||||||
if (Count <= 0)
|
if (Count <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue