ReactOS  0.4.15-dev-344-g6808e40
livecd.c File Reference
#include "userinit.h"
Include dependency graph for livecd.c:

Go to the source code of this file.

Classes

struct  _LIVECD_UNATTEND
 

Typedefs

typedef struct _LIVECD_UNATTEND LIVECD_UNATTEND
 

Functions

static VOID InitLogo (PIMGINFO pImgInfo, HWND hwndDlg)
 
BOOL IsLiveCD (VOID)
 
static BOOL CALLBACK LocalesEnumProc (LPTSTR lpLocale)
 
static VOID CreateLanguagesList (HWND hwnd, PSTATE pState)
 
static BOOL GetLayoutName (LPCWSTR szLCID, LPWSTR szName)
 
static VOID SetKeyboardLayout (HWND hwnd)
 
static VOID SelectKeyboardForLanguage (HWND hwnd, LCID lcid)
 
static VOID CreateKeyboardLayoutList (HWND hItemsList)
 
static VOID InitializeDefaultUserLocale (PLCID pNewLcid)
 
VOID CenterWindow (HWND hWnd)
 
static VOID OnDrawItem (LPDRAWITEMSTRUCT lpDrawItem, PSTATE pState, UINT uCtlID)
 
static INT_PTR CALLBACK LocaleDlgProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK StartDlgProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
VOID ParseUnattend (LPCWSTR UnattendInf, LIVECD_UNATTEND *pUnattend)
 
VOID RunLiveCD (PSTATE pState)
 

Variables

HWND hList
 
HWND hLocaleList
 
BOOL bSpain = FALSE
 

Typedef Documentation

◆ LIVECD_UNATTEND

Function Documentation

◆ CenterWindow()

VOID CenterWindow ( HWND  hWnd)

Definition at line 556 of file livecd.c.

557 {
559  RECT rcParent;
560  RECT rcWindow;
561 
563  if (hWndParent == NULL)
565 
566  GetWindowRect(hWndParent, &rcParent);
567  GetWindowRect(hWnd, &rcWindow);
568 
570  HWND_TOP,
571  ((rcParent.right - rcParent.left) - (rcWindow.right - rcWindow.left)) / 2,
572  ((rcParent.bottom - rcParent.top) - (rcWindow.bottom - rcWindow.top)) / 2,
573  0,
574  0,
575  SWP_NOSIZE);
576 }
HWND hWnd
Definition: settings.c:17
LONG top
Definition: windef.h:307
#define HWND_TOP
Definition: winuser.h:1193
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
smooth NULL
Definition: ftsmooth.c:416
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:656
#define SWP_NOSIZE
Definition: winuser.h:1230
HWND WINAPI GetParent(_In_ HWND)
LONG bottom
Definition: windef.h:309
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)

Referenced by LocaleDlgProc(), and StartDlgProc().

◆ CreateKeyboardLayoutList()

static VOID CreateKeyboardLayoutList ( HWND  hItemsList)
static

Definition at line 374 of file livecd.c.

376 {
377  HKEY hKey;
378  WCHAR szLayoutId[9], szCurrentLayoutId[9];
380  DWORD dwIndex = 0;
381  DWORD dwSize;
382  INT iIndex;
383  LONG lError;
384  ULONG ulLayoutId;
385 
386  if (!GetKeyboardLayoutNameW(szCurrentLayoutId))
387  wcscpy(szCurrentLayoutId, L"00000409");
388 
390  L"System\\CurrentControlSet\\Control\\Keyboard Layouts",
391  0,
393  &hKey);
394  if (lError != ERROR_SUCCESS)
395  return;
396 
397  while (TRUE)
398  {
399  dwSize = ARRAYSIZE(szLayoutId);
400 
401  lError = RegEnumKeyExW(hKey,
402  dwIndex,
403  szLayoutId,
404  &dwSize,
405  NULL,
406  NULL,
407  NULL,
408  NULL);
409  if (lError != ERROR_SUCCESS)
410  break;
411 
412  GetLayoutName(szLayoutId, KeyName);
413 
414  iIndex = (INT)SendMessageW(hItemsList, CB_ADDSTRING, 0, (LPARAM)KeyName);
415 
416  ulLayoutId = wcstoul(szLayoutId, NULL, 16);
417  SendMessageW(hItemsList, CB_SETITEMDATA, iIndex, (LPARAM)ulLayoutId);
418 
419  if (wcscmp(szLayoutId, szCurrentLayoutId) == 0)
420  {
421  SendMessageW(hItemsList, CB_SETCURSEL, (WPARAM)iIndex, (LPARAM)0);
422  }
423 
424  dwIndex++;
425  }
426 
427  RegCloseKey(hKey);
428 }
#define CB_SETITEMDATA
Definition: winuser.h:1948
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING KeyName
Definition: ndis.h:4711
#define TRUE
Definition: types.h:120
static BOOL GetLayoutName(LPCWSTR szLCID, LPWSTR szName)
Definition: livecd.c:238
#define ERROR_SUCCESS
Definition: deptool.c:10
BOOL WINAPI GetKeyboardLayoutNameW(_Out_writes_(KL_NAMELENGTH) LPWSTR)
#define INT
Definition: polytest.cpp:20
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
UINT_PTR WPARAM
Definition: windef.h:207
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
int32_t INT
Definition: typedefs.h:57
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
long LONG
Definition: pedump.c:60
#define CB_ADDSTRING
Definition: winuser.h:1918
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const WCHAR L[]
Definition: oid.c:1250
#define CB_SETCURSEL
Definition: winuser.h:1943
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
unsigned int ULONG
Definition: retypes.h:1
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2527
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define KEY_ENUMERATE_SUB_KEYS
Definition: nt_native.h:1019

Referenced by LocaleDlgProc().

◆ CreateLanguagesList()

static VOID CreateLanguagesList ( HWND  hwnd,
PSTATE  pState 
)
static

Definition at line 209 of file livecd.c.

