mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[ui] prompt users how they want to write ISOHybrid images
* Closes #543 * Also update localization messages and image analysis report
This commit is contained in:
parent
1106c22acc
commit
fb09802c0f
12 changed files with 298 additions and 64 deletions
|
@ -15,6 +15,19 @@ content. PLEASE, do not just look at this Changelog when updating your
|
||||||
translation, but always use the English section of rufus.loc as your base.
|
translation, but always use the English section of rufus.loc as your base.
|
||||||
For instance, MSG_114, that was introduced in v1.0.8 is MORE than one line!
|
For instance, MSG_114, that was introduced in v1.0.8 is MORE than one line!
|
||||||
|
|
||||||
|
o Upcoming changes for Rufus 2.4 (TRANSLATORS, PLEASE DO NOT START WORKING ON THOSE UNTIL ADVISED TO DO SO!!!)
|
||||||
|
- Changed MSG_081 "Unsupported ISO" -> "Unsupported image"
|
||||||
|
- Changed MSG_082 -> "This image is either non-bootable, or uses a boot/compression method that is unsupported by Rufus..."
|
||||||
|
- *NEW* MSG_269 "Preserve timestamps" (use the Alt-T cheat mode to see this message)
|
||||||
|
- *NEW* MSG_270 "USB debug" (use the Alt-. cheat mode to see this message)
|
||||||
|
- *NEW* MSG_271 "Computing image checksums: %0.1f%% completed"
|
||||||
|
- *NEW* MSG_272 "Compute the SHA1 and MD5 checksums for the selected image"
|
||||||
|
- *NEW* MSG_273 "Change the application language"
|
||||||
|
- *NEW* MSG_274 "ISOHybrid image detected"
|
||||||
|
- *NEW* MSG_275 "The image you have selected is..." [TRANSLATORS: See 'rufus.loc' for the FULL message]
|
||||||
|
- *NEW* MSG_276 "Write in %s mode (Recommended)"
|
||||||
|
- *NEW* MSG_277 "Write in %s mode"
|
||||||
|
|
||||||
o Version 1.0.17 (2015.02.04)
|
o Version 1.0.17 (2015.02.04)
|
||||||
- *NEW CONTROL* IDC_WINDOWS_INSTALL "Standard Windows installation" (Main dialog)
|
- *NEW CONTROL* IDC_WINDOWS_INSTALL "Standard Windows installation" (Main dialog)
|
||||||
- *NEW CONTROL* IDC_WINDOWS_TO_GO "Windows To Go" (Main dialog)
|
- *NEW CONTROL* IDC_WINDOWS_TO_GO "Windows To Go" (Main dialog)
|
||||||
|
|
|
@ -265,9 +265,8 @@ t MSG_080 "Rufus detected that Windows is still flushing its internal buffers on
|
||||||
"Depending on the speed of your USB device, this operation may take a long time to complete, "
|
"Depending on the speed of your USB device, this operation may take a long time to complete, "
|
||||||
"especially for large files.\n\nWe recommend that you let Windows finish, to avoid corruption. "
|
"especially for large files.\n\nWe recommend that you let Windows finish, to avoid corruption. "
|
||||||
"But if you grow tired of waiting, you can just unplug the device..."
|
"But if you grow tired of waiting, you can just unplug the device..."
|
||||||
t MSG_081 "Unsupported ISO"
|
t MSG_081 "Unsupported image"
|
||||||
t MSG_082 "This version of Rufus only supports bootable ISOs based on bootmgr, EFI, Grub4DOS, GRUB 2, "
|
t MSG_082 "This image is either non-bootable, or uses a boot/compression method that is unsupported by Rufus..."
|
||||||
"isolinux, or WinPE.\nThis ISO doesn't appear to use either..."
|
|
||||||
t MSG_083 "Replace %s?"
|
t MSG_083 "Replace %s?"
|
||||||
t MSG_084 "This ISO image seems to use an obsolete version of '%s'.\n"
|
t MSG_084 "This ISO image seems to use an obsolete version of '%s'.\n"
|
||||||
"Boot menus may not display properly because of this.\n\n"
|
"Boot menus may not display properly because of this.\n\n"
|
||||||
|
@ -520,6 +519,18 @@ t MSG_270 "USB debug"
|
||||||
t MSG_271 "Computing image checksums: %0.1f%% completed"
|
t MSG_271 "Computing image checksums: %0.1f%% completed"
|
||||||
t MSG_272 "Compute the SHA1 and MD5 checksums for the selected image"
|
t MSG_272 "Compute the SHA1 and MD5 checksums for the selected image"
|
||||||
t MSG_273 "Change the application language"
|
t MSG_273 "Change the application language"
|
||||||
|
t MSG_274 "ISOHybrid image detected"
|
||||||
|
# '%s' below will be replaced with your translations for MSG_036 ("ISO Image") and MSG_095 ("DD Image")
|
||||||
|
t MSG_275 "The image you have selected is an 'ISOHybrid' image. This means it can be written either in "
|
||||||
|
"%s (file copy) mode or %s (disk image) mode .\n"
|
||||||
|
"Rufus recommends using %s mode, so that you always have full access to the drive after writing it.\n"
|
||||||
|
"However, if you encounter issues during boot, you can try writing this image again in %s mode.\n\n"
|
||||||
|
"Please select the mode Rufus should use to write this image:"
|
||||||
|
# '%s' below will be replaced with your translation for MSG_036 ("ISO Image")
|
||||||
|
t MSG_276 "Write in %s mode (Recommended)"
|
||||||
|
# '%s' below will be replaced with your translation for MSG_095 ("DD Image")
|
||||||
|
t MSG_277 "Write in %s mode"
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
############################# TRANSLATOR END COPY ##############################
|
############################# TRANSLATOR END COPY ##############################
|
||||||
|
|
40
src/iso.c
40
src/iso.c
|
@ -653,15 +653,19 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan)
|
||||||
const char* basedir[] = { "i386", "minint" };
|
const char* basedir[] = { "i386", "minint" };
|
||||||
const char* tmp_sif = ".\\txtsetup.sif~";
|
const char* tmp_sif = ".\\txtsetup.sif~";
|
||||||
iso_extension_mask_t iso_extension_mask = ISO_EXTENSION_ALL;
|
iso_extension_mask_t iso_extension_mask = ISO_EXTENSION_ALL;
|
||||||
|
char* spacing = " ";
|
||||||
|
|
||||||
if ((!enable_iso) || (src_iso == NULL) || (dest_dir == NULL))
|
if ((!enable_iso) || (src_iso == NULL) || (dest_dir == NULL))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
scan_only = scan;
|
scan_only = scan;
|
||||||
|
if (!scan_only)
|
||||||
|
spacing = "";
|
||||||
cdio_log_set_handler(log_handler);
|
cdio_log_set_handler(log_handler);
|
||||||
psz_extract_dir = dest_dir;
|
psz_extract_dir = dest_dir;
|
||||||
// Change progress style to marquee for scanning
|
// Change progress style to marquee for scanning
|
||||||
if (scan_only) {
|
if (scan_only) {
|
||||||
|
uprintf("ISO analysis:");
|
||||||
SendMessage(hMainDialog, UM_PROGRESS_INIT, PBS_MARQUEE, 0);
|
SendMessage(hMainDialog, UM_PROGRESS_INIT, PBS_MARQUEE, 0);
|
||||||
total_blocks = 0;
|
total_blocks = 0;
|
||||||
memset(&iso_report, 0, sizeof(iso_report));
|
memset(&iso_report, 0, sizeof(iso_report));
|
||||||
|
@ -687,11 +691,11 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan)
|
||||||
p_udf = udf_open(src_iso);
|
p_udf = udf_open(src_iso);
|
||||||
if (p_udf == NULL)
|
if (p_udf == NULL)
|
||||||
goto try_iso;
|
goto try_iso;
|
||||||
uprintf("Disc image is an UDF image\n");
|
uprintf("%sImage is an UDF image", spacing);
|
||||||
|
|
||||||
p_udf_root = udf_get_root(p_udf, true, 0);
|
p_udf_root = udf_get_root(p_udf, true, 0);
|
||||||
if (p_udf_root == NULL) {
|
if (p_udf_root == NULL) {
|
||||||
uprintf("Could not locate UDF root directory\n");
|
uprintf("%sCould not locate UDF root directory", spacing);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (scan_only) {
|
if (scan_only) {
|
||||||
|
@ -714,11 +718,11 @@ try_iso:
|
||||||
|
|
||||||
p_iso = iso9660_open_ext(src_iso, iso_extension_mask);
|
p_iso = iso9660_open_ext(src_iso, iso_extension_mask);
|
||||||
if (p_iso == NULL) {
|
if (p_iso == NULL) {
|
||||||
uprintf("'%s' doesn't look like an ISO image\n", src_iso);
|
uprintf("%s'%s' doesn't look like an ISO image", spacing, src_iso);
|
||||||
r = 1;
|
r = 1;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
uprintf("Disc image is an ISO9660 image\n");
|
uprintf("%sImage is an ISO9660 image", spacing);
|
||||||
i_joliet_level = iso9660_ifs_get_joliet_level(p_iso);
|
i_joliet_level = iso9660_ifs_get_joliet_level(p_iso);
|
||||||
if (scan_only) {
|
if (scan_only) {
|
||||||
if (iso9660_ifs_get_volume_id(p_iso, &tmp)) {
|
if (iso9660_ifs_get_volume_id(p_iso, &tmp)) {
|
||||||
|
@ -728,10 +732,10 @@ try_iso:
|
||||||
iso_report.label[0] = 0;
|
iso_report.label[0] = 0;
|
||||||
} else {
|
} else {
|
||||||
if (iso_extension_mask & (ISO_EXTENSION_JOLIET|ISO_EXTENSION_ROCK_RIDGE))
|
if (iso_extension_mask & (ISO_EXTENSION_JOLIET|ISO_EXTENSION_ROCK_RIDGE))
|
||||||
uprintf("This image will be extracted using %s extensions (if present)",
|
uprintf("%sThis image will be extracted using %s extensions (if present)", spacing,
|
||||||
(iso_extension_mask & ISO_EXTENSION_JOLIET)?"Joliet":"Rock Ridge");
|
(iso_extension_mask & ISO_EXTENSION_JOLIET)?"Joliet":"Rock Ridge");
|
||||||
else
|
else
|
||||||
uprintf("This image will not be extracted using any ISO extensions");
|
uprintf("%sThis image will not be extracted using any ISO extensions", spacing);
|
||||||
}
|
}
|
||||||
r = iso_extract_files(p_iso, "");
|
r = iso_extract_files(p_iso, "");
|
||||||
|
|
||||||
|
@ -771,12 +775,12 @@ out:
|
||||||
if (safe_strlen(iso_report.cfg_path) >= safe_strlen(config_path.String[i]))
|
if (safe_strlen(iso_report.cfg_path) >= safe_strlen(config_path.String[i]))
|
||||||
safe_strcpy(iso_report.cfg_path, sizeof(iso_report.cfg_path), config_path.String[i]);
|
safe_strcpy(iso_report.cfg_path, sizeof(iso_report.cfg_path), config_path.String[i]);
|
||||||
}
|
}
|
||||||
uprintf("Will use '%s' for Syslinux\n", iso_report.cfg_path);
|
uprintf(" Will use '%s' for Syslinux", iso_report.cfg_path);
|
||||||
// Extract all of the isolinux.bin files we found to identify their versions
|
// Extract all of the isolinux.bin files we found to identify their versions
|
||||||
for (i=0; i<isolinux_path.Index; i++) {
|
for (i=0; i<isolinux_path.Index; i++) {
|
||||||
size = (size_t)ExtractISOFile(src_iso, isolinux_path.String[i], dot_isolinux_bin, FILE_ATTRIBUTE_NORMAL);
|
size = (size_t)ExtractISOFile(src_iso, isolinux_path.String[i], dot_isolinux_bin, FILE_ATTRIBUTE_NORMAL);
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
uprintf("Could not access %s\n", isolinux_path.String[i]);
|
uprintf(" Could not access %s", isolinux_path.String[i]);
|
||||||
} else {
|
} else {
|
||||||
buf = (char*)calloc(size, 1);
|
buf = (char*)calloc(size, 1);
|
||||||
if (buf == NULL) break;
|
if (buf == NULL) break;
|
||||||
|
@ -793,7 +797,7 @@ out:
|
||||||
iso_report.sl_version = sl_version;
|
iso_report.sl_version = sl_version;
|
||||||
j = (int)i;
|
j = (int)i;
|
||||||
} else if ((iso_report.sl_version != sl_version) || (safe_strcmp(iso_report.sl_version_ext, ext) != 0)) {
|
} else if ((iso_report.sl_version != sl_version) || (safe_strcmp(iso_report.sl_version_ext, ext) != 0)) {
|
||||||
uprintf("Found conflicting %s versions:\n '%s' (%d.%02d%s) vs '%s' (%d.%02d%s)\n", isolinux_bin,
|
uprintf(" Found conflicting %s versions:\n '%s' (%d.%02d%s) vs '%s' (%d.%02d%s)", isolinux_bin,
|
||||||
isolinux_path.String[j], SL_MAJOR(iso_report.sl_version), SL_MINOR(iso_report.sl_version),
|
isolinux_path.String[j], SL_MAJOR(iso_report.sl_version), SL_MINOR(iso_report.sl_version),
|
||||||
iso_report.sl_version_ext, isolinux_path.String[i], SL_MAJOR(sl_version), SL_MINOR(sl_version), ext);
|
iso_report.sl_version_ext, isolinux_path.String[i], SL_MAJOR(sl_version), SL_MINOR(sl_version), ext);
|
||||||
}
|
}
|
||||||
|
@ -804,17 +808,17 @@ out:
|
||||||
if (iso_report.sl_version != 0) {
|
if (iso_report.sl_version != 0) {
|
||||||
static_sprintf(iso_report.sl_version_str, "%d.%02d",
|
static_sprintf(iso_report.sl_version_str, "%d.%02d",
|
||||||
SL_MAJOR(iso_report.sl_version), SL_MINOR(iso_report.sl_version));
|
SL_MAJOR(iso_report.sl_version), SL_MINOR(iso_report.sl_version));
|
||||||
uprintf("Detected Isolinux version: %s%s (from '%s')",
|
uprintf(" Detected Syslinux version: %s%s (from '%s')",
|
||||||
iso_report.sl_version_str, iso_report.sl_version_ext, isolinux_path.String[j]);
|
iso_report.sl_version_str, iso_report.sl_version_ext, isolinux_path.String[j]);
|
||||||
if ( (has_ldlinux_c32 && (SL_MAJOR(iso_report.sl_version) < 5))
|
if ( (has_ldlinux_c32 && (SL_MAJOR(iso_report.sl_version) < 5))
|
||||||
|| (!has_ldlinux_c32 && (SL_MAJOR(iso_report.sl_version) >= 5)) )
|
|| (!has_ldlinux_c32 && (SL_MAJOR(iso_report.sl_version) >= 5)) )
|
||||||
uprintf("Warning: Conflict between Isolinux version and the presence of ldlinux.c32...\n");
|
uprintf(" Warning: Conflict between Isolinux version and the presence of ldlinux.c32...");
|
||||||
} else {
|
} else {
|
||||||
// Couldn't find a version from isolinux.bin. Force set to the versions we embed
|
// Couldn't find a version from isolinux.bin. Force set to the versions we embed
|
||||||
iso_report.sl_version = embedded_sl_version[has_ldlinux_c32?1:0];
|
iso_report.sl_version = embedded_sl_version[has_ldlinux_c32?1:0];
|
||||||
static_sprintf(iso_report.sl_version_str, "%d.%02d",
|
static_sprintf(iso_report.sl_version_str, "%d.%02d",
|
||||||
SL_MAJOR(iso_report.sl_version), SL_MINOR(iso_report.sl_version));
|
SL_MAJOR(iso_report.sl_version), SL_MINOR(iso_report.sl_version));
|
||||||
uprintf("Warning: Could not detect Isolinux version - Forcing to %s (embedded)",
|
uprintf(" Warning: Could not detect Isolinux version - Forcing to %s (embedded)",
|
||||||
iso_report.sl_version_str);
|
iso_report.sl_version_str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -829,7 +833,7 @@ out:
|
||||||
if (tmp != NULL) {
|
if (tmp != NULL) {
|
||||||
for (i=0; i<strlen(tmp); i++)
|
for (i=0; i<strlen(tmp); i++)
|
||||||
tmp[i] = (char)tolower(tmp[i]);
|
tmp[i] = (char)tolower(tmp[i]);
|
||||||
uprintf("Checking txtsetup.sif:\n OsLoadOptions = %s\n", tmp);
|
uprintf(" Checking txtsetup.sif:\n OsLoadOptions = %s", tmp);
|
||||||
iso_report.uses_minint = (strstr(tmp, "/minint") != NULL);
|
iso_report.uses_minint = (strstr(tmp, "/minint") != NULL);
|
||||||
}
|
}
|
||||||
_unlink(tmp_sif);
|
_unlink(tmp_sif);
|
||||||
|
@ -843,7 +847,7 @@ out:
|
||||||
buf = (char*)calloc(size, 1);
|
buf = (char*)calloc(size, 1);
|
||||||
fd = fopen(path, "rb");
|
fd = fopen(path, "rb");
|
||||||
if ((size == 0) || (buf == NULL) || (fd == NULL)) {
|
if ((size == 0) || (buf == NULL) || (fd == NULL)) {
|
||||||
uprintf("Could not read Grub version from 'boot/grub/i386-pc/normal.mod'");
|
uprintf(" Could not read Grub version from 'boot/grub/i386-pc/normal.mod'");
|
||||||
} else {
|
} else {
|
||||||
fread(buf, 1, size, fd);
|
fread(buf, 1, size, fd);
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
|
@ -853,9 +857,9 @@ out:
|
||||||
_unlink(path);
|
_unlink(path);
|
||||||
}
|
}
|
||||||
if (iso_report.grub2_version[0] != 0)
|
if (iso_report.grub2_version[0] != 0)
|
||||||
uprintf("Detected Grub version: %s", iso_report.grub2_version);
|
uprintf(" Detected Grub version: %s", iso_report.grub2_version);
|
||||||
else {
|
else {
|
||||||
uprintf("Could not detect Grub version");
|
uprintf(" Could not detect Grub version");
|
||||||
iso_report.has_grub2 = FALSE;
|
iso_report.has_grub2 = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -876,7 +880,7 @@ out:
|
||||||
if (fd == NULL) {
|
if (fd == NULL) {
|
||||||
fd = fopen(path, "w"); // No "/syslinux.cfg" => create a new one
|
fd = fopen(path, "w"); // No "/syslinux.cfg" => create a new one
|
||||||
if (fd == NULL) {
|
if (fd == NULL) {
|
||||||
uprintf("Unable to create %s - booting from USB will not work\n", path);
|
uprintf("Unable to create %s - booting from USB will not work", path);
|
||||||
r = 1;
|
r = 1;
|
||||||
} else {
|
} else {
|
||||||
fprintf(fd, "DEFAULT loadconfig\n\nLABEL loadconfig\n CONFIG %s\n", iso_report.cfg_path);
|
fprintf(fd, "DEFAULT loadconfig\n\nLABEL loadconfig\n CONFIG %s\n", iso_report.cfg_path);
|
||||||
|
@ -886,7 +890,7 @@ out:
|
||||||
fprintf(fd, " APPEND %s/\n", iso_report.cfg_path);
|
fprintf(fd, " APPEND %s/\n", iso_report.cfg_path);
|
||||||
iso_report.cfg_path[i] = '/';
|
iso_report.cfg_path[i] = '/';
|
||||||
}
|
}
|
||||||
uprintf("Created: %s\n", path);
|
uprintf("Created: %s", path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fd != NULL)
|
if (fd != NULL)
|
||||||
|
|
|
@ -345,12 +345,12 @@ void apply_localization(int dlg_id, HWND hDlg)
|
||||||
break;
|
break;
|
||||||
case LC_MOVE:
|
case LC_MOVE:
|
||||||
if (hCtrl != NULL) {
|
if (hCtrl != NULL) {
|
||||||
ResizeMoveCtrl(hDlg, hCtrl, lcmd->num[0], lcmd->num[1], 0, 0);
|
ResizeMoveCtrl(hDlg, hCtrl, lcmd->num[0], lcmd->num[1], 0, 0, fScale);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LC_SIZE:
|
case LC_SIZE:
|
||||||
if (hCtrl != NULL) {
|
if (hCtrl != NULL) {
|
||||||
ResizeMoveCtrl(hDlg, hCtrl, 0, 0, lcmd->num[0], lcmd->num[1]);
|
ResizeMoveCtrl(hDlg, hCtrl, 0, 0, lcmd->num[0], lcmd->num[1], fScale);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ const loc_control_id control_id[] = {
|
||||||
LOC_CTRL(IDD_DIALOG),
|
LOC_CTRL(IDD_DIALOG),
|
||||||
LOC_CTRL(IDD_ABOUTBOX),
|
LOC_CTRL(IDD_ABOUTBOX),
|
||||||
LOC_CTRL(IDD_NOTIFICATION),
|
LOC_CTRL(IDD_NOTIFICATION),
|
||||||
|
LOC_CTRL(IDD_SELECTION),
|
||||||
LOC_CTRL(IDD_LICENSE),
|
LOC_CTRL(IDD_LICENSE),
|
||||||
LOC_CTRL(IDD_LOG),
|
LOC_CTRL(IDD_LOG),
|
||||||
LOC_CTRL(IDD_UPDATE_POLICY),
|
LOC_CTRL(IDD_UPDATE_POLICY),
|
||||||
|
@ -89,6 +90,11 @@ const loc_control_id control_id[] = {
|
||||||
LOC_CTRL(IDC_DOWNLOAD_URL),
|
LOC_CTRL(IDC_DOWNLOAD_URL),
|
||||||
LOC_CTRL(IDC_MD5),
|
LOC_CTRL(IDC_MD5),
|
||||||
LOC_CTRL(IDC_SHA1),
|
LOC_CTRL(IDC_SHA1),
|
||||||
|
LOC_CTRL(IDC_SELECTION_ICON),
|
||||||
|
LOC_CTRL(IDC_SELECTION_TEXT),
|
||||||
|
LOC_CTRL(IDC_SELECTION_LINE),
|
||||||
|
LOC_CTRL(IDC_SELECTION_CHOICE1),
|
||||||
|
LOC_CTRL(IDC_SELECTION_CHOICE2),
|
||||||
LOC_CTRL(IDS_DEVICE_TXT),
|
LOC_CTRL(IDS_DEVICE_TXT),
|
||||||
LOC_CTRL(IDS_PARTITION_TYPE_TXT),
|
LOC_CTRL(IDS_PARTITION_TYPE_TXT),
|
||||||
LOC_CTRL(IDS_FILESYSTEM_TXT),
|
LOC_CTRL(IDS_FILESYSTEM_TXT),
|
||||||
|
@ -399,6 +405,7 @@ loc_dlg_list loc_dlg[] = {
|
||||||
LOC_DLG(IDD_DIALOG),
|
LOC_DLG(IDD_DIALOG),
|
||||||
LOC_DLG(IDD_ABOUTBOX),
|
LOC_DLG(IDD_ABOUTBOX),
|
||||||
LOC_DLG(IDD_NOTIFICATION),
|
LOC_DLG(IDD_NOTIFICATION),
|
||||||
|
LOC_DLG(IDD_SELECTION),
|
||||||
LOC_DLG(IDD_LICENSE),
|
LOC_DLG(IDD_LICENSE),
|
||||||
LOC_DLG(IDD_LOG),
|
LOC_DLG(IDD_LOG),
|
||||||
LOC_DLG(IDD_UPDATE_POLICY),
|
LOC_DLG(IDD_UPDATE_POLICY),
|
||||||
|
|
|
@ -207,6 +207,18 @@ static __inline int MessageBoxU(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline int DrawTextU(HDC hDC, LPCSTR lpText, int nCount, LPRECT lpRect, UINT uFormat)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
DWORD err = ERROR_INVALID_DATA;
|
||||||
|
wconvert(lpText);
|
||||||
|
ret = DrawTextW(hDC, wlpText, nCount, lpRect, uFormat);
|
||||||
|
err = GetLastError();
|
||||||
|
wfree(lpText);
|
||||||
|
SetLastError(err);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static __inline int GetWindowTextU(HWND hWnd, char* lpString, int nMaxCount)
|
static __inline int GetWindowTextU(HWND hWnd, char* lpString, int nMaxCount)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
|
@ -5,14 +5,15 @@
|
||||||
#define IDD_DIALOG 101
|
#define IDD_DIALOG 101
|
||||||
#define IDD_ABOUTBOX 102
|
#define IDD_ABOUTBOX 102
|
||||||
#define IDD_NOTIFICATION 103
|
#define IDD_NOTIFICATION 103
|
||||||
#define IDD_LICENSE 104
|
#define IDD_SELECTION 104
|
||||||
#define IDD_LOG 105
|
#define IDD_LICENSE 105
|
||||||
#define IDD_UPDATE_POLICY 106
|
#define IDD_LOG 106
|
||||||
#define IDD_NEW_VERSION 107
|
#define IDD_UPDATE_POLICY 107
|
||||||
#define IDD_CHECKSUM 108
|
#define IDD_NEW_VERSION 108
|
||||||
#define IDI_ICON 110
|
#define IDD_CHECKSUM 109
|
||||||
#define IDI_UP 111
|
#define IDI_ICON 120
|
||||||
#define IDI_DOWN 112
|
#define IDI_UP 121
|
||||||
|
#define IDI_DOWN 122
|
||||||
#define IDD_DIALOG_XP 151
|
#define IDD_DIALOG_XP 151
|
||||||
#define IDD_ABOUTBOX_XP 152
|
#define IDD_ABOUTBOX_XP 152
|
||||||
#define IDD_NOTIFICATION_XP 153
|
#define IDD_NOTIFICATION_XP 153
|
||||||
|
@ -127,6 +128,11 @@
|
||||||
#define IDC_DOWNLOAD_URL 1070
|
#define IDC_DOWNLOAD_URL 1070
|
||||||
#define IDC_MD5 1071
|
#define IDC_MD5 1071
|
||||||
#define IDC_SHA1 1072
|
#define IDC_SHA1 1072
|
||||||
|
#define IDC_SELECTION_ICON 1073
|
||||||
|
#define IDC_SELECTION_TEXT 1074
|
||||||
|
#define IDC_SELECTION_LINE 1075
|
||||||
|
#define IDC_SELECTION_CHOICE1 1076
|
||||||
|
#define IDC_SELECTION_CHOICE2 1077
|
||||||
#define IDS_DEVICE_TXT 2000
|
#define IDS_DEVICE_TXT 2000
|
||||||
#define IDS_PARTITION_TYPE_TXT 2001
|
#define IDS_PARTITION_TYPE_TXT 2001
|
||||||
#define IDS_FILESYSTEM_TXT 2002
|
#define IDS_FILESYSTEM_TXT 2002
|
||||||
|
@ -429,7 +435,7 @@
|
||||||
#define _APS_NO_MFC 1
|
#define _APS_NO_MFC 1
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 505
|
#define _APS_NEXT_RESOURCE_VALUE 505
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1073
|
#define _APS_NEXT_CONTROL_VALUE 1078
|
||||||
#define _APS_NEXT_SYMED_VALUE 4000
|
#define _APS_NEXT_SYMED_VALUE 4000
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
56
src/rufus.c
56
src/rufus.c
|
@ -171,6 +171,15 @@ static float previous_end;
|
||||||
// TODO: Remember to update copyright year in stdlg's AboutCallback() WM_INITDIALOG,
|
// TODO: Remember to update copyright year in stdlg's AboutCallback() WM_INITDIALOG,
|
||||||
// localization_data.sh and the .rc when the year changes!
|
// localization_data.sh and the .rc when the year changes!
|
||||||
|
|
||||||
|
// Set the combo selection according to the data
|
||||||
|
static __inline void SetComboEntry(HWND hDlg, int data) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < ComboBox_GetCount(hDlg); i++) {
|
||||||
|
if (ComboBox_GetItemData(hDlg, i) == data)
|
||||||
|
IGNORE_RETVAL(ComboBox_SetCurSel(hDlg, i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#define KB 1024LL
|
#define KB 1024LL
|
||||||
#define MB 1048576LL
|
#define MB 1048576LL
|
||||||
#define GB 1073741824LL
|
#define GB 1073741824LL
|
||||||
|
@ -975,7 +984,7 @@ static void DisplayISOProps(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Only report features that are present
|
// TODO: Only report features that are present
|
||||||
uprintf("ISO label: %s", iso_report.label);
|
uprintf("ISO label: '%s'", iso_report.label);
|
||||||
uprintf(" Size: %" PRIu64 " bytes", iso_report.projected_size);
|
uprintf(" Size: %" PRIu64 " bytes", iso_report.projected_size);
|
||||||
uprintf(" Has a >64 chars filename: %s", YesNo(iso_report.has_long_filename));
|
uprintf(" Has a >64 chars filename: %s", YesNo(iso_report.has_long_filename));
|
||||||
uprintf(" Has Symlinks: %s", YesNo(iso_report.has_symlinks));
|
uprintf(" Has Symlinks: %s", YesNo(iso_report.has_symlinks));
|
||||||
|
@ -1005,15 +1014,16 @@ static void DisplayISOProps(void)
|
||||||
DWORD WINAPI ISOScanThread(LPVOID param)
|
DWORD WINAPI ISOScanThread(LPVOID param)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
BOOL r;
|
BOOL is_iso, is_img;
|
||||||
|
|
||||||
if (image_path == NULL)
|
if (image_path == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
PrintInfoDebug(0, MSG_202);
|
PrintInfoDebug(0, MSG_202);
|
||||||
user_notified = FALSE;
|
user_notified = FALSE;
|
||||||
EnableControls(FALSE);
|
EnableControls(FALSE);
|
||||||
r = ExtractISO(image_path, "", TRUE) || IsHDImage(image_path);
|
is_iso = ExtractISO(image_path, "", TRUE);
|
||||||
if (!r) {
|
is_img = IsHDImage(image_path);
|
||||||
|
if (!is_iso && !is_img) {
|
||||||
SendMessage(hMainDialog, UM_PROGRESS_EXIT, 0, 0);
|
SendMessage(hMainDialog, UM_PROGRESS_EXIT, 0, 0);
|
||||||
PrintInfoDebug(0, MSG_203);
|
PrintInfoDebug(0, MSG_203);
|
||||||
safe_free(image_path);
|
safe_free(image_path);
|
||||||
|
@ -1024,11 +1034,13 @@ DWORD WINAPI ISOScanThread(LPVOID param)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iso_report.is_bootable_img) {
|
if (is_img) {
|
||||||
uprintf("'%s' is a %sbootable %s image", image_path,
|
uprintf(" Image is a %sbootable %s image",
|
||||||
(iso_report.compression_type != BLED_COMPRESSION_NONE)?"compressed ":"", iso_report.is_vhd?"VHD":"disk");
|
(iso_report.compression_type != BLED_COMPRESSION_NONE) ? "compressed " : "", iso_report.is_vhd ? "VHD" : "disk");
|
||||||
selection_default = BT_IMG;
|
selection_default = BT_IMG;
|
||||||
} else {
|
}
|
||||||
|
if (is_iso) {
|
||||||
|
// Will override BT_IMG above for ISOHybrid
|
||||||
selection_default = BT_ISO;
|
selection_default = BT_ISO;
|
||||||
DisplayISOProps();
|
DisplayISOProps();
|
||||||
}
|
}
|
||||||
|
@ -1082,7 +1094,7 @@ out:
|
||||||
|
|
||||||
// Move a control along the Y axis according to the advanced mode setting
|
// Move a control along the Y axis according to the advanced mode setting
|
||||||
static __inline void MoveCtrlY(HWND hDlg, int nID, float vertical_shift) {
|
static __inline void MoveCtrlY(HWND hDlg, int nID, float vertical_shift) {
|
||||||
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, nID), 0, (int)vertical_shift, 0, 0);
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, nID), 0, (int)vertical_shift, 0, 0, fScale);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetPassesTooltip(void)
|
static void SetPassesTooltip(void)
|
||||||
|
@ -1211,7 +1223,7 @@ static void ToggleToGo(void)
|
||||||
MoveCtrlY(hMainDialog, IDC_EXTRA_PARTITION, dialog_shift);
|
MoveCtrlY(hMainDialog, IDC_EXTRA_PARTITION, dialog_shift);
|
||||||
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);
|
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);
|
||||||
|
@ -1724,7 +1736,7 @@ void InitDialog(HWND hDlg)
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "FreeDOS"), BT_FREEDOS));
|
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "FreeDOS"), BT_FREEDOS));
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, lmprintf(MSG_036)), BT_ISO));
|
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, lmprintf(MSG_036)), BT_ISO));
|
||||||
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));
|
||||||
IGNORE_RETVAL(ComboBox_SetCurSel(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_MARK "0x80")), 0x80));
|
||||||
for (i=1; i<=7; i++) {
|
for (i=1; i<=7; i++) {
|
||||||
|
@ -1811,8 +1823,8 @@ void InitDialog(HWND hDlg)
|
||||||
|
|
||||||
// The things one needs to do to keep things looking good...
|
// The things one needs to do to keep things looking good...
|
||||||
if (nWindowsVersion == WINDOWS_7) {
|
if (nWindowsVersion == WINDOWS_7) {
|
||||||
ResizeMoveCtrl(hDlg, GetDlgItem(hMainDialog, IDS_ADVANCED_OPTIONS_GRP), 0, -1, 0, 2);
|
ResizeMoveCtrl(hDlg, GetDlgItem(hMainDialog, IDS_ADVANCED_OPTIONS_GRP), 0, -1, 0, 2, fScale);
|
||||||
ResizeMoveCtrl(hDlg, hProgress, 0, 1, 0, 0);
|
ResizeMoveCtrl(hDlg, hProgress, 0, 1, 0, 0, fScale);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Subclass the Info box so that we can align its text vertically
|
// Subclass the Info box so that we can align its text vertically
|
||||||
|
@ -2441,6 +2453,24 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ask users how they want to write ISOHybrid images
|
||||||
|
if ((IsChecked(IDC_BOOT)) && (iso_report.is_bootable_img) &&
|
||||||
|
(ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)) == BT_ISO)) {
|
||||||
|
char* iso_image = lmprintf(MSG_036);
|
||||||
|
char* dd_image = lmprintf(MSG_095);
|
||||||
|
i = Selection(lmprintf(MSG_274), lmprintf(MSG_275, iso_image, dd_image, iso_image, dd_image),
|
||||||
|
lmprintf(MSG_276, iso_image), lmprintf(MSG_277, dd_image));
|
||||||
|
if (i < 0) { // Cancel
|
||||||
|
format_op_in_progress = FALSE;
|
||||||
|
break;
|
||||||
|
} else if (i == 2) {
|
||||||
|
selection_default = BT_IMG;
|
||||||
|
uprintf("CURSEL = %d", ComboBox_GetCurSel(hBootType));
|
||||||
|
SetComboEntry(hBootType, selection_default);
|
||||||
|
uprintf("CURSEL = %d", ComboBox_GetCurSel(hBootType));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GetWindowTextU(hDeviceList, tmp, ARRAYSIZE(tmp));
|
GetWindowTextU(hDeviceList, tmp, ARRAYSIZE(tmp));
|
||||||
if (MessageBoxU(hMainDialog, lmprintf(MSG_003, tmp),
|
if (MessageBoxU(hMainDialog, lmprintf(MSG_003, tmp),
|
||||||
APPLICATION_NAME, MB_OKCANCEL|MB_ICONWARNING|MB_IS_RTL) == IDCANCEL) {
|
APPLICATION_NAME, MB_OKCANCEL|MB_ICONWARNING|MB_IS_RTL) == IDCANCEL) {
|
||||||
|
|
|
@ -182,7 +182,7 @@ enum action_type {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* File system indexes in our FS combobox */
|
/* File system indexes in our FS combobox */
|
||||||
enum {
|
enum fs_type {
|
||||||
FS_UNKNOWN = -1,
|
FS_UNKNOWN = -1,
|
||||||
FS_FAT16 = 0,
|
FS_FAT16 = 0,
|
||||||
FS_FAT32,
|
FS_FAT32,
|
||||||
|
@ -392,7 +392,7 @@ extern char* SizeToHumanReadable(uint64_t size, BOOL copy_to_log, BOOL fake_unit
|
||||||
extern HWND MyCreateDialog(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc);
|
extern HWND MyCreateDialog(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc);
|
||||||
extern INT_PTR MyDialogBox(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc);
|
extern INT_PTR MyDialogBox(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc);
|
||||||
extern void CenterDialog(HWND hDlg);
|
extern void CenterDialog(HWND hDlg);
|
||||||
extern void ResizeMoveCtrl(HWND hDlg, HWND hCtrl, int dx, int dy, int dw, int dh);
|
extern void ResizeMoveCtrl(HWND hDlg, HWND hCtrl, int dx, int dy, int dw, int dh, float scale);
|
||||||
extern void CreateStatusBar(void);
|
extern void CreateStatusBar(void);
|
||||||
extern void SetTitleBarIcon(HWND hDlg);
|
extern void SetTitleBarIcon(HWND hDlg);
|
||||||
extern BOOL CreateTaskbarList(void);
|
extern BOOL CreateTaskbarList(void);
|
||||||
|
@ -403,7 +403,7 @@ extern BOOL CreateTooltip(HWND hControl, const char* message, int duration);
|
||||||
extern void DestroyTooltip(HWND hWnd);
|
extern void DestroyTooltip(HWND hWnd);
|
||||||
extern void DestroyAllTooltips(void);
|
extern void DestroyAllTooltips(void);
|
||||||
extern BOOL Notification(int type, const notification_info* more_info, char* title, char* format, ...);
|
extern BOOL Notification(int type, const notification_info* more_info, char* title, char* format, ...);
|
||||||
extern BOOL Question(char* title, char* format, ...);
|
extern int Selection(char* title, char* message, char* selection1, char* selection2);
|
||||||
extern SIZE GetTextSize(HWND hCtrl);
|
extern SIZE GetTextSize(HWND hCtrl);
|
||||||
extern BOOL ExtractDOS(const char* path);
|
extern BOOL ExtractDOS(const char* path);
|
||||||
extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan);
|
extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan);
|
||||||
|
|
29
src/rufus.rc
29
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.3.699"
|
CAPTION "Rufus 2.3.700"
|
||||||
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
|
||||||
|
@ -132,6 +132,21 @@ BEGIN
|
||||||
PUSHBUTTON "Yes",IDYES,154,44,50,14,NOT WS_VISIBLE
|
PUSHBUTTON "Yes",IDYES,154,44,50,14,NOT WS_VISIBLE
|
||||||
END
|
END
|
||||||
|
|
||||||
|
IDD_SELECTION DIALOGEX 0, 0, 312, 71
|
||||||
|
STYLE DS_SETFONT | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME
|
||||||
|
CAPTION "Rufus"
|
||||||
|
FONT 8, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
|
BEGIN
|
||||||
|
LTEXT "",IDC_SELECTION_LINE,0,0,312,47
|
||||||
|
CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,0,0,312,46
|
||||||
|
LTEXT "Message",IDC_SELECTION_TEXT,35,5,269,8
|
||||||
|
ICON IDI_ICON,IDC_SELECTION_ICON,6,6,20,20,0,WS_EX_TRANSPARENT
|
||||||
|
DEFPUSHBUTTON "Cancel",IDCANCEL,254,52,50,14
|
||||||
|
PUSHBUTTON "OK",IDOK,196,52,50,14
|
||||||
|
CONTROL "Choice 1",IDC_SELECTION_CHOICE1,"Button",BS_AUTORADIOBUTTON,35,18,269,10,WS_EX_TRANSPARENT
|
||||||
|
CONTROL "Choice 2",IDC_SELECTION_CHOICE2,"Button",BS_AUTORADIOBUTTON,35,31,269,10,WS_EX_TRANSPARENT
|
||||||
|
END
|
||||||
|
|
||||||
IDD_UPDATE_POLICY DIALOGEX 0, 0, 287, 198
|
IDD_UPDATE_POLICY DIALOGEX 0, 0, 287, 198
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Update policy and settings"
|
CAPTION "Update policy and settings"
|
||||||
|
@ -281,6 +296,10 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
|
IDD_SELECTION, DIALOG
|
||||||
|
BEGIN
|
||||||
|
END
|
||||||
|
|
||||||
IDD_UPDATE_POLICY, DIALOG
|
IDD_UPDATE_POLICY, DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
END
|
END
|
||||||
|
@ -298,8 +317,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 2,3,699,0
|
FILEVERSION 2,3,700,0
|
||||||
PRODUCTVERSION 2,3,699,0
|
PRODUCTVERSION 2,3,700,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -316,13 +335,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.3.699"
|
VALUE "FileVersion", "2.3.700"
|
||||||
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.3.699"
|
VALUE "ProductVersion", "2.3.700"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
139
src/stdlg.c
139
src/stdlg.c
|
@ -54,6 +54,7 @@ PF_TYPE_DECL(WINAPI, LPITEMIDLIST, SHSimpleIDListFromPath, (PCWSTR pszPath));
|
||||||
static HICON hMessageIcon = (HICON)INVALID_HANDLE_VALUE;
|
static HICON hMessageIcon = (HICON)INVALID_HANDLE_VALUE;
|
||||||
static char* szMessageText = NULL;
|
static char* szMessageText = NULL;
|
||||||
static char* szMessageTitle = NULL;
|
static char* szMessageTitle = NULL;
|
||||||
|
static char *szChoice1, *szChoice2;
|
||||||
static HWND hBrowseEdit;
|
static HWND hBrowseEdit;
|
||||||
extern HWND hUpdatesDlg;
|
extern HWND hUpdatesDlg;
|
||||||
static WNDPROC pOrgBrowseWndproc;
|
static WNDPROC pOrgBrowseWndproc;
|
||||||
|
@ -538,7 +539,7 @@ SIZE GetBorderSize(HWND hDlg)
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResizeMoveCtrl(HWND hDlg, HWND hCtrl, int dx, int dy, int dw, int dh)
|
void ResizeMoveCtrl(HWND hDlg, HWND hCtrl, int dx, int dy, int dw, int dh, float scale)
|
||||||
{
|
{
|
||||||
RECT rect;
|
RECT rect;
|
||||||
POINT point;
|
POINT point;
|
||||||
|
@ -552,9 +553,9 @@ void ResizeMoveCtrl(HWND hDlg, HWND hCtrl, int dx, int dy, int dw, int dh)
|
||||||
|
|
||||||
// If the control has any borders (dialog, edit box), take them into account
|
// If the control has any borders (dialog, edit box), take them into account
|
||||||
border = GetBorderSize(hCtrl);
|
border = GetBorderSize(hCtrl);
|
||||||
MoveWindow(hCtrl, point.x + (int)(fScale*(float)dx), point.y + (int)(fScale*(float)dy),
|
MoveWindow(hCtrl, point.x + (int)(scale*(float)dx), point.y + (int)(scale*(float)dy),
|
||||||
(rect.right - rect.left) + (int)(fScale*(float)dw + border.cx),
|
(rect.right - rect.left) + (int)(scale*(float)dw + border.cx),
|
||||||
(rect.bottom - rect.top) + (int)(fScale*(float)dh + border.cy), TRUE);
|
(rect.bottom - rect.top) + (int)(scale*(float)dh + border.cy), TRUE);
|
||||||
InvalidateRect(hCtrl, NULL, TRUE);
|
InvalidateRect(hCtrl, NULL, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -804,6 +805,136 @@ BOOL Notification(int type, const notification_info* more_info, char* title, cha
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Custom dialog for radio button selection dialog
|
||||||
|
*/
|
||||||
|
INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
LRESULT loc;
|
||||||
|
int i, dh, r = -1;
|
||||||
|
// Prevent resizing
|
||||||
|
static LRESULT disabled[9] = { HTLEFT, HTRIGHT, HTTOP, HTBOTTOM, HTSIZE,
|
||||||
|
HTTOPLEFT, HTTOPRIGHT, HTBOTTOMLEFT, HTBOTTOMRIGHT };
|
||||||
|
static HBRUSH background_brush, separator_brush;
|
||||||
|
// To use the system message font
|
||||||
|
NONCLIENTMETRICS ncm;
|
||||||
|
RECT rect;
|
||||||
|
HFONT hDlgFont;
|
||||||
|
HWND hCtrl;
|
||||||
|
HDC dc;
|
||||||
|
|
||||||
|
switch (message) {
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
// Get the system message box font. See http://stackoverflow.com/a/6057761
|
||||||
|
ncm.cbSize = sizeof(ncm);
|
||||||
|
// If we're compiling with the Vista SDK or later, the NONCLIENTMETRICS struct
|
||||||
|
// will be the wrong size for previous versions, so we need to adjust it.
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
|
||||||
|
if (nWindowsVersion >= WINDOWS_VISTA) {
|
||||||
|
// In versions of Windows prior to Vista, the iPaddedBorderWidth member
|
||||||
|
// is not present, so we need to subtract its size from cbSize.
|
||||||
|
ncm.cbSize -= sizeof(ncm.iPaddedBorderWidth);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0);
|
||||||
|
hDlgFont = CreateFontIndirect(&(ncm.lfMessageFont));
|
||||||
|
// Set the dialog to use the system message box font
|
||||||
|
SendMessage(hDlg, WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0));
|
||||||
|
SendMessage(GetDlgItem(hDlg, IDC_SELECTION_TEXT), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0));
|
||||||
|
SendMessage(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0));
|
||||||
|
SendMessage(GetDlgItem(hDlg, IDC_SELECTION_CHOICE2), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0));
|
||||||
|
SendMessage(GetDlgItem(hDlg, IDYES), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0));
|
||||||
|
SendMessage(GetDlgItem(hDlg, IDNO), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0));
|
||||||
|
|
||||||
|
apply_localization(IDD_SELECTION, hDlg);
|
||||||
|
background_brush = CreateSolidBrush(GetSysColor(COLOR_3DHILIGHT));
|
||||||
|
separator_brush = CreateSolidBrush(GetSysColor(COLOR_3DLIGHT));
|
||||||
|
SetTitleBarIcon(hDlg);
|
||||||
|
CenterDialog(hDlg);
|
||||||
|
// Change the default icon and set the text
|
||||||
|
Static_SetIcon(GetDlgItem(hDlg, IDC_SELECTION_ICON), LoadIcon(NULL, IDI_QUESTION));
|
||||||
|
SetWindowTextU(hDlg, szMessageTitle);
|
||||||
|
SetWindowTextU(GetDlgItem(hDlg, IDCANCEL), lmprintf(MSG_007));
|
||||||
|
SetWindowTextU(GetDlgItem(hDlg, IDC_SELECTION_TEXT), szMessageText);
|
||||||
|
SetWindowTextU(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1), szChoice1);
|
||||||
|
SetWindowTextU(GetDlgItem(hDlg, IDC_SELECTION_CHOICE2), szChoice2);
|
||||||
|
|
||||||
|
// Move/Resize the controls as needed to fit our text
|
||||||
|
hCtrl = GetDlgItem(hDlg, IDC_SELECTION_TEXT);
|
||||||
|
dc = GetDC(hCtrl);
|
||||||
|
SelectFont(dc, hDlgFont); // Yes, you *MUST* reapply the font to the DC, even after SetWindowText!
|
||||||
|
GetWindowRect(hCtrl, &rect);
|
||||||
|
dh = rect.bottom - rect.top;
|
||||||
|
DrawTextU(dc, szMessageText, -1, &rect, DT_CALCRECT | DT_WORDBREAK);
|
||||||
|
dh = rect.bottom - rect.top - dh;
|
||||||
|
ReleaseDC(hCtrl, dc);
|
||||||
|
|
||||||
|
ResizeMoveCtrl(hDlg, hCtrl, 0, 0, 0, dh, 1.0f);
|
||||||
|
ResizeMoveCtrl(hDlg, hDlg, 0, 0, 0, dh, 1.0f);
|
||||||
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, -1), 0, 0, 0, dh, 1.0f); // IDC_STATIC = -1
|
||||||
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_LINE), 0, dh, 0, 0, 1.0f);
|
||||||
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_CHOICE1), 0, dh, 0, 0, 1.0f);
|
||||||
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_CHOICE2), 0, dh, 0, 0, 1.0f);
|
||||||
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDOK), 0, dh, 0, 0, 1.0f);
|
||||||
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDCANCEL), 0, dh, 0, 0, 1.0f);
|
||||||
|
CenterDialog(hDlg);
|
||||||
|
|
||||||
|
// Set the radio selection
|
||||||
|
Button_SetCheck(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1), BST_CHECKED);
|
||||||
|
Button_SetCheck(GetDlgItem(hDlg, IDC_SELECTION_CHOICE2), BST_UNCHECKED);
|
||||||
|
return (INT_PTR)TRUE;
|
||||||
|
case WM_CTLCOLORSTATIC:
|
||||||
|
// Change the background colour for static text and icon
|
||||||
|
SetBkMode((HDC)wParam, TRANSPARENT);
|
||||||
|
if ((HWND)lParam == GetDlgItem(hDlg, IDC_NOTIFICATION_LINE)) {
|
||||||
|
return (INT_PTR)separator_brush;
|
||||||
|
}
|
||||||
|
return (INT_PTR)background_brush;
|
||||||
|
case WM_NCHITTEST:
|
||||||
|
// Check coordinates to prevent resize actions
|
||||||
|
loc = DefWindowProc(hDlg, message, wParam, lParam);
|
||||||
|
for (i = 0; i < 9; i++) {
|
||||||
|
if (loc == disabled[i]) {
|
||||||
|
return (INT_PTR)TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (INT_PTR)FALSE;
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch (LOWORD(wParam)) {
|
||||||
|
case IDOK:
|
||||||
|
if (Button_GetCheck(GetDlgItem(hDlg, IDC_SELECTION_CHOICE2)) == BST_CHECKED)
|
||||||
|
r = 2;
|
||||||
|
else
|
||||||
|
r = 1;
|
||||||
|
// Fall through
|
||||||
|
case IDNO:
|
||||||
|
case IDCANCEL:
|
||||||
|
EndDialog(hDlg, r);
|
||||||
|
return (INT_PTR)TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return (INT_PTR)FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display a selection question
|
||||||
|
*/
|
||||||
|
int Selection(char* title, char* message, char* choice1, char* choice2)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
dialog_showing++;
|
||||||
|
szMessageTitle = title;
|
||||||
|
szMessageText = message;
|
||||||
|
szChoice1 = choice1;
|
||||||
|
szChoice2 = choice2;
|
||||||
|
ret = (int)MyDialogBox(hMainInstance, IDD_SELECTION, hMainDialog, SelectionCallback);
|
||||||
|
dialog_showing--;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
HWND hTip; // Tooltip handle
|
HWND hTip; // Tooltip handle
|
||||||
HWND hCtrl; // Handle of the control the tooltip belongs to
|
HWND hCtrl; // Handle of the control the tooltip belongs to
|
||||||
|
|
15
src/vhd.c
15
src/vhd.c
|
@ -283,19 +283,20 @@ BOOL IsHDImage(const char* path)
|
||||||
uint32_t checksum, old_checksum;
|
uint32_t checksum, old_checksum;
|
||||||
LARGE_INTEGER ptr;
|
LARGE_INTEGER ptr;
|
||||||
|
|
||||||
|
uprintf("Disk image analysis:");
|
||||||
handle = CreateFileU(path, GENERIC_READ, FILE_SHARE_READ, NULL,
|
handle = CreateFileU(path, GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
if (handle == INVALID_HANDLE_VALUE) {
|
if (handle == INVALID_HANDLE_VALUE) {
|
||||||
uprintf("Could not open image '%s'", path);
|
uprintf(" Could not open image '%s'", path);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
iso_report.is_bootable_img = (BOOLEAN)IsCompressedBootableImage(path);
|
iso_report.is_bootable_img = (BOOLEAN)IsCompressedBootableImage(path);
|
||||||
if (iso_report.compression_type == BLED_COMPRESSION_NONE)
|
if (iso_report.compression_type == BLED_COMPRESSION_NONE)
|
||||||
iso_report.is_bootable_img = (BOOLEAN)AnalyzeMBR(handle, "Image");
|
iso_report.is_bootable_img = (BOOLEAN)AnalyzeMBR(handle, " Image");
|
||||||
|
|
||||||
if (!GetFileSizeEx(handle, &liImageSize)) {
|
if (!GetFileSizeEx(handle, &liImageSize)) {
|
||||||
uprintf("Could not get image size: %s", WindowsErrorString());
|
uprintf(" Could not get image size: %s", WindowsErrorString());
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
iso_report.projected_size = (uint64_t)liImageSize.QuadPart;
|
iso_report.projected_size = (uint64_t)liImageSize.QuadPart;
|
||||||
|
@ -306,14 +307,14 @@ BOOL IsHDImage(const char* path)
|
||||||
ptr.QuadPart = iso_report.projected_size - size;
|
ptr.QuadPart = iso_report.projected_size - size;
|
||||||
if ( (footer == NULL) || (!SetFilePointerEx(handle, ptr, NULL, FILE_BEGIN)) ||
|
if ( (footer == NULL) || (!SetFilePointerEx(handle, ptr, NULL, FILE_BEGIN)) ||
|
||||||
(!ReadFile(handle, footer, size, &size, NULL)) || (size != sizeof(vhd_footer)) ) {
|
(!ReadFile(handle, footer, size, &size, NULL)) || (size != sizeof(vhd_footer)) ) {
|
||||||
uprintf("Could not read VHD footer");
|
uprintf(" Could not read VHD footer");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (memcmp(footer->cookie, conectix_str, sizeof(footer->cookie)) == 0) {
|
if (memcmp(footer->cookie, conectix_str, sizeof(footer->cookie)) == 0) {
|
||||||
iso_report.projected_size -= sizeof(vhd_footer);
|
iso_report.projected_size -= sizeof(vhd_footer);
|
||||||
if ( (bswap_uint32(footer->file_format_version) != VHD_FOOTER_FILE_FORMAT_V1_0)
|
if ( (bswap_uint32(footer->file_format_version) != VHD_FOOTER_FILE_FORMAT_V1_0)
|
||||||
|| (bswap_uint32(footer->disk_type) != VHD_FOOTER_TYPE_FIXED_HARD_DISK)) {
|
|| (bswap_uint32(footer->disk_type) != VHD_FOOTER_TYPE_FIXED_HARD_DISK)) {
|
||||||
uprintf("Unsupported type of VHD image");
|
uprintf(" Unsupported type of VHD image");
|
||||||
iso_report.is_bootable_img = FALSE;
|
iso_report.is_bootable_img = FALSE;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -324,9 +325,9 @@ BOOL IsHDImage(const char* path)
|
||||||
checksum += ((uint8_t*)footer)[i];
|
checksum += ((uint8_t*)footer)[i];
|
||||||
checksum = ~checksum;
|
checksum = ~checksum;
|
||||||
if (checksum != old_checksum)
|
if (checksum != old_checksum)
|
||||||
uprintf("Warning: VHD footer seems corrupted (checksum: %04X, expected: %04X)", old_checksum, checksum);
|
uprintf(" Warning: VHD footer seems corrupted (checksum: %04X, expected: %04X)", old_checksum, checksum);
|
||||||
// Need to remove the footer from our payload
|
// Need to remove the footer from our payload
|
||||||
uprintf("Image is a Fixed Hard Disk VHD file");
|
uprintf(" Image is a Fixed Hard Disk VHD file");
|
||||||
iso_report.is_vhd = TRUE;
|
iso_report.is_vhd = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue