mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[loc] fix various RTL issues
* MSG_002 doesn't display in RTL * Update Policy dialog loses RTL setting after the first paragraph * Some text displayed in native Windows message boxes is not using RTL (even as the Message Box itself will display the rest of the UI elements as RTL) * Detect if the relevant language pack is installed and use MessageBoxEx to display native message box buttons using the selected language. * All theses issues are part of #621 * Also remove trailing whitespaces
This commit is contained in:
parent
236bf77c24
commit
e1f8b276c8
12 changed files with 190 additions and 110 deletions
|
@ -2,7 +2,8 @@ o Version 2.5 (2015.10.??)
|
||||||
Add SHA-256 checksum verification
|
Add SHA-256 checksum verification
|
||||||
Add a cheat mode to disable exclusive USB drive locking (Alt-,)
|
Add a cheat mode to disable exclusive USB drive locking (Alt-,)
|
||||||
Add digital signature check on update downloads
|
Add digital signature check on update downloads
|
||||||
Report Windows build number in the log (for Windows 8 and later)
|
Report Windows build number in the log (Windows 8 or later)
|
||||||
|
Localization improvements
|
||||||
Additional translation updates
|
Additional translation updates
|
||||||
|
|
||||||
o Version 2.4 (2015.09.27)
|
o Version 2.4 (2015.09.27)
|
||||||
|
|
48
src/format.c
48
src/format.c
|
@ -64,7 +64,7 @@ uint8_t *grub2_buf = NULL;
|
||||||
long grub2_len;
|
long grub2_len;
|
||||||
static BOOL WritePBR(HANDLE hLogicalDrive);
|
static BOOL WritePBR(HANDLE hLogicalDrive);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert the fmifs outputs messages (that use an OEM code page) to UTF-8
|
* Convert the fmifs outputs messages (that use an OEM code page) to UTF-8
|
||||||
*/
|
*/
|
||||||
static void OutputUTF8Message(const char* src)
|
static void OutputUTF8Message(const char* src)
|
||||||
|
@ -312,13 +312,13 @@ static void ToValidLabel(WCHAR* name, BOOL bFAT)
|
||||||
* For example, say a disk was formatted on 26 Dec 95 at 9:55 PM and 41.94
|
* For example, say a disk was formatted on 26 Dec 95 at 9:55 PM and 41.94
|
||||||
* seconds. DOS takes the date and time just before it writes it to the
|
* seconds. DOS takes the date and time just before it writes it to the
|
||||||
* disk.
|
* disk.
|
||||||
*
|
*
|
||||||
* Low order word is calculated: Volume Serial Number is:
|
* Low order word is calculated: Volume Serial Number is:
|
||||||
* Month & Day 12/26 0c1ah
|
* Month & Day 12/26 0c1ah
|
||||||
* Sec & Hundredths 41:94 295eh 3578:1d02
|
* Sec & Hundredths 41:94 295eh 3578:1d02
|
||||||
* -----
|
* -----
|
||||||
* 3578h
|
* 3578h
|
||||||
*
|
*
|
||||||
* High order word is calculated:
|
* High order word is calculated:
|
||||||
* Hours & Minutes 21:55 1537h
|
* Hours & Minutes 21:55 1537h
|
||||||
* Year 1995 07cbh
|
* Year 1995 07cbh
|
||||||
|
@ -346,7 +346,7 @@ static DWORD GetVolumeID(void)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the Microsoft calculation from FATGEN
|
* This is the Microsoft calculation from FATGEN
|
||||||
*
|
*
|
||||||
* DWORD RootDirSectors = 0;
|
* DWORD RootDirSectors = 0;
|
||||||
* DWORD TmpVal1, TmpVal2, FATSz;
|
* DWORD TmpVal1, TmpVal2, FATSz;
|
||||||
*
|
*
|
||||||
|
@ -363,7 +363,7 @@ static DWORD GetFATSizeSectors(DWORD DskSize, DWORD ReservedSecCnt, DWORD SecPer
|
||||||
ULONGLONG FatElementSize = 4;
|
ULONGLONG FatElementSize = 4;
|
||||||
ULONGLONG FatSz;
|
ULONGLONG FatSz;
|
||||||
|
|
||||||
// This is based on
|
// This is based on
|
||||||
// http://hjem.get2net.dk/rune_moeller_barnkob/filesystems/fat.html
|
// http://hjem.get2net.dk/rune_moeller_barnkob/filesystems/fat.html
|
||||||
Numerator = FatElementSize * (DskSize - ReservedSecCnt);
|
Numerator = FatElementSize * (DskSize - ReservedSecCnt);
|
||||||
Denominator = (SecPerClus * BytesPerSect) + (FatElementSize * NumFATs);
|
Denominator = (SecPerClus * BytesPerSect) + (FatElementSize * NumFATs);
|
||||||
|
@ -399,7 +399,7 @@ static BOOL FormatFAT32(DWORD DriveIndex)
|
||||||
DWORD BurstSize = 128; // Zero in blocks of 64K typically
|
DWORD BurstSize = 128; // Zero in blocks of 64K typically
|
||||||
|
|
||||||
// Calculated later
|
// Calculated later
|
||||||
DWORD FatSize = 0;
|
DWORD FatSize = 0;
|
||||||
DWORD BytesPerSect = 0;
|
DWORD BytesPerSect = 0;
|
||||||
DWORD ClusterSize = 0;
|
DWORD ClusterSize = 0;
|
||||||
DWORD SectorsPerCluster = 0;
|
DWORD SectorsPerCluster = 0;
|
||||||
|
@ -510,7 +510,7 @@ static BOOL FormatFAT32(DWORD DriveIndex)
|
||||||
TotalSectors = (DWORD) (piDrive.PartitionLength.QuadPart/dgDrive.BytesPerSector);
|
TotalSectors = (DWORD) (piDrive.PartitionLength.QuadPart/dgDrive.BytesPerSector);
|
||||||
pFAT32BootSect->dTotSec32 = TotalSectors;
|
pFAT32BootSect->dTotSec32 = TotalSectors;
|
||||||
|
|
||||||
FatSize = GetFATSizeSectors(pFAT32BootSect->dTotSec32, pFAT32BootSect->wRsvdSecCnt,
|
FatSize = GetFATSizeSectors(pFAT32BootSect->dTotSec32, pFAT32BootSect->wRsvdSecCnt,
|
||||||
pFAT32BootSect->bSecPerClus, pFAT32BootSect->bNumFATs, BytesPerSect);
|
pFAT32BootSect->bSecPerClus, pFAT32BootSect->bNumFATs, BytesPerSect);
|
||||||
|
|
||||||
pFAT32BootSect->dFATSz32 = FatSize;
|
pFAT32BootSect->dFATSz32 = FatSize;
|
||||||
|
@ -529,11 +529,11 @@ static BOOL FormatFAT32(DWORD DriveIndex)
|
||||||
((BYTE*)pFAT32BootSect)[510] = 0x55;
|
((BYTE*)pFAT32BootSect)[510] = 0x55;
|
||||||
((BYTE*)pFAT32BootSect)[511] = 0xaa;
|
((BYTE*)pFAT32BootSect)[511] = 0xaa;
|
||||||
|
|
||||||
// FATGEN103.DOC says "NOTE: Many FAT documents mistakenly say that this 0xAA55 signature occupies the "last 2 bytes of
|
// FATGEN103.DOC says "NOTE: Many FAT documents mistakenly say that this 0xAA55 signature occupies the "last 2 bytes of
|
||||||
// the boot sector". This statement is correct if - and only if - BPB_BytsPerSec is 512. If BPB_BytsPerSec is greater than
|
// the boot sector". This statement is correct if - and only if - BPB_BytsPerSec is 512. If BPB_BytsPerSec is greater than
|
||||||
// 512, the offsets of these signature bytes do not change (although it is perfectly OK for the last two bytes at the end
|
// 512, the offsets of these signature bytes do not change (although it is perfectly OK for the last two bytes at the end
|
||||||
// of the boot sector to also contain this signature)."
|
// of the boot sector to also contain this signature)."
|
||||||
//
|
//
|
||||||
// Windows seems to only check the bytes at offsets 510 and 511. Other OSs might check the ones at the end of the sector,
|
// Windows seems to only check the bytes at offsets 510 and 511. Other OSs might check the ones at the end of the sector,
|
||||||
// so we'll put them there too.
|
// so we'll put them there too.
|
||||||
if (BytesPerSect != 512) {
|
if (BytesPerSect != 512) {
|
||||||
|
@ -555,7 +555,7 @@ static BOOL FormatFAT32(DWORD DriveIndex)
|
||||||
|
|
||||||
// Write boot sector, fats
|
// Write boot sector, fats
|
||||||
// Sector 0 Boot Sector
|
// Sector 0 Boot Sector
|
||||||
// Sector 1 FSInfo
|
// Sector 1 FSInfo
|
||||||
// Sector 2 More boot code - we write zeros here
|
// Sector 2 More boot code - we write zeros here
|
||||||
// Sector 3 unused
|
// Sector 3 unused
|
||||||
// Sector 4 unused
|
// Sector 4 unused
|
||||||
|
@ -572,7 +572,7 @@ static BOOL FormatFAT32(DWORD DriveIndex)
|
||||||
UserAreaSize = TotalSectors - ReservedSectCount - (NumFATs*FatSize);
|
UserAreaSize = TotalSectors - ReservedSectCount - (NumFATs*FatSize);
|
||||||
ClusterCount = UserAreaSize / SectorsPerCluster;
|
ClusterCount = UserAreaSize / SectorsPerCluster;
|
||||||
|
|
||||||
// Sanity check for a cluster count of >2^28, since the upper 4 bits of the cluster values in
|
// Sanity check for a cluster count of >2^28, since the upper 4 bits of the cluster values in
|
||||||
// the FAT are reserved.
|
// the FAT are reserved.
|
||||||
if (ClusterCount > 0x0FFFFFFF) {
|
if (ClusterCount > 0x0FFFFFFF) {
|
||||||
die("This drive has more than 2^28 clusters, try to specify a larger cluster size or use the default\n",
|
die("This drive has more than 2^28 clusters, try to specify a larger cluster size or use the default\n",
|
||||||
|
@ -586,7 +586,7 @@ static BOOL FormatFAT32(DWORD DriveIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sanity check, make sure the fat is big enough
|
// Sanity check, make sure the fat is big enough
|
||||||
// Convert the cluster count into a Fat sector count, and check the fat size value we calculated
|
// Convert the cluster count into a Fat sector count, and check the fat size value we calculated
|
||||||
// earlier is OK.
|
// earlier is OK.
|
||||||
FatNeeded = ClusterCount * 4;
|
FatNeeded = ClusterCount * 4;
|
||||||
FatNeeded += (BytesPerSect-1);
|
FatNeeded += (BytesPerSect-1);
|
||||||
|
@ -901,7 +901,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive)
|
||||||
}
|
}
|
||||||
if ((IsChecked(IDC_BOOT)) && (tt == TT_BIOS)) {
|
if ((IsChecked(IDC_BOOT)) && (tt == TT_BIOS)) {
|
||||||
// Set first partition bootable - masquerade as per the DiskID selected
|
// Set first partition bootable - masquerade as per the DiskID selected
|
||||||
buf[0x1be] = IsChecked(IDC_RUFUS_MBR) ?
|
buf[0x1be] = IsChecked(IDC_RUFUS_MBR) ?
|
||||||
(BYTE)ComboBox_GetItemData(hDiskID, ComboBox_GetCurSel(hDiskID)):0x80;
|
(BYTE)ComboBox_GetItemData(hDiskID, ComboBox_GetCurSel(hDiskID)):0x80;
|
||||||
uprintf("Set bootable USB partition as 0x%02X\n", buf[0x1be]);
|
uprintf("Set bootable USB partition as 0x%02X\n", buf[0x1be]);
|
||||||
}
|
}
|
||||||
|
@ -926,7 +926,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive)
|
||||||
r = write_zero_mbr(fp);
|
r = write_zero_mbr(fp);
|
||||||
goto notify;
|
goto notify;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Syslinux
|
// Syslinux
|
||||||
if ( (bt == BT_SYSLINUX_V4) || (bt == BT_SYSLINUX_V6) ||
|
if ( (bt == BT_SYSLINUX_V4) || (bt == BT_SYSLINUX_V6) ||
|
||||||
((bt == BT_ISO) && (HAS_SYSLINUX(img_report)) && (IS_FAT(fs))) ) {
|
((bt == BT_ISO) && (HAS_SYSLINUX(img_report)) && (IS_FAT(fs))) ) {
|
||||||
|
@ -954,7 +954,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive)
|
||||||
uprintf(using_msg, "ReactOS");
|
uprintf(using_msg, "ReactOS");
|
||||||
r = write_reactos_mbr(fp);
|
r = write_reactos_mbr(fp);
|
||||||
goto notify;
|
goto notify;
|
||||||
}
|
}
|
||||||
|
|
||||||
// KolibriOS
|
// KolibriOS
|
||||||
if ( (bt == BT_ISO) && (img_report.has_kolibrios) && (IS_FAT(fs))) {
|
if ( (bt == BT_ISO) && (img_report.has_kolibrios) && (IS_FAT(fs))) {
|
||||||
|
@ -1498,7 +1498,7 @@ DWORD WINAPI FormatThread(void* param)
|
||||||
char efi_dst[] = "?:\\efi\\boot\\bootx64.efi";
|
char efi_dst[] = "?:\\efi\\boot\\bootx64.efi";
|
||||||
char kolibri_dst[] = "?:\\MTLD_F32";
|
char kolibri_dst[] = "?:\\MTLD_F32";
|
||||||
char grub4dos_dst[] = "?:\\grldr";
|
char grub4dos_dst[] = "?:\\grldr";
|
||||||
|
|
||||||
PF_TYPE_DECL(WINAPI, LANGID, GetThreadUILanguage, (void));
|
PF_TYPE_DECL(WINAPI, LANGID, GetThreadUILanguage, (void));
|
||||||
PF_TYPE_DECL(WINAPI, LANGID, SetThreadUILanguage, (LANGID));
|
PF_TYPE_DECL(WINAPI, LANGID, SetThreadUILanguage, (LANGID));
|
||||||
PF_INIT(GetThreadUILanguage, Kernel32);
|
PF_INIT(GetThreadUILanguage, Kernel32);
|
||||||
|
@ -1635,8 +1635,8 @@ DWORD WINAPI FormatThread(void* param)
|
||||||
fprintf(log_fd, APPLICATION_NAME " bad blocks check ended on: %04d.%02d.%02d %02d:%02d:%02d\n",
|
fprintf(log_fd, APPLICATION_NAME " bad blocks check ended on: %04d.%02d.%02d %02d:%02d:%02d\n",
|
||||||
lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute, lt.wSecond);
|
lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute, lt.wSecond);
|
||||||
fclose(log_fd);
|
fclose(log_fd);
|
||||||
r = MessageBoxU(hMainDialog, lmprintf(MSG_012, bb_msg, logfile),
|
r = MessageBoxExU(hMainDialog, lmprintf(MSG_012, bb_msg, logfile),
|
||||||
lmprintf(MSG_010), MB_ABORTRETRYIGNORE|MB_ICONWARNING|MB_IS_RTL);
|
lmprintf(MSG_010), MB_ABORTRETRYIGNORE|MB_ICONWARNING|MB_IS_RTL, selected_langid);
|
||||||
} else {
|
} else {
|
||||||
// We didn't get any errors => delete the log file
|
// We didn't get any errors => delete the log file
|
||||||
fclose(log_fd);
|
fclose(log_fd);
|
||||||
|
@ -1782,7 +1782,7 @@ DWORD WINAPI FormatThread(void* param)
|
||||||
uprintf("Logical drive was not found!"); // We try to continue even if this fails, just in case
|
uprintf("Logical drive was not found!"); // We try to continue even if this fails, just in case
|
||||||
CHECK_FOR_USER_CANCEL;
|
CHECK_FOR_USER_CANCEL;
|
||||||
|
|
||||||
// If FAT32 is requested and we have a large drive (>32 GB) use
|
// If FAT32 is requested and we have a large drive (>32 GB) use
|
||||||
// large FAT32 format, else use MS's FormatEx.
|
// large FAT32 format, else use MS's FormatEx.
|
||||||
ret = use_large_fat32?FormatFAT32(DriveIndex):FormatDrive(DriveIndex);
|
ret = use_large_fat32?FormatFAT32(DriveIndex):FormatDrive(DriveIndex);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
|
@ -1838,7 +1838,7 @@ DWORD WINAPI FormatThread(void* param)
|
||||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE;
|
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// We still have a lock, which we need to modify the volume boot record
|
// We still have a lock, which we need to modify the volume boot record
|
||||||
// => no need to reacquire the lock...
|
// => no need to reacquire the lock...
|
||||||
hLogicalVolume = GetLogicalHandle(DriveIndex, TRUE, FALSE);
|
hLogicalVolume = GetLogicalHandle(DriveIndex, TRUE, FALSE);
|
||||||
if ((hLogicalVolume == INVALID_HANDLE_VALUE) || (hLogicalVolume == NULL)) {
|
if ((hLogicalVolume == INVALID_HANDLE_VALUE) || (hLogicalVolume == NULL)) {
|
||||||
|
@ -2016,7 +2016,7 @@ DWORD WINAPI SaveImageThread(void* param)
|
||||||
// With Windows' default optimizations, sync read + sync write for sequential operations
|
// With Windows' default optimizations, sync read + sync write for sequential operations
|
||||||
// will be as fast, if not faster, than whatever async scheme you can come up with.
|
// will be as fast, if not faster, than whatever async scheme you can come up with.
|
||||||
for (wb = 0; ; wb += wSize) {
|
for (wb = 0; ; wb += wSize) {
|
||||||
s = ReadFile(hPhysicalDrive, buffer,
|
s = ReadFile(hPhysicalDrive, buffer,
|
||||||
(DWORD)MIN(DD_BUFFER_SIZE, SelectedDrive.DiskSize - wb), &rSize, NULL);
|
(DWORD)MIN(DD_BUFFER_SIZE, SelectedDrive.DiskSize - wb), &rSize, NULL);
|
||||||
if (!s) {
|
if (!s) {
|
||||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_READ_FAULT;
|
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_READ_FAULT;
|
||||||
|
|
|
@ -124,12 +124,12 @@ const char* additional_copyrights =
|
||||||
"All other references can be found in the source.\\line\n}";
|
"All other references can be found in the source.\\line\n}";
|
||||||
|
|
||||||
const char* update_policy =
|
const char* update_policy =
|
||||||
"{\\rtf1\\ansi{\\fonttbl{\\f0\\fnil\\fcharset0 Microsoft Sans Serif;}{\\f1\\fnil\\fcharset2 Symbol;}}\n"
|
"{\\rtf1\\ansi{\\fonttbl{\\f0\\fnil\\fcharset0 Microsoft Sans Serif;}}\n"
|
||||||
"\\fs16\\b %s\\b0\\line\n"
|
"\\fs16\\b %s\\b0\\line\n"
|
||||||
"%s\\par\n"
|
"%s\\par\n"
|
||||||
"\\pard{\\pntext\\f1\\'B7\\tab}{\\*\\pn\\pnlvlblt\\pnf2\\pnindent0{\\pntxtb\\'B7}}\\fi-150\\li220 %s\\par\n"
|
"\\fs20•\\fs16 %s\\par\n"
|
||||||
"{\\pntext\\f1\\'B7\\tab}%s\\par\n"
|
"\\fs20•\\fs16 %s\\par\n"
|
||||||
"{\\pntext\\f1\\'B7\\tab}%s\\line\\pard\n"
|
"\\fs20•\\fs16 %s\\line\n"
|
||||||
"\\line\n"
|
"\\line\n"
|
||||||
"%s\\line\n\\line\n"
|
"%s\\line\n\\line\n"
|
||||||
"\\b %s\\b0\\line\n"
|
"\\b %s\\b0\\line\n"
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#include "localization.h"
|
#include "localization.h"
|
||||||
#include "localization_data.h"
|
#include "localization_data.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List of supported locale commands, with their parameter syntax:
|
* List of supported locale commands, with their parameter syntax:
|
||||||
* c control ID (no space, no quotes)
|
* c control ID (no space, no quotes)
|
||||||
* s: quoted string
|
* s: quoted string
|
||||||
|
@ -137,7 +137,7 @@ void add_message_command(loc_cmd* lcmd)
|
||||||
uprintf("localization: invalid MSG_ index\n");
|
uprintf("localization: invalid MSG_ index\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
safe_free(msg_table[lcmd->ctrl_id-MSG_000]);
|
safe_free(msg_table[lcmd->ctrl_id-MSG_000]);
|
||||||
msg_table[lcmd->ctrl_id-MSG_000] = lcmd->txt[1];
|
msg_table[lcmd->ctrl_id-MSG_000] = lcmd->txt[1];
|
||||||
lcmd->txt[1] = NULL; // String would be freed after this call otherwise
|
lcmd->txt[1] = NULL; // String would be freed after this call otherwise
|
||||||
|
@ -547,7 +547,7 @@ loc_cmd* get_locale_from_name(char* locale_name, BOOL fallback)
|
||||||
return lcmd;
|
return lcmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This call is used to toggle the issuing of messages with the default locale
|
* This call is used to toggle the issuing of messages with the default locale
|
||||||
* (usually en-US) instead of the current (usually non en) one.
|
* (usually en-US) instead of the current (usually non en) one.
|
||||||
*/
|
*/
|
||||||
|
@ -573,3 +573,53 @@ const char* get_name_from_id(int id)
|
||||||
}
|
}
|
||||||
return "UNKNOWN ID";
|
return "UNKNOWN ID";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This call is used to get a supported Windows Language identifier we
|
||||||
|
* should pass to MessageBoxEx to try to get the buttons displayed in
|
||||||
|
* the currently selected language. This relies on the relevant language
|
||||||
|
* pack having been installed.
|
||||||
|
*/
|
||||||
|
static BOOL found_lang;
|
||||||
|
static BOOL CALLBACK EnumUILanguagesProc(LPTSTR lpUILanguageString, LONG_PTR lParam)
|
||||||
|
{
|
||||||
|
wchar_t* wlang = (wchar_t*)lParam;
|
||||||
|
if (wcscmp(wlang, lpUILanguageString) == 0)
|
||||||
|
found_lang = TRUE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
WORD get_language_id(loc_cmd* lcmd)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
wchar_t wlang[5];
|
||||||
|
LANGID lang_id = GetUserDefaultUILanguage();
|
||||||
|
|
||||||
|
if (lcmd == NULL)
|
||||||
|
return MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
|
||||||
|
|
||||||
|
// Find if the selected language is the user default
|
||||||
|
for (i = 0; i<lcmd->unum_size; i++) {
|
||||||
|
if (lcmd->unum[i] == lang_id) {
|
||||||
|
uprintf("localization: will use default UI language 0x%04X", lang_id);
|
||||||
|
return MAKELANGID(lang_id, SUBLANG_DEFAULT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Selected language is not user default - find if a language pack is installed for it
|
||||||
|
found_lang = FALSE;
|
||||||
|
for (i = 0; (i<lcmd->unum_size); i++) {
|
||||||
|
// Always uppercase
|
||||||
|
swprintf_s(wlang, ARRAYSIZE(wlang), L"%04X", lcmd->unum[i]);
|
||||||
|
// This callback enumeration from Microsoft is retarded. Now we need a global
|
||||||
|
// boolean to tell us that we found what we were after.
|
||||||
|
EnumUILanguages(EnumUILanguagesProc, 0x4, (LONG_PTR)wlang); // 0x04 = MUI_LANGUAGE_ID
|
||||||
|
if (found_lang) {
|
||||||
|
uprintf("localization: will use installed language pack for 0x%04X", lcmd->unum[i]);
|
||||||
|
return MAKELANGID(lcmd->unum[i], SUBLANG_DEFAULT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uprintf("localization: no matching language pack - some messages will be displayed using default locale");
|
||||||
|
return MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
|
||||||
|
}
|
||||||
|
|
|
@ -174,3 +174,4 @@ loc_cmd* get_locale_from_lcid(int lcid, BOOL fallback);
|
||||||
loc_cmd* get_locale_from_name(char* locale_name, BOOL fallback);
|
loc_cmd* get_locale_from_name(char* locale_name, BOOL fallback);
|
||||||
void toggle_default_locale(void);
|
void toggle_default_locale(void);
|
||||||
const char* get_name_from_id(int id);
|
const char* get_name_from_id(int id);
|
||||||
|
WORD get_language_id(loc_cmd* lcmd);
|
||||||
|
|
|
@ -66,7 +66,7 @@ extern "C" {
|
||||||
#define isdigitU(c) isdigit((unsigned char)(c))
|
#define isdigitU(c) isdigit((unsigned char)(c))
|
||||||
#define isspaceU(c) isspace((unsigned char)(c))
|
#define isspaceU(c) isspace((unsigned char)(c))
|
||||||
#define isxdigitU(c) isxdigit((unsigned char)(c))
|
#define isxdigitU(c) isxdigit((unsigned char)(c))
|
||||||
// NB: other issomething() calls are not implemented as they may require multibyte UTF-8 sequences to be converted
|
// NB: other issomething() calls are not implemented as they may require multibyte UTF-8 sequences to be converted
|
||||||
|
|
||||||
#define sfree(p) do {if (p != NULL) {free((void*)(p)); p = NULL;}} while(0)
|
#define sfree(p) do {if (p != NULL) {free((void*)(p)); p = NULL;}} while(0)
|
||||||
#define wconvert(p) wchar_t* w ## p = utf8_to_wchar(p)
|
#define wconvert(p) wchar_t* w ## p = utf8_to_wchar(p)
|
||||||
|
@ -209,6 +209,20 @@ static __inline int MessageBoxU(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline int MessageBoxExU(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType, WORD wLanguageId)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
DWORD err = ERROR_INVALID_DATA;
|
||||||
|
wconvert(lpText);
|
||||||
|
wconvert(lpCaption);
|
||||||
|
ret = MessageBoxExW(hWnd, wlpText, wlpCaption, uType, wLanguageId);
|
||||||
|
err = GetLastError();
|
||||||
|
wfree(lpText);
|
||||||
|
wfree(lpCaption);
|
||||||
|
SetLastError(err);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static __inline int DrawTextU(HDC hDC, LPCSTR lpText, int nCount, LPRECT lpRect, UINT uFormat)
|
static __inline int DrawTextU(HDC hDC, LPCSTR lpText, int nCount, LPRECT lpRect, UINT uFormat)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
12
src/net.c
12
src/net.c
|
@ -235,7 +235,7 @@ const char* WinInetErrorString(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Download a file from an URL
|
* Download a file from an URL
|
||||||
* Mostly taken from http://support.microsoft.com/kb/234913
|
* Mostly taken from http://support.microsoft.com/kb/234913
|
||||||
* If hProgressDialog is not NULL, this function will send INIT and EXIT messages
|
* If hProgressDialog is not NULL, this function will send INIT and EXIT messages
|
||||||
|
@ -247,7 +247,7 @@ DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog)
|
||||||
HWND hProgressBar = NULL;
|
HWND hProgressBar = NULL;
|
||||||
BOOL r = FALSE;
|
BOOL r = FALSE;
|
||||||
DWORD dwFlags, dwSize, dwDownloaded, dwTotalSize;
|
DWORD dwFlags, dwSize, dwDownloaded, dwTotalSize;
|
||||||
FILE* fd = NULL;
|
FILE* fd = NULL;
|
||||||
LONG progress_style;
|
LONG progress_style;
|
||||||
const char* accept_types[] = {"*/*\0", NULL};
|
const char* accept_types[] = {"*/*\0", NULL};
|
||||||
unsigned char buf[DOWNLOAD_BUFFER_SIZE];
|
unsigned char buf[DOWNLOAD_BUFFER_SIZE];
|
||||||
|
@ -386,8 +386,8 @@ out:
|
||||||
if (PromptOnError) {
|
if (PromptOnError) {
|
||||||
PrintInfo(0, MSG_242);
|
PrintInfo(0, MSG_242);
|
||||||
SetLastError(error_code);
|
SetLastError(error_code);
|
||||||
MessageBoxU(hMainDialog, IS_ERROR(FormatStatus)?StrError(FormatStatus, FALSE):WinInetErrorString(),
|
MessageBoxExU(hMainDialog, IS_ERROR(FormatStatus)?StrError(FormatStatus, FALSE):WinInetErrorString(),
|
||||||
lmprintf(MSG_044), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
lmprintf(MSG_044), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hRequest) InternetCloseHandle(hRequest);
|
if (hRequest) InternetCloseHandle(hRequest);
|
||||||
|
@ -538,7 +538,7 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
dwSize = sizeof(dwStatus);
|
dwSize = sizeof(dwStatus);
|
||||||
dwStatus = 404;
|
dwStatus = 404;
|
||||||
HttpQueryInfoA(hRequest, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwStatus, &dwSize, NULL);
|
HttpQueryInfoA(hRequest, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwStatus, &dwSize, NULL);
|
||||||
if (dwStatus == 200)
|
if (dwStatus == 200)
|
||||||
break;
|
break;
|
||||||
InternetCloseHandle(hRequest);
|
InternetCloseHandle(hRequest);
|
||||||
hRequest = NULL;
|
hRequest = NULL;
|
||||||
|
@ -572,7 +572,7 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
// Might as well let the user know
|
// Might as well let the user know
|
||||||
if (!force_update_check) {
|
if (!force_update_check) {
|
||||||
if ((local_time > server_time + 600) || (local_time < server_time - 600)) {
|
if ((local_time > server_time + 600) || (local_time < server_time - 600)) {
|
||||||
uprintf("IMPORTANT: Your local clock is more than 10 minutes in the %s. Unless you fix this, " APPLICATION_NAME " may not be able to check for updates...",
|
uprintf("IMPORTANT: Your local clock is more than 10 minutes in the %s. Unless you fix this, " APPLICATION_NAME " may not be able to check for updates...",
|
||||||
(local_time > server_time + 600)?"future":"past");
|
(local_time > server_time + 600)?"future":"past");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,11 +141,11 @@ LONG ValidateSignature(HWND hDlg, const char* path)
|
||||||
|
|
||||||
// Check the signature name. Make it specific enough (i.e. don't simply check for "Akeo")
|
// Check the signature name. Make it specific enough (i.e. don't simply check for "Akeo")
|
||||||
// so that, besides hacking our server, it'll place an extra hurdle on any malicious entity
|
// so that, besides hacking our server, it'll place an extra hurdle on any malicious entity
|
||||||
// into also fooling a C.A. to issue a certificate that passes our test.
|
// into also fooling a C.A. to issue a certificate that passes our test.
|
||||||
signature_name = GetSignatureName(path);
|
signature_name = GetSignatureName(path);
|
||||||
if (signature_name == NULL) {
|
if (signature_name == NULL) {
|
||||||
uprintf("PKI: Could not get signature name");
|
uprintf("PKI: Could not get signature name");
|
||||||
MessageBoxU(hDlg, lmprintf(MSG_284), lmprintf(MSG_283), MB_OK | MB_ICONERROR | MB_IS_RTL);
|
MessageBoxExU(hDlg, lmprintf(MSG_284), lmprintf(MSG_283), MB_OK | MB_ICONERROR | MB_IS_RTL, selected_langid);
|
||||||
return TRUST_E_NOSIGNATURE;
|
return TRUST_E_NOSIGNATURE;
|
||||||
}
|
}
|
||||||
for (i = 0; i < ARRAYSIZE(valid_cert_names); i++) {
|
for (i = 0; i < ARRAYSIZE(valid_cert_names); i++) {
|
||||||
|
@ -158,8 +158,8 @@ LONG ValidateSignature(HWND hDlg, const char* path)
|
||||||
}
|
}
|
||||||
if (i >= ARRAYSIZE(valid_cert_names)) {
|
if (i >= ARRAYSIZE(valid_cert_names)) {
|
||||||
uprintf("PKI: Signature '%s' is unexpected...", signature_name);
|
uprintf("PKI: Signature '%s' is unexpected...", signature_name);
|
||||||
if (MessageBoxU(hDlg, lmprintf(MSG_285, signature_name), lmprintf(MSG_283),
|
if (MessageBoxExU(hDlg, lmprintf(MSG_285, signature_name), lmprintf(MSG_283),
|
||||||
MB_YESNO | MB_ICONWARNING | MB_IS_RTL) != IDYES)
|
MB_YESNO | MB_ICONWARNING | MB_IS_RTL, selected_langid) != IDYES)
|
||||||
return TRUST_E_EXPLICIT_DISTRUST;
|
return TRUST_E_EXPLICIT_DISTRUST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
109
src/rufus.c
109
src/rufus.c
|
@ -134,6 +134,7 @@ char* image_path = NULL;
|
||||||
float fScale = 1.0f;
|
float fScale = 1.0f;
|
||||||
int default_fs;
|
int default_fs;
|
||||||
uint32_t dur_mins, dur_secs;
|
uint32_t dur_mins, dur_secs;
|
||||||
|
WORD selected_langid = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
|
||||||
HWND hDeviceList, hPartitionScheme, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog = NULL;
|
HWND hDeviceList, hPartitionScheme, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog = NULL;
|
||||||
HWND hLogDlg = NULL, hProgress = NULL, hInfo, hDiskID, hStatusToolbar;
|
HWND hLogDlg = NULL, hProgress = NULL, hInfo, hDiskID, hStatusToolbar;
|
||||||
BOOL use_own_c32[NB_OLD_C32] = {FALSE, FALSE}, mbr_selected_by_user = FALSE, togo_mode;
|
BOOL use_own_c32[NB_OLD_C32] = {FALSE, FALSE}, mbr_selected_by_user = FALSE, togo_mode;
|
||||||
|
@ -629,7 +630,7 @@ static void SetTargetSystem(void)
|
||||||
if (SelectedDrive.PartitionType == PARTITION_STYLE_GPT) {
|
if (SelectedDrive.PartitionType == PARTITION_STYLE_GPT) {
|
||||||
ts = 2; // GPT/UEFI
|
ts = 2; // GPT/UEFI
|
||||||
} else if (SelectedDrive.has_protective_mbr || SelectedDrive.has_mbr_uefi_marker || ((img_report.has_efi) &&
|
} else if (SelectedDrive.has_protective_mbr || SelectedDrive.has_mbr_uefi_marker || ((img_report.has_efi) &&
|
||||||
(!HAS_SYSLINUX(img_report)) && (!img_report.has_bootmgr) && (!IS_REACTOS(img_report)) &&
|
(!HAS_SYSLINUX(img_report)) && (!img_report.has_bootmgr) && (!IS_REACTOS(img_report)) &&
|
||||||
(!img_report.has_kolibrios) && (!IS_GRUB(img_report)) && (!IS_WINPE(img_report.winpe))) ) {
|
(!img_report.has_kolibrios) && (!IS_GRUB(img_report)) && (!IS_WINPE(img_report.winpe))) ) {
|
||||||
ts = 1; // MBR/UEFI
|
ts = 1; // MBR/UEFI
|
||||||
} else {
|
} else {
|
||||||
|
@ -944,7 +945,8 @@ static void CALLBACK BlockingTimer(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD
|
||||||
// A write or close operation hasn't made any progress since our last check
|
// A write or close operation hasn't made any progress since our last check
|
||||||
user_notified = TRUE;
|
user_notified = TRUE;
|
||||||
uprintf("Blocking I/O operation detected\n");
|
uprintf("Blocking I/O operation detected\n");
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_080), lmprintf(MSG_048), MB_OK|MB_ICONINFORMATION|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_080), lmprintf(MSG_048),
|
||||||
|
MB_OK|MB_ICONINFORMATION|MB_IS_RTL, selected_langid);
|
||||||
} else {
|
} else {
|
||||||
last_iso_blocking_status = iso_blocking_status;
|
last_iso_blocking_status = iso_blocking_status;
|
||||||
}
|
}
|
||||||
|
@ -1058,7 +1060,7 @@ DWORD WINAPI ISOScanThread(LPVOID param)
|
||||||
PrintInfo(0, MSG_081);
|
PrintInfo(0, MSG_081);
|
||||||
safe_free(image_path);
|
safe_free(image_path);
|
||||||
EnableWindow(hStatusToolbar, FALSE);
|
EnableWindow(hStatusToolbar, FALSE);
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_082), lmprintf(MSG_081), MB_OK|MB_ICONINFORMATION|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_082), lmprintf(MSG_081), MB_OK|MB_ICONINFORMATION|MB_IS_RTL, selected_langid);
|
||||||
PrintStatus(0, MSG_086);
|
PrintStatus(0, MSG_086);
|
||||||
SetMBRProps();
|
SetMBRProps();
|
||||||
} else {
|
} else {
|
||||||
|
@ -1086,7 +1088,7 @@ DWORD WINAPI ISOScanThread(LPVOID param)
|
||||||
// Lose the focus from Close and set it back to Start
|
// Lose the focus from Close and set it back to Start
|
||||||
SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)hStart, TRUE);
|
SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)hStart, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Need to invalidate as we may have changed the UI and may get artifacts if we don't
|
// Need to invalidate as we may have changed the UI and may get artifacts if we don't
|
||||||
// Oh and we need to invoke BOTH RedrawWindow() and InvalidateRect() because UI refresh
|
// Oh and we need to invoke BOTH RedrawWindow() and InvalidateRect() because UI refresh
|
||||||
// in the Microsoft worlds SUCKS!!!! (we may lose the disabled "Start" button otherwise)
|
// in the Microsoft worlds SUCKS!!!! (we may lose the disabled "Start" button otherwise)
|
||||||
|
@ -1230,7 +1232,7 @@ static void ToggleToGo(void)
|
||||||
MoveCtrlY(hMainDialog, IDC_RUFUS_MBR, dialog_shift);
|
MoveCtrlY(hMainDialog, IDC_RUFUS_MBR, dialog_shift);
|
||||||
MoveCtrlY(hMainDialog, IDC_DISK_ID, dialog_shift);
|
MoveCtrlY(hMainDialog, IDC_DISK_ID, dialog_shift);
|
||||||
ResizeMoveCtrl(hMainDialog, GetDlgItem(hMainDialog, IDS_FORMAT_OPTIONS_GRP), 0, 0, 0, (int)dialog_shift, fScale);
|
ResizeMoveCtrl(hMainDialog, GetDlgItem(hMainDialog, IDS_FORMAT_OPTIONS_GRP), 0, 0, 0, (int)dialog_shift, fScale);
|
||||||
|
|
||||||
#ifdef RUFUS_TEST
|
#ifdef RUFUS_TEST
|
||||||
MoveCtrlY(hMainDialog, IDC_TEST, dialog_shift);
|
MoveCtrlY(hMainDialog, IDC_TEST, dialog_shift);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1284,18 +1286,18 @@ static BOOL BootCheck(void)
|
||||||
if ((bt == BT_ISO) || (bt == BT_IMG)) {
|
if ((bt == BT_ISO) || (bt == BT_IMG)) {
|
||||||
if (image_path == NULL) {
|
if (image_path == NULL) {
|
||||||
// Please click on the disc button to select a bootable ISO
|
// Please click on the disc button to select a bootable ISO
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_087), lmprintf(MSG_086), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_087), lmprintf(MSG_086), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if ((size_check) && (img_report.projected_size > (uint64_t)SelectedDrive.DiskSize)) {
|
if ((size_check) && (img_report.projected_size > (uint64_t)SelectedDrive.DiskSize)) {
|
||||||
// This ISO image is too big for the selected target
|
// This ISO image is too big for the selected target
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_089), lmprintf(MSG_088), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_089), lmprintf(MSG_088), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (bt == BT_IMG) {
|
if (bt == BT_IMG) {
|
||||||
if (!img_report.is_bootable_img)
|
if (!img_report.is_bootable_img)
|
||||||
// The selected image doesn't match the boot option selected.
|
// The selected image doesn't match the boot option selected.
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_188), lmprintf(MSG_187), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_188), lmprintf(MSG_187), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return (img_report.is_bootable_img);
|
return (img_report.is_bootable_img);
|
||||||
}
|
}
|
||||||
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
||||||
|
@ -1303,29 +1305,29 @@ static BOOL BootCheck(void)
|
||||||
if ((togo_mode) && (Button_GetCheck(GetDlgItem(hMainDialog, IDC_WINDOWS_TO_GO)) == BST_CHECKED)) {
|
if ((togo_mode) && (Button_GetCheck(GetDlgItem(hMainDialog, IDC_WINDOWS_TO_GO)) == BST_CHECKED)) {
|
||||||
if (fs != FS_NTFS) {
|
if (fs != FS_NTFS) {
|
||||||
// Windows To Go only works for NTFS
|
// Windows To Go only works for NTFS
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_097, "Windows To Go"), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_097, "Windows To Go"), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else if (SelectedDrive.Geometry.MediaType != FixedMedia) {
|
} else if (SelectedDrive.Geometry.MediaType != FixedMedia) {
|
||||||
if ((tt == TT_UEFI) && (pt == PARTITION_STYLE_GPT)) {
|
if ((tt == TT_UEFI) && (pt == PARTITION_STYLE_GPT)) {
|
||||||
// We're screwed since we need access to 2 partitions at the same time to set this, which
|
// We're screwed since we need access to 2 partitions at the same time to set this, which
|
||||||
// Windows can't do. Cue in Arthur's Theme: "♫ I know it's stupid... but it's true. ♫"
|
// Windows can't do. Cue in Arthur's Theme: "♫ I know it's stupid... but it's true. ♫"
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_198), lmprintf(MSG_190), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_198), lmprintf(MSG_190), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
// I never had any success with drives that have the REMOVABLE attribute set, no matter the
|
// I never had any success with drives that have the REMOVABLE attribute set, no matter the
|
||||||
// method or tool I tried. If you manage to get this working, I'd like to hear from you!
|
// method or tool I tried. If you manage to get this working, I'd like to hear from you!
|
||||||
if (MessageBoxU(hMainDialog, lmprintf(MSG_098), lmprintf(MSG_190), MB_YESNO|MB_ICONWARNING|MB_IS_RTL) != IDYES)
|
if (MessageBoxExU(hMainDialog, lmprintf(MSG_098), lmprintf(MSG_190), MB_YESNO|MB_ICONWARNING|MB_IS_RTL, selected_langid) != IDYES)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
} else if (tt == TT_UEFI) {
|
} else if (tt == TT_UEFI) {
|
||||||
if (!img_report.has_efi) {
|
if (!img_report.has_efi) {
|
||||||
// Unsupported ISO
|
// Unsupported ISO
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_091), lmprintf(MSG_090), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_091), lmprintf(MSG_090), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (IS_WIN7_EFI(img_report) && (!WimExtractCheck())) {
|
if (IS_WIN7_EFI(img_report) && (!WimExtractCheck())) {
|
||||||
// Your platform cannot extract files from WIM archives => download 7-zip?
|
// Your platform cannot extract files from WIM archives => download 7-zip?
|
||||||
if (MessageBoxU(hMainDialog, lmprintf(MSG_102), lmprintf(MSG_101), MB_YESNO|MB_ICONERROR|MB_IS_RTL) == IDYES)
|
if (MessageBoxExU(hMainDialog, lmprintf(MSG_102), lmprintf(MSG_101), MB_YESNO|MB_ICONERROR|MB_IS_RTL, selected_langid) == IDYES)
|
||||||
ShellExecuteA(hMainDialog, "open", SEVENZIP_URL, NULL, NULL, SW_SHOWNORMAL);
|
ShellExecuteA(hMainDialog, "open", SEVENZIP_URL, NULL, NULL, SW_SHOWNORMAL);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1333,16 +1335,16 @@ static BOOL BootCheck(void)
|
||||||
|| ((IS_FAT(fs)) && (!HAS_SYSLINUX(img_report)) && (!allow_dual_uefi_bios) && (!img_report.has_efi) &&
|
|| ((IS_FAT(fs)) && (!HAS_SYSLINUX(img_report)) && (!allow_dual_uefi_bios) && (!img_report.has_efi) &&
|
||||||
(!IS_REACTOS(img_report)) && (!img_report.has_kolibrios) && (!IS_GRUB(img_report))) ) {
|
(!IS_REACTOS(img_report)) && (!img_report.has_kolibrios) && (!IS_GRUB(img_report))) ) {
|
||||||
// Incompatible FS and ISO
|
// Incompatible FS and ISO
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_096), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_096), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else if ((fs == FS_FAT16) && (img_report.has_kolibrios)) {
|
} else if ((fs == FS_FAT16) && (img_report.has_kolibrios)) {
|
||||||
// KolibriOS doesn't support FAT16
|
// KolibriOS doesn't support FAT16
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_189), lmprintf(MSG_099), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_189), lmprintf(MSG_099), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if ((IS_FAT(fs)) && (img_report.has_4GB_file)) {
|
if ((IS_FAT(fs)) && (img_report.has_4GB_file)) {
|
||||||
// This ISO image contains a file larger than 4GB file (FAT32)
|
// This ISO image contains a file larger than 4GB file (FAT32)
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_100), lmprintf(MSG_099), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_100), lmprintf(MSG_099), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1371,8 +1373,8 @@ static BOOL BootCheck(void)
|
||||||
}
|
}
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
} else {
|
} else {
|
||||||
r = MessageBoxU(hMainDialog, lmprintf(MSG_116, img_report.grub2_version, GRUB2_PACKAGE_VERSION),
|
r = MessageBoxExU(hMainDialog, lmprintf(MSG_116, img_report.grub2_version, GRUB2_PACKAGE_VERSION),
|
||||||
lmprintf(MSG_115), MB_YESNOCANCEL|MB_ICONWARNING|MB_IS_RTL);
|
lmprintf(MSG_115), MB_YESNOCANCEL|MB_ICONWARNING|MB_IS_RTL, selected_langid);
|
||||||
if (r == IDCANCEL)
|
if (r == IDCANCEL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
else if (r == IDYES) {
|
else if (r == IDYES) {
|
||||||
|
@ -1420,8 +1422,8 @@ static BOOL BootCheck(void)
|
||||||
use_own_c32[i] = TRUE;
|
use_own_c32[i] = TRUE;
|
||||||
} else {
|
} else {
|
||||||
PrintInfo(0, MSG_204, old_c32_name[i]);
|
PrintInfo(0, MSG_204, old_c32_name[i]);
|
||||||
if (MessageBoxU(hMainDialog, lmprintf(MSG_084, old_c32_name[i], old_c32_name[i]),
|
if (MessageBoxExU(hMainDialog, lmprintf(MSG_084, old_c32_name[i], old_c32_name[i]),
|
||||||
lmprintf(MSG_083, old_c32_name[i]), MB_YESNO|MB_ICONWARNING|MB_IS_RTL) == IDYES) {
|
lmprintf(MSG_083, old_c32_name[i]), MB_YESNO|MB_ICONWARNING|MB_IS_RTL, selected_langid) == IDYES) {
|
||||||
static_sprintf(tmp, "%s-%s", syslinux, embedded_sl_version_str[0]);
|
static_sprintf(tmp, "%s-%s", syslinux, embedded_sl_version_str[0]);
|
||||||
IGNORE_RETVAL(_mkdir(tmp));
|
IGNORE_RETVAL(_mkdir(tmp));
|
||||||
static_sprintf(tmp, "%s/%s-%s/%s", FILES_URL, syslinux, embedded_sl_version_str[0], old_c32_name[i]);
|
static_sprintf(tmp, "%s/%s-%s/%s", FILES_URL, syslinux, embedded_sl_version_str[0], old_c32_name[i]);
|
||||||
|
@ -1458,9 +1460,9 @@ static BOOL BootCheck(void)
|
||||||
ldlinux, ldlinux_ext[0], ldlinux, ldlinux_ext[1], FILES_DIR, syslinux,
|
ldlinux, ldlinux_ext[0], ldlinux, ldlinux_ext[1], FILES_DIR, syslinux,
|
||||||
img_report.sl_version_str, img_report.sl_version_ext);
|
img_report.sl_version_str, img_report.sl_version_ext);
|
||||||
} else {
|
} else {
|
||||||
r = MessageBoxU(hMainDialog, lmprintf(MSG_114, img_report.sl_version_str, img_report.sl_version_ext,
|
r = MessageBoxExU(hMainDialog, lmprintf(MSG_114, img_report.sl_version_str, img_report.sl_version_ext,
|
||||||
embedded_sl_version_str[1], embedded_sl_version_ext[1]),
|
embedded_sl_version_str[1], embedded_sl_version_ext[1]),
|
||||||
lmprintf(MSG_115), MB_YESNO|MB_ICONWARNING|MB_IS_RTL);
|
lmprintf(MSG_115), MB_YESNO|MB_ICONWARNING|MB_IS_RTL, selected_langid);
|
||||||
if (r != IDYES)
|
if (r != IDYES)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
for (i=0; i<2; i++) {
|
for (i=0; i<2; i++) {
|
||||||
|
@ -1487,7 +1489,7 @@ static BOOL BootCheck(void)
|
||||||
if (syslinux_ldlinux_len[i] != 0) {
|
if (syslinux_ldlinux_len[i] != 0) {
|
||||||
// Duplicate the file so that the user won't be prompted to download again
|
// Duplicate the file so that the user won't be prompted to download again
|
||||||
static_sprintf(tmp, "%s-%s\\%s.%s", syslinux, img_report.sl_version_str, ldlinux, ldlinux_ext[i]);
|
static_sprintf(tmp, "%s-%s\\%s.%s", syslinux, img_report.sl_version_str, ldlinux, ldlinux_ext[i]);
|
||||||
static_sprintf(tmp2, "%s-%s\\%s\\%s.%s", syslinux, img_report.sl_version_str,
|
static_sprintf(tmp2, "%s-%s\\%s\\%s.%s", syslinux, img_report.sl_version_str,
|
||||||
&img_report.sl_version_ext[1], ldlinux, ldlinux_ext[i]);
|
&img_report.sl_version_ext[1], ldlinux, ldlinux_ext[i]);
|
||||||
CopyFileA(tmp, tmp2, FALSE);
|
CopyFileA(tmp, tmp2, FALSE);
|
||||||
}
|
}
|
||||||
|
@ -1513,8 +1515,8 @@ static BOOL BootCheck(void)
|
||||||
static_sprintf(tmp, "%s.%s", ldlinux, ldlinux_ext[2]);
|
static_sprintf(tmp, "%s.%s", ldlinux, ldlinux_ext[2]);
|
||||||
PrintInfo(0, MSG_206, tmp);
|
PrintInfo(0, MSG_206, tmp);
|
||||||
// MSG_104: "Syslinux v5.0 or later requires a '%s' file to be installed"
|
// MSG_104: "Syslinux v5.0 or later requires a '%s' file to be installed"
|
||||||
r = MessageBoxU(hMainDialog, lmprintf(MSG_104, "Syslinux v5.0", tmp, "Syslinux v5+", tmp),
|
r = MessageBoxExU(hMainDialog, lmprintf(MSG_104, "Syslinux v5.0", tmp, "Syslinux v5+", tmp),
|
||||||
lmprintf(MSG_103, tmp), MB_YESNOCANCEL|MB_ICONWARNING|MB_IS_RTL);
|
lmprintf(MSG_103, tmp), MB_YESNOCANCEL|MB_ICONWARNING|MB_IS_RTL, selected_langid);
|
||||||
if (r == IDCANCEL)
|
if (r == IDCANCEL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (r == IDYES) {
|
if (r == IDYES) {
|
||||||
|
@ -1529,7 +1531,7 @@ static BOOL BootCheck(void)
|
||||||
} else if (bt == BT_MSDOS) {
|
} else if (bt == BT_MSDOS) {
|
||||||
if ((size_check) && (ComboBox_GetItemData(hClusterSize, ComboBox_GetCurSel(hClusterSize)) >= 65536)) {
|
if ((size_check) && (ComboBox_GetItemData(hClusterSize, ComboBox_GetCurSel(hClusterSize)) >= 65536)) {
|
||||||
// MS-DOS cannot boot from a drive using a 64 kilobytes Cluster size
|
// MS-DOS cannot boot from a drive using a 64 kilobytes Cluster size
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_110), lmprintf(MSG_111), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_110), lmprintf(MSG_111), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
} else if (bt == BT_GRUB4DOS) {
|
} else if (bt == BT_GRUB4DOS) {
|
||||||
|
@ -1544,8 +1546,8 @@ static BOOL BootCheck(void)
|
||||||
} else {
|
} else {
|
||||||
static_sprintf(tmp, "grldr");
|
static_sprintf(tmp, "grldr");
|
||||||
PrintInfo(0, MSG_206, tmp);
|
PrintInfo(0, MSG_206, tmp);
|
||||||
r = MessageBoxU(hMainDialog, lmprintf(MSG_104, "Grub4DOS 0.4", tmp, "Grub4DOS", tmp),
|
r = MessageBoxExU(hMainDialog, lmprintf(MSG_104, "Grub4DOS 0.4", tmp, "Grub4DOS", tmp),
|
||||||
lmprintf(MSG_103, tmp), MB_YESNOCANCEL|MB_ICONWARNING|MB_IS_RTL);
|
lmprintf(MSG_103, tmp), MB_YESNOCANCEL|MB_ICONWARNING|MB_IS_RTL, selected_langid);
|
||||||
if (r == IDCANCEL)
|
if (r == IDCANCEL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (r == IDYES) {
|
if (r == IDYES) {
|
||||||
|
@ -1561,7 +1563,7 @@ static BOOL BootCheck(void)
|
||||||
} else if (bt == BT_UEFI_NTFS) {
|
} else if (bt == BT_UEFI_NTFS) {
|
||||||
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
||||||
if (fs != FS_NTFS) {
|
if (fs != FS_NTFS) {
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_097, "UEFI:NTFS"), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_097, "UEFI:NTFS"), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1743,7 +1745,7 @@ void InitDialog(HWND hDlg)
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, lmprintf(MSG_095)), BT_IMG));
|
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, lmprintf(MSG_095)), BT_IMG));
|
||||||
SetComboEntry(hBootType, selection_default);
|
SetComboEntry(hBootType, selection_default);
|
||||||
// Fill up the MBR masqueraded disk IDs ("8 disks should be enough for anybody")
|
// Fill up the MBR masqueraded disk IDs ("8 disks should be enough for anybody")
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hDiskID, ComboBox_AddStringU(hDiskID, lmprintf(MSG_030, LEFT_TO_RIGHT_MARK "0x80")), 0x80));
|
IGNORE_RETVAL(ComboBox_SetItemData(hDiskID, ComboBox_AddStringU(hDiskID, lmprintf(MSG_030, LEFT_TO_RIGHT_EMBEDDING "0x80" POP_DIRECTIONAL_FORMATTING)), 0x80));
|
||||||
for (i=1; i<=7; i++) {
|
for (i=1; i<=7; i++) {
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hDiskID, ComboBox_AddStringU(hDiskID, lmprintf(MSG_109, 0x80+i, i+1)), 0x80+i));
|
IGNORE_RETVAL(ComboBox_SetItemData(hDiskID, ComboBox_AddStringU(hDiskID, lmprintf(MSG_109, 0x80+i, i+1)), 0x80+i));
|
||||||
}
|
}
|
||||||
|
@ -1794,7 +1796,7 @@ void InitDialog(HWND hDlg)
|
||||||
tbLangToolbarButtons[0].fsState = TBSTATE_ENABLED;
|
tbLangToolbarButtons[0].fsState = TBSTATE_ENABLED;
|
||||||
SendMessage(hLangToolbar, TB_ADDBUTTONS, (WPARAM)1, (LPARAM)&tbLangToolbarButtons); // Add just the 1 button
|
SendMessage(hLangToolbar, TB_ADDBUTTONS, (WPARAM)1, (LPARAM)&tbLangToolbarButtons); // Add just the 1 button
|
||||||
SendMessage(hLangToolbar, TB_GETRECT, lang_button_id, (LPARAM)&rcToolbarButton);
|
SendMessage(hLangToolbar, TB_GETRECT, lang_button_id, (LPARAM)&rcToolbarButton);
|
||||||
|
|
||||||
// Make the toolbar window just big enough to hold the button
|
// Make the toolbar window just big enough to hold the button
|
||||||
// Set the top margin to 4 DIPs and the right margin so that it's aligned with the Device List Combobox
|
// Set the top margin to 4 DIPs and the right margin so that it's aligned with the Device List Combobox
|
||||||
GetWindowRect(hDeviceList, &rcDeviceList);
|
GetWindowRect(hDeviceList, &rcDeviceList);
|
||||||
|
@ -1919,7 +1921,7 @@ void ShowLanguageMenu(RECT rcExclude)
|
||||||
str = safe_strdup(lcmd->txt[1]);
|
str = safe_strdup(lcmd->txt[1]);
|
||||||
l = strtok(str, search);
|
l = strtok(str, search);
|
||||||
r = strtok(NULL, search);
|
r = strtok(NULL, search);
|
||||||
static_sprintf(lang, LEFT_TO_RIGHT_MARK "(%s) " LEFT_TO_RIGHT_MARK "%s", r, l);
|
static_sprintf(lang, LEFT_TO_RIGHT_EMBEDDING "(%s) " POP_DIRECTIONAL_FORMATTING "%s", r, l);
|
||||||
safe_free(str);
|
safe_free(str);
|
||||||
} else {
|
} else {
|
||||||
safe_strcpy(lang, sizeof(lang), lcmd->txt[1]);
|
safe_strcpy(lang, sizeof(lang), lcmd->txt[1]);
|
||||||
|
@ -2051,6 +2053,7 @@ void SaveVHD(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Main dialog callback
|
* Main dialog callback
|
||||||
*/
|
*/
|
||||||
|
@ -2186,6 +2189,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
if (i++ == selected_language) {
|
if (i++ == selected_language) {
|
||||||
if (selected_locale != lcmd) {
|
if (selected_locale != lcmd) {
|
||||||
selected_locale = lcmd;
|
selected_locale = lcmd;
|
||||||
|
selected_langid = get_language_id(lcmd);
|
||||||
relaunch = TRUE;
|
relaunch = TRUE;
|
||||||
PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
|
PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
|
||||||
}
|
}
|
||||||
|
@ -2199,8 +2203,8 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
PF_INIT(SHChangeNotifyDeregister, Shell32);
|
PF_INIT(SHChangeNotifyDeregister, Shell32);
|
||||||
EnableWindow(GetDlgItem(hDlg, IDCANCEL), FALSE);
|
EnableWindow(GetDlgItem(hDlg, IDCANCEL), FALSE);
|
||||||
if (format_thid != NULL) {
|
if (format_thid != NULL) {
|
||||||
if ((no_confirmation_on_cancel) || (MessageBoxU(hMainDialog, lmprintf(MSG_105), lmprintf(MSG_049),
|
if ((no_confirmation_on_cancel) || (MessageBoxExU(hMainDialog, lmprintf(MSG_105), lmprintf(MSG_049),
|
||||||
MB_YESNO|MB_ICONWARNING|MB_IS_RTL) == IDYES)) {
|
MB_YESNO|MB_ICONWARNING|MB_IS_RTL, selected_langid) == IDYES)) {
|
||||||
// Operation may have completed in the meantime
|
// Operation may have completed in the meantime
|
||||||
if (format_thid != NULL) {
|
if (format_thid != NULL) {
|
||||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANCELLED;
|
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANCELLED;
|
||||||
|
@ -2246,7 +2250,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
Point.x = max(DialogRect.left - offset - nWidth, 0);
|
Point.x = max(DialogRect.left - offset - nWidth, 0);
|
||||||
else
|
else
|
||||||
Point.x = min(DialogRect.right + offset, DesktopRect.right - nWidth);
|
Point.x = min(DialogRect.right + offset, DesktopRect.right - nWidth);
|
||||||
|
|
||||||
Point.y = max(DialogRect.top, DesktopRect.top - nHeight);
|
Point.y = max(DialogRect.top, DesktopRect.top - nHeight);
|
||||||
MoveWindow(hLogDlg, Point.x, Point.y, nWidth, nHeight, FALSE);
|
MoveWindow(hLogDlg, Point.x, Point.y, nWidth, nHeight, FALSE);
|
||||||
// The log may have been recentered to fit the screen, in which case, try to shift our main dialog left (or right for RTL)
|
// The log may have been recentered to fit the screen, in which case, try to shift our main dialog left (or right for RTL)
|
||||||
|
@ -2463,7 +2467,8 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
if (dur_secs > UDF_FORMAT_WARN) {
|
if (dur_secs > UDF_FORMAT_WARN) {
|
||||||
dur_mins = dur_secs/60;
|
dur_mins = dur_secs/60;
|
||||||
dur_secs -= dur_mins*60;
|
dur_secs -= dur_mins*60;
|
||||||
MessageBoxU(hMainDialog, lmprintf(MSG_112, dur_mins, dur_secs), lmprintf(MSG_113), MB_OK|MB_ICONASTERISK|MB_IS_RTL);
|
MessageBoxExU(hMainDialog, lmprintf(MSG_112, dur_mins, dur_secs), lmprintf(MSG_113),
|
||||||
|
MB_OK|MB_ICONASTERISK|MB_IS_RTL, selected_langid);
|
||||||
} else {
|
} else {
|
||||||
dur_secs = 0;
|
dur_secs = 0;
|
||||||
dur_mins = 0;
|
dur_mins = 0;
|
||||||
|
@ -2487,19 +2492,19 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
}
|
}
|
||||||
|
|
||||||
GetWindowTextU(hDeviceList, tmp, ARRAYSIZE(tmp));
|
GetWindowTextU(hDeviceList, tmp, ARRAYSIZE(tmp));
|
||||||
if (MessageBoxU(hMainDialog, lmprintf(MSG_003, tmp),
|
if (MessageBoxExU(hMainDialog, lmprintf(MSG_003, tmp),
|
||||||
APPLICATION_NAME, MB_OKCANCEL|MB_ICONWARNING|MB_IS_RTL) == IDCANCEL) {
|
APPLICATION_NAME, MB_OKCANCEL|MB_ICONWARNING|MB_IS_RTL, selected_langid) == IDCANCEL) {
|
||||||
format_op_in_progress = FALSE;
|
format_op_in_progress = FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ((SelectedDrive.nPartitions > 1) && (MessageBoxU(hMainDialog, lmprintf(MSG_093),
|
if ((SelectedDrive.nPartitions > 1) && (MessageBoxExU(hMainDialog, lmprintf(MSG_093),
|
||||||
lmprintf(MSG_094), MB_OKCANCEL|MB_ICONWARNING|MB_IS_RTL) == IDCANCEL)) {
|
lmprintf(MSG_094), MB_OKCANCEL|MB_ICONWARNING|MB_IS_RTL, selected_langid) == IDCANCEL)) {
|
||||||
format_op_in_progress = FALSE;
|
format_op_in_progress = FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ((IsChecked(IDC_BOOT)) && (SelectedDrive.Geometry.BytesPerSector != 512) &&
|
if ((IsChecked(IDC_BOOT)) && (SelectedDrive.Geometry.BytesPerSector != 512) &&
|
||||||
(MessageBoxU(hMainDialog, lmprintf(MSG_196, SelectedDrive.Geometry.BytesPerSector),
|
(MessageBoxExU(hMainDialog, lmprintf(MSG_196, SelectedDrive.Geometry.BytesPerSector),
|
||||||
lmprintf(MSG_197), MB_OKCANCEL|MB_ICONWARNING|MB_IS_RTL) == IDCANCEL)) {
|
lmprintf(MSG_197), MB_OKCANCEL|MB_ICONWARNING|MB_IS_RTL, selected_langid) == IDCANCEL)) {
|
||||||
format_op_in_progress = FALSE;
|
format_op_in_progress = FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2561,7 +2566,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
switch (((LPNMHDR)lParam)->code) {
|
switch (((LPNMHDR)lParam)->code) {
|
||||||
case TBN_DROPDOWN:
|
case TBN_DROPDOWN:
|
||||||
lpnmtb = (LPNMTOOLBAR)lParam;
|
lpnmtb = (LPNMTOOLBAR)lParam;
|
||||||
|
|
||||||
// We only care about the language button on the language toolbar
|
// We only care about the language button on the language toolbar
|
||||||
if (lpnmtb->hdr.hwndFrom == hLangToolbar
|
if (lpnmtb->hdr.hwndFrom == hLangToolbar
|
||||||
&& lpnmtb->iItem == lang_button_id) {
|
&& lpnmtb->iItem == lang_button_id) {
|
||||||
|
@ -2597,7 +2602,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
}
|
}
|
||||||
SetTaskbarProgressState(TASKBAR_NORMAL);
|
SetTaskbarProgressState(TASKBAR_NORMAL);
|
||||||
SetTaskbarProgressValue(0, MAX_PROGRESS);
|
SetTaskbarProgressValue(0, MAX_PROGRESS);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UM_PROGRESS_EXIT:
|
case UM_PROGRESS_EXIT:
|
||||||
|
@ -2853,7 +2858,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
// Sysnative and System32 are the same
|
// Sysnative and System32 are the same
|
||||||
safe_strcpy(sysnative_dir, sizeof(sysnative_dir), system_dir);
|
safe_strcpy(sysnative_dir, sizeof(sysnative_dir), system_dir);
|
||||||
// But if the app is 32 bit and the OS is 64 bit, Sysnative must differ from System32
|
// But if the app is 32 bit and the OS is 64 bit, Sysnative must differ from System32
|
||||||
#if (!defined(_WIN64) && !defined(BUILD64))
|
#if (!defined(_WIN64) && !defined(BUILD64))
|
||||||
if (is_x64()) {
|
if (is_x64()) {
|
||||||
if (GetSystemWindowsDirectoryU(sysnative_dir, sizeof(sysnative_dir)) == 0) {
|
if (GetSystemWindowsDirectoryU(sysnative_dir, sizeof(sysnative_dir)) == 0) {
|
||||||
uprintf("Could not get Windows directory: %s", WindowsErrorString());
|
uprintf("Could not get Windows directory: %s", WindowsErrorString());
|
||||||
|
@ -2897,6 +2902,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
|
|
||||||
// Init localization
|
// Init localization
|
||||||
init_localization();
|
init_localization();
|
||||||
|
|
||||||
// Seek for a loc file in the current directory
|
// Seek for a loc file in the current directory
|
||||||
if (GetFileAttributesU(rufus_loc) == INVALID_FILE_ATTRIBUTES) {
|
if (GetFileAttributesU(rufus_loc) == INVALID_FILE_ATTRIBUTES) {
|
||||||
uprintf("loc file not found in current directory - embedded one will be used");
|
uprintf("loc file not found in current directory - embedded one will be used");
|
||||||
|
@ -2928,9 +2934,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
|| ((selected_locale = ((locale_name == NULL)?get_locale_from_lcid(lcid, TRUE):get_locale_from_name(locale_name, TRUE))) == NULL) ) {
|
|| ((selected_locale = ((locale_name == NULL)?get_locale_from_lcid(lcid, TRUE):get_locale_from_name(locale_name, TRUE))) == NULL) ) {
|
||||||
uprintf("FATAL: Could not access locale!\n");
|
uprintf("FATAL: Could not access locale!\n");
|
||||||
MessageBoxU(NULL, "The locale data is missing or invalid. This application will now exit.",
|
MessageBoxU(NULL, "The locale data is missing or invalid. This application will now exit.",
|
||||||
"Fatal error", MB_ICONSTOP|MB_IS_RTL|MB_SYSTEMMODAL);
|
"Fatal error", MB_ICONSTOP|MB_SYSTEMMODAL);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
selected_langid = get_language_id(selected_locale);
|
||||||
|
|
||||||
// Prevent 2 applications from running at the same time, unless "/W" is passed as an option
|
// Prevent 2 applications from running at the same time, unless "/W" is passed as an option
|
||||||
// in which case we wait for the mutex to be relinquished
|
// in which case we wait for the mutex to be relinquished
|
||||||
|
@ -2945,8 +2952,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
if ((mutex == NULL) || (GetLastError() == ERROR_ALREADY_EXISTS)) {
|
if ((mutex == NULL) || (GetLastError() == ERROR_ALREADY_EXISTS)) {
|
||||||
// Load the translation before we print the error
|
// Load the translation before we print the error
|
||||||
get_loc_data_file(loc_file, selected_locale);
|
get_loc_data_file(loc_file, selected_locale);
|
||||||
|
right_to_left_mode = ((selected_locale->ctrl_id) & LOC_RIGHT_TO_LEFT);
|
||||||
// Set MB_SYSTEMMODAL to prevent Far Manager from stealing focus...
|
// Set MB_SYSTEMMODAL to prevent Far Manager from stealing focus...
|
||||||
MessageBoxU(NULL, lmprintf(MSG_002), lmprintf(MSG_001), MB_ICONSTOP|MB_IS_RTL|MB_SYSTEMMODAL);
|
MessageBoxExU(NULL, lmprintf(MSG_002), lmprintf(MSG_001), MB_ICONSTOP|MB_IS_RTL|MB_SYSTEMMODAL, selected_langid);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2993,7 +3001,8 @@ relaunch:
|
||||||
*/
|
*/
|
||||||
hDlg = MyCreateDialog(hInstance, IDD_DIALOG, NULL, MainCallback);
|
hDlg = MyCreateDialog(hInstance, IDD_DIALOG, NULL, MainCallback);
|
||||||
if (hDlg == NULL) {
|
if (hDlg == NULL) {
|
||||||
MessageBoxU(NULL, "Could not create Window", "DialogBox failure", MB_ICONSTOP|MB_IS_RTL|MB_SYSTEMMODAL);
|
MessageBoxExU(NULL, "Could not create Window", "DialogBox failure",
|
||||||
|
MB_ICONSTOP|MB_IS_RTL|MB_SYSTEMMODAL, selected_langid);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if ((relaunch_rc.left > -65536) && (relaunch_rc.top > -65536))
|
if ((relaunch_rc.left > -65536) && (relaunch_rc.top > -65536))
|
||||||
|
@ -3005,7 +3014,7 @@ relaunch:
|
||||||
while(GetMessage(&msg, NULL, 0, 0)) {
|
while(GetMessage(&msg, NULL, 0, 0)) {
|
||||||
|
|
||||||
// Ctrl-A => Select the log data
|
// Ctrl-A => Select the log data
|
||||||
if ( (IsWindowVisible(hLogDlg)) && (GetKeyState(VK_CONTROL) & 0x8000) &&
|
if ( (IsWindowVisible(hLogDlg)) && (GetKeyState(VK_CONTROL) & 0x8000) &&
|
||||||
(msg.message == WM_KEYDOWN) && (msg.wParam == 'A') ) {
|
(msg.message == WM_KEYDOWN) && (msg.wParam == 'A') ) {
|
||||||
// Might also need ES_NOHIDESEL property if you want to select when not active
|
// Might also need ES_NOHIDESEL property if you want to select when not active
|
||||||
SendMessage(hLog, EM_SETSEL, 0, -1);
|
SendMessage(hLog, EM_SETSEL, 0, -1);
|
||||||
|
|
13
src/rufus.h
13
src/rufus.h
|
@ -41,8 +41,12 @@
|
||||||
#define APPLICATION_NAME "Rufus"
|
#define APPLICATION_NAME "Rufus"
|
||||||
#define COMPANY_NAME "Akeo Consulting"
|
#define COMPANY_NAME "Akeo Consulting"
|
||||||
#define STR_NO_LABEL "NO_LABEL"
|
#define STR_NO_LABEL "NO_LABEL"
|
||||||
#define LEFT_TO_RIGHT_MARK "" // Yes, there is a character between the quotes!
|
// Yes, there is a character between these seemingly empty quotes!
|
||||||
#define RIGHT_TO_LEFT_MARK "" // Yes, there is a character between the quotes!
|
#define LEFT_TO_RIGHT_MARK ""
|
||||||
|
#define RIGHT_TO_LEFT_MARK ""
|
||||||
|
#define LEFT_TO_RIGHT_EMBEDDING ""
|
||||||
|
#define RIGHT_TO_LEFT_EMBEDDING ""
|
||||||
|
#define POP_DIRECTIONAL_FORMATTING ""
|
||||||
#define DRIVE_ACCESS_TIMEOUT 15000 // How long we should retry drive access (in ms)
|
#define DRIVE_ACCESS_TIMEOUT 15000 // How long we should retry drive access (in ms)
|
||||||
#define DRIVE_ACCESS_RETRIES 60 // How many times we should retry
|
#define DRIVE_ACCESS_RETRIES 60 // How many times we should retry
|
||||||
#define DRIVE_INDEX_MIN 0x00000080
|
#define DRIVE_INDEX_MIN 0x00000080
|
||||||
|
@ -81,7 +85,7 @@
|
||||||
#define STRINGIFY(x) #x
|
#define STRINGIFY(x) #x
|
||||||
#endif
|
#endif
|
||||||
#define IsChecked(CheckBox_ID) (IsDlgButtonChecked(hMainDialog, CheckBox_ID) == BST_CHECKED)
|
#define IsChecked(CheckBox_ID) (IsDlgButtonChecked(hMainDialog, CheckBox_ID) == BST_CHECKED)
|
||||||
#define MB_IS_RTL (right_to_left_mode?MB_RTLREADING:0)
|
#define MB_IS_RTL (right_to_left_mode?MB_RTLREADING|MB_RIGHT:0)
|
||||||
#define CHECK_FOR_USER_CANCEL if (IS_ERROR(FormatStatus)) goto out
|
#define CHECK_FOR_USER_CANCEL if (IS_ERROR(FormatStatus)) goto out
|
||||||
|
|
||||||
#define safe_free(p) do {free((void*)p); p = NULL;} while(0)
|
#define safe_free(p) do {free((void*)p); p = NULL;} while(0)
|
||||||
|
@ -317,7 +321,7 @@ typedef struct ext_t {
|
||||||
} ext_t;
|
} ext_t;
|
||||||
|
|
||||||
#ifndef __VA_GROUP__
|
#ifndef __VA_GROUP__
|
||||||
#define __VA_GROUP__(...) __VA_ARGS__
|
#define __VA_GROUP__(...) __VA_ARGS__
|
||||||
#endif
|
#endif
|
||||||
#define EXT_X(prefix, ...) const char* _##prefix##_x[] = { __VA_ARGS__ }
|
#define EXT_X(prefix, ...) const char* _##prefix##_x[] = { __VA_ARGS__ }
|
||||||
#define EXT_D(prefix, ...) const char* _##prefix##_d[] = { __VA_ARGS__ }
|
#define EXT_D(prefix, ...) const char* _##prefix##_d[] = { __VA_ARGS__ }
|
||||||
|
@ -377,6 +381,7 @@ extern char WindowsVersionStr[128];
|
||||||
extern char embedded_sl_version_str[2][12];
|
extern char embedded_sl_version_str[2][12];
|
||||||
extern RUFUS_UPDATE update;
|
extern RUFUS_UPDATE update;
|
||||||
extern int dialog_showing;
|
extern int dialog_showing;
|
||||||
|
extern WORD selected_langid;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Shared prototypes
|
* Shared prototypes
|
||||||
|
|
10
src/rufus.rc
10
src/rufus.rc
|
@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
|
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 242, 376
|
IDD_DIALOG DIALOGEX 12, 12, 242, 376
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Rufus 2.5.779"
|
CAPTION "Rufus 2.5.780"
|
||||||
FONT 8, "Segoe UI Symbol", 400, 0, 0x0
|
FONT 8, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Device",IDS_DEVICE_TXT,9,6,200,8
|
LTEXT "Device",IDS_DEVICE_TXT,9,6,200,8
|
||||||
|
@ -319,8 +319,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 2,5,779,0
|
FILEVERSION 2,5,780,0
|
||||||
PRODUCTVERSION 2,5,779,0
|
PRODUCTVERSION 2,5,780,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -337,13 +337,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "2.5.779"
|
VALUE "FileVersion", "2.5.780"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2015 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2015 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus.exe"
|
VALUE "OriginalFilename", "rufus.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "2.5.779"
|
VALUE "ProductVersion", "2.5.780"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
16
src/stdlg.c
16
src/stdlg.c
|
@ -469,8 +469,8 @@ void CreateStatusBar(void)
|
||||||
SendMessage(hStatusToolbar, WM_SETFONT, (WPARAM)hFont, TRUE);
|
SendMessage(hStatusToolbar, WM_SETFONT, (WPARAM)hFont, TRUE);
|
||||||
SendMessage(hStatusToolbar, TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_MIXEDBUTTONS);
|
SendMessage(hStatusToolbar, TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_MIXEDBUTTONS);
|
||||||
SendMessage(hStatusToolbar, TB_SETIMAGELIST, 0, (LPARAM)NULL);
|
SendMessage(hStatusToolbar, TB_SETIMAGELIST, 0, (LPARAM)NULL);
|
||||||
SendMessage(hStatusToolbar, TB_SETDISABLEDIMAGELIST, 0, (LPARAM)NULL);
|
SendMessage(hStatusToolbar, TB_SETDISABLEDIMAGELIST, 0, (LPARAM)NULL);
|
||||||
SendMessage(hStatusToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(0,0));
|
SendMessage(hStatusToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(0,0));
|
||||||
|
|
||||||
// Set our text
|
// Set our text
|
||||||
memset(tbbStatusToolbarButtons, 0, sizeof(TBBUTTON));
|
memset(tbbStatusToolbarButtons, 0, sizeof(TBBUTTON));
|
||||||
|
@ -1094,7 +1094,7 @@ BOOL IsShown(HWND hDlg)
|
||||||
|
|
||||||
/* Compute the width of a dropdown list entry */
|
/* Compute the width of a dropdown list entry */
|
||||||
LONG GetEntryWidth(HWND hDropDown, const char *entry)
|
LONG GetEntryWidth(HWND hDropDown, const char *entry)
|
||||||
{
|
{
|
||||||
HDC hDC;
|
HDC hDC;
|
||||||
HFONT hFont, hDefFont = NULL;
|
HFONT hFont, hDefFont = NULL;
|
||||||
SIZE size;
|
SIZE size;
|
||||||
|
@ -1103,7 +1103,7 @@ LONG GetEntryWidth(HWND hDropDown, const char *entry)
|
||||||
hFont = (HFONT)SendMessage(hDropDown, WM_GETFONT, 0, 0);
|
hFont = (HFONT)SendMessage(hDropDown, WM_GETFONT, 0, 0);
|
||||||
if (hFont != NULL)
|
if (hFont != NULL)
|
||||||
hDefFont = (HFONT)SelectObject(hDC, hFont);
|
hDefFont = (HFONT)SelectObject(hDC, hFont);
|
||||||
|
|
||||||
if (!GetTextExtentPointU(hDC, entry, &size))
|
if (!GetTextExtentPointU(hDC, entry, &size))
|
||||||
size.cx = 0;
|
size.cx = 0;
|
||||||
|
|
||||||
|
@ -1193,9 +1193,9 @@ DECLARE_INTERFACE_(my_ITaskbarList3, IUnknown) {
|
||||||
STDMETHOD (SetThumbnailTooltip) (THIS_ HWND hwnd, LPCWSTR pszTip) PURE;
|
STDMETHOD (SetThumbnailTooltip) (THIS_ HWND hwnd, LPCWSTR pszTip) PURE;
|
||||||
STDMETHOD (SetThumbnailClip) (THIS_ HWND hwnd, RECT *prcClip) PURE;
|
STDMETHOD (SetThumbnailClip) (THIS_ HWND hwnd, RECT *prcClip) PURE;
|
||||||
};
|
};
|
||||||
const IID my_IID_ITaskbarList3 =
|
const IID my_IID_ITaskbarList3 =
|
||||||
{ 0xea1afb91, 0x9e28, 0x4b86, { 0x90, 0xe9, 0x9e, 0x9f, 0x8a, 0x5e, 0xef, 0xaf } };
|
{ 0xea1afb91, 0x9e28, 0x4b86, { 0x90, 0xe9, 0x9e, 0x9f, 0x8a, 0x5e, 0xef, 0xaf } };
|
||||||
const IID my_CLSID_TaskbarList =
|
const IID my_CLSID_TaskbarList =
|
||||||
{ 0x56fdf344, 0xfd6d, 0x11d0, { 0x95, 0x8a ,0x0, 0x60, 0x97, 0xc9, 0xa0 ,0x90 } };
|
{ 0x56fdf344, 0xfd6d, 0x11d0, { 0x95, 0x8a ,0x0, 0x60, 0x97, 0xc9, 0xa0 ,0x90 } };
|
||||||
|
|
||||||
static my_ITaskbarList3* ptbl = NULL;
|
static my_ITaskbarList3* ptbl = NULL;
|
||||||
|
@ -1299,7 +1299,7 @@ INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM l
|
||||||
GetWindowRect(hPolicy, &rect);
|
GetWindowRect(hPolicy, &rect);
|
||||||
dy = rect.bottom - rect.top;
|
dy = rect.bottom - rect.top;
|
||||||
rsz = (REQRESIZE *)lParam;
|
rsz = (REQRESIZE *)lParam;
|
||||||
dy -= rsz->rc.bottom - rsz->rc.top + 6; // add the border
|
dy -= rsz->rc.bottom - rsz->rc.top + 6; // add the border
|
||||||
ResizeMoveCtrl(hDlg, hDlg, 0, 0, 0, -dy, 1.0f);
|
ResizeMoveCtrl(hDlg, hDlg, 0, 0, 0, -dy, 1.0f);
|
||||||
ResizeMoveCtrl(hDlg, hPolicy, 0, 0, 0, -dy, 1.0f);
|
ResizeMoveCtrl(hDlg, hPolicy, 0, 0, 0, -dy, 1.0f);
|
||||||
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDS_UPDATE_SETTINGS_GRP), 0, -dy, 0, 0, 1.0f);
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDS_UPDATE_SETTINGS_GRP), 0, -dy, 0, 0, 1.0f);
|
||||||
|
@ -1458,7 +1458,7 @@ INT_PTR CALLBACK NewVersionCallback(HWND hDlg, UINT message, WPARAM wParam, LPAR
|
||||||
SendMessageA(hNotes, EM_SETTEXTEX, (WPARAM)&friggin_microsoft_unicode_amateurs, (LPARAM)update.release_notes);
|
SendMessageA(hNotes, EM_SETTEXTEX, (WPARAM)&friggin_microsoft_unicode_amateurs, (LPARAM)update.release_notes);
|
||||||
SendMessage(hNotes, EM_SETSEL, -1, -1);
|
SendMessage(hNotes, EM_SETSEL, -1, -1);
|
||||||
SendMessage(hNotes, EM_SETEVENTMASK, 0, ENM_LINK);
|
SendMessage(hNotes, EM_SETEVENTMASK, 0, ENM_LINK);
|
||||||
SetWindowTextU(GetDlgItem(hDlg, IDC_YOUR_VERSION), lmprintf(MSG_018,
|
SetWindowTextU(GetDlgItem(hDlg, IDC_YOUR_VERSION), lmprintf(MSG_018,
|
||||||
rufus_version[0], rufus_version[1], rufus_version[2]));
|
rufus_version[0], rufus_version[1], rufus_version[2]));
|
||||||
SetWindowTextU(GetDlgItem(hDlg, IDC_LATEST_VERSION), lmprintf(MSG_019,
|
SetWindowTextU(GetDlgItem(hDlg, IDC_LATEST_VERSION), lmprintf(MSG_019,
|
||||||
update.version[0], update.version[1], update.version[2]));
|
update.version[0], update.version[1], update.version[2]));
|
||||||
|
|
Loading…
Reference in a new issue