210 {
211  WCHAR langSel[255];
212  LCID Locale = 0;
213 
214  hList = hwnd;
215  bSpain = FALSE;
217 
218  if (pState->Unattend->bEnabled)
219  Locale = pState->Unattend->LocaleID;
220 
221  if (!Locale)
222  {
223  /* Select current locale */
224  /* or should it be System and not user? */
225  Locale = GetUserDefaultLCID();
226  }
228 
231  -1,
232  (LPARAM)langSel);
233 }
TCHAR langSel[255]
Definition: powercfg.c:24
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define LOCALE_SLANGUAGE
Definition: winnls.h:26
BOOL bSpain
Definition: livecd.c:12
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
DWORD LCID
Definition: nls.h:13
LCID WINAPI GetUserDefaultLCID(void)
Definition: lang.c:768
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1098
LONG_PTR LPARAM
Definition: windef.h:208
BOOL WINAPI EnumSystemLocalesW(LOCALE_ENUMPROCW lpfnLocaleEnum, DWORD dwFlags)
Definition: lang.c:1604
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define CB_SELECTSTRING
Definition: winuser.h:1942
HWND hList
Definition: livecd.c:10
static BOOL CALLBACK LocalesEnumProc(LPTSTR lpLocale)
Definition: livecd.c:159
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define LCID_SUPPORTED
Definition: winnls.h:199

Referenced by LocaleDlgProc().

◆ GetLayoutName()

static BOOL GetLayoutName ( LPCWSTR  szLCID,
LPWSTR  szName 
)
static

Definition at line 238 of file livecd.c.

241 {
242  HKEY hKey;
243  DWORD dwBufLen;
244  WCHAR szBuf[MAX_PATH], szDispName[MAX_PATH], szIndex[MAX_PATH], szPath[MAX_PATH];
245  HANDLE hLib;
246  UINT i, j, k;
247 
248  wsprintf(szBuf, L"SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s", szLCID);
249 
251  {
252  dwBufLen = sizeof(szDispName);
253 
254  if (RegQueryValueExW(hKey, L"Layout Display Name", NULL, NULL, (LPBYTE)szDispName, &dwBufLen) == ERROR_SUCCESS)
255  {
256  if (szDispName[0] == '@')
257  {
258  for (i = 0; i < wcslen(szDispName); i++)
259  {
260  if ((szDispName[i] == ',') && (szDispName[i + 1] == '-'))
261  {
262  for (j = i + 2, k = 0; j < wcslen(szDispName)+1; j++, k++)
263  {
264  szIndex[k] = szDispName[j];
265  }
266  szDispName[i - 1] = '\0';
267  break;
268  }
269  else
270  szDispName[i] = szDispName[i + 1];
271  }
272 
274  {
275  hLib = LoadLibraryW(szPath);
276  if (hLib)
277  {
278  if (LoadStringW(hLib, _wtoi(szIndex), szPath, ARRAYSIZE(szPath)) != 0)
279  {
280  wcscpy(szName, szPath);
281  RegCloseKey(hKey);
282  return TRUE;
283  }
284  FreeLibrary(hLib);
285  }
286  }
287  }
288  }
289 
290  dwBufLen = sizeof(szBuf);
291 
292  if (RegQueryValueExW(hKey, L"Layout Text", NULL, NULL, (LPBYTE)szName, &dwBufLen) == ERROR_SUCCESS)
293  {
294  RegCloseKey(hKey);
295  return TRUE;
296  }
297  }
298 
299  return FALSE;
300 }
#define TRUE
Definition: types.h:120
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
#define ERROR_SUCCESS
Definition: deptool.c:10
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
_In_ HCRYPTHASH _In_ BOOL _In_ DWORD _Inout_ DWORD _In_ DWORD dwBufLen
Definition: wincrypt.h:4245
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:53
#define LoadLibraryW(x)
Definition: compat.h:413
smooth NULL
Definition: ftsmooth.c:416
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define FreeLibrary(x)
Definition: compat.h:414
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const WCHAR L[]
Definition: oid.c:1250
LPCWSTR szPath
Definition: env.c:35
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
unsigned int UINT
Definition: ndis.h:50
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
static const WCHAR szName[]
Definition: msipriv.h:1194
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
#define wsprintf
Definition: winuser.h:5840
int k
Definition: mpi.c:3369
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by CreateKeyboardLayoutList().

◆ InitializeDefaultUserLocale()

static VOID InitializeDefaultUserLocale ( PLCID  pNewLcid)
static

Definition at line 433 of file livecd.c.

