[ui] Remove the separate progress dialog

* Closes #125
* Also provide more intuitive info for bad blocks check
* Also update Bled to latest to enable cancelling
This commit is contained in:
Pete Batard 2015-01-01 23:39:28 +00:00
parent e90eaa4abc
commit a327bb114c
20 changed files with 431 additions and 489 deletions

View file

@ -126,12 +126,6 @@ t IDS_NEW_VERSION_DOWNLOAD_GRP "Download"
t IDC_DOWNLOAD "Download" t IDC_DOWNLOAD "Download"
t IDCANCEL "Close" t IDCANCEL "Close"
# Dialog that appears when scanning/extracting ISO files
g IDD_ISO_EXTRACT
t IDD_ISO_EXTRACT "Copying ISO files..."
t IDC_ISO_FILENAME "Opening ISO image - please wait..."
t IDC_ISO_ABORT "Cancel"
# Messages used throughout the application # Messages used throughout the application
t MSG_001 "Other instance detected" t MSG_001 "Other instance detected"
t MSG_002 "Another Rufus application is running.\n" t MSG_002 "Another Rufus application is running.\n"
@ -366,6 +360,9 @@ t MSG_186 "Rufus does not install or run background services, therefore update c
t MSG_187 "Invalid image for selected boot option" t MSG_187 "Invalid image for selected boot option"
t MSG_188 "The current image doesn't match the boot option selected. Please use a different image or choose a different boot option." t MSG_188 "The current image doesn't match the boot option selected. Please use a different image or choose a different boot option."
t MSG_189 "This ISO image is not compatible with the selected filesystem" t MSG_189 "This ISO image is not compatible with the selected filesystem"
t MSG_190 "No image selected"
t MSG_191 "Write pass"
t MSG_192 "Read pass"
# Status messages - these messages will appear on the status bar # Status messages - these messages will appear on the status bar
t MSG_201 "Cancelling - Please wait..." t MSG_201 "Cancelling - Please wait..."
@ -373,8 +370,8 @@ t MSG_202 "Scanning image..."
t MSG_203 "Failed to scan image" t MSG_203 "Failed to scan image"
# Parameter: the name of an obsolete Syslinux .c32 module. eg: "Obsolete vesamenu.c32 detected" # Parameter: the name of an obsolete Syslinux .c32 module. eg: "Obsolete vesamenu.c32 detected"
t MSG_204 "Obsolete %s detected" t MSG_204 "Obsolete %s detected"
# Display the name of the ISO selected. eg: "Using ISO: en_win7_x64_sp1.iso" # Display the name of the image selected. eg: "Using image: en_win7_x64_sp1.iso"
t MSG_205 "Using ISO: %s" t MSG_205 "Using image: %s"
# Typically "Missing ldlinux.c32 file" # Typically "Missing ldlinux.c32 file"
t MSG_206 "Missing %s file" t MSG_206 "Missing %s file"
# The name proposed by Windows' Computer Management -> Disk Management when you try to format a drive # The name proposed by Windows' Computer Management -> Disk Management when you try to format a drive
@ -383,9 +380,9 @@ t MSG_207 "New Volume"
# Same message, once for singular and plural ("1 device found", "2 devices found") # Same message, once for singular and plural ("1 device found", "2 devices found")
t MSG_208 "%d device found" t MSG_208 "%d device found"
t MSG_209 "%d devices found" t MSG_209 "%d devices found"
t MSG_210 "DONE" t MSG_210 "READY"
t MSG_211 "Cancelled" t MSG_211 "Cancelled"
t MSG_212 "FAILED" t MSG_212 "Failed"
# Used when a new update has been downloaded and launched # Used when a new update has been downloaded and launched
t MSG_213 "Launching new application..." t MSG_213 "Launching new application..."
t MSG_214 "Failed to launch new application" t MSG_214 "Failed to launch new application"
@ -416,8 +413,9 @@ t MSG_232 "Win7 EFI boot setup (this may take a while)..."
t MSG_233 "Finalizing, please wait..." t MSG_233 "Finalizing, please wait..."
# Takes a Syslinux version as parameter, eg. "Installing Syslinux v5.10..." # Takes a Syslinux version as parameter, eg. "Installing Syslinux v5.10..."
t MSG_234 "Installing Syslinux %s..." t MSG_234 "Installing Syslinux %s..."
# Bad blocks status. eg: "Bad Blocks: PASS 1/2 - 12.34% (0/0/1 errors)" # Bad blocks status. eg: "Bad Blocks: Write pass 1/2 - 12.34% (0/0/1 errors)"
t MSG_235 "Bad Blocks: PASS %d/%d - %0.2f%% (%d/%d/%d errors)" # See MSG_191/192 for "Write pass"/"Read pass" translation
t MSG_235 "Bad Blocks: %s %d/%d - %0.2f%% (%d/%d/%d errors)"
t MSG_236 "Bad Blocks: Testing with random pattern" t MSG_236 "Bad Blocks: Testing with random pattern"
t MSG_237 "Bad Blocks: Testing with pattern 0x%02X" t MSG_237 "Bad Blocks: Testing with pattern 0x%02X"
# eg. "Partitioning (MBR)..." # eg. "Partitioning (MBR)..."

View file

@ -7,7 +7,7 @@
* *
* Copyright 1995, 1996, 1997, 1998, 1999 by Theodore Ts'o * Copyright 1995, 1996, 1997, 1998, 1999 by Theodore Ts'o
* Copyright 1999 by David Beattie * Copyright 1999 by David Beattie
* Copyright 2011-2013 by Pete Batard * Copyright 2011-2015 by Pete Batard
* *
* This file is based on the minix file system programs fsck and mkfs * This file is based on the minix file system programs fsck and mkfs
* written and copyrighted by Linus Torvalds <Linus.Torvalds@cs.helsinki.fi> * written and copyrighted by Linus Torvalds <Linus.Torvalds@cs.helsinki.fi>
@ -327,13 +327,13 @@ static void print_status(void)
percent = calc_percent((unsigned long) currently_testing, percent = calc_percent((unsigned long) currently_testing,
(unsigned long) num_blocks); (unsigned long) num_blocks);
percent = (percent/2.0f) + ((cur_op==OP_READ)? 50.0f : 0.0f); PrintInfo(0, MSG_235, lmprintf(MSG_191 + ((cur_op==OP_WRITE)?0:1)),
PrintStatus(0, FALSE, MSG_235,
cur_pattern, nr_pattern, cur_pattern, nr_pattern,
percent, percent,
num_read_errors, num_read_errors,
num_write_errors, num_write_errors,
num_corruption_errors); num_corruption_errors);
percent = (percent/2.0f) + ((cur_op==OP_READ)? 50.0f : 0.0f);
UpdateProgress(OP_BADBLOCKS, (((cur_pattern-1)*100.0f) + percent) / nr_pattern); UpdateProgress(OP_BADBLOCKS, (((cur_pattern-1)*100.0f) + percent) / nr_pattern);
} }
@ -359,7 +359,7 @@ static void pattern_fill(unsigned char *buffer, unsigned int pattern,
for (ptr = buffer; ptr < buffer + n; ptr++) { for (ptr = buffer; ptr < buffer + n; ptr++) {
(*ptr) = rand() % (1 << (8 * sizeof(char))); (*ptr) = rand() % (1 << (8 * sizeof(char)));
} }
PrintStatus(3500, FALSE, MSG_236); PrintInfo(3500, MSG_236);
} else { } else {
bpattern[0] = 0; bpattern[0] = 0;
for (i = 0; i < sizeof(bpattern); i++) { for (i = 0; i < sizeof(bpattern); i++) {
@ -376,7 +376,7 @@ static void pattern_fill(unsigned char *buffer, unsigned int pattern,
else else
i--; i--;
} }
PrintStatus(3500, FALSE, MSG_237, bpattern[i]); PrintInfo(3500, MSG_237, bpattern[i]);
cur_pattern++; cur_pattern++;
} }
} }

View file

