[WINHTTP] Sync with Wine Staging 3.9. CORE-14656
[reactos.git] / dll / cpl / intl / intl.c
index 2bb503e..440e344 100644 (file)
@@ -51,17 +51,33 @@ APPLET Applets[NUM_APPLETS] =
 VOID
 PrintErrorMsgBox(UINT msg)
 {
-    TCHAR szErrorText[BUFFERSIZE];
-    TCHAR szErrorCaption[BUFFERSIZE];
+    WCHAR szErrorText[BUFFERSIZE];
+    WCHAR szErrorCaption[BUFFERSIZE];
 
-    LoadString(hApplet, msg, szErrorText, sizeof(szErrorText)/sizeof(TCHAR));
-    LoadString(hApplet, IDS_ERROR, szErrorCaption, sizeof(szErrorCaption)/sizeof(TCHAR));
+    LoadStringW(hApplet, msg, szErrorText, sizeof(szErrorText) / sizeof(WCHAR));
+    LoadStringW(hApplet, IDS_ERROR, szErrorCaption, sizeof(szErrorCaption) / sizeof(WCHAR));
 
-    MessageBox(NULL, szErrorText, szErrorCaption, MB_OK | MB_ICONERROR);
+    MessageBoxW(NULL, szErrorText, szErrorCaption, MB_OK | MB_ICONERROR);
+}
+
+INT
+ResourceMessageBox(
+    HWND hwnd,
+    UINT uType,
+    UINT uCaptionId,
+    UINT uMessageId)
+{
+    WCHAR szErrorText[BUFFERSIZE];
+    WCHAR szErrorCaption[BUFFERSIZE];
+
+    LoadStringW(hApplet, uMessageId, szErrorText, sizeof(szErrorText) / sizeof(WCHAR));
+    LoadStringW(hApplet, uCaptionId, szErrorCaption, sizeof(szErrorCaption) / sizeof(WCHAR));
+
+    return MessageBoxW(hwnd, szErrorText, szErrorCaption, uType);
 }
 
 static VOID
-InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc)
+InitIntlPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc, LPARAM lParam)
 {
     ZeroMemory(psp, sizeof(PROPSHEETPAGE));
     psp->dwSize = sizeof(PROPSHEETPAGE);
@@ -69,31 +85,32 @@ InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc)
     psp->hInstance = hApplet;
     psp->pszTemplate = MAKEINTRESOURCE(idDlg);
     psp->pfnDlgProc = DlgProc;