435 {
436  WCHAR szBuffer[80];
437  PWSTR ptr;
438  HKEY hLocaleKey;
439  DWORD ret;
440  DWORD dwSize;
441  LCID lcid;
442  INT i;
443 
444  struct {LCTYPE LCType; PWSTR pValue;} LocaleData[] = {
445  /* Number */
446  {LOCALE_SDECIMAL, L"sDecimal"},
447  {LOCALE_STHOUSAND, L"sThousand"},
448  {LOCALE_SNEGATIVESIGN, L"sNegativeSign"},
449  {LOCALE_SPOSITIVESIGN, L"sPositiveSign"},
450  {LOCALE_SGROUPING, L"sGrouping"},
451  {LOCALE_SLIST, L"sList"},
452  {LOCALE_SNATIVEDIGITS, L"sNativeDigits"},
453  {LOCALE_INEGNUMBER, L"iNegNumber"},
454  {LOCALE_IDIGITS, L"iDigits"},
455  {LOCALE_ILZERO, L"iLZero"},
456  {LOCALE_IMEASURE, L"iMeasure"},
457  {LOCALE_IDIGITSUBSTITUTION, L"NumShape"},
458 
459  /* Currency */
460  {LOCALE_SCURRENCY, L"sCurrency"},
461  {LOCALE_SMONDECIMALSEP, L"sMonDecimalSep"},
462  {LOCALE_SMONTHOUSANDSEP, L"sMonThousandSep"},
463  {LOCALE_SMONGROUPING, L"sMonGrouping"},
464  {LOCALE_ICURRENCY, L"iCurrency"},
465  {LOCALE_INEGCURR, L"iNegCurr"},
466  {LOCALE_ICURRDIGITS, L"iCurrDigits"},
467 
468  /* Time */
469  {LOCALE_STIMEFORMAT, L"sTimeFormat"},
470  {LOCALE_STIME, L"sTime"},
471  {LOCALE_S1159, L"s1159"},
472  {LOCALE_S2359, L"s2359"},
473  {LOCALE_ITIME, L"iTime"},
474  {LOCALE_ITIMEMARKPOSN, L"iTimePrefix"},
475  {LOCALE_ITLZERO, L"iTLZero"},
476 
477  /* Date */
478  {LOCALE_SLONGDATE, L"sLongDate"},
479  {LOCALE_SSHORTDATE, L"sShortDate"},
480  {LOCALE_SDATE, L"sDate"},
481  {LOCALE_IFIRSTDAYOFWEEK, L"iFirstDayOfWeek"},
482  {LOCALE_IFIRSTWEEKOFYEAR, L"iFirstWeekOfYear"},
483  {LOCALE_IDATE, L"iDate"},
484  {LOCALE_ICALENDARTYPE, L"iCalendarType"},
485 
486  /* Misc */
487  {LOCALE_SCOUNTRY, L"sCountry"},
488  {LOCALE_SABBREVLANGNAME, L"sLanguage"},
489  {LOCALE_ICOUNTRY, L"iCountry"},
490  {0, NULL}};
491 
493  L".DEFAULT\\Control Panel\\International",
494  0,
496  &hLocaleKey);
497  if (ret != ERROR_SUCCESS)
498  {
499  return;
500  }
501 
502  if (pNewLcid == NULL)
503  {
504  dwSize = 9 * sizeof(WCHAR);
505  ret = RegQueryValueExW(hLocaleKey,
506  L"Locale",
507  NULL,
508  NULL,
509  (PBYTE)szBuffer,
510  &dwSize);
511  if (ret != ERROR_SUCCESS)
512  goto done;
513 
514  lcid = (LCID)wcstoul(szBuffer, &ptr, 16);
515  if (lcid == 0)
516  goto done;
517  }
518  else
519  {
520  lcid = *pNewLcid;
521 
522  swprintf(szBuffer, L"%08lx", lcid);
523  RegSetValueExW(hLocaleKey,
524  L"Locale",
525  0,
526  REG_SZ,
527  (PBYTE)szBuffer,
528  (wcslen(szBuffer) + 1) * sizeof(WCHAR));
529  }
530 
531  i = 0;
532  while (LocaleData[i].pValue != NULL)
533  {
534  if (GetLocaleInfoW(lcid,
535  LocaleData[i].LCType | LOCALE_NOUSEROVERRIDE,
536  szBuffer,
537  ARRAYSIZE(szBuffer)))
538  {
539  RegSetValueExW(hLocaleKey,
540  LocaleData[i].pValue,
541  0,
542  REG_SZ,
543  (PBYTE)szBuffer,
544  (wcslen(szBuffer) + 1) * sizeof(WCHAR));
545  }
546 
547  i++;
548  }
549 
550 done:
551  RegCloseKey(hLocaleKey);
552 }
#define HKEY_USERS
Definition: winreg.h:13
#define LOCALE_SGROUPING
Definition: winnls.h:44
#define LOCALE_SMONGROUPING
Definition: winnls.h:53
#define ERROR_SUCCESS
Definition: deptool.c:10
#define KEY_READ
Definition: nt_native.h:1023
uint16_t * PWSTR
Definition: typedefs.h:55
#define LOCALE_IDATE
Definition: winnls.h:63
#define LOCALE_ICALENDARTYPE
Definition: winnls.h:73
#define LOCALE_ILZERO
Definition: winnls.h:46
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
DWORD LCID
Definition: nls.h:13
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define LOCALE_IMEASURE
Definition: winnls.h:41
int32_t INT
Definition: typedefs.h:57
#define LOCALE_SCURRENCY
Definition: winnls.h:49
#define LOCALE_INEGNUMBER
Definition: winnls.h:47
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1098
DWORD LCTYPE
Definition: winnls.h:514
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define LOCALE_STHOUSAND
Definition: winnls.h:43
#define LOCALE_NOUSEROVERRIDE
Definition: winnls.h:19
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define LOCALE_SLONGDATE
Definition: winnls.h:61
static PVOID ptr
Definition: dispmode.c:27
#define LOCALE_ITIMEMARKPOSN
Definition: winnls.h:66
#define LOCALE_INEGCURR
Definition: winnls.h:57
smooth NULL
Definition: ftsmooth.c:416
#define LOCALE_SDECIMAL
Definition: winnls.h:42
#define LOCALE_STIME
Definition: winnls.h:59
#define KEY_WRITE
Definition: nt_native.h:1031
#define LOCALE_ICURRENCY
Definition: winnls.h:56
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
#define LOCALE_SMONDECIMALSEP
Definition: winnls.h:51
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
#define LOCALE_SMONTHOUSANDSEP
Definition: winnls.h:52
#define LOCALE_SDATE
Definition: winnls.h:58
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define LOCALE_SABBREVLANGNAME
Definition: winnls.h:28
#define LOCALE_SPOSITIVESIGN
Definition: winnls.h:117
#define swprintf(buf, format,...)
Definition: sprintf.c:56
unsigned long DWORD
Definition: ntddk_ex.h:95
#define LOCALE_S1159
Definition: winnls.h:71
#define LOCALE_ITLZERO
Definition: winnls.h:68
int ret
static const WCHAR L[]
Definition: oid.c:1250
#define LOCALE_SNEGATIVESIGN
Definition: winnls.h:118
#define LOCALE_SSHORTDATE
Definition: winnls.h:60
#define LOCALE_ICOUNTRY
Definition: winnls.h:30
#define LOCALE_IDIGITS
Definition: winnls.h:45
#define LOCALE_IFIRSTDAYOFWEEK
Definition: winnls.h:75
#define LOCALE_IFIRSTWEEKOFYEAR
Definition: winnls.h:76
#define LOCALE_ICURRDIGITS
Definition: winnls.h:54
#define LOCALE_ITIME
Definition: winnls.h:65
#define LOCALE_SLIST
Definition: winnls.h:40
#define LOCALE_SCOUNTRY
Definition: winnls.h:31
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
#define LOCALE_SNATIVEDIGITS
Definition: winnls.h:48
#define LOCALE_S2359
Definition: winnls.h:72
#define LOCALE_STIMEFORMAT
Definition: winnls.h:62
BYTE * PBYTE
Definition: pedump.c:66
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define REG_SZ
Definition: layer.c:22

Referenced by LocaleDlgProc().

◆ InitLogo()

static VOID InitLogo ( PIMGINFO  pImgInfo,
HWND  hwndDlg 
)
static