@ -1,7 +1,7 @@
/* /*
* Bled (Busybox Library for Easy Decompression) * Bled (Busybox Library for Easy Decompression)
* *
* Copyright © 2014 Pete Batard <pete@akeo.ie> * Copyright © 2014-2015 Pete Batard <pete@akeo.ie>
* *
* Licensed under GPLv2 or later, see file LICENSE in this source tree. * Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/ */
@ -22,6 +22,7 @@ smallint bb_got_signal;
uint64_t bb_total_rb; uint64_t bb_total_rb;
printf_t bled_printf = NULL; printf_t bled_printf = NULL;
progress_t bled_progress = NULL; progress_t bled_progress = NULL;
unsigned long* bled_cancel_request;
static bool bled_initialized = 0; static bool bled_initialized = 0;
jmp_buf bb_error_jmp; jmp_buf bb_error_jmp;
@ -124,20 +125,31 @@ int64_t bled_uncompress_with_handles(HANDLE hSrc, HANDLE hDst, int type)
return unpacker[type](&xstate); return unpacker[type](&xstate);
} }
int bled_init(printf_t print_function, progress_t progress_function) /* Initialize the library.
* When the parameters are not NULL you can:
* - specify the printf-like function you want to use to output message
* void print_function(const char* format, ...);
* - specify the function you want to use to display progress, based on number of source archive bytes read
* void progress_function(const uint64_t read_bytes);
* - point to an unsigned long variable, to be used to cancel operations when set to non zero
*/
int bled_init(printf_t print_function, progress_t progress_function, unsigned long* cancel_request)
{ {
if (bled_initialized) if (bled_initialized)
return -1; return -1;
bled_initialized = true; bled_initialized = true;
bled_printf = print_function; bled_printf = print_function;
bled_progress = progress_function; bled_progress = progress_function;
bled_cancel_request = cancel_request;
return 0; return 0;
} }
/* This call frees any resource used by the library */
void bled_exit(void) void bled_exit(void)
{ {
bled_printf = NULL; bled_printf = NULL;
bled_progress = NULL; bled_progress = NULL;
bled_cancel_request = NULL;
if (global_crc32_table) if (global_crc32_table)
free(global_crc32_table); free(global_crc32_table);
bled_initialized = false; bled_initialized = false;

View file

@ -1,7 +1,7 @@
/* /*
* Bled (Busybox Library for Easy Decompression) * Bled (Busybox Library for Easy Decompression)
* *
* Copyright © 2014 Pete Batard <pete@akeo.ie> * Copyright © 2014-2015 Pete Batard <pete@akeo.ie>
* *
* Licensed under GPLv2 or later, see file LICENSE in this source tree. * Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/ */
@ -12,11 +12,11 @@
#pragma once #pragma once
#ifndef ARRAYSIZE #ifndef ARRAYSIZE
#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0])) #define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))
#endif #endif
typedef void (*printf_t) (const char* format, ...); typedef void (*printf_t) (const char* format, ...);
typedef void (*progress_t) (const uint64_t processed_bytes); typedef void (*progress_t) (const uint64_t read_bytes);
typedef enum { typedef enum {
BLED_COMPRESSION_NONE = 0, BLED_COMPRESSION_NONE = 0,
@ -33,9 +33,18 @@ typedef enum {
/* Uncompress file 'src', compressed using 'type', to file 'dst' */ /* Uncompress file 'src', compressed using 'type', to file 'dst' */
int64_t bled_uncompress(const char* src, const char* dst, int type); int64_t bled_uncompress(const char* src, const char* dst, int type);
/* Uncompress using Windows handles */
int64_t bled_uncompress_with_handles(HANDLE hSrc, HANDLE hDst, int type); int64_t bled_uncompress_with_handles(HANDLE hSrc, HANDLE hDst, int type);
/* Initialize the library */ /* Initialize the library.
int bled_init(printf_t print_function, progress_t progress_function); * When the parameters are not NULL you can:
* - specify the printf-like function you want to use to output message
* void print_function(const char* format, ...);
* - specify the function you want to use to display progress, based on number of source archive bytes read
* void progress_function(const uint64_t read_bytes);
* - point to an unsigned long variable, to be used to cancel operations when set to non zero
*/
int bled_init(printf_t print_function, progress_t progress_function, unsigned long* cancel_request);
/* This call frees any resource used by the library */
void bled_exit(void); void bled_exit(void);

View file

@ -1,7 +1,8 @@
/* /*
* unxz implementation for busybox * unxz implementation for busybox
* *
* Based on xz-embedded (C) Lasse Collin <lasse.collin@tukaani.org> - Public Domain * Copyright © 2014-2015 Pete Batard <pete@akeo.ie>
* Based on xz-embedded © Lasse Collin <lasse.collin@tukaani.org> - Public Domain
* *
* Licensed under GPLv2 or later, see file LICENSE in this source tree. * Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/ */
@ -46,9 +47,8 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_xz_stream(transformer_state_t *xstate
*/ */
s = xz_dec_init(XZ_DYNALLOC, 1 << 26); s = xz_dec_init(XZ_DYNALLOC, 1 << 26);
if (!s) if (!s)
bb_error_msg_and_err("memory allocation failed"); bb_error_msg_and_err("memory allocation error");
// TODO: this is set very low on Windows...
in = xmalloc(BUFSIZ); in = xmalloc(BUFSIZ);
out = xmalloc(BUFSIZ); out = xmalloc(BUFSIZ);
@ -63,7 +63,7 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_xz_stream(transformer_state_t *xstate
if (b.in_pos == b.in_size) { if (b.in_pos == b.in_size) {
b.in_size = safe_read(xstate->src_fd, in, BUFSIZ); b.in_size = safe_read(xstate->src_fd, in, BUFSIZ);
if ((int)b.in_size < 0) if ((int)b.in_size < 0)
bb_error_msg_and_err(bb_msg_read_error); bb_error_msg_and_err("read error (errno: %d)", errno);
b.in_pos = 0; b.in_pos = 0;
} }
ret = xz_dec_run(s, &b); ret = xz_dec_run(s, &b);
@ -72,7 +72,7 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_xz_stream(transformer_state_t *xstate
nwrote = transformer_write(xstate, b.out, b.out_pos); nwrote = transformer_write(xstate, b.out, b.out_pos);
if (nwrote == (ssize_t)-1) { if (nwrote == (ssize_t)-1) {
ret = XZ_DATA_ERROR; ret = XZ_DATA_ERROR;
bb_error_msg_and_err("write error"); bb_error_msg_and_err("write error (errno: %d)", errno);
} }
IF_DESKTOP(n += nwrote;) IF_DESKTOP(n += nwrote;)
b.out_pos = 0; b.out_pos = 0;
@ -91,7 +91,7 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_xz_stream(transformer_state_t *xstate
nwrote = transformer_write(xstate, b.out, b.out_pos); nwrote = transformer_write(xstate, b.out, b.out_pos);
if (nwrote == (ssize_t)-1) { if (nwrote == (ssize_t)-1) {
ret = XZ_DATA_ERROR; ret = XZ_DATA_ERROR;
bb_error_msg_and_err("write error"); bb_error_msg_and_err("write error (errno: %d)", errno);
} }
IF_DESKTOP(n += nwrote;) IF_DESKTOP(n += nwrote;)
@ -101,24 +101,24 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_xz_stream(transformer_state_t *xstate
goto out; goto out;
case XZ_MEM_ERROR: case XZ_MEM_ERROR:
bb_error_msg_and_err("memory allocation failed"); bb_error_msg_and_err("memory allocation error");
case XZ_MEMLIMIT_ERROR: case XZ_MEMLIMIT_ERROR:
bb_error_msg_and_err("memory usage limit reached"); bb_error_msg_and_err("memory usage limit error");
case XZ_FORMAT_ERROR: case XZ_FORMAT_ERROR:
bb_error_msg_and_err("not a .xz file"); bb_error_msg_and_err("not a .xz file");
case XZ_OPTIONS_ERROR: case XZ_OPTIONS_ERROR:
bb_error_msg_and_err("unsupported options in the .xz headers"); bb_error_msg_and_err("unsupported XZ header option");
case XZ_DATA_ERROR: case XZ_DATA_ERROR:
bb_error_msg_and_err("file is corrupt"); bb_error_msg_and_err("corrupted archive");
case XZ_BUF_ERROR: case XZ_BUF_ERROR:
bb_error_msg_and_err("buf is corrupt"); bb_error_msg_and_err("corrupted buffer");
default: default:
bb_error_msg_and_err("bug!"); bb_error_msg_and_err("XZ decompression bug!");
} }
} }

View file

@ -2,7 +2,7 @@
* Library header for busybox * Library header for busybox
* *
* Rewritten for Bled (Busybox Library for Easy Decompression) * Rewritten for Bled (Busybox Library for Easy Decompression)
* Copyright © 2014 Pete Batard <pete@akeo.ie> * Copyright © 2014-2015 Pete Batard <pete@akeo.ie>
* *
* Licensed under GPLv2 or later, see file LICENSE in this source tree. * Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/ */
@ -135,6 +135,7 @@ typedef struct _llist_t {
extern void (*bled_printf) (const char* format, ...); extern void (*bled_printf) (const char* format, ...);
extern void (*bled_progress) (const uint64_t processed_bytes); extern void (*bled_progress) (const uint64_t processed_bytes);
extern unsigned long* bled_cancel_request;
#define xfunc_die() longjmp(bb_error_jmp, 1) #define xfunc_die() longjmp(bb_error_jmp, 1)
#define bb_printf(...) do { if (bled_printf != NULL) bled_printf(__VA_ARGS__); \ #define bb_printf(...) do { if (bled_printf != NULL) bled_printf(__VA_ARGS__); \
@ -171,7 +172,13 @@ static inline pid_t wait(int* status) { *status = 4; return -1; }
/* This override enables the display of a progress based on the number of bytes read */ /* This override enables the display of a progress based on the number of bytes read */
extern uint64_t bb_total_rb; extern uint64_t bb_total_rb;
static inline ssize_t full_read(int fd, void *buf, size_t count) { static inline ssize_t full_read(int fd, void *buf, size_t count) {
ssize_t rb = _read(fd, buf, count); ssize_t rb;
if ((bled_cancel_request != NULL) && (*bled_cancel_request != 0)) {
errno = EINTR;
return -1;
}
rb = _read(fd, buf, count);
if (rb > 0) { if (rb > 0) {
bb_total_rb += rb; bb_total_rb += rb;
if (bled_progress != NULL) if (bled_progress != NULL)

View file

@ -1,7 +1,7 @@
/* /*
* Rufus: The Reliable USB Formatting Utility * Rufus: The Reliable USB Formatting Utility
* Drive access function calls * Drive access function calls
* Copyright © 2011-2014 Pete Batard <pete@akeo.ie> * Copyright © 2011-2015 Pete Batard <pete@akeo.ie>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -915,7 +915,7 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
DWORD size, bufsize; DWORD size, bufsize;
LONGLONG size_in_sectors, extra_size_in_tracks = 1; LONGLONG size_in_sectors, extra_size_in_tracks = 1;
PrintStatus(0, TRUE, MSG_238, PartitionTypeName[partition_style]); PrintInfoDebug(0, MSG_238, PartitionTypeName[partition_style]);
if (uefi_togo_size == 0) if (uefi_togo_size == 0)
uefi_togo_size = GetResourceSize(hMainInstance, MAKEINTRESOURCEA(IDR_UEFI_TOGO), _RT_RCDATA, "uefi-togo.img"); uefi_togo_size = GetResourceSize(hMainInstance, MAKEINTRESOURCEA(IDR_UEFI_TOGO), _RT_RCDATA, "uefi-togo.img");
@ -1117,7 +1117,7 @@ BOOL DeletePartitions(HANDLE hDrive)
DWORD size; DWORD size;
CREATE_DISK CreateDisk = {PARTITION_STYLE_RAW, {{0}}}; CREATE_DISK CreateDisk = {PARTITION_STYLE_RAW, {{0}}};
PrintStatus(0, TRUE, MSG_239); PrintInfoDebug(0, MSG_239);
size = sizeof(CreateDisk); size = sizeof(CreateDisk);
r = DeviceIoControl(hDrive, IOCTL_DISK_CREATE_DISK, r = DeviceIoControl(hDrive, IOCTL_DISK_CREATE_DISK,

View file

@ -2,7 +2,7 @@
* Rufus: The Reliable USB Formatting Utility * Rufus: The Reliable USB Formatting Utility
* Formatting function calls * Formatting function calls
* Copyright © 2007-2009 Tom Thornhill/Ridgecrop * Copyright © 2007-2009 Tom Thornhill/Ridgecrop
* Copyright © 2011-2014 Pete Batard <pete@akeo.ie> * Copyright © 2011-2015 Pete Batard <pete@akeo.ie>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -107,18 +107,18 @@ static BOOLEAN __stdcall FormatExCallback(FILE_SYSTEM_CALLBACK_COMMAND Command,
switch(Command) { switch(Command) {
case FCC_PROGRESS: case FCC_PROGRESS:
percent = (DWORD*)pData; percent = (DWORD*)pData;
PrintStatus(0, FALSE, MSG_217, 1.0f * (*percent)); PrintInfo(0, MSG_217, 1.0f * (*percent));
UpdateProgress(OP_FORMAT, 1.0f * (*percent)); UpdateProgress(OP_FORMAT, 1.0f * (*percent));
break; break;
case FCC_STRUCTURE_PROGRESS: // No progress on quick format case FCC_STRUCTURE_PROGRESS: // No progress on quick format
if (task_number < nb_steps[fs_index] - 1) { if (task_number < nb_steps[fs_index] - 1) {
PrintStatus(0, TRUE, MSG_218, ++task_number, nb_steps[fs_index]); PrintInfoDebug(0, MSG_218, ++task_number, nb_steps[fs_index]);
format_percent += 100.0f / (1.0f * nb_steps[fs_index]); format_percent += 100.0f / (1.0f * nb_steps[fs_index]);
UpdateProgress(OP_CREATE_FS, format_percent); UpdateProgress(OP_CREATE_FS, format_percent);
} }
break; break;
case FCC_DONE: case FCC_DONE:
PrintStatus(0, TRUE, MSG_218, nb_steps[fs_index], nb_steps[fs_index]); PrintInfoDebug(0, MSG_218, nb_steps[fs_index], nb_steps[fs_index]);
UpdateProgress(OP_CREATE_FS, 100.0f); UpdateProgress(OP_CREATE_FS, 100.0f);
if(*(BOOLEAN*)pData == FALSE) { if(*(BOOLEAN*)pData == FALSE) {
uprintf("Error while formatting"); uprintf("Error while formatting");
@ -198,7 +198,7 @@ static BOOLEAN __stdcall ChkdskCallback(FILE_SYSTEM_CALLBACK_COMMAND Command, DW
case FCC_PROGRESS: case FCC_PROGRESS:
case FCC_CHECKDISK_PROGRESS: case FCC_CHECKDISK_PROGRESS:
percent = (DWORD*)pData; percent = (DWORD*)pData;
PrintStatus(0, FALSE, MSG_219, *percent); PrintInfo(0, MSG_219, *percent);
break; break;
case FCC_DONE: case FCC_DONE:
if(*(BOOLEAN*)pData == FALSE) { if(*(BOOLEAN*)pData == FALSE) {
@ -414,7 +414,7 @@ static BOOL FormatFAT32(DWORD DriveIndex)
// Debug temp vars // Debug temp vars
ULONGLONG FatNeeded, ClusterCount; ULONGLONG FatNeeded, ClusterCount;
PrintStatus(0, TRUE, MSG_222, "Large FAT32"); PrintInfoDebug(0, MSG_222, "Large FAT32");
LastRefresh = 0; LastRefresh = 0;
VolumeId = GetVolumeID(); VolumeId = GetVolumeID();
@ -620,7 +620,7 @@ static BOOL FormatFAT32(DWORD DriveIndex)
if (GetTickCount() > LastRefresh + 25) { if (GetTickCount() > LastRefresh + 25) {
LastRefresh = GetTickCount(); LastRefresh = GetTickCount();
format_percent = (100.0f*i)/(1.0f*(SystemAreaSize+BurstSize)); format_percent = (100.0f*i)/(1.0f*(SystemAreaSize+BurstSize));
PrintStatus(0, FALSE, MSG_217, format_percent); PrintInfo(0, MSG_217, format_percent);
UpdateProgress(OP_FORMAT, format_percent); UpdateProgress(OP_FORMAT, format_percent);
} }
if (IS_ERROR(FormatStatus)) goto out; // For cancellation if (IS_ERROR(FormatStatus)) goto out; // For cancellation
@ -645,7 +645,7 @@ static BOOL FormatFAT32(DWORD DriveIndex)
} }
// Must do it here, as have issues when trying to write the PBR after a remount // Must do it here, as have issues when trying to write the PBR after a remount
PrintStatus(0, TRUE, MSG_229); PrintInfoDebug(0, MSG_229);
if (!WritePBR(hLogicalVolume)) { if (!WritePBR(hLogicalVolume)) {
// Non fatal error, but the drive probably won't boot // Non fatal error, but the drive probably won't boot
uprintf("Could not write partition boot record - drive may not boot...\n"); uprintf("Could not write partition boot record - drive may not boot...\n");
@ -654,7 +654,7 @@ static BOOL FormatFAT32(DWORD DriveIndex)
// Set the FAT32 volume label // Set the FAT32 volume label
GetWindowTextW(hLabel, wLabel, ARRAYSIZE(wLabel)); GetWindowTextW(hLabel, wLabel, ARRAYSIZE(wLabel));
ToValidLabel(wLabel, TRUE); ToValidLabel(wLabel, TRUE);
PrintStatus(0, TRUE, MSG_221); PrintInfoDebug(0, MSG_221);
// Handle must be closed for SetVolumeLabel to work // Handle must be closed for SetVolumeLabel to work
safe_closehandle(hLogicalVolume); safe_closehandle(hLogicalVolume);
VolumeName = GetLogicalName(DriveIndex, TRUE, TRUE); VolumeName = GetLogicalName(DriveIndex, TRUE, TRUE);
@ -705,9 +705,9 @@ static BOOL FormatDrive(DWORD DriveIndex)
} }
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
if ((fs == FS_UDF) && !((dur_mins == 0) && (dur_secs == 0))) { if ((fs == FS_UDF) && !((dur_mins == 0) && (dur_secs == 0))) {
PrintStatus(0, TRUE, MSG_220, FSType, dur_mins, dur_secs); PrintInfoDebug(0, MSG_220, FSType, dur_mins, dur_secs);
} else { } else {
PrintStatus(0, TRUE, MSG_222, FSType); PrintInfoDebug(0, MSG_222, FSType);
} }
VolumeName = GetLogicalName(DriveIndex, TRUE, TRUE); VolumeName = GetLogicalName(DriveIndex, TRUE, TRUE);
wVolumeName = utf8_to_wchar(VolumeName); wVolumeName = utf8_to_wchar(VolumeName);
@ -787,7 +787,7 @@ static BOOL CheckDisk(char DriveLetter)
size_t i; size_t i;
wDriveRoot[0] = (WCHAR)DriveLetter; wDriveRoot[0] = (WCHAR)DriveLetter;
PrintStatus(0, TRUE, MSG_223); PrintInfoDebug(0, MSG_223);
PF_INIT_OR_OUT(Chkdsk, Fmifs); PF_INIT_OR_OUT(Chkdsk, Fmifs);
@ -816,7 +816,7 @@ static BOOL ClearMBRGPT(HANDLE hPhysicalDrive, LONGLONG DiskSize, DWORD SectorSi
uint64_t i, last_sector = DiskSize/SectorSize; uint64_t i, last_sector = DiskSize/SectorSize;
unsigned char* pBuf = (unsigned char*) calloc(SectorSize, 1); unsigned char* pBuf = (unsigned char*) calloc(SectorSize, 1);
PrintStatus(0, TRUE, MSG_224); PrintInfoDebug(0, MSG_224);
if (pBuf == NULL) { if (pBuf == NULL) {
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_NOT_ENOUGH_MEMORY; FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_NOT_ENOUGH_MEMORY;
goto out; goto out;
@ -1274,7 +1274,7 @@ void update_progress(const uint64_t processed_bytes)
if (GetTickCount() > LastRefresh + 25) { if (GetTickCount() > LastRefresh + 25) {
LastRefresh = GetTickCount(); LastRefresh = GetTickCount();
format_percent = (100.0f*processed_bytes)/(1.0f*iso_report.projected_size); format_percent = (100.0f*processed_bytes)/(1.0f*iso_report.projected_size);
PrintStatus(0, FALSE, MSG_261, format_percent); PrintInfo(0, MSG_261, format_percent);
UpdateProgress(OP_FORMAT, format_percent); UpdateProgress(OP_FORMAT, format_percent);
} }
} }
@ -1326,7 +1326,7 @@ DWORD WINAPI FormatThread(void* param)
use_large_fat32 = (fs == FS_FAT32) && ((SelectedDrive.DiskSize > LARGE_FAT32_SIZE) || (force_large_fat32)); use_large_fat32 = (fs == FS_FAT32) && ((SelectedDrive.DiskSize > LARGE_FAT32_SIZE) || (force_large_fat32));
add_uefi_togo = (fs == FS_NTFS) && (dt == DT_ISO) && (IS_EFI(iso_report)) && (bt == BT_UEFI); add_uefi_togo = (fs == FS_NTFS) && (dt == DT_ISO) && (IS_EFI(iso_report)) && (bt == BT_UEFI);
PrintStatus(0, TRUE, MSG_225); PrintInfoDebug(0, MSG_225);
hPhysicalDrive = GetPhysicalHandle(DriveIndex, TRUE, TRUE); hPhysicalDrive = GetPhysicalHandle(DriveIndex, TRUE, TRUE);
if (hPhysicalDrive == INVALID_HANDLE_VALUE) { if (hPhysicalDrive == INVALID_HANDLE_VALUE) {
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_OPEN_FAILED; FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_OPEN_FAILED;
@ -1382,7 +1382,7 @@ DWORD WINAPI FormatThread(void* param)
} }
CHECK_FOR_USER_CANCEL; CHECK_FOR_USER_CANCEL;
PrintStatus(0, TRUE, MSG_226); PrintInfoDebug(0, MSG_226);
AnalyzeMBR(hPhysicalDrive, "Drive"); AnalyzeMBR(hPhysicalDrive, "Drive");
if ((hLogicalVolume != NULL) && (hLogicalVolume != INVALID_HANDLE_VALUE)) { if ((hLogicalVolume != NULL) && (hLogicalVolume != INVALID_HANDLE_VALUE)) {
AnalyzePBR(hLogicalVolume); AnalyzePBR(hLogicalVolume);
@ -1481,7 +1481,7 @@ DWORD WINAPI FormatThread(void* param)
if (iso_report.compression_type != BLED_COMPRESSION_NONE) { if (iso_report.compression_type != BLED_COMPRESSION_NONE) {
uprintf("Writing Compressed Image..."); uprintf("Writing Compressed Image...");
bled_init(_uprintf, update_progress); bled_init(_uprintf, update_progress, &FormatStatus);
bled_uncompress_with_handles(hSourceImage, hPhysicalDrive, iso_report.compression_type); bled_uncompress_with_handles(hSourceImage, hPhysicalDrive, iso_report.compression_type);
bled_exit(); bled_exit();
} else { } else {
@ -1512,7 +1512,7 @@ DWORD WINAPI FormatThread(void* param)
if (GetTickCount() > LastRefresh + 25) { if (GetTickCount() > LastRefresh + 25) {
LastRefresh = GetTickCount(); LastRefresh = GetTickCount();
format_percent = (100.0f*wb)/(1.0f*iso_report.projected_size); format_percent = (100.0f*wb)/(1.0f*iso_report.projected_size);
PrintStatus(0, FALSE, MSG_261, format_percent); PrintInfo(0, MSG_261, format_percent);
UpdateProgress(OP_FORMAT, format_percent); UpdateProgress(OP_FORMAT, format_percent);
} }
// Don't overflow our projected size (mostly for VHDs) // Don't overflow our projected size (mostly for VHDs)
@ -1571,7 +1571,7 @@ DWORD WINAPI FormatThread(void* param)
// Close the (unmounted) volume before formatting // Close the (unmounted) volume before formatting
if ((hLogicalVolume != NULL) && (hLogicalVolume != INVALID_HANDLE_VALUE)) { if ((hLogicalVolume != NULL) && (hLogicalVolume != INVALID_HANDLE_VALUE)) {
PrintStatus(0, TRUE, MSG_227); PrintInfoDebug(0, MSG_227);
if (!CloseHandle(hLogicalVolume)) { if (!CloseHandle(hLogicalVolume)) {
uprintf("Could not close volume: %s\n", WindowsErrorString()); uprintf("Could not close volume: %s\n", WindowsErrorString());
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_ACCESS_DENIED; FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_ACCESS_DENIED;
@ -1598,7 +1598,7 @@ DWORD WINAPI FormatThread(void* param)
// Thanks to Microsoft, we must fix the MBR AFTER the drive has been formatted // Thanks to Microsoft, we must fix the MBR AFTER the drive has been formatted
if (pt == PARTITION_STYLE_MBR) { if (pt == PARTITION_STYLE_MBR) {
PrintStatus(0, TRUE, MSG_228); // "Writing master boot record..." PrintInfoDebug(0, MSG_228); // "Writing master boot record..."
if ((!WriteMBR(hPhysicalDrive)) || (!WriteSBR(hPhysicalDrive))) { if ((!WriteMBR(hPhysicalDrive)) || (!WriteSBR(hPhysicalDrive))) {
if (!IS_ERROR(FormatStatus)) if (!IS_ERROR(FormatStatus))
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT; FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
@ -1646,7 +1646,7 @@ DWORD WINAPI FormatThread(void* param)
} }
// NB: if you unmount the logical volume here, XP will report error: // NB: if you unmount the logical volume here, XP will report error:
// [0x00000456] The media in the drive may have changed // [0x00000456] The media in the drive may have changed
PrintStatus(0, TRUE, MSG_229); PrintInfoDebug(0, MSG_229);
if (!WritePBR(hLogicalVolume)) { if (!WritePBR(hLogicalVolume)) {
if (!IS_ERROR(FormatStatus)) if (!IS_ERROR(FormatStatus))
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT; FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
@ -1676,7 +1676,7 @@ DWORD WINAPI FormatThread(void* param)
if (IsChecked(IDC_BOOT)) { if (IsChecked(IDC_BOOT)) {
if ((dt == DT_WINME) || (dt == DT_FREEDOS)) { if ((dt == DT_WINME) || (dt == DT_FREEDOS)) {
UpdateProgress(OP_DOS, -1.0f); UpdateProgress(OP_DOS, -1.0f);
PrintStatus(0, TRUE, MSG_230); PrintInfoDebug(0, MSG_230);
if (!ExtractDOS(drive_name)) { if (!ExtractDOS(drive_name)) {
if (!IS_ERROR(FormatStatus)) if (!IS_ERROR(FormatStatus))
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANNOT_COPY; FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANNOT_COPY;
@ -1691,7 +1691,7 @@ DWORD WINAPI FormatThread(void* param)
} else if (dt == DT_ISO) { } else if (dt == DT_ISO) {
if (image_path != NULL) { if (image_path != NULL) {
UpdateProgress(OP_DOS, 0.0f); UpdateProgress(OP_DOS, 0.0f);
PrintStatus(0, TRUE, MSG_231); PrintInfoDebug(0, MSG_231);
drive_name[2] = 0; drive_name[2] = 0;
if (!ExtractISO(image_path, drive_name, FALSE)) { if (!ExtractISO(image_path, drive_name, FALSE)) {
if (!IS_ERROR(FormatStatus)) if (!IS_ERROR(FormatStatus))
@ -1707,7 +1707,7 @@ DWORD WINAPI FormatThread(void* param)
} }
} }
if ((bt == BT_UEFI) && (!iso_report.has_efi) && (iso_report.has_win7_efi)) { if ((bt == BT_UEFI) && (!iso_report.has_efi) && (iso_report.has_win7_efi)) {
PrintStatus(0, TRUE, MSG_232); PrintInfoDebug(0, MSG_232);
wim_image[0] = drive_name[0]; wim_image[0] = drive_name[0];
efi_dst[0] = drive_name[0]; efi_dst[0] = drive_name[0];
efi_dst[sizeof(efi_dst) - sizeof("\\bootx64.efi")] = 0; efi_dst[sizeof(efi_dst) - sizeof("\\bootx64.efi")] = 0;
@ -1730,7 +1730,7 @@ DWORD WINAPI FormatThread(void* param)
} }
} }
UpdateProgress(OP_FINALIZE, -1.0f); UpdateProgress(OP_FINALIZE, -1.0f);
PrintStatus(0, TRUE, MSG_233); PrintInfoDebug(0, MSG_233);
if (IsChecked(IDC_SET_ICON)) if (IsChecked(IDC_SET_ICON))
SetAutorun(drive_name); SetAutorun(drive_name);
// Issue another complete remount before we exit, to ensure we're clean // Issue another complete remount before we exit, to ensure we're clean
@ -1751,7 +1751,6 @@ DWORD WINAPI FormatThread(void* param)
out: out:
safe_free(guid_volume); safe_free(guid_volume);
safe_free(buffer); safe_free(buffer);
SendMessage(hISOProgressDlg, UM_PROGRESS_EXIT, 0, 0);
safe_closehandle(hSourceImage); safe_closehandle(hSourceImage);
safe_unlockclose(hLogicalVolume); safe_unlockclose(hLogicalVolume);
safe_unlockclose(hPhysicalDrive); // This can take a while safe_unlockclose(hPhysicalDrive); // This can take a while
@ -1778,7 +1777,7 @@ DWORD WINAPI SaveImageThread(void* param)
uint64_t wb; uint64_t wb;
int i; int i;
PrintStatus(0, TRUE, MSG_225); PrintInfoDebug(0, MSG_225);
LastRefresh = 0; LastRefresh = 0;
hPhysicalDrive = GetPhysicalHandle(DriveIndex, FALSE, TRUE); hPhysicalDrive = GetPhysicalHandle(DriveIndex, FALSE, TRUE);
if (hPhysicalDrive == INVALID_HANDLE_VALUE) { if (hPhysicalDrive == INVALID_HANDLE_VALUE) {
@ -1823,7 +1822,7 @@ DWORD WINAPI SaveImageThread(void* param)
if (GetTickCount() > LastRefresh + 25) { if (GetTickCount() > LastRefresh + 25) {
LastRefresh = GetTickCount(); LastRefresh = GetTickCount();
format_percent = (100.0f*wb)/(1.0f*SelectedDrive.DiskSize); format_percent = (100.0f*wb)/(1.0f*SelectedDrive.DiskSize);
PrintStatus(0, FALSE, MSG_261, format_percent); PrintInfo(0, MSG_261, format_percent);
UpdateProgress(OP_FORMAT, format_percent); UpdateProgress(OP_FORMAT, format_percent);
} }
for (i=0; i<WRITE_RETRIES; i++) { for (i=0; i<WRITE_RETRIES; i++) {
@ -1861,7 +1860,6 @@ DWORD WINAPI SaveImageThread(void* param)
out: out:
safe_free(buffer); safe_free(buffer);
SendMessage(hISOProgressDlg, UM_PROGRESS_EXIT, 0, 0);
safe_closehandle(hDestImage); safe_closehandle(hDestImage);
safe_unlockclose(hPhysicalDrive); safe_unlockclose(hPhysicalDrive);
PostMessage(hMainDialog, UM_FORMAT_COMPLETED, 0, 0); PostMessage(hMainDialog, UM_FORMAT_COMPLETED, 0, 0);

View file

@ -1,9 +1,9 @@
/* /*
* Rufus: The Reliable USB Formatting Utility * Rufus: The Reliable USB Formatting Utility
* ISO file extraction * ISO file extraction
* Copyright © 2011-2014 Pete Batard <pete@akeo.ie> * Copyright © 2011-2015 Pete Batard <pete@akeo.ie>
* Based on libcdio's iso & udf samples: * Based on libcdio's iso & udf samples:
* Copyright © 2003-2012 Rocky Bernstein <rocky@gnu.org> * Copyright © 2003-2014 Rocky Bernstein <rocky@gnu.org>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -98,7 +98,7 @@ static __inline char* sanitize_filename(char* filename, BOOL* is_identical)
*is_identical = TRUE; *is_identical = TRUE;
ret = safe_strdup(filename); ret = safe_strdup(filename);
if (ret == NULL) { if (ret == NULL) {
uprintf("Couldn't allocate string for sanitized path"); uprintf("Could not allocate string for sanitized path");
return NULL; return NULL;
} }
@ -282,7 +282,8 @@ static void print_extracted_file(char* psz_fullpath, int64_t i_file_length)
safe_sprintf(&psz_fullpath[nul_pos], 24, " (%s)", SizeToHumanReadable(i_file_length, TRUE, FALSE)); safe_sprintf(&psz_fullpath[nul_pos], 24, " (%s)", SizeToHumanReadable(i_file_length, TRUE, FALSE));
uprintf("Extracting: %s\n", psz_fullpath); uprintf("Extracting: %s\n", psz_fullpath);
safe_sprintf(&psz_fullpath[nul_pos], 24, " (%s)", SizeToHumanReadable(i_file_length, FALSE, FALSE)); safe_sprintf(&psz_fullpath[nul_pos], 24, " (%s)", SizeToHumanReadable(i_file_length, FALSE, FALSE));
SetWindowTextU(hISOFileName, psz_fullpath); SendMessageLU(GetDlgItem(hMainDialog, IDC_STATUS), SB_SETTEXTW, SBT_OWNERDRAW, psz_fullpath);
PrintStatus(0, MSG_000, psz_fullpath); // MSG_000 is "%s"
// ISO9660 cannot handle backslashes // ISO9660 cannot handle backslashes
for (i=0; i<nul_pos; i++) for (i=0; i<nul_pos; i++)
if (psz_fullpath[i] == '\\') psz_fullpath[i] = '/'; if (psz_fullpath[i] == '\\') psz_fullpath[i] = '/';
@ -386,10 +387,8 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha
} }
if (i >= WRITE_RETRIES) goto out; if (i >= WRITE_RETRIES) goto out;
i_file_length -= i_read; i_file_length -= i_read;
if (nb_blocks++ % PROGRESS_THRESHOLD == 0) { if (nb_blocks++ % PROGRESS_THRESHOLD == 0)
SendMessage(hISOProgressBar, PBM_SETPOS, (WPARAM)((MAX_PROGRESS*nb_blocks)/total_blocks), 0);
UpdateProgress(OP_DOS, 100.0f*nb_blocks/total_blocks); UpdateProgress(OP_DOS, 100.0f*nb_blocks/total_blocks);
}
} }
// If you have a fast USB 3.0 device, the default Windows buffering does an // If you have a fast USB 3.0 device, the default Windows buffering does an
// excellent job at compensating for our small blocks read/writes to max out the // excellent job at compensating for our small blocks read/writes to max out the
@ -533,10 +532,8 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path)
} }
if (j >= WRITE_RETRIES) goto out; if (j >= WRITE_RETRIES) goto out;
i_file_length -= ISO_BLOCKSIZE; i_file_length -= ISO_BLOCKSIZE;
if (nb_blocks++ % PROGRESS_THRESHOLD == 0) { if (nb_blocks++ % PROGRESS_THRESHOLD == 0)
SendMessage(hISOProgressBar, PBM_SETPOS, (WPARAM)((MAX_PROGRESS*nb_blocks)/total_blocks), 0);
UpdateProgress(OP_DOS, 100.0f*nb_blocks/total_blocks); UpdateProgress(OP_DOS, 100.0f*nb_blocks/total_blocks);
}
} }
ISO_BLOCKING(safe_closehandle(file_handle)); ISO_BLOCKING(safe_closehandle(file_handle));
if (props.is_syslinux_cfg || props.is_grub_cfg) if (props.is_syslinux_cfg || props.is_grub_cfg)
@ -583,7 +580,6 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan)
iso9660_t* p_iso = NULL; iso9660_t* p_iso = NULL;
udf_t* p_udf = NULL; udf_t* p_udf = NULL;
udf_dirent_t* p_udf_root; udf_dirent_t* p_udf_root;
LONG progress_style;
char *tmp, *buf, *ext; char *tmp, *buf, *ext;
char path[MAX_PATH]; char path[MAX_PATH];
const char* basedir[] = { "i386", "minint" }; const char* basedir[] = { "i386", "minint" };
@ -596,24 +592,20 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan)
scan_only = scan; scan_only = scan;
cdio_log_set_handler(log_handler); cdio_log_set_handler(log_handler);
psz_extract_dir = dest_dir; psz_extract_dir = dest_dir;
progress_style = GetWindowLong(hISOProgressBar, GWL_STYLE); // Change progress style to marquee for scanning
if (scan_only) { if (scan_only) {
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));
has_ldlinux_c32 = FALSE; has_ldlinux_c32 = FALSE;
// String array of all isolinux/syslinux locations // String array of all isolinux/syslinux locations
StrArrayCreate(&config_path, 8); StrArrayCreate(&config_path, 8);
StrArrayCreate(&isolinux_path, 8); StrArrayCreate(&isolinux_path, 8);
// Change the Window title and static text PrintInfo(0, MSG_202);
SetWindowTextU(hISOProgressDlg, lmprintf(MSG_202));
SetWindowTextU(hISOFileName, lmprintf(MSG_202));
// Change progress style to marquee for scanning
SetWindowLong(hISOProgressBar, GWL_STYLE, progress_style | PBS_MARQUEE);
SendMessage(hISOProgressBar, PBM_SETMARQUEE, TRUE, 0);
} else { } else {
uprintf("Extracting files...\n"); uprintf("Extracting files...\n");
IGNORE_RETVAL(_chdirU(app_dir)); IGNORE_RETVAL(_chdirU(app_dir));
SetWindowTextU(hISOProgressDlg, lmprintf(MSG_231)); PrintInfo(0, MSG_231);
if (total_blocks == 0) { if (total_blocks == 0) {
uprintf("Error: ISO has not been properly scanned.\n"); uprintf("Error: ISO has not been properly scanned.\n");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_ISO_SCAN); FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_ISO_SCAN);
@ -621,10 +613,7 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan)
} }
nb_blocks = 0; nb_blocks = 0;
iso_blocking_status = 0; iso_blocking_status = 0;
SetWindowLong(hISOProgressBar, GWL_STYLE, progress_style & (~PBS_MARQUEE));
SendMessage(hISOProgressBar, PBM_SETPOS, 0, 0);
} }
SendMessage(hISOProgressDlg, UM_PROGRESS_INIT, 0, 0);
/* First try to open as UDF - fallback to ISO if it failed */ /* First try to open as UDF - fallback to ISO if it failed */
p_udf = udf_open(src_iso); p_udf = udf_open(src_iso);
@ -634,7 +623,7 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan)
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("Couldn't locate UDF root directory\n"); uprintf("Could not locate UDF root directory\n");
goto out; goto out;
} }
if (scan_only) { if (scan_only) {
@ -785,6 +774,7 @@ out:
} }
StrArrayDestroy(&config_path); StrArrayDestroy(&config_path);
StrArrayDestroy(&isolinux_path); StrArrayDestroy(&isolinux_path);
SendMessage(hMainDialog, UM_PROGRESS_EXIT, 0, 0);
} else if (HAS_SYSLINUX(iso_report)) { } else if (HAS_SYSLINUX(iso_report)) {
safe_sprintf(path, sizeof(path), "%s\\syslinux.cfg", dest_dir); safe_sprintf(path, sizeof(path), "%s\\syslinux.cfg", dest_dir);
// Create a /syslinux.cfg (if none exists) that points to the existing isolinux cfg // Create a /syslinux.cfg (if none exists) that points to the existing isolinux cfg
@ -808,7 +798,6 @@ out:
if (fd != NULL) if (fd != NULL)
fclose(fd); fclose(fd);
} }
SendMessage(hISOProgressDlg, UM_PROGRESS_EXIT, 0, 0);
if (p_iso != NULL) if (p_iso != NULL)
iso9660_close(p_iso); iso9660_close(p_iso);
if (p_udf != NULL) if (p_udf != NULL)
@ -847,12 +836,12 @@ int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_f
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("Couldn't locate UDF root directory\n"); uprintf("Could not locate UDF root directory\n");
goto out; goto out;
} }
p_udf_file = udf_fopen(p_udf_root, iso_file); p_udf_file = udf_fopen(p_udf_root, iso_file);
if (!p_udf_file) { if (!p_udf_file) {
uprintf("Couldn't locate file %s in ISO image\n", iso_file); uprintf("Could not locate file %s in ISO image\n", iso_file);
goto out; goto out;
} }
file_length = udf_get_file_length(p_udf_file); file_length = udf_get_file_length(p_udf_file);

View file

@ -1,7 +1,7 @@
/* /*
* Rufus: The Reliable USB Formatting Utility * Rufus: The Reliable USB Formatting Utility
* Localization functions, a.k.a. "Everybody is doing it wrong but me!" * Localization functions, a.k.a. "Everybody is doing it wrong but me!"
* Copyright © 2013-2014 Pete Batard <pete@akeo.ie> * Copyright © 2013-2015 Pete Batard <pete@akeo.ie>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -74,14 +74,14 @@ struct list_head locale_list = {NULL, NULL};
char *loc_filename = NULL, *embedded_loc_filename = "embedded.loc"; char *loc_filename = NULL, *embedded_loc_filename = "embedded.loc";
/* Message table */ /* Message table */
char* default_msg_table[MSG_MAX-MSG_000] = {0}; char* default_msg_table[MSG_MAX-MSG_000] = {"%s", 0};
char* current_msg_table[MSG_MAX-MSG_000] = {0}; char* current_msg_table[MSG_MAX-MSG_000] = {"%s", 0};
char** msg_table = NULL; char** msg_table = NULL;
static void mtab_destroy(BOOL reinit) static void mtab_destroy(BOOL reinit)
{ {
size_t j; size_t j;
for (j=0; j<MSG_MAX-MSG_000; j++) { for (j=1; j<MSG_MAX-MSG_000; j++) {
safe_free(current_msg_table[j]); safe_free(current_msg_table[j]);
if (!reinit) if (!reinit)
safe_free(default_msg_table[j]); safe_free(default_msg_table[j]);
@ -402,7 +402,7 @@ char* lmprintf(int msg_id, ...)
*/ */
static BOOL bStatusTimerArmed = FALSE; static BOOL bStatusTimerArmed = FALSE;
char szStatusMessage[256] = { 0 }; char szStatusMessage[256] = { 0 };
static void CALLBACK PrintStatusTimeout(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) static void CALLBACK PrintStatusTimeout(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{ {
bStatusTimerArmed = FALSE; bStatusTimerArmed = FALSE;
// potentially display lower priority message that was overridden // potentially display lower priority message that was overridden
@ -410,20 +410,30 @@ static void CALLBACK PrintStatusTimeout(HWND hwnd, UINT uMsg, UINT_PTR idEvent,
KillTimer(hMainDialog, TID_MESSAGE); KillTimer(hMainDialog, TID_MESSAGE);
} }
void PrintStatus(unsigned int duration, BOOL debug, int msg_id, ...) static void CALLBACK PrintInfoTimeout(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
bStatusTimerArmed = FALSE;
SetWindowTextU(hInfo, szStatusMessage);
KillTimer(hMainDialog, TID_MESSAGE);
}
void PrintStatusInfo(BOOL info, BOOL debug, unsigned int duration, int msg_id, ...)
{ {
char *format = NULL, buf[sizeof(szStatusMessage)]; char *format = NULL, buf[sizeof(szStatusMessage)];
va_list args; va_list args;
if (msg_id < 0) { if (msg_id < 0) {
//A negative msg_id clears the status // A negative msg_id clears the text area
szStatusMessage[0] = 0; szStatusMessage[0] = 0;
SendMessageLU(GetDlgItem(hMainDialog, IDC_STATUS), SB_SETTEXTW, SBT_OWNERDRAW, szStatusMessage); if (info)
SetWindowTextU(hInfo, szStatusMessage);
else
SendMessageLU(GetDlgItem(hMainDialog, IDC_STATUS), SB_SETTEXTW, SBT_OWNERDRAW, szStatusMessage);
return; return;
} }
if ((msg_id <= MSG_000) || (msg_id >= MSG_MAX)) { if ((msg_id < MSG_000) || (msg_id >= MSG_MAX)) {
uprintf("PrintStatus: invalid MSG_ID\n"); uprintf("PrintStatusInfo: invalid MSG_ID\n");
return; return;
} }
@ -438,12 +448,15 @@ void PrintStatus(unsigned int duration, BOOL debug, int msg_id, ...)
va_end(args); va_end(args);
szStatusMessage[sizeof(szStatusMessage)-1] = '\0'; szStatusMessage[sizeof(szStatusMessage)-1] = '\0';
if ((duration) || (!bStatusTimerArmed)) { if ((duration != 0) || (!bStatusTimerArmed)) {
SendMessageLU(GetDlgItem(hMainDialog, IDC_STATUS), SB_SETTEXTW, SBT_OWNERDRAW, szStatusMessage); if (info)
SetWindowTextU(hInfo, szStatusMessage);
else
SendMessageLU(GetDlgItem(hMainDialog, IDC_STATUS), SB_SETTEXTW, SBT_OWNERDRAW, szStatusMessage);
} }
if (duration) { if (duration != 0) {
SetTimer(hMainDialog, TID_MESSAGE, duration, PrintStatusTimeout); SetTimer(hMainDialog, TID_MESSAGE, duration, (info)?PrintInfoTimeout:PrintStatusTimeout);
bStatusTimerArmed = TRUE; bStatusTimerArmed = TRUE;
} }

View file

@ -1,7 +1,7 @@
/* /*
* Rufus: The Reliable USB Formatting Utility * Rufus: The Reliable USB Formatting Utility
* Localization tables - autogenerated from resource.h * Localization tables - autogenerated from resource.h
* Copyright © 2013-2014 Pete Batard <pete@akeo.ie> * Copyright © 2013-2015 Pete Batard <pete@akeo.ie>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -31,7 +31,6 @@ const loc_control_id control_id[] = {
LOC_CTRL(IDD_ABOUTBOX), LOC_CTRL(IDD_ABOUTBOX),
LOC_CTRL(IDD_NOTIFICATION), LOC_CTRL(IDD_NOTIFICATION),
LOC_CTRL(IDD_LICENSE), LOC_CTRL(IDD_LICENSE),
LOC_CTRL(IDD_ISO_EXTRACT),
LOC_CTRL(IDD_LOG), LOC_CTRL(IDD_LOG),
LOC_CTRL(IDD_UPDATE_POLICY), LOC_CTRL(IDD_UPDATE_POLICY),
LOC_CTRL(IDD_NEW_VERSION), LOC_CTRL(IDD_NEW_VERSION),
@ -53,8 +52,7 @@ const loc_control_id control_id[] = {
LOC_CTRL(IDC_SELECT_ISO), LOC_CTRL(IDC_SELECT_ISO),
LOC_CTRL(IDC_SET_ICON), LOC_CTRL(IDC_SET_ICON),
LOC_CTRL(IDC_RUFUS_MBR), LOC_CTRL(IDC_RUFUS_MBR),
LOC_CTRL(IDC_ISO_FILENAME), LOC_CTRL(IDC_INFO),
LOC_CTRL(IDC_ISO_ABORT),
LOC_CTRL(IDC_DISK_ID), LOC_CTRL(IDC_DISK_ID),
LOC_CTRL(IDC_EXTRA_PARTITION), LOC_CTRL(IDC_EXTRA_PARTITION),
LOC_CTRL(IDC_ENABLE_FIXED_DISKS), LOC_CTRL(IDC_ENABLE_FIXED_DISKS),
@ -380,7 +378,6 @@ loc_dlg_list loc_dlg[] = {
LOC_DLG(IDD_ABOUTBOX), LOC_DLG(IDD_ABOUTBOX),
LOC_DLG(IDD_NOTIFICATION), LOC_DLG(IDD_NOTIFICATION),
LOC_DLG(IDD_LICENSE), LOC_DLG(IDD_LICENSE),
LOC_DLG(IDD_ISO_EXTRACT),
LOC_DLG(IDD_LOG), LOC_DLG(IDD_LOG),
LOC_DLG(IDD_UPDATE_POLICY), LOC_DLG(IDD_UPDATE_POLICY),
LOC_DLG(IDD_NEW_VERSION), LOC_DLG(IDD_NEW_VERSION),

View file

@ -12,7 +12,7 @@ cat > cmd.sed <<\_EOF
1i /*\ 1i /*\
* Rufus: The Reliable USB Formatting Utility\ * Rufus: The Reliable USB Formatting Utility\
* Localization tables - autogenerated from resource.h\ * Localization tables - autogenerated from resource.h\
* Copyright © 2013-2014 Pete Batard <pete@akeo.ie>\ * Copyright © 2013-2015 Pete Batard <pete@akeo.ie>\
*\ *\
* This program is free software: you can redistribute it and/or modify\ * This program is free software: you can redistribute it and/or modify\
* it under the terms of the GNU General Public License as published by\ * it under the terms of the GNU General Public License as published by\

View file

@ -1,7 +1,7 @@
/* /*
* Rufus: The Reliable USB Formatting Utility * Rufus: The Reliable USB Formatting Utility
* Networking functionality (web file download, check for update, etc.) * Networking functionality (web file download, check for update, etc.)
* Copyright © 2012-2014 Pete Batard <pete@akeo.ie> * Copyright © 2012-2015 Pete Batard <pete@akeo.ie>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -277,7 +277,7 @@ DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog)
} }
} }
PrintStatus(0, FALSE, MSG_240, &file[last_slash]); PrintInfo(0, MSG_240, &file[last_slash]);
uprintf("Downloading '%s' from %s\n", &file[last_slash], url); uprintf("Downloading '%s' from %s\n", &file[last_slash], url);
if ( (!InternetCrackUrlA(url, (DWORD)safe_strlen(url), 0, &UrlParts)) if ( (!InternetCrackUrlA(url, (DWORD)safe_strlen(url), 0, &UrlParts))
@ -357,7 +357,7 @@ DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog)
break; break;
dwSize += dwDownloaded; dwSize += dwDownloaded;
SendMessage(hProgressBar, PBM_SETPOS, (WPARAM)(MAX_PROGRESS*((1.0f*dwSize)/(1.0f*dwTotalSize))), 0); SendMessage(hProgressBar, PBM_SETPOS, (WPARAM)(MAX_PROGRESS*((1.0f*dwSize)/(1.0f*dwTotalSize))), 0);
PrintStatus(0, FALSE, MSG_241, (100.0f*dwSize)/(1.0f*dwTotalSize)); PrintInfo(0, MSG_241, (100.0f*dwSize)/(1.0f*dwTotalSize));
if (fwrite(buf, 1, dwDownloaded, fd) != dwDownloaded) { if (fwrite(buf, 1, dwDownloaded, fd) != dwDownloaded) {
uprintf("Error writing file '%s': %s\n", &file[last_slash], WinInetErrorString()); uprintf("Error writing file '%s': %s\n", &file[last_slash], WinInetErrorString());
goto out; goto out;
@ -380,7 +380,7 @@ out:
if (!r) { if (!r) {
_unlink(file); _unlink(file);
if (PromptOnError) { if (PromptOnError) {
PrintStatus(0, FALSE, MSG_242); PrintInfo(0, MSG_242);
SetLastError(error_code); SetLastError(error_code);
MessageBoxU(hMainDialog, IS_ERROR(FormatStatus)?StrError(FormatStatus, FALSE):WinInetErrorString(), MessageBoxU(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);
@ -475,7 +475,7 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
} }
} }
PrintStatus(3000, TRUE, MSG_243); PrintInfoDebug(3000, MSG_243);
status++; // 1 status++; // 1
if (!GetVersionExA(&os_version)) { if (!GetVersionExA(&os_version)) {
@ -607,14 +607,14 @@ out:
if (hSession) InternetCloseHandle(hSession); if (hSession) InternetCloseHandle(hSession);
switch(status) { switch(status) {
case 1: case 1:
PrintStatus(3000, TRUE, MSG_244); PrintInfoDebug(3000, MSG_244);
break; break;
case 2: case 2:
PrintStatus(3000, TRUE, MSG_245); PrintInfoDebug(3000, MSG_245);
break; break;
case 3: case 3:
case 4: case 4:
PrintStatus(3000, FALSE, found_new_version?MSG_246:MSG_247); PrintInfo(3000, found_new_version?MSG_246:MSG_247);
default: default:
break; break;
} }

View file

@ -6,7 +6,6 @@
#define IDD_ABOUTBOX 102 #define IDD_ABOUTBOX 102
#define IDD_NOTIFICATION 103 #define IDD_NOTIFICATION 103
#define IDD_LICENSE 104 #define IDD_LICENSE 104
#define IDD_ISO_EXTRACT 105
#define IDD_LOG 106 #define IDD_LOG 106
#define IDD_UPDATE_POLICY 107 #define IDD_UPDATE_POLICY 107
#define IDD_NEW_VERSION 108 #define IDD_NEW_VERSION 108
@ -17,7 +16,6 @@
#define IDD_ABOUTBOX_XP 152 #define IDD_ABOUTBOX_XP 152
#define IDD_NOTIFICATION_XP 153 #define IDD_NOTIFICATION_XP 153
#define IDD_LICENSE_XP 154 #define IDD_LICENSE_XP 154
#define IDD_ISO_EXTRACT_XP 155
#define IDD_LOG_XP 156 #define IDD_LOG_XP 156
#define IDD_UPDATE_POLICY_XP 157 #define IDD_UPDATE_POLICY_XP 157
#define IDD_NEW_VERSION_XP 158 #define IDD_NEW_VERSION_XP 158
@ -25,7 +23,6 @@
#define IDD_ABOUTBOX_RTL 202 #define IDD_ABOUTBOX_RTL 202
#define IDD_NOTIFICATION_RTL 203 #define IDD_NOTIFICATION_RTL 203
#define IDD_LICENSE_RTL 204 #define IDD_LICENSE_RTL 204
#define IDD_ISO_EXTRACT_RTL 205
#define IDD_LOG_RTL 206 #define IDD_LOG_RTL 206
#define IDD_UPDATE_POLICY_RTL 207 #define IDD_UPDATE_POLICY_RTL 207
#define IDD_NEW_VERSION_RTL 208 #define IDD_NEW_VERSION_RTL 208
@ -33,7 +30,6 @@
#define IDD_ABOUTBOX_RTL_XP 252 #define IDD_ABOUTBOX_RTL_XP 252
#define IDD_NOTIFICATION_RTL_XP 253 #define IDD_NOTIFICATION_RTL_XP 253
#define IDD_LICENSE_RTL_XP 254 #define IDD_LICENSE_RTL_XP 254
#define IDD_ISO_EXTRACT_RTL_XP 255
#define IDD_LOG_RTL_XP 256 #define IDD_LOG_RTL_XP 256
#define IDD_UPDATE_POLICY_RTL_XP 257 #define IDD_UPDATE_POLICY_RTL_XP 257
#define IDD_NEW_VERSION_RTL_XP 258 #define IDD_NEW_VERSION_RTL_XP 258
@ -92,8 +88,7 @@
#define IDC_SELECT_ISO 1016 #define IDC_SELECT_ISO 1016
#define IDC_SET_ICON 1017 #define IDC_SET_ICON 1017
#define IDC_RUFUS_MBR 1018 #define IDC_RUFUS_MBR 1018
#define IDC_ISO_FILENAME 1020 #define IDC_INFO 1020
#define IDC_ISO_ABORT 1021
#define IDC_DISK_ID 1022 #define IDC_DISK_ID 1022
#define IDC_EXTRA_PARTITION 1023 #define IDC_EXTRA_PARTITION 1023
#define IDC_ENABLE_FIXED_DISKS 1024 #define IDC_ENABLE_FIXED_DISKS 1024

View file

@ -1,6 +1,6 @@
/* /*
* Rufus: The Reliable USB Formatting Utility * Rufus: The Reliable USB Formatting Utility
* Copyright © 2011-2014 Pete Batard <pete@akeo.ie> * Copyright © 2011-2015 Pete Batard <pete@akeo.ie>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -124,7 +124,7 @@ float fScale = 1.0f;
int default_fs; int default_fs;
uint32_t dur_mins, dur_secs; uint32_t dur_mins, dur_secs;
HWND hDeviceList, hPartitionScheme, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog = NULL; HWND hDeviceList, hPartitionScheme, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog = NULL;
HWND hISOProgressDlg = NULL, hLogDlg = NULL, hISOProgressBar, hISOFileName, hDiskID; HWND hLogDlg = NULL, hProgress = NULL, hInfo, hDiskID;
BOOL use_own_c32[NB_OLD_C32] = {FALSE, FALSE}, detect_fakes = TRUE, mbr_selected_by_user = FALSE; BOOL use_own_c32[NB_OLD_C32] = {FALSE, FALSE}, detect_fakes = TRUE, mbr_selected_by_user = FALSE;
BOOL iso_op_in_progress = FALSE, format_op_in_progress = FALSE, right_to_left_mode = FALSE; BOOL iso_op_in_progress = FALSE, format_op_in_progress = FALSE, right_to_left_mode = FALSE;
BOOL enable_HDDs = FALSE, advanced_mode = TRUE, force_update = FALSE, use_fake_units = TRUE; BOOL enable_HDDs = FALSE, advanced_mode = TRUE, force_update = FALSE, use_fake_units = TRUE;
@ -140,7 +140,7 @@ StrArray DriveID, DriveLabel;
extern char szStatusMessage[256]; extern char szStatusMessage[256];
static HANDLE format_thid = NULL; static HANDLE format_thid = NULL;
static HWND hProgress = NULL, hBoot = NULL, hSelectISO = NULL; static HWND hBoot = NULL, hSelectISO = NULL;
static HICON hIconDisc, hIconDown, hIconUp, hIconLang; static HICON hIconDisc, hIconDown, hIconUp, hIconLang;
static char szTimer[12] = "00:00:00"; static char szTimer[12] = "00:00:00";
static unsigned int timer; static unsigned int timer;
@ -887,65 +887,6 @@ static void CALLBACK BlockingTimer(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD
} }
} }
/* Callback for the modeless ISO extraction progress, and other progress dialogs */
BOOL CALLBACK ISOProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_SHOWWINDOW:
// If we don't do this, the ISO progress dialog will remain visible
// if it was active while the app was minimized
if (wParam && (lParam == SW_PARENTOPENING) && (!iso_op_in_progress)) {
ShowWindow(hDlg, SW_HIDE);
return TRUE;
}
return FALSE;
case WM_INITDIALOG:
apply_localization(IDD_ISO_EXTRACT, hDlg);
hISOProgressBar = GetDlgItem(hDlg, IDC_PROGRESS);
hISOFileName = GetDlgItem(hDlg, IDC_ISO_FILENAME);
// Use maximum granularity for the progress bar
SendMessage(hISOProgressBar, PBM_SETRANGE, 0, (MAX_PROGRESS<<16) & 0xFFFF0000);
return TRUE;
case UM_PROGRESS_INIT:
iso_op_in_progress = TRUE;
EnableWindow(GetDlgItem(hISOProgressDlg, IDC_ISO_ABORT), TRUE);
CenterDialog(hDlg);
// If we try to show the progress dialog while the app is minimized, users won't
// be able to restore the app, so we only show it if it isn't. But this workaround
// means that the progress dialog will never display for users who had the app
// minimized when ISO extraction started, which we don't really care about, since
// we're planning to remove the whole separate progress dialog soon anyway.
if (!IsIconic(hMainDialog))
ShowWindow(hDlg, SW_SHOW);
UpdateWindow(hDlg);
return TRUE;
case UM_PROGRESS_EXIT:
// Just hide and recenter the dialog
ShowWindow(hDlg, SW_HIDE);
iso_op_in_progress = FALSE;
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_ISO_ABORT:
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANCELLED;
PrintStatus(0, FALSE, MSG_201);
uprintf("Cancelling (from ISO proc.)\n");
EnableWindow(GetDlgItem(hISOProgressDlg, IDC_ISO_ABORT), FALSE);
if (format_thid != NULL)
EnableWindow(GetDlgItem(hMainDialog, IDCANCEL), FALSE);
// Start a timer to detect blocking operations during ISO file extraction
if (iso_blocking_status >= 0) {
last_iso_blocking_status = iso_blocking_status;
SetTimer(hMainDialog, TID_BLOCKING_TIMER, 5000, BlockingTimer);
}
return TRUE;
}
case WM_CLOSE: // prevent closure using Alt-F4
return TRUE;
}
return FALSE;
}
// Report the features of the selected ISO images // Report the features of the selected ISO images
static const char* YesNo(BOOL b) { static const char* YesNo(BOOL b) {
return (b) ? "Yes" : "No"; return (b) ? "Yes" : "No";
@ -988,14 +929,15 @@ DWORD WINAPI ISOScanThread(LPVOID param)
if (image_path == NULL) if (image_path == NULL)
goto out; goto out;
PrintStatus(0, TRUE, MSG_202); PrintInfoDebug(0, MSG_202);
user_notified = FALSE; user_notified = FALSE;
EnableControls(FALSE); EnableControls(FALSE);
r = ExtractISO(image_path, "", TRUE) || IsHDImage(image_path); r = ExtractISO(image_path, "", TRUE) || IsHDImage(image_path);
EnableControls(TRUE); EnableControls(TRUE);
if (!r) { if (!r) {
SendMessage(hISOProgressDlg, UM_PROGRESS_EXIT, 0, 0); // TODO: is that needed?
PrintStatus(0, TRUE, MSG_203); SendMessage(hMainDialog, UM_PROGRESS_EXIT, 0, 0);
PrintInfoDebug(0, MSG_203);
safe_free(image_path); safe_free(image_path);
goto out; goto out;
} }
@ -1008,10 +950,10 @@ DWORD WINAPI ISOScanThread(LPVOID param)
} }
if ( (!iso_report.has_bootmgr) && (!HAS_SYSLINUX(iso_report)) && (!IS_WINPE(iso_report.winpe)) && (!IS_GRUB(iso_report)) if ( (!iso_report.has_bootmgr) && (!HAS_SYSLINUX(iso_report)) && (!IS_WINPE(iso_report.winpe)) && (!IS_GRUB(iso_report))
&& (!iso_report.has_efi) && (!IS_REACTOS(iso_report) && (!iso_report.has_kolibrios) && (!iso_report.is_bootable_img)) ) { && (!iso_report.has_efi) && (!IS_REACTOS(iso_report) && (!iso_report.has_kolibrios) && (!iso_report.is_bootable_img)) ) {
PrintInfo(0, MSG_081);
MessageBoxU(hMainDialog, lmprintf(MSG_082), lmprintf(MSG_081), MB_OK|MB_ICONINFORMATION|MB_IS_RTL); MessageBoxU(hMainDialog, lmprintf(MSG_082), lmprintf(MSG_081), MB_OK|MB_ICONINFORMATION|MB_IS_RTL);
safe_free(image_path); safe_free(image_path);
SetMBRProps(); SetMBRProps();
PrintStatus(0, FALSE, -1);
} else { } else {
// Enable bootable and set Target System and FS accordingly // Enable bootable and set Target System and FS accordingly
CheckDlgButton(hMainDialog, IDC_BOOT, BST_CHECKED); CheckDlgButton(hMainDialog, IDC_BOOT, BST_CHECKED);
@ -1029,7 +971,7 @@ DWORD WINAPI ISOScanThread(LPVOID param)
ComboBox_GetCurSel(hFileSystem)); ComboBox_GetCurSel(hFileSystem));
} }
for (i=(int)safe_strlen(image_path); (i>0)&&(image_path[i]!='\\'); i--); for (i=(int)safe_strlen(image_path); (i>0)&&(image_path[i]!='\\'); i--);
PrintStatus(0, TRUE, MSG_205, &image_path[i+1]); PrintStatusDebug(0, MSG_205, &image_path[i+1]);
// Lose the focus on the select ISO (but place it on Close) // Lose the focus on the select ISO (but place it on Close)
SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)FALSE, 0); SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)FALSE, 0);
// Lose the focus from Close and set it back to Start // Lose the focus from Close and set it back to Start
@ -1037,7 +979,7 @@ DWORD WINAPI ISOScanThread(LPVOID param)
} }
out: out:
SendMessage(hISOProgressDlg, UM_PROGRESS_EXIT, 0, 0); PrintInfo(0, MSG_210);
ExitThread(0); ExitThread(0);
} }
@ -1074,6 +1016,7 @@ void ToggleAdvanced(void)
// Move the status bar up or down // Move the status bar up or down
MoveCtrlY(hMainDialog, IDC_STATUS, dialog_shift); MoveCtrlY(hMainDialog, IDC_STATUS, dialog_shift);
MoveCtrlY(hMainDialog, IDC_START, dialog_shift); MoveCtrlY(hMainDialog, IDC_START, dialog_shift);
MoveCtrlY(hMainDialog, IDC_INFO, dialog_shift);
MoveCtrlY(hMainDialog, IDC_PROGRESS, dialog_shift); MoveCtrlY(hMainDialog, IDC_PROGRESS, dialog_shift);
MoveCtrlY(hMainDialog, IDC_ABOUT, dialog_shift); MoveCtrlY(hMainDialog, IDC_ABOUT, dialog_shift);
MoveCtrlY(hMainDialog, IDC_LOG, dialog_shift); MoveCtrlY(hMainDialog, IDC_LOG, dialog_shift);
@ -1226,10 +1169,9 @@ static BOOL BootCheck(void)
static_sprintf(tmp, "%s-%s", grub, iso_report.grub2_version); static_sprintf(tmp, "%s-%s", grub, iso_report.grub2_version);
IGNORE_RETVAL(_mkdir(tmp)); IGNORE_RETVAL(_mkdir(tmp));
static_sprintf(tmp, "%s/%s-%s/%s", FILES_URL, grub, iso_report.grub2_version, core_img); static_sprintf(tmp, "%s/%s-%s/%s", FILES_URL, grub, iso_report.grub2_version, core_img);
SetWindowTextU(hISOProgressDlg, lmprintf(MSG_085, tmp)); PrintInfoDebug(0, MSG_085, tmp);
SetWindowTextU(hISOFileName, tmp);
PromptOnError = FALSE; PromptOnError = FALSE;
grub2_len = (long)DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hISOProgressDlg); grub2_len = (long)DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hMainDialog);
PromptOnError = TRUE; PromptOnError = TRUE;
if (grub2_len <= 0) if (grub2_len <= 0)
uprintf("%s was not found - will use embedded version\n", tmp); uprintf("%s was not found - will use embedded version\n", tmp);
@ -1265,17 +1207,16 @@ static BOOL BootCheck(void)
fclose(fd); fclose(fd);
use_own_c32[i] = TRUE; use_own_c32[i] = TRUE;
} else { } else {
PrintStatus(0, FALSE, 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 (MessageBoxU(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) == 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));
SetWindowTextU(hISOProgressDlg, lmprintf(MSG_085, old_c32_name[i]));
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]);
SetWindowTextU(hISOFileName, tmp); PrintInfo(0, MSG_085, old_c32_name[i]);
len = DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hISOProgressDlg); len = DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hMainDialog);
if (len == 0) { if (len == 0) {
uprintf("Couldn't download the files - cancelling\n"); uprintf("Could not download file - cancelling\n");
return FALSE; return FALSE;
} }
use_own_c32[i] = TRUE; use_own_c32[i] = TRUE;
@ -1318,21 +1259,19 @@ static BOOL BootCheck(void)
IGNORE_RETVAL(_mkdir(&iso_report.sl_version_ext[1])); IGNORE_RETVAL(_mkdir(&iso_report.sl_version_ext[1]));
IGNORE_RETVAL(_chdir("..")); IGNORE_RETVAL(_chdir(".."));
} }
static_sprintf(tmp, "%s.%s %s", ldlinux, ldlinux_ext[i], iso_report.sl_version_str);
SetWindowTextU(hISOProgressDlg, lmprintf(MSG_085, tmp));
static_sprintf(tmp, "%s/%s-%s%s/%s.%s", FILES_URL, syslinux, iso_report.sl_version_str, static_sprintf(tmp, "%s/%s-%s%s/%s.%s", FILES_URL, syslinux, iso_report.sl_version_str,
iso_report.sl_version_ext, ldlinux, ldlinux_ext[i]); iso_report.sl_version_ext, ldlinux, ldlinux_ext[i]);
SetWindowTextU(hISOFileName, tmp); PrintInfo(0, MSG_085, tmp);
PromptOnError = (*iso_report.sl_version_ext == 0); PromptOnError = (*iso_report.sl_version_ext == 0);
syslinux_ldlinux_len[i] = DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hISOProgressDlg); syslinux_ldlinux_len[i] = DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hMainDialog);
PromptOnError = TRUE; PromptOnError = TRUE;
if ((syslinux_ldlinux_len[i] == 0) && (DownloadStatus == 404) && (*iso_report.sl_version_ext != 0)) { if ((syslinux_ldlinux_len[i] == 0) && (DownloadStatus == 404) && (*iso_report.sl_version_ext != 0)) {
// Couldn't locate the file on the server => try to download without the version extra // Couldn't locate the file on the server => try to download without the version extra
uprintf("Extended version was not found, trying main version\n"); uprintf("Extended version was not found, trying main version\n");
static_sprintf(tmp, "%s/%s-%s/%s.%s", FILES_URL, syslinux, iso_report.sl_version_str, static_sprintf(tmp, "%s/%s-%s/%s.%s", FILES_URL, syslinux, iso_report.sl_version_str,
ldlinux, ldlinux_ext[i]); ldlinux, ldlinux_ext[i]);
SetWindowTextU(hISOFileName, tmp); PrintInfo(0, MSG_085, tmp);
syslinux_ldlinux_len[i] = DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hISOProgressDlg); syslinux_ldlinux_len[i] = DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hMainDialog);
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, iso_report.sl_version_str, ldlinux, ldlinux_ext[i]); static_sprintf(tmp, "%s-%s\\%s.%s", syslinux, iso_report.sl_version_str, ldlinux, ldlinux_ext[i]);
@ -1342,7 +1281,7 @@ static BOOL BootCheck(void)
} }
} }
if (syslinux_ldlinux_len[i] == 0) { if (syslinux_ldlinux_len[i] == 0) {
uprintf("Couldn't download the files - cancelling\n"); uprintf("Could not download the file - cancelling\n");
return FALSE; return FALSE;
} }
} }
@ -1360,7 +1299,7 @@ static BOOL BootCheck(void)
fclose(fd); fclose(fd);
} else { } else {
static_sprintf(tmp, "%s.%s", ldlinux, ldlinux_ext[2]); static_sprintf(tmp, "%s.%s", ldlinux, ldlinux_ext[2]);
PrintStatus(0, FALSE, 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 = MessageBoxU(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);
@ -1370,9 +1309,8 @@ static BOOL BootCheck(void)
static_sprintf(tmp, "%s-%s", syslinux, embedded_sl_version_str[1]); static_sprintf(tmp, "%s-%s", syslinux, embedded_sl_version_str[1]);
IGNORE_RETVAL(_mkdir(tmp)); IGNORE_RETVAL(_mkdir(tmp));
static_sprintf(tmp, "%s/%s-%s/%s.%s", FILES_URL, syslinux, embedded_sl_version_str[1], ldlinux, ldlinux_ext[2]); static_sprintf(tmp, "%s/%s-%s/%s.%s", FILES_URL, syslinux, embedded_sl_version_str[1], ldlinux, ldlinux_ext[2]);
SetWindowTextU(hISOProgressDlg, lmprintf(MSG_085, tmp)); PrintInfo(0, MSG_085, tmp);
SetWindowTextU(hISOFileName, tmp); DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hMainDialog);
DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hISOProgressDlg);
} }
} }
} else if (dt == DT_WINME) { } else if (dt == DT_WINME) {
@ -1392,7 +1330,7 @@ static BOOL BootCheck(void)
fclose(fd); fclose(fd);
} else { } else {
static_sprintf(tmp, "grldr"); static_sprintf(tmp, "grldr");
PrintStatus(0, FALSE, MSG_206, tmp); PrintInfo(0, MSG_206, tmp);
r = MessageBoxU(hMainDialog, lmprintf(MSG_104, "Grub4DOS 0.4", tmp, "Grub4DOS", tmp), r = MessageBoxU(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);
if (r == IDCANCEL) if (r == IDCANCEL)
@ -1400,9 +1338,8 @@ static BOOL BootCheck(void)
if (r == IDYES) { if (r == IDYES) {
IGNORE_RETVAL(_mkdir("grub4dos")); IGNORE_RETVAL(_mkdir("grub4dos"));
static_sprintf(tmp, "%s/grub4dos/grldr", FILES_URL); static_sprintf(tmp, "%s/grub4dos/grldr", FILES_URL);
SetWindowTextU(hISOProgressDlg, lmprintf(MSG_085, tmp)); PrintInfo(0, MSG_085, tmp);
SetWindowTextU(hISOFileName, tmp); DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hMainDialog);
DownloadFile(tmp, &tmp[sizeof(FILES_URL)], hISOProgressDlg);
} }
} }
} }
@ -1423,11 +1360,12 @@ static __inline const char* IsAlphaOrBeta(void)
void InitDialog(HWND hDlg) void InitDialog(HWND hDlg)
{ {
HINSTANCE hDllInst; HINSTANCE hDllInst;
HFONT hf;
DWORD len; DWORD len;
SIZE sz; SIZE sz;
HWND hCtrl; HWND hCtrl;
HDC hDC; HDC hDC;
int i, i16, s16; int i, i16, s16, lfHeight;
char tmp[128], *token, *buf, *ext; char tmp[128], *token, *buf, *ext;
wchar_t wtmp[128] = {0}; wchar_t wtmp[128] = {0};
static char* resource[2] = { MAKEINTRESOURCEA(IDR_SL_LDLINUX_V4_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V6_SYS) }; static char* resource[2] = { MAKEINTRESOURCEA(IDR_SL_LDLINUX_V4_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V6_SYS) };
@ -1444,6 +1382,7 @@ void InitDialog(HWND hDlg)
hClusterSize = GetDlgItem(hDlg, IDC_CLUSTERSIZE); hClusterSize = GetDlgItem(hDlg, IDC_CLUSTERSIZE);
hLabel = GetDlgItem(hDlg, IDC_LABEL); hLabel = GetDlgItem(hDlg, IDC_LABEL);
hProgress = GetDlgItem(hDlg, IDC_PROGRESS); hProgress = GetDlgItem(hDlg, IDC_PROGRESS);
hInfo = GetDlgItem(hDlg, IDC_INFO);
hBoot = GetDlgItem(hDlg, IDC_BOOT); hBoot = GetDlgItem(hDlg, IDC_BOOT);
hBootType = GetDlgItem(hDlg, IDC_BOOTTYPE); hBootType = GetDlgItem(hDlg, IDC_BOOTTYPE);
hSelectISO = GetDlgItem(hDlg, IDC_SELECT_ISO); hSelectISO = GetDlgItem(hDlg, IDC_SELECT_ISO);
@ -1454,6 +1393,7 @@ void InitDialog(HWND hDlg)
i16 = GetSystemMetrics(SM_CXSMICON); i16 = GetSystemMetrics(SM_CXSMICON);
hDC = GetDC(hDlg); hDC = GetDC(hDlg);
fScale = GetDeviceCaps(hDC, LOGPIXELSX) / 96.0f; fScale = GetDeviceCaps(hDC, LOGPIXELSX) / 96.0f;
lfHeight = -MulDiv(8, GetDeviceCaps(hDC, LOGPIXELSY), 72);
ReleaseDC(hDlg, hDC); ReleaseDC(hDlg, hDC);
// Adjust icon size lookup // Adjust icon size lookup
s16 = i16; s16 = i16;
@ -1466,6 +1406,15 @@ void InitDialog(HWND hDlg)
else if (s16 >= 20) else if (s16 >= 20)
s16 = 24; s16 = 24;
// Change the font of the Info edit box
#if defined(COLOURED_INFO)
hf = CreateFontA(lfHeight, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
#else
hf = CreateFontA(lfHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
#endif
DEFAULT_CHARSET, 0, 0, PROOF_QUALITY, 0, "Arial Unicode MS");
SendDlgItemMessageA(hDlg, IDC_INFO, WM_SETFONT, (WPARAM)hf, TRUE);
// Create the title bar icon // Create the title bar icon
SetTitleBarIcon(hDlg); SetTitleBarIcon(hDlg);
GetWindowTextA(hDlg, tmp, sizeof(tmp)); GetWindowTextA(hDlg, tmp, sizeof(tmp));
@ -1617,11 +1566,13 @@ void InitDialog(HWND hDlg)
// Simulate a button click for ISO selection // Simulate a button click for ISO selection
PostMessage(hDlg, WM_COMMAND, IDC_SELECT_ISO, 0); PostMessage(hDlg, WM_COMMAND, IDC_SELECT_ISO, 0);
} }
PrintInfo(0, MSG_210);
} }
static void PrintStatus2000(const char* str, BOOL val) static void PrintStatus2000(const char* str, BOOL val)
{ {
PrintStatus(2000, FALSE, (val)?MSG_250:MSG_251, str); PrintStatus(2000, (val)?MSG_250:MSG_251, str);
} }
void ShowLanguageMenu(HWND hDlg) void ShowLanguageMenu(HWND hDlg)
@ -1701,19 +1652,19 @@ void SetBoot(int fs, int bt)
/* /*
* Main dialog callback * Main dialog callback
*/ */
extern int uncompress(const char* src, const char* dst, int type);
static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{ {
DRAWITEMSTRUCT* pDI;
POINT Point;
RECT DialogRect, DesktopRect;
int nDeviceIndex, fs, bt, i, nWidth, nHeight, nb_devices, selected_language;
static DWORD DeviceNum = 0, LastRefresh = 0; static DWORD DeviceNum = 0, LastRefresh = 0;
char tmp[128];
static BOOL first_log_display = TRUE, user_changed_label = FALSE; static BOOL first_log_display = TRUE, user_changed_label = FALSE;
static ULONG ulRegister = 0; static ULONG ulRegister = 0;
static LPITEMIDLIST pidlDesktop = NULL; static LPITEMIDLIST pidlDesktop = NULL;
static MY_SHChangeNotifyEntry NotifyEntry; static MY_SHChangeNotifyEntry NotifyEntry;
DRAWITEMSTRUCT* pDI;
POINT Point;
RECT DialogRect, DesktopRect;
LONG progress_style;
int nDeviceIndex, fs, bt, i, nWidth, nHeight, nb_devices, selected_language;
char tmp[128];
loc_cmd* lcmd = NULL; loc_cmd* lcmd = NULL;
// TODO: Add "*.img;*.vhd" / "All Supported Images" to the list below and use a generic "%s Image" in the .loc // TODO: Add "*.img;*.vhd" / "All Supported Images" to the list below and use a generic "%s Image" in the .loc
EXT_DECL(img_ext, NULL, __VA_GROUP__("*.img", "*.vhd"), __VA_GROUP__(lmprintf(MSG_095), "VHD Image")); EXT_DECL(img_ext, NULL, __VA_GROUP__("*.img", "*.vhd"), __VA_GROUP__(lmprintf(MSG_095), "VHD Image"));
@ -1779,7 +1730,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
ulRegister = pfSHChangeNotifyRegister(hDlg, 0x0001|0x0002|0x8000, ulRegister = pfSHChangeNotifyRegister(hDlg, 0x0001|0x0002|0x8000,
SHCNE_MEDIAINSERTED|SHCNE_MEDIAREMOVED, UM_MEDIA_CHANGE, 1, &NotifyEntry); SHCNE_MEDIAINSERTED|SHCNE_MEDIAREMOVED, UM_MEDIA_CHANGE, 1, &NotifyEntry);
} }
PostMessage(hMainDialog, UM_PROGRESS_CREATE, 0, 0);
// Bring our Window on top. We have to go through all *THREE* of these, or Far Manager hides our window :( // Bring our Window on top. We have to go through all *THREE* of these, or Far Manager hides our window :(
SetWindowPos(hMainDialog, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); SetWindowPos(hMainDialog, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
SetWindowPos(hMainDialog, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); SetWindowPos(hMainDialog, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
@ -1812,6 +1762,20 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
} }
break; break;
#if defined(COLOURED_INFO)
case WM_CTLCOLORSTATIC:
// Must be transparent for XP and non Aero Vista/7
SetBkMode((HDC)wParam, TRANSPARENT);
if ((HWND)lParam == hInfo) {
SetTextColor((HDC)wParam, RGB(0,192,255));
return (INT_PTR)CreateSolidBrush(RGB(0,0,0));
}
// Restore transparency if we don't change the background
SetBkMode((HDC)wParam, OPAQUE);
return (INT_PTR)FALSE;
break;
#endif
case WM_COMMAND: case WM_COMMAND:
if ((LOWORD(wParam) >= UM_LANGUAGE_MENU) && (LOWORD(wParam) < UM_LANGUAGE_MENU_MAX)) { if ((LOWORD(wParam) >= UM_LANGUAGE_MENU) && (LOWORD(wParam) < UM_LANGUAGE_MENU_MAX)) {
selected_language = LOWORD(wParam) - UM_LANGUAGE_MENU; selected_language = LOWORD(wParam) - UM_LANGUAGE_MENU;
@ -1831,7 +1795,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
case IDOK: // close application case IDOK: // close application
case IDCANCEL: case IDCANCEL:
PF_INIT(SHChangeNotifyDeregister, Shell32); PF_INIT(SHChangeNotifyDeregister, Shell32);
EnableWindow(GetDlgItem(hISOProgressDlg, IDC_ISO_ABORT), FALSE);
EnableWindow(GetDlgItem(hDlg, IDCANCEL), FALSE); EnableWindow(GetDlgItem(hDlg, IDCANCEL), FALSE);
if (format_thid != NULL) { if (format_thid != NULL) {
if (MessageBoxU(hMainDialog, lmprintf(MSG_105), lmprintf(MSG_049), if (MessageBoxU(hMainDialog, lmprintf(MSG_105), lmprintf(MSG_049),
@ -1839,8 +1802,8 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
// 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;
PrintStatus(0, FALSE, MSG_201); PrintInfo(0, MSG_201);
uprintf("Cancelling (from main app)\n"); uprintf("Cancelling");
// Start a timer to detect blocking operations during ISO file extraction // Start a timer to detect blocking operations during ISO file extraction
if (iso_blocking_status >= 0) { if (iso_blocking_status >= 0) {
last_iso_blocking_status = iso_blocking_status; last_iso_blocking_status = iso_blocking_status;
@ -1848,7 +1811,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
} }
} }
} else { } else {
EnableWindow(GetDlgItem(hISOProgressDlg, IDC_ISO_ABORT), TRUE);
EnableWindow(GetDlgItem(hDlg, IDCANCEL), TRUE); EnableWindow(GetDlgItem(hDlg, IDCANCEL), TRUE);
} }
return (INT_PTR)TRUE; return (INT_PTR)TRUE;
@ -1897,8 +1859,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
} }
// Display the log Window // Display the log Window
log_displayed = !log_displayed; log_displayed = !log_displayed;
if (IsShown(hISOProgressDlg))
SetFocus(hISOProgressDlg);
// Set focus on the start button // Set focus on the start button
SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)FALSE, 0); SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)FALSE, 0);
SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hMainDialog, IDC_START), TRUE); SendMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hMainDialog, IDC_START), TRUE);
@ -1945,7 +1905,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
PostMessage(hMainDialog, UM_FORMAT_COMPLETED, 0, 0); PostMessage(hMainDialog, UM_FORMAT_COMPLETED, 0, 0);
} }
uprintf("\r\nSave to image operation started"); uprintf("\r\nSave to image operation started");
PrintStatus(0, FALSE, -1); PrintInfo(0, -1);
timer = 0; timer = 0;
safe_sprintf(szTimer, sizeof(szTimer), "00:00:00"); safe_sprintf(szTimer, sizeof(szTimer), "00:00:00");
SendMessageA(GetDlgItem(hMainDialog, IDC_STATUS), SB_SETTEXTA, SendMessageA(GetDlgItem(hMainDialog, IDC_STATUS), SB_SETTEXTA,
@ -1972,7 +1932,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
if (HIWORD(wParam) != CBN_SELCHANGE) if (HIWORD(wParam) != CBN_SELCHANGE)
break; break;
nb_devices = ComboBox_GetCount(hDeviceList); nb_devices = ComboBox_GetCount(hDeviceList);
PrintStatus(0, TRUE, (nb_devices==1)?MSG_208:MSG_209, nb_devices); PrintStatusDebug(0, (nb_devices==1)?MSG_208:MSG_209, nb_devices);
PopulateProperties(ComboBox_GetCurSel(hDeviceList)); PopulateProperties(ComboBox_GetCurSel(hDeviceList));
SendMessage(hMainDialog, WM_COMMAND, (CBN_SELCHANGE<<16) | IDC_FILESYSTEM, SendMessage(hMainDialog, WM_COMMAND, (CBN_SELCHANGE<<16) | IDC_FILESYSTEM,
ComboBox_GetCurSel(hFileSystem)); ComboBox_GetCurSel(hFileSystem));
@ -2085,6 +2045,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
image_path = FileDialog(FALSE, NULL, &iso_ext, 0); image_path = FileDialog(FALSE, NULL, &iso_ext, 0);
if (image_path == NULL) { if (image_path == NULL) {
CreateTooltip(hSelectISO, lmprintf(MSG_173), -1); CreateTooltip(hSelectISO, lmprintf(MSG_173), -1);
PrintStatus(0, MSG_190);
break; break;
} }
} }
@ -2164,7 +2125,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
PostMessage(hMainDialog, UM_FORMAT_COMPLETED, 0, 0); PostMessage(hMainDialog, UM_FORMAT_COMPLETED, 0, 0);
} }
uprintf("\r\nFormat operation started"); uprintf("\r\nFormat operation started");
PrintStatus(0, FALSE, -1); PrintInfo(0, -1);
timer = 0; timer = 0;
safe_sprintf(szTimer, sizeof(szTimer), "00:00:00"); safe_sprintf(szTimer, sizeof(szTimer), "00:00:00");
SendMessageA(GetDlgItem(hMainDialog, IDC_STATUS), SB_SETTEXTA, SendMessageA(GetDlgItem(hMainDialog, IDC_STATUS), SB_SETTEXTA,
@ -2186,17 +2147,28 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
PostQuitMessage(0); PostQuitMessage(0);
break; break;
case UM_PROGRESS_CREATE: case UM_PROGRESS_INIT:
// You'd think that Windows would let you instantiate a modeless dialog wherever if (wParam == PBS_MARQUEE) {
// but you'd be wrong. It must be done in the main callback, hence the custom message. progress_style = GetWindowLong(hProgress, GWL_STYLE);
if (!IsWindow(hISOProgressDlg)) { SetWindowLong(hProgress, GWL_STYLE, progress_style | PBS_MARQUEE);
hISOProgressDlg = CreateDialogW(hMainInstance, MAKEINTRESOURCEW(IDD_ISO_EXTRACT + IDD_OFFSET), SendMessage(hProgress, PBM_SETMARQUEE, TRUE, 0);
hDlg, (DLGPROC)ISOProc); } else {
SendMessage(hProgress, PBM_SETPOS, 0, 0);
// The window is not visible by default but takes focus => restore it
SetFocus(hDlg);
} }
return (INT_PTR)TRUE; SetTaskbarProgressState(TASKBAR_NORMAL);
SetTaskbarProgressValue(0, MAX_PROGRESS);
break;
case UM_PROGRESS_EXIT:
// Remove marquee style if previously set
progress_style = GetWindowLong(hProgress, GWL_STYLE);
SetWindowLong(hProgress, GWL_STYLE, progress_style & (~PBS_MARQUEE));
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_NORMAL, 0);
SetTaskbarProgressState(TASKBAR_NORMAL);
SetTaskbarProgressValue(0, MAX_PROGRESS);
SendMessage(hProgress, PBM_SETPOS, 0, 0);
break;
case UM_FORMAT_COMPLETED: case UM_FORMAT_COMPLETED:
format_thid = NULL; format_thid = NULL;
@ -2205,7 +2177,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
// Close the cancel MessageBox and Blocking notification if active // Close the cancel MessageBox and Blocking notification if active
SendMessage(FindWindowA(MAKEINTRESOURCEA(32770), lmprintf(MSG_049)), WM_COMMAND, IDNO, 0); SendMessage(FindWindowA(MAKEINTRESOURCEA(32770), lmprintf(MSG_049)), WM_COMMAND, IDNO, 0);
SendMessage(FindWindowA(MAKEINTRESOURCEA(32770), lmprintf(MSG_049)), WM_COMMAND, IDYES, 0); SendMessage(FindWindowA(MAKEINTRESOURCEA(32770), lmprintf(MSG_049)), WM_COMMAND, IDYES, 0);
EnableWindow(GetDlgItem(hISOProgressDlg, IDC_ISO_ABORT), TRUE);
EnableWindow(GetDlgItem(hMainDialog, IDCANCEL), TRUE); EnableWindow(GetDlgItem(hMainDialog, IDCANCEL), TRUE);
EnableControls(TRUE); EnableControls(TRUE);
uprintf("\r\n"); uprintf("\r\n");
@ -2216,16 +2187,16 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
SendMessage(hProgress, PBM_SETPOS, (MAX_PROGRESS+1), 0); SendMessage(hProgress, PBM_SETPOS, (MAX_PROGRESS+1), 0);
SendMessage(hProgress, PBM_SETRANGE, 0, (MAX_PROGRESS<<16) & 0xFFFF0000); SendMessage(hProgress, PBM_SETRANGE, 0, (MAX_PROGRESS<<16) & 0xFFFF0000);
SetTaskbarProgressState(TASKBAR_NOPROGRESS); SetTaskbarProgressState(TASKBAR_NOPROGRESS);
PrintStatus(0, FALSE, MSG_210); PrintInfo(0, MSG_210);
} else if (SCODE_CODE(FormatStatus) == ERROR_CANCELLED) { } else if (SCODE_CODE(FormatStatus) == ERROR_CANCELLED) {
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_PAUSED, 0); SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_PAUSED, 0);
SetTaskbarProgressState(TASKBAR_PAUSED); SetTaskbarProgressState(TASKBAR_PAUSED);
PrintStatus(0, FALSE, MSG_211); PrintInfo(0, MSG_211);
Notification(MSG_INFO, NULL, lmprintf(MSG_211), lmprintf(MSG_041)); Notification(MSG_INFO, NULL, lmprintf(MSG_211), lmprintf(MSG_041));
} else { } else {
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0); SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
SetTaskbarProgressState(TASKBAR_ERROR); SetTaskbarProgressState(TASKBAR_ERROR);
PrintStatus(0, FALSE, MSG_212); PrintInfo(0, MSG_212);
Notification(MSG_ERROR, NULL, lmprintf(MSG_042), lmprintf(MSG_043, StrError(FormatStatus, FALSE))); Notification(MSG_ERROR, NULL, lmprintf(MSG_042), lmprintf(MSG_043, StrError(FormatStatus, FALSE)));
} }
FormatStatus = 0; FormatStatus = 0;
@ -2470,12 +2441,6 @@ relaunch:
if (get_loc_data_file(loc_file, selected_locale)) if (get_loc_data_file(loc_file, selected_locale))
WriteRegistryKeyStr(REGKEY_HKCU, REGKEY_LOCALE, selected_locale->txt[0]); WriteRegistryKeyStr(REGKEY_HKCU, REGKEY_LOCALE, selected_locale->txt[0]);
// Destroy the ISO progress window, if it exists
if (hISOProgressDlg != NULL) {
DestroyWindow(hISOProgressDlg);
hISOProgressDlg = NULL;
}
/* /*
* Create the main Window * Create the main Window
* *
@ -2505,123 +2470,121 @@ relaunch:
// Do our own event processing and process "magic" commands // Do our own event processing and process "magic" commands
while(GetMessage(&msg, NULL, 0, 0)) { while(GetMessage(&msg, NULL, 0, 0)) {
// The following ensures the processing of the ISO progress window messages
if (!IsWindow(hISOProgressDlg) || !IsDialogMessage(hISOProgressDlg, &msg)) { // 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);
}
// Alt-B => Toggle fake drive detection during bad blocks check
// By default, Rufus will check for fake USB flash drives that mistakenly present
// more capacity than they already have by looping over the flash. This check which
// is enabled by default is performed by writing the block number sequence and reading
// it back during the bad block check.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'B')) {
detect_fakes = !detect_fakes;
PrintStatus2000(lmprintf(MSG_256), detect_fakes);
continue;
}
// Alt C => Force the update check to be successful
// This will set the reported current version of Rufus to 0.0.0.0 when performing an update
// check, so that it always succeeds. This is useful for translators.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'C')) {
force_update = !force_update;
PrintStatus2000(lmprintf(MSG_259), force_update);
continue;
}
// Alt-D => Delete the NoDriveTypeAutorun key on exit (useful if the app crashed)
// This key is used to disable Windows popup messages when an USB drive is plugged in.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'D')) {
PrintStatus(2000, FALSE, MSG_255);
existing_key = FALSE;
continue;
}
// Alt-E => Enhanced installation mode (allow dual UEFI/BIOS mode and FAT32 for Windows)
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'E')) {
allow_dual_uefi_bios = !allow_dual_uefi_bios;
// TODO: add a localized message
PrintStatus2000("Allow dual UEFI/BIOS mode", allow_dual_uefi_bios);
continue;
}
// Alt-F => Toggle detection of USB HDDs
// By default Rufus does not list USB HDDs. This is a safety feature aimed at avoiding
// unintentional formatting of backup drives instead of USB keys.
// When enabled, Rufus will list and allow the formatting of USB HDDs.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'F')) {
enable_HDDs = !enable_HDDs;
PrintStatus2000(lmprintf(MSG_253), enable_HDDs);
GetUSBDevices(0);
CheckDlgButton(hMainDialog, IDC_ENABLE_FIXED_DISKS, enable_HDDs?BST_CHECKED:BST_UNCHECKED);
continue;
}
// Alt-I => Toggle ISO support
// This is useful if you have a dual ISO/DD image and you want to force Rufus to use
// DD-mode when writing the data.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'I')) {
enable_iso = !enable_iso;
PrintStatus2000(lmprintf(MSG_262), enable_iso);
if (image_path != NULL) {
iso_provided = TRUE;
PostMessage(hDlg, WM_COMMAND, IDC_SELECT_ISO, 0);
}
continue;
}
// Alt J => Toggle Joliet support for ISO9660 images
// Some ISOs (Ubuntu) have Joliet extensions but expect applications not to use them,
// due to their reliance on filenames that are > 64 chars (the Joliet max length for
// a file name). This option allows users to ignore Joliet when using such images.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'J')) {
enable_joliet = !enable_joliet;
PrintStatus2000(lmprintf(MSG_257), enable_joliet);
continue;
}
// Alt K => Toggle Rock Ridge support for ISO9660 images
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'K')) {
enable_rockridge = !enable_rockridge;
PrintStatus2000(lmprintf(MSG_258), enable_rockridge);
continue;
}
// Alt-L => Force Large FAT32 format to be used on < 32 GB drives
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'L')) {
force_large_fat32 = !force_large_fat32;
PrintStatus2000(lmprintf(MSG_254), force_large_fat32);
GetUSBDevices(0);
continue;
}
// Alt N => Enable NTFS compression
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'N')) {
enable_ntfs_compression = !enable_ntfs_compression;
PrintStatus2000(lmprintf(MSG_260), enable_ntfs_compression);
continue;
}
// Alt-R => Remove all the registry keys created by Rufus
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'R')) {
PrintStatus(2000, FALSE, DeleteRegistryKey(REGKEY_HKCU, COMPANY_NAME "\\" APPLICATION_NAME)?MSG_248:MSG_249);
// Also try to delete the upper key (company name) if it's empty (don't care about the result)
DeleteRegistryKey(REGKEY_HKCU, COMPANY_NAME);
continue;
}
// Alt-S => Disable size limit for ISOs
// By default, Rufus will not copy ISOs that are larger than in size than
// the target USB drive. If this is enabled, the size check is disabled.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'S')) {
size_check = !size_check;
PrintStatus2000(lmprintf(MSG_252), size_check);
GetUSBDevices(0);
continue;
}
// Alt-U => Use PROPER size units, instead of this whole Kibi/Gibi nonsense
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'U')) {
use_fake_units = !use_fake_units;
PrintStatus2000(lmprintf(MSG_263), !use_fake_units);
GetUSBDevices(0);
continue;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
} }
// Alt-B => Toggle fake drive detection during bad blocks check
// By default, Rufus will check for fake USB flash drives that mistakenly present
// more capacity than they already have by looping over the flash. This check which
// is enabled by default is performed by writing the block number sequence and reading
// it back during the bad block check.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'B')) {
detect_fakes = !detect_fakes;
PrintStatus2000(lmprintf(MSG_256), detect_fakes);
continue;
}
// Alt C => Force the update check to be successful
// This will set the reported current version of Rufus to 0.0.0.0 when performing an update
// check, so that it always succeeds. This is useful for translators.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'C')) {
force_update = !force_update;
PrintStatus2000(lmprintf(MSG_259), force_update);
continue;
}
// Alt-D => Delete the NoDriveTypeAutorun key on exit (useful if the app crashed)
// This key is used to disable Windows popup messages when an USB drive is plugged in.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'D')) {
PrintStatus(2000, MSG_255);
existing_key = FALSE;
continue;
}
// Alt-E => Enhanced installation mode (allow dual UEFI/BIOS mode and FAT32 for Windows)
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'E')) {
allow_dual_uefi_bios = !allow_dual_uefi_bios;
// TODO: add a localized message
PrintStatus2000("Allow dual UEFI/BIOS mode", allow_dual_uefi_bios);
continue;
}
// Alt-F => Toggle detection of USB HDDs
// By default Rufus does not list USB HDDs. This is a safety feature aimed at avoiding
// unintentional formatting of backup drives instead of USB keys.
// When enabled, Rufus will list and allow the formatting of USB HDDs.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'F')) {
enable_HDDs = !enable_HDDs;
PrintStatus2000(lmprintf(MSG_253), enable_HDDs);
GetUSBDevices(0);
CheckDlgButton(hMainDialog, IDC_ENABLE_FIXED_DISKS, enable_HDDs?BST_CHECKED:BST_UNCHECKED);
continue;
}
// Alt-I => Toggle ISO support
// This is useful if you have a dual ISO/DD image and you want to force Rufus to use
// DD-mode when writing the data.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'I')) {
enable_iso = !enable_iso;
PrintStatus2000(lmprintf(MSG_262), enable_iso);
if (image_path != NULL) {
iso_provided = TRUE;
PostMessage(hDlg, WM_COMMAND, IDC_SELECT_ISO, 0);
}
continue;
}
// Alt J => Toggle Joliet support for ISO9660 images
// Some ISOs (Ubuntu) have Joliet extensions but expect applications not to use them,
// due to their reliance on filenames that are > 64 chars (the Joliet max length for
// a file name). This option allows users to ignore Joliet when using such images.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'J')) {
enable_joliet = !enable_joliet;
PrintStatus2000(lmprintf(MSG_257), enable_joliet);
continue;
}
// Alt K => Toggle Rock Ridge support for ISO9660 images
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'K')) {
enable_rockridge = !enable_rockridge;
PrintStatus2000(lmprintf(MSG_258), enable_rockridge);
continue;
}
// Alt-L => Force Large FAT32 format to be used on < 32 GB drives
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'L')) {
force_large_fat32 = !force_large_fat32;
PrintStatus2000(lmprintf(MSG_254), force_large_fat32);
GetUSBDevices(0);
continue;
}
// Alt N => Enable NTFS compression
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'N')) {
enable_ntfs_compression = !enable_ntfs_compression;
PrintStatus2000(lmprintf(MSG_260), enable_ntfs_compression);
continue;
}
// Alt-R => Remove all the registry keys created by Rufus
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'R')) {
PrintStatus(2000, DeleteRegistryKey(REGKEY_HKCU, COMPANY_NAME "\\" APPLICATION_NAME)?MSG_248:MSG_249);
// Also try to delete the upper key (company name) if it's empty (don't care about the result)
DeleteRegistryKey(REGKEY_HKCU, COMPANY_NAME);
continue;
}
// Alt-S => Disable size limit for ISOs
// By default, Rufus will not copy ISOs that are larger than in size than
// the target USB drive. If this is enabled, the size check is disabled.
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'S')) {
size_check = !size_check;
PrintStatus2000(lmprintf(MSG_252), size_check);
GetUSBDevices(0);
continue;
}
// Alt-U => Use PROPER size units, instead of this whole Kibi/Gibi nonsense
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'U')) {
use_fake_units = !use_fake_units;
PrintStatus2000(lmprintf(MSG_263), !use_fake_units);
GetUSBDevices(0);
continue;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
} }
if (relaunch) { if (relaunch) {
relaunch = FALSE; relaunch = FALSE;

View file

@ -1,6 +1,6 @@
/* /*
* Rufus: The Reliable USB Formatting Utility * Rufus: The Reliable USB Formatting Utility
* Copyright © 2011-2014 Pete Batard <pete@akeo.ie> * Copyright © 2011-2015 Pete Batard <pete@akeo.ie>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -125,7 +125,6 @@ extern void _uprintf(const char *format, ...);
enum user_message_type { enum user_message_type {
UM_FORMAT_COMPLETED = WM_APP, UM_FORMAT_COMPLETED = WM_APP,
UM_MEDIA_CHANGE, UM_MEDIA_CHANGE,
UM_PROGRESS_CREATE,
UM_PROGRESS_INIT, UM_PROGRESS_INIT,
UM_PROGRESS_EXIT, UM_PROGRESS_EXIT,
// Start of the WM IDs for the language menu items // Start of the WM IDs for the language menu items
@ -331,7 +330,7 @@ enum WindowsVersion {
extern HINSTANCE hMainInstance; extern HINSTANCE hMainInstance;
extern HWND hMainDialog, hLogDlg, hStatus, hDeviceList, hCapacity; extern HWND hMainDialog, hLogDlg, hStatus, hDeviceList, hCapacity;
extern HWND hPartitionScheme, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog; extern HWND hPartitionScheme, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog;
extern HWND hISOProgressDlg, hISOProgressBar, hISOFileName, hDiskID; extern HWND hInfo, hProgress, hDiskID;
extern float fScale; extern float fScale;
extern char szFolderPath[MAX_PATH], app_dir[MAX_PATH]; extern char szFolderPath[MAX_PATH], app_dir[MAX_PATH];
extern char* image_path; extern char* image_path;
@ -359,7 +358,11 @@ extern BOOL is_x64(void);
//extern const char* PrintWindowsVersion(enum WindowsVersion version); //extern const char* PrintWindowsVersion(enum WindowsVersion version);
extern const char *WindowsErrorString(void); extern const char *WindowsErrorString(void);
extern void DumpBufferHex(void *buf, size_t size); extern void DumpBufferHex(void *buf, size_t size);
extern void PrintStatus(unsigned int duration, BOOL debug, int msg_id, ...); extern void PrintStatusInfo(BOOL info, BOOL debug, unsigned int duration, int msg_id, ...);
#define PrintStatus(...) PrintStatusInfo(FALSE, FALSE, __VA_ARGS__)
#define PrintStatusDebug(...) PrintStatusInfo(FALSE, TRUE, __VA_ARGS__)
#define PrintInfo(...) PrintStatusInfo(TRUE, FALSE, __VA_ARGS__)
#define PrintInfoDebug(...) PrintStatusInfo(TRUE, TRUE, __VA_ARGS__)
extern void UpdateProgress(int op, float percent); extern void UpdateProgress(int op, float percent);
extern const char* StrError(DWORD error_code, BOOL use_default_locale); extern const char* StrError(DWORD error_code, BOOL use_default_locale);
extern char* GuidToString(const GUID* guid); extern char* GuidToString(const GUID* guid);

View file

@ -30,12 +30,12 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
// Dialog // Dialog
// //
IDD_DIALOG DIALOGEX 12, 12, 242, 329 IDD_DIALOG DIALOGEX 12, 12, 242, 354
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 1.5.0.564" CAPTION "Rufus 1.5.0.565"
FONT 8, "Segoe UI", 400, 0, 0x1 FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN BEGIN
DEFPUSHBUTTON "Start",IDC_START,127,291,50,14 DEFPUSHBUTTON "Start",IDC_START,127,314,50,14
PUSHBUTTON "...",IDC_SELECT_ISO,207,182,21,14,BS_ICON PUSHBUTTON "...",IDC_SELECT_ISO,207,182,21,14,BS_ICON
LTEXT "Device",IDS_DEVICE_TXT,9,6,208,8 LTEXT "Device",IDS_DEVICE_TXT,9,6,208,8
PUSHBUTTON "",IDC_LANG,217,2,17,13,BS_TOP | BS_FLAT PUSHBUTTON "",IDC_LANG,217,2,17,13,BS_TOP | BS_FLAT
@ -63,11 +63,12 @@ BEGIN
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,235,216,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,235,216,10
CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,248,112,10 CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,248,112,10
COMBOBOX IDC_DISK_ID,128,246,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_DISK_ID,128,246,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,272,225,9 CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,273,225,9
PUSHBUTTON "About...",IDC_ABOUT,8,291,50,14 EDITTEXT IDC_INFO,8,291,225,11,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE
PUSHBUTTON "Log",IDC_LOG,63,291,21,14 PUSHBUTTON "About...",IDC_ABOUT,8,314,50,14
PUSHBUTTON "T",IDC_TEST,90,291,12,14,NOT WS_VISIBLE PUSHBUTTON "Log",IDC_LOG,63,314,21,14
PUSHBUTTON "Close",IDCANCEL,183,291,50,14 PUSHBUTTON "T",IDC_TEST,90,314,12,14,NOT WS_VISIBLE
PUSHBUTTON "Close",IDCANCEL,183,314,50,14
END END
IDD_ABOUTBOX DIALOGEX 0, 0, 319, 237 IDD_ABOUTBOX DIALOGEX 0, 0, 319, 237
@ -83,16 +84,6 @@ BEGIN
CONTROL "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,115,267,91,WS_EX_STATICEDGE CONTROL "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,115,267,91,WS_EX_STATICEDGE
END END
IDD_ISO_EXTRACT DIALOGEX 0, 0, 300, 66
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION
CAPTION "Copying ISO files..."
FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN
LTEXT "Opening ISO image - please wait...",IDC_ISO_FILENAME,8,10,246,13,SS_PATHELLIPSIS
CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,7,26,247,8
PUSHBUTTON "Cancel",IDC_ISO_ABORT,111,43,50,14
END
IDD_LICENSE DIALOGEX 0, 0, 335, 205 IDD_LICENSE DIALOGEX 0, 0, 335, 205
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Rufus License" CAPTION "Rufus License"
@ -102,15 +93,15 @@ BEGIN
EDITTEXT IDC_LICENSE_TEXT,7,7,321,176,ES_MULTILINE | ES_READONLY | WS_VSCROLL EDITTEXT IDC_LICENSE_TEXT,7,7,321,176,ES_MULTILINE | ES_READONLY | WS_VSCROLL
END END
IDD_LOG DIALOGEX 0, 0, 366, 329 IDD_LOG DIALOGEX 0, 0, 366, 354
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Log" CAPTION "Log"
FONT 8, "Segoe UI", 400, 0, 0x1 FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN BEGIN
EDITTEXT IDC_LOG_EDIT,0,0,366,301,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE EDITTEXT IDC_LOG_EDIT,0,0,366,324,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE
PUSHBUTTON "Clear Log",IDC_LOG_CLEAR,198,308,50,14 PUSHBUTTON "Clear Log",IDC_LOG_CLEAR,198,331,50,14
PUSHBUTTON "Save Log",IDC_LOG_SAVE,253,308,50,14 PUSHBUTTON "Save Log",IDC_LOG_SAVE,253,331,50,14
DEFPUSHBUTTON "Close Log",IDCANCEL,308,308,50,14 DEFPUSHBUTTON "Close Log",IDCANCEL,308,331,50,14
END END
IDD_NOTIFICATION DIALOGEX 0, 0, 263, 63 IDD_NOTIFICATION DIALOGEX 0, 0, 263, 63
@ -162,12 +153,12 @@ BEGIN
EDITTEXT IDC_DOWNLOAD_URL,15,191,351,13,ES_AUTOHSCROLL | ES_READONLY EDITTEXT IDC_DOWNLOAD_URL,15,191,351,13,ES_AUTOHSCROLL | ES_READONLY
END END
IDD_DIALOG_XP DIALOGEX 12, 12, 242, 329 IDD_DIALOG_XP DIALOGEX 12, 12, 242, 354
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 1.5.0.564" CAPTION "Rufus 1.5.0.565"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN BEGIN
DEFPUSHBUTTON "Start",IDC_START,127,291,50,14 DEFPUSHBUTTON "Start",IDC_START,127,314,50,14
PUSHBUTTON "...",IDC_SELECT_ISO,207,182,21,14,BS_ICON PUSHBUTTON "...",IDC_SELECT_ISO,207,182,21,14,BS_ICON
LTEXT "Device",IDS_DEVICE_TXT,9,6,208,8 LTEXT "Device",IDS_DEVICE_TXT,9,6,208,8
PUSHBUTTON "",IDC_LANG,217,2,17,13,BS_TOP | BS_FLAT PUSHBUTTON "",IDC_LANG,217,2,17,13,BS_TOP | BS_FLAT
@ -195,11 +186,12 @@ BEGIN
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,235,216,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,235,216,10
CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,248,112,10 CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,248,112,10
COMBOBOX IDC_DISK_ID,128,246,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_DISK_ID,128,246,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,272,225,9 CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,273,225,9
PUSHBUTTON "About...",IDC_ABOUT,8,291,50,14 EDITTEXT IDC_INFO,8,291,225,11,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE
PUSHBUTTON "Log",IDC_LOG,63,291,21,14 PUSHBUTTON "About...",IDC_ABOUT,8,314,50,14
PUSHBUTTON "T",IDC_TEST,90,291,12,14,NOT WS_VISIBLE PUSHBUTTON "Log",IDC_LOG,63,314,21,14
PUSHBUTTON "Close",IDCANCEL,183,291,50,14 PUSHBUTTON "T",IDC_TEST,90,314,12,14,NOT WS_VISIBLE
PUSHBUTTON "Close",IDCANCEL,183,314,50,14
END END
IDD_ABOUTBOX_XP DIALOGEX 0, 0, 319, 237 IDD_ABOUTBOX_XP DIALOGEX 0, 0, 319, 237
@ -215,16 +207,6 @@ BEGIN
CONTROL "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,115,267,91,WS_EX_STATICEDGE CONTROL "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,115,267,91,WS_EX_STATICEDGE
END END
IDD_ISO_EXTRACT_XP DIALOGEX 0, 0, 300, 66
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION
CAPTION "Copying ISO files..."
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Opening ISO image - please wait...",IDC_ISO_FILENAME,8,10,246,13,SS_PATHELLIPSIS
CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,7,26,247,8
PUSHBUTTON "Cancel",IDC_ISO_ABORT,111,43,50,14
END
IDD_LICENSE_XP DIALOGEX 0, 0, 335, 205 IDD_LICENSE_XP DIALOGEX 0, 0, 335, 205
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Rufus License" CAPTION "Rufus License"
@ -234,15 +216,15 @@ BEGIN
EDITTEXT IDC_LICENSE_TEXT,7,7,321,176,ES_MULTILINE | ES_READONLY | WS_VSCROLL EDITTEXT IDC_LICENSE_TEXT,7,7,321,176,ES_MULTILINE | ES_READONLY | WS_VSCROLL
END END
IDD_LOG_XP DIALOGEX 0, 0, 366, 329 IDD_LOG_XP DIALOGEX 0, 0, 366, 354
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Log" CAPTION "Log"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN BEGIN
EDITTEXT IDC_LOG_EDIT,0,0,366,301,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE EDITTEXT IDC_LOG_EDIT,0,0,366,324,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE
PUSHBUTTON "Clear Log",IDC_LOG_CLEAR,198,308,50,14 PUSHBUTTON "Clear Log",IDC_LOG_CLEAR,198,331,50,14
PUSHBUTTON "Save Log",IDC_LOG_SAVE,253,308,50,14 PUSHBUTTON "Save Log",IDC_LOG_SAVE,253,331,50,14
DEFPUSHBUTTON "Close Log",IDCANCEL,308,308,50,14 DEFPUSHBUTTON "Close Log",IDCANCEL,308,331,50,14
END END
IDD_NOTIFICATION_XP DIALOGEX 0, 0, 263, 63 IDD_NOTIFICATION_XP DIALOGEX 0, 0, 263, 63
@ -294,13 +276,13 @@ BEGIN
EDITTEXT IDC_DOWNLOAD_URL,15,191,351,13,ES_AUTOHSCROLL | ES_READONLY EDITTEXT IDC_DOWNLOAD_URL,15,191,351,13,ES_AUTOHSCROLL | ES_READONLY
END END
IDD_DIALOG_RTL DIALOGEX 12, 12, 242, 329 IDD_DIALOG_RTL DIALOGEX 12, 12, 242, 354
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
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Rufus 1.5.0.564" CAPTION "Rufus 1.5.0.565"
FONT 8, "Segoe UI", 400, 0, 0x1 FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN BEGIN
DEFPUSHBUTTON "Start",IDC_START,127,291,50,14 DEFPUSHBUTTON "Start",IDC_START,127,314,50,14
PUSHBUTTON "...",IDC_SELECT_ISO,207,182,21,14,BS_ICON PUSHBUTTON "...",IDC_SELECT_ISO,207,182,21,14,BS_ICON
LTEXT "Device",IDS_DEVICE_TXT,9,6,208,8 LTEXT "Device",IDS_DEVICE_TXT,9,6,208,8
PUSHBUTTON "",IDC_LANG,217,2,17,13,BS_TOP | BS_FLAT PUSHBUTTON "",IDC_LANG,217,2,17,13,BS_TOP | BS_FLAT
@ -328,11 +310,12 @@ BEGIN
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,235,216,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,235,216,10
CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,248,112,10 CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,248,112,10
COMBOBOX IDC_DISK_ID,128,246,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_DISK_ID,128,246,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,272,225,9 CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,273,225,9
PUSHBUTTON "About...",IDC_ABOUT,8,291,50,14 EDITTEXT IDC_INFO,8,291,225,11,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE
PUSHBUTTON "Log",IDC_LOG,63,291,21,14 PUSHBUTTON "About...",IDC_ABOUT,8,314,50,14
PUSHBUTTON "T",IDC_TEST,90,291,12,14,NOT WS_VISIBLE PUSHBUTTON "Log",IDC_LOG,63,314,21,14
PUSHBUTTON "Close",IDCANCEL,183,291,50,14 PUSHBUTTON "T",IDC_TEST,90,314,12,14,NOT WS_VISIBLE
PUSHBUTTON "Close",IDCANCEL,183,314,50,14
END END
IDD_ABOUTBOX_RTL DIALOGEX 0, 0, 319, 237 IDD_ABOUTBOX_RTL DIALOGEX 0, 0, 319, 237
@ -349,17 +332,6 @@ BEGIN
CONTROL "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,115,267,91,WS_EX_STATICEDGE CONTROL "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,115,267,91,WS_EX_STATICEDGE
END END
IDD_ISO_EXTRACT_RTL DIALOGEX 0, 0, 300, 66
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Copying ISO files..."
FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN
LTEXT "Opening ISO image - please wait...",IDC_ISO_FILENAME,8,10,246,13,SS_PATHELLIPSIS
CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,7,26,247,8
PUSHBUTTON "Cancel",IDC_ISO_ABORT,111,43,50,14
END
IDD_LICENSE_RTL DIALOGEX 0, 0, 335, 205 IDD_LICENSE_RTL DIALOGEX 0, 0, 335, 205
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
@ -370,16 +342,16 @@ BEGIN
EDITTEXT IDC_LICENSE_TEXT,7,7,321,176,ES_RIGHT | ES_MULTILINE | ES_READONLY | WS_VSCROLL,WS_EX_RIGHT | WS_EX_RTLREADING | WS_EX_LEFTSCROLLBAR EDITTEXT IDC_LICENSE_TEXT,7,7,321,176,ES_RIGHT | ES_MULTILINE | ES_READONLY | WS_VSCROLL,WS_EX_RIGHT | WS_EX_RTLREADING | WS_EX_LEFTSCROLLBAR
END END
IDD_LOG_RTL DIALOGEX 0, 0, 366, 329 IDD_LOG_RTL DIALOGEX 0, 0, 366, 354
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION
EXSTYLE WS_EX_APPWINDOW | WS_EX_LAYOUTRTL EXSTYLE WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Log" CAPTION "Log"
FONT 8, "Segoe UI", 400, 0, 0x1 FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN BEGIN
EDITTEXT IDC_LOG_EDIT,0,0,366,301,ES_RIGHT | ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_RIGHT | WS_EX_RTLREADING | WS_EX_LEFTSCROLLBAR | WS_EX_STATICEDGE EDITTEXT IDC_LOG_EDIT,0,0,366,324,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE
PUSHBUTTON "Clear Log",IDC_LOG_CLEAR,198,308,50,14 PUSHBUTTON "Clear Log",IDC_LOG_CLEAR,198,331,50,14
PUSHBUTTON "Save Log",IDC_LOG_SAVE,253,308,50,14 PUSHBUTTON "Save Log",IDC_LOG_SAVE,253,331,50,14
DEFPUSHBUTTON "Close Log",IDCANCEL,308,308,50,14 DEFPUSHBUTTON "Close Log",IDCANCEL,308,331,50,14
END END
IDD_NOTIFICATION_RTL DIALOGEX 0, 0, 263, 63 IDD_NOTIFICATION_RTL DIALOGEX 0, 0, 263, 63
@ -434,13 +406,13 @@ BEGIN
EDITTEXT IDC_DOWNLOAD_URL,15,191,351,13,ES_AUTOHSCROLL | ES_READONLY EDITTEXT IDC_DOWNLOAD_URL,15,191,351,13,ES_AUTOHSCROLL | ES_READONLY
END END
IDD_DIALOG_RTL_XP DIALOGEX 12, 12, 242, 329 IDD_DIALOG_RTL_XP DIALOGEX 12, 12, 242, 354
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
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Rufus 1.5.0.564" CAPTION "Rufus 1.5.0.565"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN BEGIN
DEFPUSHBUTTON "Start",IDC_START,127,291,50,14 DEFPUSHBUTTON "Start",IDC_START,127,314,50,14
PUSHBUTTON "...",IDC_SELECT_ISO,207,182,21,14,BS_ICON PUSHBUTTON "...",IDC_SELECT_ISO,207,182,21,14,BS_ICON
LTEXT "Device",IDS_DEVICE_TXT,9,6,208,8 LTEXT "Device",IDS_DEVICE_TXT,9,6,208,8
PUSHBUTTON "",IDC_LANG,217,2,17,13,BS_TOP | BS_FLAT PUSHBUTTON "",IDC_LANG,217,2,17,13,BS_TOP | BS_FLAT
@ -468,11 +440,12 @@ BEGIN
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,235,216,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,235,216,10
CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,248,112,10 CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,248,112,10
COMBOBOX IDC_DISK_ID,128,246,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_DISK_ID,128,246,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,272,225,9 CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,273,225,9
PUSHBUTTON "About...",IDC_ABOUT,8,291,50,14 EDITTEXT IDC_INFO,8,291,225,11,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE
PUSHBUTTON "Log",IDC_LOG,63,291,21,14 PUSHBUTTON "About...",IDC_ABOUT,8,314,50,14
PUSHBUTTON "T",IDC_TEST,90,291,12,14,NOT WS_VISIBLE PUSHBUTTON "Log",IDC_LOG,63,314,21,14
PUSHBUTTON "Close",IDCANCEL,183,291,50,14 PUSHBUTTON "T",IDC_TEST,90,314,12,14,NOT WS_VISIBLE
PUSHBUTTON "Close",IDCANCEL,183,314,50,14
END END
IDD_ABOUTBOX_RTL_XP DIALOGEX 0, 0, 319, 237 IDD_ABOUTBOX_RTL_XP DIALOGEX 0, 0, 319, 237
@ -489,17 +462,6 @@ BEGIN
CONTROL "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,115,267,91,WS_EX_STATICEDGE CONTROL "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,115,267,91,WS_EX_STATICEDGE
END END
IDD_ISO_EXTRACT_RTL_XP DIALOGEX 0, 0, 300, 66
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Copying ISO files..."
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Opening ISO image - please wait...",IDC_ISO_FILENAME,8,10,246,13,SS_PATHELLIPSIS
CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,7,26,247,8
PUSHBUTTON "Cancel",IDC_ISO_ABORT,111,43,50,14
END
IDD_LICENSE_RTL_XP DIALOGEX 0, 0, 335, 205 IDD_LICENSE_RTL_XP DIALOGEX 0, 0, 335, 205
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
@ -510,16 +472,16 @@ BEGIN
EDITTEXT IDC_LICENSE_TEXT,7,7,321,176,ES_RIGHT | ES_MULTILINE | ES_READONLY | WS_VSCROLL,WS_EX_RIGHT | WS_EX_RTLREADING | WS_EX_LEFTSCROLLBAR EDITTEXT IDC_LICENSE_TEXT,7,7,321,176,ES_RIGHT | ES_MULTILINE | ES_READONLY | WS_VSCROLL,WS_EX_RIGHT | WS_EX_RTLREADING | WS_EX_LEFTSCROLLBAR
END END
IDD_LOG_RTL_XP DIALOGEX 0, 0, 366, 329 IDD_LOG_RTL_XP DIALOGEX 0, 0, 366, 354
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION
EXSTYLE WS_EX_APPWINDOW | WS_EX_LAYOUTRTL EXSTYLE WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Log" CAPTION "Log"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN BEGIN
EDITTEXT IDC_LOG_EDIT,0,0,366,301,ES_RIGHT | ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_RIGHT | WS_EX_RTLREADING | WS_EX_LEFTSCROLLBAR | WS_EX_STATICEDGE EDITTEXT IDC_LOG_EDIT,0,0,366,324,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE
PUSHBUTTON "Clear Log",IDC_LOG_CLEAR,198,308,50,14 PUSHBUTTON "Clear Log",IDC_LOG_CLEAR,198,331,50,14
PUSHBUTTON "Save Log",IDC_LOG_SAVE,253,308,50,14 PUSHBUTTON "Save Log",IDC_LOG_SAVE,253,331,50,14
DEFPUSHBUTTON "Close Log",IDCANCEL,308,308,50,14 DEFPUSHBUTTON "Close Log",IDCANCEL,308,331,50,14
END END
IDD_NOTIFICATION_RTL_XP DIALOGEX 0, 0, 263, 63 IDD_NOTIFICATION_RTL_XP DIALOGEX 0, 0, 263, 63
@ -670,10 +632,6 @@ BEGIN
BEGIN BEGIN
END END
IDD_ISO_EXTRACT, DIALOG
BEGIN
END
IDD_LICENSE, DIALOG IDD_LICENSE, DIALOG
BEGIN BEGIN
END END
@ -703,8 +661,8 @@ END
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,5,0,564 FILEVERSION 1,5,0,565
PRODUCTVERSION 1,5,0,564 PRODUCTVERSION 1,5,0,565
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -721,13 +679,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", "1.5.0.564" VALUE "FileVersion", "1.5.0.565"
VALUE "InternalName", "Rufus" VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "© 2011-2014 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", "1.5.0.564" VALUE "ProductVersion", "1.5.0.565"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View file

@ -1,7 +1,7 @@
/* /*
* Rufus: The Reliable USB Formatting Utility * Rufus: The Reliable USB Formatting Utility
* Standard Windows function calls * Standard Windows function calls
* Copyright © 2013-2014 Pete Batard <pete@akeo.ie> * Copyright © 2013-2015 Pete Batard <pete@akeo.ie>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -474,7 +474,7 @@ BOOL FileIO(BOOL save, char* path, char** buffer, DWORD* size)
goto out; goto out;
} }
PrintStatus(0, TRUE, save?MSG_216:MSG_215, path); PrintInfoDebug(0, save?MSG_216:MSG_215, path);
ret = TRUE; ret = TRUE;
out: out:

View file

@ -1,7 +1,7 @@
/* /*
* Rufus: The Reliable USB Formatting Utility * Rufus: The Reliable USB Formatting Utility
* Standard Dialog Routines (Browse for folder, About, etc) * Standard Dialog Routines (Browse for folder, About, etc)
* Copyright © 2011-2014 Pete Batard <pete@akeo.ie> * Copyright © 2011-2015 Pete Batard <pete@akeo.ie>
* *
* Based on zadig_stdlg.c, part of libwdi: http://libwdi.akeo.ie * Based on zadig_stdlg.c, part of libwdi: http://libwdi.akeo.ie
* *
@ -1244,11 +1244,11 @@ INT_PTR CALLBACK NewVersionCallback(HWND hDlg, UINT message, WPARAM wParam, LPAR
memset(&pi, 0, sizeof(pi)); memset(&pi, 0, sizeof(pi));
si.cb = sizeof(si); si.cb = sizeof(si);
if (!CreateProcessU(filepath, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { if (!CreateProcessU(filepath, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
PrintStatus(0, FALSE, MSG_214); PrintInfo(0, MSG_214);
// TODO: produce a message box and add a retry, as the file may be scanned by the Antivirus // TODO: produce a message box and add a retry, as the file may be scanned by the Antivirus
uprintf("Failed to launch new application: %s\n", WindowsErrorString()); uprintf("Failed to launch new application: %s\n", WindowsErrorString());
} else { } else {
PrintStatus(0, FALSE, MSG_213); PrintInfo(0, MSG_213);
PostMessage(hDlg, WM_COMMAND, (WPARAM)IDCLOSE, 0); PostMessage(hDlg, WM_COMMAND, (WPARAM)IDCLOSE, 0);
PostMessage(hMainDialog, WM_CLOSE, 0, 0); PostMessage(hMainDialog, WM_CLOSE, 0, 0);
} }

View file

@ -2,7 +2,7 @@
* *
* Copyright 2003 Lars Munch Christensen - All Rights Reserved * Copyright 2003 Lars Munch Christensen - All Rights Reserved
* Copyright 1998-2008 H. Peter Anvin - All Rights Reserved * Copyright 1998-2008 H. Peter Anvin - All Rights Reserved
* Copyright 2012-2014 Pete Batard * Copyright 2012-2015 Pete Batard
* *
* Based on the Linux installer program for SYSLINUX by H. Peter Anvin * Based on the Linux installer program for SYSLINUX by H. Peter Anvin
* *
@ -98,7 +98,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs_type)
int dt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); int dt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType));
BOOL use_v5 = (dt == DT_SYSLINUX_V6) || ((dt == DT_ISO) && (SL_MAJOR(iso_report.sl_version) >= 5)); BOOL use_v5 = (dt == DT_SYSLINUX_V6) || ((dt == DT_ISO) && (SL_MAJOR(iso_report.sl_version) >= 5));
PrintStatus(0, TRUE, MSG_234, (dt == DT_ISO)?iso_report.sl_version_str:embedded_sl_version_str[use_v5?1:0]); PrintInfoDebug(0, MSG_234, (dt == DT_ISO)?iso_report.sl_version_str:embedded_sl_version_str[use_v5?1:0]);
/* Initialize the ADV -- this should be smarter */ /* Initialize the ADV -- this should be smarter */
syslinux_reset_adv(syslinux_adv); syslinux_reset_adv(syslinux_adv);