+    psp->lParam = lParam;
 }
 
 BOOL
 OpenSetupInf(VOID)
 {
-    LPTSTR lpCmdLine;
-    LPTSTR lpSwitch;
+    PWSTR lpCmdLine;
+    PWSTR lpSwitch;
     size_t len;
 
-    lpCmdLine = GetCommandLine();
+    lpCmdLine = GetCommandLineW();
 
-    lpSwitch = _tcsstr(lpCmdLine, _T("/f:\""));
+    lpSwitch = wcsstr(lpCmdLine, L"/f:\"");
     if (!lpSwitch)
         return FALSE;
 
-    len = _tcslen(lpSwitch);
-    if (len < 5 || lpSwitch[len-1] != _T('\"'))
+    len = wcslen(lpSwitch);
+    if (len < 5 || lpSwitch[len-1] != L'\"')
     {
         DPRINT1("Invalid switch: %ls\n", lpSwitch);
         return FALSE;
     }
 
-    lpSwitch[len-1] = _T('\0');
+    lpSwitch[len-1] = L'\0';
 
-    hSetupInf = SetupOpenInfFile(&lpSwitch[4], NULL, INF_STYLE_OLDNT, NULL);
+    hSetupInf = SetupOpenInfFileW(&lpSwitch[4], NULL, INF_STYLE_OLDNT, NULL);
     if (hSetupInf == INVALID_HANDLE_VALUE)
     {
         DPRINT1("Failed to open INF file: %ls\n", &lpSwitch[4]);
@@ -107,27 +124,27 @@ VOID
 ParseSetupInf(VOID)
 {
     INFCONTEXT InfContext;
-    TCHAR szBuffer[30];
+    WCHAR szBuffer[30];
 
-    if (!SetupFindFirstLine(hSetupInf,
-                            _T("Unattend"),
-                            _T("LocaleID"),
-                            &InfContext))
+    if (!SetupFindFirstLineW(hSetupInf,
+                             L"Unattend",
+                             L"LocaleID",
+                             &InfContext))
     {
         SetupCloseInfFile(hSetupInf);
         DPRINT1("SetupFindFirstLine failed\n");
         return;
     }
 
-    if (!SetupGetStringField(&InfContext, 1, szBuffer,
-                             sizeof(szBuffer) / sizeof(TCHAR), NULL))
+    if (!SetupGetStringFieldW(&InfContext, 1, szBuffer,
+                              sizeof(szBuffer) / sizeof(WCHAR), NULL))
     {
         SetupCloseInfFile(hSetupInf);
         DPRINT1("SetupGetStringField failed\n");
         return;
     }
 
-    UnattendLCID = _tcstoul(szBuffer, NULL, 16);
+    UnattendLCID = wcstoul(szBuffer, NULL, 16);
     IsUnattendedSetupEnabled = 1;
     SetupCloseInfFile(hSetupInf);
 }
@@ -135,33 +152,53 @@ ParseSetupInf(VOID)
 static LONG APIENTRY
 Applet(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam)
 {
+    TCHAR Caption[BUFFERSIZE];
     PROPSHEETPAGE psp[3];
     PROPSHEETHEADER psh;
-    TCHAR Caption[BUFFERSIZE];
+    PGLOBALDATA pGlobalData;
+    LONG ret;
 
     if (OpenSetupInf())
     {
         ParseSetupInf();
     }
 
+    pGlobalData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBALDATA));
+    if (pGlobalData == NULL)
+        return FALSE;
+
+    pGlobalData->SystemLCID = GetSystemDefaultLCID();
+    pGlobalData->bIsUserAdmin = IsUserAdmin();
+
     LoadString(hApplet, IDS_CPLNAME, Caption, sizeof(Caption) / sizeof(TCHAR));
 
     ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
     psh.dwSize = sizeof(PROPSHEETHEADER);
-    psh.dwFlags =  PSH_PROPSHEETPAGE | PSH_PROPTITLE;
+    psh.dwFlags =  PSH_PROPSHEETPAGE;
     psh.hwndParent = hCPLWindow;
     psh.hInstance = hApplet;
     psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDC_CPLICON));
     psh.pszCaption = Caption;
-    psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
+    psh.nPages = 0; //sizeof(psp) / sizeof(PROPSHEETPAGE);
     psh.nStartPage = 0;
     psh.ppsp = psp;
 
-    InitPropSheetPage(&psp[0], IDD_GENERALPAGE, GeneralPageProc);
-    InitPropSheetPage(&psp[1], IDD_LANGUAGESPAGE, LanguagesPageProc);
-    InitPropSheetPage(&psp[2], IDD_ADVANCEDPAGE, AdvancedPageProc);
+    InitIntlPropSheetPage(&psp[0], IDD_GENERALPAGE, GeneralPageProc, (LPARAM)pGlobalData);
+    psh.nPages++;
+    InitIntlPropSheetPage(&psp[1], IDD_LANGUAGESPAGE, LanguagesPageProc, (LPARAM)pGlobalData);
+    psh.nPages++;
+
+    if (pGlobalData->bIsUserAdmin)
+    {
+        InitIntlPropSheetPage(&psp[2], IDD_ADVANCEDPAGE, AdvancedPageProc, (LPARAM)pGlobalData);
+        psh.nPages++;
+    }
+
+    ret = (LONG)(PropertySheet(&psh) != -1);
+
+    HeapFree(GetProcessHeap(), 0, pGlobalData);
 
-    return (LONG)(PropertySheet(&psh) != -1);
+    return ret;
 }