Definition at line 25 of file livecd.c.

26 {
27  BITMAP logoBitmap;
28  BITMAP maskBitmap;
30  HDC hDC = GetDC(hwndDlg);
31  HDC hDCLogo = CreateCompatibleDC(NULL);
32  HDC hDCMask = CreateCompatibleDC(NULL);
33  HBITMAP hMask, hLogo, hAlphaLogo = NULL;
34  COLORREF *pBits;
35  INT line, column;
36 
37  if (hDC == NULL || hDCLogo == NULL || hDCMask == NULL)
38  goto Cleanup;
39 
40  ZeroMemory(pImgInfo, sizeof(*pImgInfo));
41  ZeroMemory(&bmpi, sizeof(bmpi));
42 
45 
46  if (hLogo != NULL && hMask != NULL)
47  {
48  GetObject(hLogo, sizeof(logoBitmap), &logoBitmap);
49  GetObject(hMask, sizeof(maskBitmap), &maskBitmap);
50 
51  if (logoBitmap.bmHeight != maskBitmap.bmHeight || logoBitmap.bmWidth != maskBitmap.bmWidth)
52  goto Cleanup;
53 
54  bmpi.bmiHeader.biSize = sizeof(BITMAPINFO);
55  bmpi.bmiHeader.biWidth = logoBitmap.bmWidth;
56  bmpi.bmiHeader.biHeight = logoBitmap.bmHeight;
60  bmpi.bmiHeader.biSizeImage = 4 * logoBitmap.bmWidth * logoBitmap.bmHeight;
61 
62  /* Create a premultiplied bitmap */
63  hAlphaLogo = CreateDIBSection(hDC, &bmpi, DIB_RGB_COLORS, (PVOID*)&pBits, 0, 0);
64  if (!hAlphaLogo)
65  goto Cleanup;
66 
67  SelectObject(hDCLogo, hLogo);
68  SelectObject(hDCMask, hMask);
69 
70  for (line = logoBitmap.bmHeight - 1; line >= 0; line--)
71  {
72  for (column = 0; column < logoBitmap.bmWidth; column++)
73  {
74  COLORREF alpha = GetPixel(hDCMask, column, line) & 0xFF;
75  COLORREF Color = GetPixel(hDCLogo, column, line);
76  DWORD r, g, b;
77 
78  r = GetRValue(Color) * alpha / 255;
79  g = GetGValue(Color) * alpha / 255;
80  b = GetBValue(Color) * alpha / 255;
81 
82  *pBits++ = b | (g << 8) | (r << 16) | (alpha << 24);
83  }
84  }
85 
86  pImgInfo->hBitmap = hAlphaLogo;
87  pImgInfo->cxSource = logoBitmap.bmWidth;
88  pImgInfo->cySource = logoBitmap.bmHeight;
89  pImgInfo->iBits = logoBitmap.bmBitsPixel;
90  pImgInfo->iPlanes = logoBitmap.bmPlanes;
91  }
92 
93 Cleanup:
94  if (hMask != NULL) DeleteObject(hMask);
95  if (hLogo != NULL) DeleteObject(hLogo);
96  if (hDCMask != NULL) DeleteDC(hDCMask);
97  if (hDCLogo != NULL) DeleteDC(hDCLogo);
98  if (hDC != NULL) ReleaseDC(hwndDlg, hDC);
99 }
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1475
INT iBits
Definition: userinit.h:53
HDC WINAPI GetDC(_In_opt_ HWND)
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static HDC
Definition: imagelist.c:92
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
#define GetRValue(quad)
Definition: precomp.h:64
#define ZeroMemory
Definition: winbase.h:1648
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
DWORD GetPixel(LPDIRECTDRAWSURFACE7 Surface, UINT x, UINT y)
Definition: blt.cpp:2
int32_t INT
Definition: typedefs.h:57
HINSTANCE hInstance
Definition: charmap.c:20
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:2172
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
DWORD biCompression
Definition: amvideo.idl:35
smooth NULL
Definition: ftsmooth.c:416
Definition: parser.c:48
#define GetBValue(quad)
Definition: precomp.h:66
INT cySource
Definition: userinit.h:51
#define GetGValue(quad)
Definition: precomp.h:65
#define b
Definition: ke_i.h:79
GLboolean GLboolean g
Definition: glext.h:6204
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
DWORD COLORREF
Definition: windef.h:300
unsigned long DWORD
Definition: ntddk_ex.h:95
INT iPlanes
Definition: userinit.h:52
DWORD biSizeImage
Definition: amvideo.idl:36
#define GetObject
Definition: wingdi.h:4467
#define IDB_ROSMASK
Definition: resource.h:7
static PIMGINFO pImgInfo
Definition: general.c:31
char line[200]
Definition: main.c:97
static const WCHAR Cleanup[]
Definition: register.c:80
INT cxSource
Definition: userinit.h:50
static HDC hDC
Definition: 3dtext.c:33
BITMAPINFO bmpi
Definition: alphablend.c:68
BOOL WINAPI DeleteDC(_In_ HDC)
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:197
Definition: bl.h:1331
HBITMAP hBitmap
Definition: userinit.h:49
#define IMAGE_BITMAP
Definition: winuser.h:211
GLclampf GLclampf GLclampf alpha
Definition: gl.h:1740
static HBITMAP
Definition: button.c:44
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
GLenum GLenum GLvoid GLvoid * column
Definition: glext.h:5664
#define IDB_ROSLOGO
Definition: resource.h:6
#define DIB_RGB_COLORS
Definition: wingdi.h:366
#define LR_DEFAULTCOLOR
Definition: winuser.h:1077
#define BI_RGB
Definition: precomp.h:47
struct tagBITMAPINFO BITMAPINFO

Referenced by RunLiveCD().

◆ IsLiveCD()

BOOL IsLiveCD ( VOID  )

Definition at line 103 of file livecd.c.

104 {
105  HKEY ControlKey = NULL;
106  LPWSTR SystemStartOptions = NULL;
107  LPWSTR CurrentOption, NextOption; /* Pointers into SystemStartOptions */
108  LONG rc;
109  BOOL ret = FALSE;
110 
111  TRACE("IsLiveCD()\n");
112 
115  0,
117  &ControlKey);
118  if (rc != ERROR_SUCCESS)
119  {
120  WARN("RegOpenKeyEx() failed with error %lu\n", rc);
121  goto cleanup;
122  }
123 
124  rc = ReadRegSzKey(ControlKey, L"SystemStartOptions", &SystemStartOptions);
125  if (rc != ERROR_SUCCESS)
126  {
127  WARN("ReadRegSzKey() failed with error %lu\n", rc);
128  goto cleanup;
129  }
130 
131  /* Check for CONSOLE switch in SystemStartOptions */
132  CurrentOption = SystemStartOptions;
133  while (CurrentOption)
134  {
135  NextOption = wcschr(CurrentOption, L' ');
136  if (NextOption)
137  *NextOption = L'\0';
138  if (_wcsicmp(CurrentOption, L"MININT") == 0)
139  {
140  TRACE("Found 'MININT' boot option\n");
141  ret = TRUE;
142  goto cleanup;
143  }
144  CurrentOption = NextOption ? NextOption + 1 : NULL;
145  }
146 
147 cleanup:
148  if (ControlKey != NULL)
149  RegCloseKey(ControlKey);
150  HeapFree(GetProcessHeap(), 0, SystemStartOptions);
151 
152  TRACE("IsLiveCD() returning %d\n", ret);
153 
154  return ret;
155 }
#define TRUE
Definition: types.h:120
#define ERROR_SUCCESS
Definition: deptool.c:10
#define WARN(fmt,...)
Definition: debug.h:112
static LONG ReadRegSzKey(IN HKEY hKey, IN LPCWSTR pszKey, OUT LPWSTR *pValue)
Definition: install.c:232
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:404
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
int ret
static const WCHAR L[]
Definition: oid.c:1250
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
#define REGSTR_PATH_CURRENT_CONTROL_SET
Definition: regstr.h:564
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
char * cleanup(char *str)
Definition: wpickclick.c:99
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:403
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static char * NextOption(const char *const ostr)
Definition: getopt.c:31
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by wWinMain().

◆ LocaleDlgProc()

static INT_PTR CALLBACK LocaleDlgProc ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 619 of file livecd.c.

624 {
625  PSTATE pState;
626 
627  /* Retrieve pointer to the state */
628  pState = (PSTATE)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA);
629 
630  switch (uMsg)
631  {
632  case WM_INITDIALOG:
633  /* Save pointer to the global state */
634  pState = (PSTATE)lParam;
635  SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pState);
636 
637  /* Center the dialog window */
638  CenterWindow(hwndDlg);
639 
640  /* Fill the language and keyboard layout lists */
643  if (pState->Unattend->bEnabled)
644  {
645  // Advance to the next page
647  }
648  return FALSE;
649 
650  case WM_DRAWITEM:
652  pState,
654  return TRUE;
655 
656  case WM_COMMAND:
657  switch (LOWORD(wParam))
658  {
659  case IDC_LANGUAGELIST:
660  if (HIWORD(wParam) == CBN_SELCHANGE)
661  {
662  LCID NewLcid;
663  INT iCurSel;
664 
665  iCurSel = SendDlgItemMessageW(hwndDlg,
667  CB_GETCURSEL,
668  0,
669  0);
670  if (iCurSel == CB_ERR)
671  break;
672 
673  NewLcid = SendDlgItemMessageW(hwndDlg,
676  iCurSel,
677  0);
678  if (NewLcid == (LCID)CB_ERR)
679  break;
680 
681  TRACE("LCID: 0x%08lx\n", NewLcid);
683  NewLcid);
684  }
685  break;
686 
687  case IDOK:
688  if (HIWORD(wParam) == BN_CLICKED)
689  {
690  LCID NewLcid;
691  INT iCurSel;
692 
693  iCurSel = SendDlgItemMessageW(hwndDlg,
695  CB_GETCURSEL,
696  0,
697  0);
698  if (iCurSel == CB_ERR)
699  break;
700 
701  NewLcid = SendDlgItemMessageW(hwndDlg,
704  iCurSel,
705  0);
706  if (NewLcid == (LCID)CB_ERR)
707  break;
708 
709  /* Set the locale for the current thread */
710  NtSetDefaultLocale(TRUE, NewLcid);
711 
712  /* Store the locale settings in the registry */
713  InitializeDefaultUserLocale(&NewLcid);
714 
716 
717  pState->NextPage = STARTPAGE;
718  EndDialog(hwndDlg, LOWORD(wParam));
719  }
720  break;
721 
722  case IDCANCEL:
723  if (HIWORD(wParam) == BN_CLICKED)
724  {
725  static WCHAR szMsg[RC_STRING_MAX_SIZE];
726  INT ret;
728  ret = MessageBoxW(hwndDlg, szMsg, L"ReactOS LiveCD", MB_ICONWARNING | MB_YESNO | MB_DEFBUTTON2);
729  if (ret == IDOK || ret == IDYES)
730  {
731  pState->NextPage = DONE;
732  pState->Run = REBOOT;
733  EndDialog(hwndDlg, LOWORD(wParam));
734  }
735  }
736  break;
737 
738  default:
739  break;
740  }
741  break;
742 
743  default:
744  break;
745  }
746 
747  return FALSE;
748 }
#define TRUE
Definition: types.h:120
#define IDOK
Definition: winuser.h:824
#define IDYES
Definition: winuser.h:829
static VOID CreateLanguagesList(HWND hwnd, PSTATE pState)
Definition: livecd.c:209
#define CB_GETITEMDATA
Definition: winuser.h:1932
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define IDC_LANGUAGELIST
Definition: resource.h:15
DWORD LCID
Definition: nls.h:13
#define GetWindowLongPtrW
Definition: winuser.h:4804
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int32_t INT
Definition: typedefs.h:57
#define CB_GETCURSEL
Definition: winuser.h:1925
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
WPARAM wParam
Definition: combotst.c:138
#define MB_ICONWARNING
Definition: winuser.h:780
static VOID SelectKeyboardForLanguage(HWND hwnd, LCID lcid)
Definition: livecd.c:330
#define MB_YESNO
Definition: winuser.h:811
#define GWLP_USERDATA
Definition: treelist.c:63
#define MAKELONG(a, b)
Definition: typedefs.h:248
smooth NULL
Definition: ftsmooth.c:416
struct _STATE * PSTATE
#define CB_ERR
Definition: winuser.h:2410
#define TRACE(s)
Definition: solgame.cpp:4
static VOID OnDrawItem(LPDRAWITEMSTRUCT lpDrawItem, PSTATE pState, UINT uCtlID)
Definition: livecd.c:581
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
NTSTATUS NTAPI NtSetDefaultLocale(IN BOOLEAN UserProfile, IN LCID DefaultLocaleId)
Definition: locale.c:203
#define BN_CLICKED
Definition: winuser.h:1907
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int ret
static const WCHAR L[]
Definition: oid.c:1250
#define WM_COMMAND
Definition: winuser.h:1722
VOID CenterWindow(HWND hWnd)
Definition: livecd.c:556
uint32_t DWORD_PTR
Definition: typedefs.h:64
#define IDS_CANCEL_CONFIRM
Definition: resource.h:30
#define GetModuleHandle
Definition: winbase.h:3667
#define IDC_LAYOUTLIST
Definition: resource.h:17
#define CBN_SELCHANGE
Definition: winuser.h:1961
#define WM_DRAWITEM
Definition: winuser.h:1627
static VOID CreateKeyboardLayoutList(HWND hItemsList)
Definition: livecd.c:374
#define MB_DEFBUTTON2
Definition: winuser.h:793
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define HIWORD(l)
Definition: typedefs.h:246
static VOID InitializeDefaultUserLocale(PLCID pNewLcid)
Definition: livecd.c:433
#define DONE
Definition: rnr20lib.h:14
#define SetWindowLongPtrW
Definition: winuser.h:5321
#define IDCANCEL
Definition: winuser.h:825
#define IDC_LOCALELOGO
Definition: resource.h:14
#define WM_INITDIALOG
Definition: winuser.h:1721
LPARAM lParam
Definition: combotst.c:139
static VOID SetKeyboardLayout(HWND hwnd)
Definition: livecd.c:305
#define LOWORD(l)
Definition: pedump.c:82
#define RC_STRING_MAX_SIZE
Definition: resource.h:3

Referenced by RunLiveCD().

◆ LocalesEnumProc()

static BOOL CALLBACK LocalesEnumProc ( LPTSTR  lpLocale)
static

Definition at line 159 of file livecd.c.

160 {
161  LCID lcid;
162  WCHAR lang[255];
163  INT index;
164  BOOL bNoShow = FALSE;
165 
166  lcid = wcstoul(lpLocale, NULL, 16);
167 
168  /* Display only languages with installed support */
169  if (!IsValidLocale(lcid, LCID_INSTALLED))
170  return TRUE;
171 
172  // See http://archives.miloush.net/michkap/archive/2006/09/23/768178.html for why we handle spain differently
175  {
176  if (bSpain == FALSE)
177  {
179  bSpain = TRUE;
180  }
181  else
182  {
183  bNoShow = TRUE;
184  }
185  }
186  else
187  {
189  }
190 
191  if (bNoShow == FALSE)
192  {
194  CB_ADDSTRING,
195  0,
196  (LPARAM)lang);
197 
200  index,
201  (LPARAM)lcid);
202  }
203 
204  return TRUE;
205 }
#define CB_SETITEMDATA
Definition: winuser.h:1948
#define MAKELCID(lgid, srtid)
#define TRUE
Definition: types.h:120
#define LOCALE_SLANGUAGE
Definition: winnls.h:26
BOOL bSpain
Definition: livecd.c:12
#define SUBLANG_SPANISH_MODERN
Definition: nls.h:338
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
DWORD LCID
Definition: nls.h:13
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int32_t INT
Definition: typedefs.h:57
#define LCID_INSTALLED
Definition: winnls.h:198
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1098
#define IDS_SPAIN
Definition: resource.h:32
HINSTANCE hInstance
Definition: charmap.c:20
unsigned int BOOL
Definition: ntddk_ex.h:94
#define CB_ADDSTRING
Definition: winuser.h:1918
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
GLuint index
Definition: glext.h:6031
static const WCHAR lang[]
Definition: wbemdisp.c:287
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SORT_DEFAULT
BOOL WINAPI IsValidLocale(LCID lcid, DWORD flags)
Definition: lang.c:1548
#define index(s, c)
Definition: various.h:29
#define SUBLANG_SPANISH
Definition: nls.h:336
HWND hList
Definition: livecd.c:10
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_SPANISH
Definition: nls.h:123

Referenced by CreateLanguagesList().

◆ OnDrawItem()

static VOID OnDrawItem ( LPDRAWITEMSTRUCT  lpDrawItem,
PSTATE  pState,
UINT  uCtlID 
)
static

Definition at line 581 of file livecd.c.

585 {
586  HDC hdcMem;
587  LONG left;
588 
589  if (lpDrawItem->CtlID == uCtlID)
590  {
591  /* Position image in centre of dialog */
592  left = (lpDrawItem->rcItem.right - pState->ImageInfo.cxSource) / 2;
593 
594  hdcMem = CreateCompatibleDC(lpDrawItem->hDC);
595  if (hdcMem != NULL)
596  {
597  static BLENDFUNCTION BlendFunc = {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA};
598 
599  SelectObject(hdcMem, pState->ImageInfo.hBitmap);
600  GdiAlphaBlend(lpDrawItem->hDC,
601  left,
602  lpDrawItem->rcItem.top,
603  pState->ImageInfo.cxSource,
604  pState->ImageInfo.cySource,
605  hdcMem,
606  0, 0,
607  pState->ImageInfo.cxSource,
608  pState->ImageInfo.cySource,
609  BlendFunc);
610  DeleteDC(hdcMem);
611  }
612  }
613 }
BOOL WINAPI GdiAlphaBlend(HDC hdcDst, int xDst, int yDst, int widthDst, int heightDst, HDC hdcSrc, int xSrc, int ySrc, int widthSrc, int heightSrc, BLENDFUNCTION blendFunction)
static HDC
Definition: imagelist.c:92
LONG top
Definition: windef.h:307
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define AC_SRC_ALPHA
Definition: alphablend.c:9
LONG right
Definition: windef.h:308
long LONG
Definition: pedump.c:60
smooth NULL
Definition: ftsmooth.c:416
static const BLENDFUNCTION BlendFunc
Definition: general.c:32
GLint left
Definition: glext.h:7726
#define AC_SRC_OVER
Definition: wingdi.h:1368
BOOL WINAPI DeleteDC(_In_ HDC)
HDC hdcMem
Definition: welcome.c:104

Referenced by LocaleDlgProc(), and StartDlgProc().

◆ ParseUnattend()

VOID ParseUnattend ( LPCWSTR  UnattendInf,
LIVECD_UNATTEND pUnattend 
)

Definition at line 840 of file livecd.c.

841 {
843 
844  pUnattend->bEnabled = FALSE;
845 
846  if (!GetPrivateProfileStringW(L"Unattend", L"Signature", L"", Buffer, _countof(Buffer), UnattendInf))
847  {
848  ERR("Unable to parse Signature\n");
849  return;
850  }
851 
852  if (_wcsicmp(Buffer, L"$ReactOS$") && _wcsicmp(Buffer, L"$Windows NT$"))
853  {
854  TRACE("Unknown signature: %S\n", Buffer);
855  return;
856  }
857 
858  if (!GetPrivateProfileStringW(L"Unattend", L"UnattendSetupEnabled", L"", Buffer, _countof(Buffer), UnattendInf))
859  {
860  ERR("Unable to parse UnattendSetupEnabled\n");
861  return;
862  }
863 
864  if (_wcsicmp(Buffer, L"yes"))
865  {
866  TRACE("Unattended setup is not enabled\n", Buffer);
867  return;
868  }
869 
870  pUnattend->bEnabled = TRUE;
871  pUnattend->LocaleID = 0;
872 
873  if (GetPrivateProfileStringW(L"Unattend", L"LocaleID", L"", Buffer, _countof(Buffer), UnattendInf) && Buffer[0])
874  {
875  pUnattend->LocaleID = wcstol(Buffer, NULL, 16);
876  }
877 }
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
Definition: profile.c:1142
#define TRUE
Definition: types.h:120
BOOL bEnabled
Definition: livecd.c:16
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
smooth NULL
Definition: ftsmooth.c:416
LCID LocaleID
Definition: livecd.c:17
Definition: bufpool.h:45
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:26
static const WCHAR L[]
Definition: oid.c:1250
#define ERR(fmt,...)
Definition: debug.h:110
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)

Referenced by RunLiveCD().

◆ RunLiveCD()

VOID RunLiveCD ( PSTATE  pState)

Definition at line 880 of file livecd.c.

882 {
883  LIVECD_UNATTEND Unattend = {0};
884  WCHAR UnattendInf[MAX_PATH];
885 
886  InitLogo(&pState->ImageInfo, NULL);
887 
888  GetWindowsDirectoryW(UnattendInf, _countof(UnattendInf));
889  wcscat(UnattendInf, L"\\unattend.inf");
890  ParseUnattend(UnattendInf, &Unattend);
891  pState->Unattend = &Unattend;
892 
893  while (pState->NextPage != DONE)
894  {
895  switch (pState->NextPage)
896  {
897  case LOCALEPAGE:
900  NULL,
902  (LPARAM)pState);
903  break;
904 
905  case STARTPAGE:
908  NULL,
909  StartDlgProc,
910  (LPARAM)pState);
911  break;
912 
913  default:
914  break;
915  }
916  }
917 
918  DeleteObject(pState->ImageInfo.hBitmap);
919 }
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
#define IDD_STARTPAGE
Definition: resource.h:18
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2351
HINSTANCE hInstance
Definition: charmap.c:20
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
VOID ParseUnattend(LPCWSTR UnattendInf, LIVECD_UNATTEND *pUnattend)
Definition: livecd.c:840
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:26
static VOID InitLogo(PIMGINFO pImgInfo, HWND hwndDlg)
Definition: livecd.c:25
static const WCHAR L[]
Definition: oid.c:1250
#define IDD_LOCALEPAGE
Definition: resource.h:13
static INT_PTR CALLBACK StartDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: livecd.c:754
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define DONE
Definition: rnr20lib.h:14
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
static INT_PTR CALLBACK LocaleDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: livecd.c:619

Referenced by wWinMain().

◆ SelectKeyboardForLanguage()

static VOID SelectKeyboardForLanguage ( HWND  hwnd,
LCID  lcid 
)
static

Definition at line 330 of file livecd.c.

333 {
334  INT i, nCount;
335  LCID LayoutId;
336 
337  TRACE("LCID: %08lx\n", lcid);
338  TRACE("LangID: %04lx\n", LANGIDFROMLCID(lcid));
339 
340  nCount = SendMessageW(hwnd, CB_GETCOUNT, 0, 0);
341 
342  for (i = 0; i < nCount; i++)
343  {
344  LayoutId = (LCID)SendMessageW(hwnd, CB_GETITEMDATA, i, 0);
345  TRACE("Layout: %08lx\n", LayoutId);
346 
347  if (LANGIDFROMLCID(LayoutId) == LANGIDFROMLCID(lcid))
348  {
349  TRACE("Found 1: %08lx --> %08lx\n", LayoutId, lcid);
351  return;
352  }
353  }
354 
355  for (i = 0; i < nCount; i++)
356  {
357  LayoutId = (LCID)SendMessageW(hwnd, CB_GETITEMDATA, i, 0);
358  TRACE("Layout: %08lx\n", LayoutId);
359 
360  if (PRIMARYLANGID(LayoutId) == PRIMARYLANGID(lcid))
361  {
362  TRACE("Found 2: %08lx --> %08lx\n", LayoutId, lcid);
364  return;
365  }
366  }
367 
368  TRACE("No match found!\n");
369 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define CB_GETITEMDATA
Definition: winuser.h:1932
DWORD LCID
Definition: nls.h:13
int32_t INT
Definition: typedefs.h:57
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define TRACE(s)
Definition: solgame.cpp:4
#define LANGIDFROMLCID(l)
Definition: nls.h:18
#define CB_SETCURSEL
Definition: winuser.h:1943
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define CB_GETCOUNT
Definition: winuser.h:1924
#define PRIMARYLANGID(l)
Definition: nls.h:16

Referenced by LocaleDlgProc().

◆ SetKeyboardLayout()

static VOID SetKeyboardLayout ( HWND  hwnd)
static

Definition at line 305 of file livecd.c.

307 {
308  INT iCurSel;
309  ULONG ulLayoutId;
310  HKL hKl;
311  WCHAR szLayoutId[9];
312 
313  iCurSel = SendMessageW(hwnd, CB_GETCURSEL, 0, 0);
314  if (iCurSel == CB_ERR)
315  return;
316 
317  ulLayoutId = (ULONG)SendMessageW(hwnd, CB_GETITEMDATA, iCurSel, 0);
318  if (ulLayoutId == (ULONG)CB_ERR)
319  return;
320 
321  swprintf(szLayoutId, L"%08lx", ulLayoutId);
322 
324  SystemParametersInfoW(SPI_SETDEFAULTINPUTLANG, 0, &hKl, SPIF_SENDCHANGE);
325 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define KLF_ACTIVATE
Definition: winuser.h:111
#define CB_GETITEMDATA
Definition: winuser.h:1932
int32_t INT
Definition: typedefs.h:57
#define CB_GETCURSEL
Definition: winuser.h:1925
#define CB_ERR
Definition: winuser.h:2410
BOOL WINAPI SystemParametersInfoW(_In_ UINT, _In_ UINT, _Inout_opt_ PVOID, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define swprintf(buf, format,...)
Definition: sprintf.c:56
static const WCHAR L[]
Definition: oid.c:1250
UINT_PTR HKL
Definition: msctf.idl:101
#define KLF_REPLACELANG
Definition: winuser.h:115
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define KLF_SETFORPROCESS
Definition: winuser.h:117
HKL WINAPI LoadKeyboardLayoutW(_In_ LPCWSTR, _In_ UINT)
#define SPIF_SENDCHANGE
Definition: winuser.h:1554
unsigned int ULONG
Definition: retypes.h:1

Referenced by LocaleDlgProc().

◆ StartDlgProc()

static INT_PTR CALLBACK StartDlgProc ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 754 of file livecd.c.

759 {
760  PSTATE pState;
761 
762  /* Retrieve pointer to the state */
763  pState = (PSTATE)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA);
764 
765  switch (uMsg)
766  {
767  case WM_INITDIALOG:
768  /* Save pointer to the state */
769  pState = (PSTATE)lParam;
770  SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pState);
771 
772  /* Center the dialog window */
773  CenterWindow(hwndDlg);
774 
775  if (pState->Unattend->bEnabled)
776  {
777  // Click on the 'Run' button
779  }
780 
781  return FALSE;
782 
783  case WM_DRAWITEM:
785  pState,
786  IDC_STARTLOGO);
787  return TRUE;
788 
789  case WM_COMMAND:
790  if (HIWORD(wParam) == BN_CLICKED)
791  {
792  switch (LOWORD(wParam))
793  {
794  case IDC_RUN:
795  pState->NextPage = DONE;
796  pState->Run = SHELL;
797  EndDialog(hwndDlg, LOWORD(wParam));
798  break;
799 
800  case IDC_INSTALL:
801  pState->NextPage = DONE;
802  pState->Run = INSTALLER;
803  EndDialog(hwndDlg, LOWORD(wParam));
804  break;
805 
806  case IDOK:
807  pState->NextPage = LOCALEPAGE;
808  EndDialog(hwndDlg, LOWORD(wParam));
809  break;
810 
811  case IDCANCEL:
812  if (HIWORD(wParam) == BN_CLICKED)
813  {
814  static WCHAR szMsg[RC_STRING_MAX_SIZE];
815  INT ret;
817  ret = MessageBoxW(hwndDlg, szMsg, L"ReactOS LiveCD", MB_ICONWARNING | MB_YESNO | MB_DEFBUTTON2);
818  if (ret == IDOK || ret == IDYES)
819  {
820  pState->NextPage = DONE;
821  pState->Run = REBOOT;
822  EndDialog(hwndDlg, LOWORD(wParam));
823  }
824  }
825  break;
826 
827  default:
828  break;
829  }
830  }
831  break;
832 
833  default:
834  break;
835  }
836 
837  return FALSE;
838 }
#define TRUE
Definition: types.h:120
#define IDOK
Definition: winuser.h:824
#define IDYES
Definition: winuser.h:829
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define GetWindowLongPtrW
Definition: winuser.h:4804
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int32_t INT
Definition: typedefs.h:57
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
WPARAM wParam
Definition: combotst.c:138
#define MB_ICONWARNING
Definition: winuser.h:780
#define MB_YESNO
Definition: winuser.h:811
#define GWLP_USERDATA
Definition: treelist.c:63
#define MAKELONG(a, b)
Definition: typedefs.h:248
#define IDC_RUN
Definition: resource.h:21
smooth NULL
Definition: ftsmooth.c:416
struct _STATE * PSTATE
static VOID OnDrawItem(LPDRAWITEMSTRUCT lpDrawItem, PSTATE pState, UINT uCtlID)
Definition: livecd.c:581
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define BN_CLICKED
Definition: winuser.h:1907
Definition: userinit.h:42
int ret
static const WCHAR L[]
Definition: oid.c:1250
#define WM_COMMAND
Definition: winuser.h:1722
VOID CenterWindow(HWND hWnd)
Definition: livecd.c:556
uint32_t DWORD_PTR
Definition: typedefs.h:64
#define IDS_CANCEL_CONFIRM
Definition: resource.h:30
#define GetModuleHandle
Definition: winbase.h:3667
#define WM_DRAWITEM
Definition: winuser.h:1627
#define MB_DEFBUTTON2
Definition: winuser.h:793
#define IDC_STARTLOGO
Definition: resource.h:20
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define HIWORD(l)
Definition: typedefs.h:246
#define DONE
Definition: rnr20lib.h:14
#define SetWindowLongPtrW
Definition: winuser.h:5321
#define IDCANCEL
Definition: winuser.h:825
#define IDC_INSTALL
Definition: fontview.h:13
#define WM_INITDIALOG
Definition: winuser.h:1721
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
#define RC_STRING_MAX_SIZE
Definition: resource.h:3

Referenced by RunLiveCD().

Variable Documentation

◆ bSpain

BOOL bSpain = FALSE

Definition at line 12 of file livecd.c.

Referenced by CreateLanguagesList(), and LocalesEnumProc().

◆ hList

◆ hLocaleList

HWND hLocaleList

Definition at line 11 of file livecd.c.