mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[ui] add experimental optional display of transfer speed and time remaining
* You can use <Alt> to switch modes during an operation that supports it (e.g. Checksum computation, DD image writing or zeroing, save to VHD, download, etc. * IMPORTANT: This is *NOT* available for all operations. Especially, if you were hoping to get transfer speed or ETA during ISO or WIM extraction, you *WILL* be disappointed. * Also harmonize the code in checksum.c
This commit is contained in:
		
							parent
							
								
									94e2015edf
								
							
						
					
					
						commit
						af95de8198
					
				
					 16 changed files with 525 additions and 430 deletions
				
			
		|  | @ -2,8 +2,8 @@ msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: 3.5\n" | "Project-Id-Version: 3.5\n" | ||||||
| "Report-Msgid-Bugs-To: pete@akeo.ie\n" | "Report-Msgid-Bugs-To: pete@akeo.ie\n" | ||||||
| "POT-Creation-Date: 2019-03-12 13:52+0000\n" | "POT-Creation-Date: 2019-08-20 17:03+0100\n" | ||||||
| "PO-Revision-Date: 2019-04-11 14:19+0100\n" | "PO-Revision-Date: 2019-08-20 17:03+0100\n" | ||||||
| "Language: fr_FR\n" | "Language: fr_FR\n" | ||||||
| "MIME-Version: 1.0\n" | "MIME-Version: 1.0\n" | ||||||
| "Content-Type: text/plain; charset=UTF-8\n" | "Content-Type: text/plain; charset=UTF-8\n" | ||||||
|  | @ -13,7 +13,7 @@ msgstr "" | ||||||
| "X-Rufus-LCID: 0x040c, 0x080c, 0x0c0c, 0x100c, 0x140c, 0x180c, 0x1c0c, 0x200c, 0x240c, 0x280c, 0x2c0c, 0x300c, 0x340c, 0x380c, 0xe40c\n" | "X-Rufus-LCID: 0x040c, 0x080c, 0x0c0c, 0x100c, 0x140c, 0x180c, 0x1c0c, 0x200c, 0x240c, 0x280c, 0x2c0c, 0x300c, 0x340c, 0x380c, 0xe40c\n" | ||||||
| "Last-Translator: \n" | "Last-Translator: \n" | ||||||
| "Language-Team: \n" | "Language-Team: \n" | ||||||
| "X-Generator: Poedit 2.2.1\n" | "X-Generator: Poedit 2.2.3\n" | ||||||
| 
 | 
 | ||||||
| #. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT | #. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT | ||||||
| msgid "Drive Properties" | msgid "Drive Properties" | ||||||
|  | @ -1285,8 +1285,8 @@ msgstr "%s sauvegardé" | ||||||
| #. • MSG_217 | #. • MSG_217 | ||||||
| #. | #. | ||||||
| #. Formatting status (make sure you use a double % to print the percent sign) | #. Formatting status (make sure you use a double % to print the percent sign) | ||||||
| msgid "Formatting: %0.1f%% completed" | msgid "Formatting: %s" | ||||||
| msgstr "Formatage : %0.1f%% complété" | msgstr "Formatage : %s" | ||||||
| 
 | 
 | ||||||
| #. • MSG_218 | #. • MSG_218 | ||||||
| msgid "Creating file system: Task %d/%d completed" | msgid "Creating file system: Task %d/%d completed" | ||||||
|  | @ -1335,11 +1335,11 @@ msgid "Closing existing volume..." | ||||||
| msgstr "Fermeture des volumes existants..." | msgstr "Fermeture des volumes existants..." | ||||||
| 
 | 
 | ||||||
| #. • MSG_228 | #. • MSG_228 | ||||||
| msgid "Writing master boot record..." | msgid "Writing Master Boot Record..." | ||||||
| msgstr "Ecriture du MBR..." | msgstr "Ecriture du MBR..." | ||||||
| 
 | 
 | ||||||
| #. • MSG_229 | #. • MSG_229 | ||||||
| msgid "Writing partition boot record..." | msgid "Writing Partition Boot Record..." | ||||||
| msgstr "Ecriture du PBR..." | msgstr "Ecriture du PBR..." | ||||||
| 
 | 
 | ||||||
| #. • MSG_230 | #. • MSG_230 | ||||||
|  | @ -1347,8 +1347,8 @@ msgid "Copying DOS files..." | ||||||
| msgstr "Copie des fichiers DOS..." | msgstr "Copie des fichiers DOS..." | ||||||
| 
 | 
 | ||||||
| #. • MSG_231 | #. • MSG_231 | ||||||
| msgid "Copying ISO files..." | msgid "Copying ISO files: %s" | ||||||
| msgstr "Copie des fichiers ISO..." | msgstr "Copie des fichiers ISO : %s" | ||||||
| 
 | 
 | ||||||
| #. • MSG_232 | #. • MSG_232 | ||||||
| msgid "Win7 EFI boot setup (This may take a while)..." | msgid "Win7 EFI boot setup (This may take a while)..." | ||||||
|  | @ -1403,8 +1403,8 @@ msgstr "" | ||||||
| "Le téléchargement va être supprimé. Veuillez consulter le log pour plus de détails." | "Le téléchargement va être supprimé. Veuillez consulter le log pour plus de détails." | ||||||
| 
 | 
 | ||||||
| #. • MSG_241 | #. • MSG_241 | ||||||
| msgid "Downloading: %0.1f%%" | msgid "Downloading: %s" | ||||||
| msgstr "Téléchargement : %0.1f%%" | msgstr "Téléchargement : %s" | ||||||
| 
 | 
 | ||||||
| #. • MSG_242 | #. • MSG_242 | ||||||
| msgid "Failed to download file." | msgid "Failed to download file." | ||||||
|  | @ -1485,8 +1485,8 @@ msgid "NTFS compression" | ||||||
| msgstr "Compression NTFS" | msgstr "Compression NTFS" | ||||||
| 
 | 
 | ||||||
| #. • MSG_261 | #. • MSG_261 | ||||||
| msgid "Writing image: %0.1f%% completed" | msgid "Writing image: %s" | ||||||
| msgstr "Ecriture d'image : %0.1f%% complété" | msgstr "Ecriture d'image : %s" | ||||||
| 
 | 
 | ||||||
| #. • MSG_262 | #. • MSG_262 | ||||||
| #. | #. | ||||||
|  | @ -1513,8 +1513,8 @@ msgid "Dual UEFI/BIOS mode" | ||||||
| msgstr "Mode dual UEFI/BIOS" | msgstr "Mode dual UEFI/BIOS" | ||||||
| 
 | 
 | ||||||
| #. • MSG_267 | #. • MSG_267 | ||||||
| msgid "Applying Windows image: %0.1f%% completed" | msgid "Applying Windows image: %s" | ||||||
| msgstr "Application de l'image Windows : %0.1f%% complété" | msgstr "Application de l'image Windows : %s" | ||||||
| 
 | 
 | ||||||
| #. • MSG_268 | #. • MSG_268 | ||||||
| msgid "Applying Windows image..." | msgid "Applying Windows image..." | ||||||
|  | @ -1529,8 +1529,8 @@ msgid "USB debug" | ||||||
| msgstr "Debug USB" | msgstr "Debug USB" | ||||||
| 
 | 
 | ||||||
| #. • MSG_271 | #. • MSG_271 | ||||||
| msgid "Computing image checksums: %0.1f%% completed" | msgid "Computing image checksums: %s" | ||||||
| msgstr "Calculation des checksums de l'image : %0.1f%% complété" | msgstr "Calculation des checksums de l'image : %s" | ||||||
| 
 | 
 | ||||||
| #. • MSG_272 | #. • MSG_272 | ||||||
| msgid "Compute the MD5, SHA1 and SHA256 checksums for the selected image" | msgid "Compute the MD5, SHA1 and SHA256 checksums for the selected image" | ||||||
|  | @ -1607,12 +1607,12 @@ msgid "" | ||||||
| "Are you sure you want to run this file?" | "Are you sure you want to run this file?" | ||||||
| msgstr "" | msgstr "" | ||||||
| "L'exécutable téléchargé est signé par '%s'.\n" | "L'exécutable téléchargé est signé par '%s'.\n" | ||||||
| "Ce n’est pas une signature que nous reconnaissons et pourrait indiquer une activité malicieuse...\n" | "Il ne s'agit pas d'une signature que nous connaissons et peut indiquer une activité malicieuse...\n" | ||||||
| "Êtes-vous certain de vouloir lancer ce fichier ?" | "Êtes-vous certain de vouloir lancer ce fichier ?" | ||||||
| 
 | 
 | ||||||
| #. • MSG_286 | #. • MSG_286 | ||||||
| msgid "Zeroing drive: %0.1f%% completed" | msgid "Zeroing drive: %s" | ||||||
| msgstr "Effacement à zéro : %0.1f%% complété" | msgstr "Effacement à zéro : %s" | ||||||
| 
 | 
 | ||||||
| #. • MSG_287 | #. • MSG_287 | ||||||
| msgid "Detection of non-USB removable drives" | msgid "Detection of non-USB removable drives" | ||||||
|  | @ -1716,5 +1716,5 @@ msgstr "Utilisez cette option pour indiquer si vous voulez utiliser ce périphé | ||||||
| #. | #. | ||||||
| #. You can see this status message by pressing <Ctrl>-<Alt>-<Z> and then selecting START. | #. You can see this status message by pressing <Ctrl>-<Alt>-<Z> and then selecting START. | ||||||
| #. It's the same as MSG_286 but with a process that *may* be faster, hence the name. | #. It's the same as MSG_286 but with a process that *may* be faster, hence the name. | ||||||
| msgid "Fast-zeroing drive: %0.1f%% completed" | msgid "Fast-zeroing drive: %s" | ||||||
| msgstr "Effacement 'rapide' à zéro : %0.1f%% complété" | msgstr "Effacement 'rapide' à zéro : %s" | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -91,7 +91,7 @@ static const uint32_t K[64] = { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * For convenience, we use a common context for all the checksums algorithms, |  * For convenience, we use a common context for all the checksum algorithms, | ||||||
|  * which means some elements may be unused... |  * which means some elements may be unused... | ||||||
|  */ |  */ | ||||||
| typedef struct ALIGNED(64) { | typedef struct ALIGNED(64) { | ||||||
|  | @ -159,10 +159,10 @@ static void sha1_transform(SUM_CONTEXT *ctx, const unsigned char *data) | ||||||
| 	} | 	} | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #define K1  0x5A827999L | #define K1  0x5a827999L | ||||||
| #define K2  0x6ED9EBA1L | #define K2  0x6ed9eba1L | ||||||
| #define K3  0x8F1BBCDCL | #define K3  0x8f1bbcdcL | ||||||
| #define K4  0xCA62C1D6L | #define K4  0xca62c1d6L | ||||||
| #define F1(x,y,z)   ( z ^ ( x & ( y ^ z ) ) ) | #define F1(x,y,z)   ( z ^ ( x & ( y ^ z ) ) ) | ||||||
| #define F2(x,y,z)   ( x ^ y ^ z ) | #define F2(x,y,z)   ( x ^ y ^ z ) | ||||||
| #define F3(x,y,z)   ( ( x & y ) | ( z & ( x | y ) ) ) | #define F3(x,y,z)   ( ( x & y ) | ( z & ( x | y ) ) ) | ||||||
|  | @ -880,9 +880,8 @@ DWORD WINAPI SumThread(void* param) | ||||||
| 	DWORD_PTR* thread_affinity = (DWORD_PTR*)param; | 	DWORD_PTR* thread_affinity = (DWORD_PTR*)param; | ||||||
| 	HANDLE sum_thread[CHECKSUM_MAX] = { NULL, NULL, NULL }; | 	HANDLE sum_thread[CHECKSUM_MAX] = { NULL, NULL, NULL }; | ||||||
| 	HANDLE h = INVALID_HANDLE_VALUE; | 	HANDLE h = INVALID_HANDLE_VALUE; | ||||||
| 	uint64_t rb, LastRefresh = 0; | 	uint64_t rb; | ||||||
| 	int i, _bufnum, r = -1; | 	int i, _bufnum, r = -1; | ||||||
| 	float format_percent = 0.0f; |  | ||||||
| 
 | 
 | ||||||
| 	if ((image_path == NULL) || (thread_affinity == NULL)) | 	if ((image_path == NULL) || (thread_affinity == NULL)) | ||||||
| 		ExitThread(r); | 		ExitThread(r); | ||||||
|  | @ -926,15 +925,10 @@ DWORD WINAPI SumThread(void* param) | ||||||
| 	bufnum = 0; | 	bufnum = 0; | ||||||
| 	_bufnum = 0; | 	_bufnum = 0; | ||||||
| 	read_size[0] = 1;	// Don't trigger the first loop break
 | 	read_size[0] = 1;	// Don't trigger the first loop break
 | ||||||
|  | 	UpdateProgressWithInfoInit(hMainDialog, FALSE); | ||||||
| 	for (rb = 0; ;rb += read_size[_bufnum]) { | 	for (rb = 0; ;rb += read_size[_bufnum]) { | ||||||
| 		// Update the progress and check for cancel
 | 		// Update the progress and check for cancel
 | ||||||
| 		if (GetTickCount64() > LastRefresh + MAX_REFRESH) { | 		UpdateProgressWithInfo(OP_NOOP_WITH_TASKBAR, MSG_271, rb, img_report.image_size); | ||||||
| 			LastRefresh = GetTickCount64(); |  | ||||||
| 			format_percent = (100.0f*rb) / (1.0f*img_report.image_size); |  | ||||||
| 			PrintInfo(0, MSG_271, format_percent); |  | ||||||
| 			SendMessage(hProgress, PBM_SETPOS, (WPARAM)((format_percent / 100.0f)*MAX_PROGRESS), 0); |  | ||||||
| 			SetTaskbarProgressValue(rb, img_report.image_size); |  | ||||||
| 		} |  | ||||||
| 		CHECK_FOR_USER_CANCEL; | 		CHECK_FOR_USER_CANCEL; | ||||||
| 
 | 
 | ||||||
| 		// Signal the threads that we have data to process
 | 		// Signal the threads that we have data to process
 | ||||||
|  |  | ||||||
|  | @ -334,7 +334,7 @@ static BOOL ExtractMSDOS(const char* path) | ||||||
| 			if (memcmp(extractlist[j], &DiskImage[FAT12_ROOTDIR_OFFSET + i*FAT_BYTES_PER_DIRENT], 8+3) == 0) { | 			if (memcmp(extractlist[j], &DiskImage[FAT12_ROOTDIR_OFFSET + i*FAT_BYTES_PER_DIRENT], 8+3) == 0) { | ||||||
| 				r = ExtractFAT(i, (j<3)?path:locale_path); | 				r = ExtractFAT(i, (j<3)?path:locale_path); | ||||||
| 				if ((j == 2) || (j == 7) || (j == 12)) | 				if ((j == 2) || (j == 7) || (j == 12)) | ||||||
| 					UpdateProgress(OP_DOS, -1.0f); | 					UpdateProgress(OP_FILE_COPY, -1.0f); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -405,7 +405,7 @@ BOOL ExtractFreeDOS(const char* path) | ||||||
| 		uprintf("Successfully wrote '%s' (%d bytes)\n", filename, res_size); | 		uprintf("Successfully wrote '%s' (%d bytes)\n", filename, res_size); | ||||||
| 
 | 
 | ||||||
| 		if ((i == 4) || (i == 10) || (i == 16) || (i == 22) || (i == ARRAYSIZE(res_name)-1)) | 		if ((i == 4) || (i == 10) || (i == 16) || (i == 22) || (i == ARRAYSIZE(res_name)-1)) | ||||||
| 			UpdateProgress(OP_DOS, -1.0f); | 			UpdateProgress(OP_FILE_COPY, -1.0f); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return SetDOSLocale(path, TRUE); | 	return SetDOSLocale(path, TRUE); | ||||||
|  |  | ||||||
							
								
								
									
										39
									
								
								src/format.c
									
										
									
									
									
								
							
							
						
						
									
										39
									
								
								src/format.c
									
										
									
									
									
								
							|  | @ -59,7 +59,6 @@ | ||||||
| const char* FileSystemLabel[FS_MAX] = { "FAT", "FAT32", "NTFS", "UDF", "exFAT", "ReFS", "ext2", "ext3", "ext4" }; | const char* FileSystemLabel[FS_MAX] = { "FAT", "FAT32", "NTFS", "UDF", "exFAT", "ReFS", "ext2", "ext3", "ext4" }; | ||||||
| DWORD FormatStatus = 0, LastWriteError = 0; | DWORD FormatStatus = 0, LastWriteError = 0; | ||||||
| badblocks_report report = { 0 }; | badblocks_report report = { 0 }; | ||||||
| static uint64_t LastRefresh = 0; |  | ||||||
| static float format_percent = 0.0f; | static float format_percent = 0.0f; | ||||||
| static int task_number = 0; | static int task_number = 0; | ||||||
| extern const int nb_steps[FS_MAX]; | extern const int nb_steps[FS_MAX]; | ||||||
|  | @ -416,7 +415,7 @@ static BOOL FormatFAT32(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Cluste | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 	PrintInfoDebug(0, MSG_222, "Large FAT32"); | 	PrintInfoDebug(0, MSG_222, "Large FAT32"); | ||||||
| 	LastRefresh = 0; | 	UpdateProgressWithInfoInit(NULL, TRUE); | ||||||
| 	VolumeId = GetVolumeID(); | 	VolumeId = GetVolumeID(); | ||||||
| 
 | 
 | ||||||
| 	// Open the drive and lock it
 | 	// Open the drive and lock it
 | ||||||
|  | @ -616,7 +615,7 @@ static BOOL FormatFAT32(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Cluste | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for (i=0; i<(SystemAreaSize+BurstSize-1); i+=BurstSize) { | 	for (i=0; i<(SystemAreaSize+BurstSize-1); i+=BurstSize) { | ||||||
| 		UPDATE_PERCENT(MSG_217, (100.0f*i) / (1.0f*(SystemAreaSize + BurstSize))); | 		UpdateProgressWithInfo(OP_FORMAT, MSG_217, (uint64_t)i, (uint64_t)(SystemAreaSize + BurstSize)); | ||||||
| 		CHECK_FOR_USER_CANCEL; | 		CHECK_FOR_USER_CANCEL; | ||||||
| 		if (write_sectors(hLogicalVolume, BytesPerSect, i, BurstSize, pZeroSect) != (BytesPerSect*BurstSize)) { | 		if (write_sectors(hLogicalVolume, BytesPerSect, i, BurstSize, pZeroSect) != (BytesPerSect*BurstSize)) { | ||||||
| 			die("Error clearing reserved sectors", ERROR_WRITE_FAULT); | 			die("Error clearing reserved sectors", ERROR_WRITE_FAULT); | ||||||
|  | @ -803,14 +802,15 @@ const char* error_message(errcode_t error_code) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static float ext2_percent_start = 0.0f, ext2_percent_share = 50.0f; | static float ext2_percent_start = 0.0f, ext2_percent_share = 0.5f; | ||||||
| const float ext2_max_marker = 80.0f; | const float ext2_max_marker = 80.0f; | ||||||
| errcode_t ext2fs_print_progress(int64_t cur_value, int64_t max_value) | errcode_t ext2fs_print_progress(int64_t cur_value, int64_t max_value) | ||||||
| { | { | ||||||
| 	static int64_t last_value = -1; | 	static int64_t last_value = -1; | ||||||
| 	if (max_value == 0) | 	if (max_value == 0) | ||||||
| 		return 0; | 		return 0; | ||||||
| 	UPDATE_PERCENT(MSG_217, ext2_percent_start + ext2_percent_share * cur_value / (float)max_value); | 	// TODO: Need to use OP_CREATE_FS here for standalone format
 | ||||||
|  | 	UpdateProgressWithInfo(OP_FORMAT, MSG_217, (uint64_t)((ext2_percent_start * max_value) + (ext2_percent_share * cur_value)), max_value); | ||||||
| 	cur_value = (int64_t)(((float)cur_value / (float)max_value) * min(ext2_max_marker, (float)max_value)); | 	cur_value = (int64_t)(((float)cur_value / (float)max_value) * min(ext2_max_marker, (float)max_value)); | ||||||
| 	if ((cur_value < last_value) || (cur_value > last_value)) { | 	if ((cur_value < last_value) || (cur_value > last_value)) { | ||||||
| 		last_value = cur_value; | 		last_value = cur_value; | ||||||
|  | @ -897,7 +897,7 @@ BOOL FormatExtFs(DWORD DriveIndex, uint64_t PartitionOffset, DWORD BlockSize, LP | ||||||
| 		FSName = FileSystemLabel[FS_EXT3]; | 		FSName = FileSystemLabel[FS_EXT3]; | ||||||
| 
 | 
 | ||||||
| 	PrintInfoDebug(0, MSG_222, FSName); | 	PrintInfoDebug(0, MSG_222, FSName); | ||||||
| 	LastRefresh = 0; | 	UpdateProgressWithInfoInit(NULL, TRUE); | ||||||
| 
 | 
 | ||||||
| 	// Figure out the volume size and block size
 | 	// Figure out the volume size and block size
 | ||||||
| 	r = ext2fs_get_device_size2(volume_name, KB, &size); | 	r = ext2fs_get_device_size2(volume_name, KB, &size); | ||||||
|  | @ -987,7 +987,7 @@ BOOL FormatExtFs(DWORD DriveIndex, uint64_t PartitionOffset, DWORD BlockSize, LP | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	ext2_percent_start = 0.0f; | 	ext2_percent_start = 0.0f; | ||||||
| 	ext2_percent_share = (FSName[3] == '2') ? 100.0f : 50.0f; | 	ext2_percent_share = (FSName[3] == '2') ? 1.0f : 0.5f; | ||||||
| 	uprintf("Creating %d inode sets: [1 marker = %0.1f set(s)]", ext2fs->group_desc_count, | 	uprintf("Creating %d inode sets: [1 marker = %0.1f set(s)]", ext2fs->group_desc_count, | ||||||
| 		max((float)ext2fs->group_desc_count / ext2_max_marker, 1.0f)); | 		max((float)ext2fs->group_desc_count / ext2_max_marker, 1.0f)); | ||||||
| 	for (i = 0; i < (int)ext2fs->group_desc_count; i++) { | 	for (i = 0; i < (int)ext2fs->group_desc_count; i++) { | ||||||
|  | @ -1041,7 +1041,7 @@ BOOL FormatExtFs(DWORD DriveIndex, uint64_t PartitionOffset, DWORD BlockSize, LP | ||||||
| 
 | 
 | ||||||
| 	if (FSName[3] != '2') { | 	if (FSName[3] != '2') { | ||||||
| 		// Create the journal
 | 		// Create the journal
 | ||||||
| 		ext2_percent_start = 50.0f; | 		ext2_percent_start = 0.5f; | ||||||
| 		journal_size = ext2fs_default_journal_size(ext2fs_blocks_count(ext2fs->super)); | 		journal_size = ext2fs_default_journal_size(ext2fs_blocks_count(ext2fs->super)); | ||||||
| 		journal_size /= 2;	// That journal init is really killing us!
 | 		journal_size /= 2;	// That journal init is really killing us!
 | ||||||
| 		uprintf("Creating %d journal blocks: [1 marker = %0.1f block(s)]", journal_size, | 		uprintf("Creating %d journal blocks: [1 marker = %0.1f block(s)]", journal_size, | ||||||
|  | @ -1092,7 +1092,7 @@ BOOL FormatExtFs(DWORD DriveIndex, uint64_t PartitionOffset, DWORD BlockSize, LP | ||||||
| 		uprintf("Could not create %s volume: %s", FSName, error_message(r)); | 		uprintf("Could not create %s volume: %s", FSName, error_message(r)); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 	UPDATE_PERCENT(MSG_217, 100.0f); | 	UpdateProgressWithInfo(OP_FORMAT, MSG_217, 100, 100); | ||||||
| 	uprintf("Done"); | 	uprintf("Done"); | ||||||
| 	ret = TRUE; | 	ret = TRUE; | ||||||
| 
 | 
 | ||||||
|  | @ -1123,7 +1123,7 @@ static BOOL FormatDriveVds(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Clu | ||||||
| 	} else { | 	} else { | ||||||
| 		PrintInfoDebug(0, MSG_222, FSName); | 		PrintInfoDebug(0, MSG_222, FSName); | ||||||
| 	} | 	} | ||||||
| 	LastRefresh = 0; | 	UpdateProgressWithInfoInit(NULL, TRUE); | ||||||
| 	VolumeName = GetLogicalName(DriveIndex, PartitionOffset, TRUE, TRUE); | 	VolumeName = GetLogicalName(DriveIndex, PartitionOffset, TRUE, TRUE); | ||||||
| 	wVolumeName = utf8_to_wchar(VolumeName); | 	wVolumeName = utf8_to_wchar(VolumeName); | ||||||
| 	if (wVolumeName == NULL) { | 	if (wVolumeName == NULL) { | ||||||
|  | @ -2197,7 +2197,7 @@ static BOOL SetupWinToGo(DWORD DriveIndex, const char* drive_name, BOOL use_esp) | ||||||
| 		AltUnmountVolume(ms_efi, FALSE); | 		AltUnmountVolume(ms_efi, FALSE); | ||||||
| 	} | 	} | ||||||
| 	PrintInfo(0, MSG_267, 99.9f); | 	PrintInfo(0, MSG_267, 99.9f); | ||||||
| 	UpdateProgress(OP_DOS, 99.9f); | 	UpdateProgress(OP_FILE_COPY, 99.9f); | ||||||
| 
 | 
 | ||||||
| 	// The following are non fatal if they fail
 | 	// The following are non fatal if they fail
 | ||||||
| 
 | 
 | ||||||
|  | @ -2233,14 +2233,14 @@ static BOOL SetupWinToGo(DWORD DriveIndex, const char* drive_name, BOOL use_esp) | ||||||
| 	if (fd != NULL) | 	if (fd != NULL) | ||||||
| 		fclose(fd); | 		fclose(fd); | ||||||
| 	PrintInfo(0, MSG_267, 100.0f); | 	PrintInfo(0, MSG_267, 100.0f); | ||||||
| 	UpdateProgress(OP_DOS, 100.0f); | 	UpdateProgress(OP_FILE_COPY, 100.0f); | ||||||
| 
 | 
 | ||||||
| 	return TRUE; | 	return TRUE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void update_progress(const uint64_t processed_bytes) | static void update_progress(const uint64_t processed_bytes) | ||||||
| { | { | ||||||
| 	UPDATE_PERCENT(MSG_261, (100.0f*processed_bytes) / (1.0f*img_report.image_size)); | 	UpdateProgressWithInfo(OP_FORMAT, MSG_261, processed_bytes, img_report.image_size); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Write an image file or zero a drive */ | /* Write an image file or zero a drive */ | ||||||
|  | @ -2259,7 +2259,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, HANDLE hSourceImage) | ||||||
| 	li.QuadPart = 0; | 	li.QuadPart = 0; | ||||||
| 	if (!SetFilePointerEx(hPhysicalDrive, li, NULL, FILE_BEGIN)) | 	if (!SetFilePointerEx(hPhysicalDrive, li, NULL, FILE_BEGIN)) | ||||||
| 		uprintf("Warning: Unable to rewind image position - wrong data might be copied!"); | 		uprintf("Warning: Unable to rewind image position - wrong data might be copied!"); | ||||||
| 	LastRefresh = 0; | 	UpdateProgressWithInfoInit(NULL, FALSE); | ||||||
| 
 | 
 | ||||||
| 	if (img_report.compression_type != BLED_COMPRESSION_NONE) { | 	if (img_report.compression_type != BLED_COMPRESSION_NONE) { | ||||||
| 		uprintf("Writing compressed image..."); | 		uprintf("Writing compressed image..."); | ||||||
|  | @ -2300,7 +2300,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, HANDLE hSourceImage) | ||||||
| 		// will be as fast, if not faster, than whatever async scheme you can come up with.
 | 		// will be as fast, if not faster, than whatever async scheme you can come up with.
 | ||||||
| 		rSize = BufSize; | 		rSize = BufSize; | ||||||
| 		for (wb = 0, wSize = 0; wb < (uint64_t)SelectedDrive.DiskSize; wb += wSize) { | 		for (wb = 0, wSize = 0; wb < (uint64_t)SelectedDrive.DiskSize; wb += wSize) { | ||||||
| 			UPDATE_PERCENT(hSourceImage?MSG_261:fast_zeroing?MSG_306:MSG_286, (100.0f*wb)/(1.0f*target_size)); | 			UpdateProgressWithInfo(OP_FORMAT, hSourceImage ? MSG_261 : fast_zeroing ? MSG_306 : MSG_286, wb, target_size); | ||||||
| 			if (hSourceImage != NULL) { | 			if (hSourceImage != NULL) { | ||||||
| 				s = ReadFile(hSourceImage, buffer, BufSize, &rSize, NULL); | 				s = ReadFile(hSourceImage, buffer, BufSize, &rSize, NULL); | ||||||
| 				if (!s) { | 				if (!s) { | ||||||
|  | @ -2834,7 +2834,7 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 
 | 
 | ||||||
| 	if (boot_type != BT_NON_BOOTABLE) { | 	if (boot_type != BT_NON_BOOTABLE) { | ||||||
| 		if ((boot_type == BT_MSDOS) || (boot_type == BT_FREEDOS)) { | 		if ((boot_type == BT_MSDOS) || (boot_type == BT_FREEDOS)) { | ||||||
| 			UpdateProgress(OP_DOS, -1.0f); | 			UpdateProgress(OP_FILE_COPY, -1.0f); | ||||||
| 			PrintInfoDebug(0, MSG_230); | 			PrintInfoDebug(0, MSG_230); | ||||||
| 			if (!ExtractDOS(drive_name)) { | 			if (!ExtractDOS(drive_name)) { | ||||||
| 				if (!IS_ERROR(FormatStatus)) | 				if (!IS_ERROR(FormatStatus)) | ||||||
|  | @ -2849,7 +2849,7 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 			if (!CopyFileU(FILES_DIR "\\grub4dos-" GRUB4DOS_VERSION "\\grldr", grub4dos_dst, FALSE)) | 			if (!CopyFileU(FILES_DIR "\\grub4dos-" GRUB4DOS_VERSION "\\grldr", grub4dos_dst, FALSE)) | ||||||
| 				uprintf("Failed to copy file: %s", WindowsErrorString()); | 				uprintf("Failed to copy file: %s", WindowsErrorString()); | ||||||
| 		} else if ((boot_type == BT_IMAGE) && (image_path != NULL) && (img_report.is_iso)) { | 		} else if ((boot_type == BT_IMAGE) && (image_path != NULL) && (img_report.is_iso)) { | ||||||
| 			UpdateProgress(OP_DOS, 0.0f); | 			UpdateProgress(OP_FILE_COPY, 0.0f); | ||||||
| 			drive_name[2] = 0;	// Ensure our drive is something like 'D:'
 | 			drive_name[2] = 0;	// Ensure our drive is something like 'D:'
 | ||||||
| 			if (windows_to_go) { | 			if (windows_to_go) { | ||||||
| 				PrintInfoDebug(0, MSG_268); | 				PrintInfoDebug(0, MSG_268); | ||||||
|  | @ -2859,7 +2859,6 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 					goto out; | 					goto out; | ||||||
| 				} | 				} | ||||||
| 			} else { | 			} else { | ||||||
| 				PrintInfoDebug(0, MSG_231); |  | ||||||
| 				if (!ExtractISO(image_path, drive_name, FALSE)) { | 				if (!ExtractISO(image_path, drive_name, FALSE)) { | ||||||
| 					if (!IS_ERROR(FormatStatus)) | 					if (!IS_ERROR(FormatStatus)) | ||||||
| 						FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_ISO_EXTRACT); | 						FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_ISO_EXTRACT); | ||||||
|  | @ -2948,7 +2947,6 @@ DWORD WINAPI SaveImageThread(void* param) | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	PrintInfoDebug(0, MSG_225); | 	PrintInfoDebug(0, MSG_225); | ||||||
| 	LastRefresh = 0; |  | ||||||
| 	switch (img_save->Type) { | 	switch (img_save->Type) { | ||||||
| 	case IMG_SAVE_TYPE_VHD: | 	case IMG_SAVE_TYPE_VHD: | ||||||
| 		hPhysicalDrive = GetPhysicalHandle(img_save->DeviceNum, TRUE, FALSE, FALSE); | 		hPhysicalDrive = GetPhysicalHandle(img_save->DeviceNum, TRUE, FALSE, FALSE); | ||||||
|  | @ -2991,6 +2989,7 @@ DWORD WINAPI SaveImageThread(void* param) | ||||||
| 	// Don't bother trying for something clever, using double buffering overlapped and whatnot:
 | 	// Don't bother trying for something clever, using double buffering overlapped and whatnot:
 | ||||||
| 	// With Windows' default optimizations, sync read + sync write for sequential operations
 | 	// With Windows' default optimizations, sync read + sync write for sequential operations
 | ||||||
| 	// will be as fast, if not faster, than whatever async scheme you can come up with.
 | 	// will be as fast, if not faster, than whatever async scheme you can come up with.
 | ||||||
|  | 	UpdateProgressWithInfoInit(NULL, FALSE); | ||||||
| 	for (wb = 0; ; wb += wSize) { | 	for (wb = 0; ; wb += wSize) { | ||||||
| 		if (img_save->Type == IMG_SAVE_TYPE_ISO) { | 		if (img_save->Type == IMG_SAVE_TYPE_ISO) { | ||||||
| 			// Optical drives do not appear to increment the sectors to read automatically
 | 			// Optical drives do not appear to increment the sectors to read automatically
 | ||||||
|  | @ -3007,7 +3006,7 @@ DWORD WINAPI SaveImageThread(void* param) | ||||||
| 		} | 		} | ||||||
| 		if (rSize == 0) | 		if (rSize == 0) | ||||||
| 			break; | 			break; | ||||||
| 		UPDATE_PERCENT(MSG_261, (100.0f*wb)/(1.0f*img_save->DeviceSize)); | 		UpdateProgressWithInfo(OP_FORMAT, MSG_261, wb, img_save->DeviceSize); | ||||||
| 		for (i = 1; i <= WRITE_RETRIES; i++) { | 		for (i = 1; i <= WRITE_RETRIES; i++) { | ||||||
| 			CHECK_FOR_USER_CANCEL; | 			CHECK_FOR_USER_CANCEL; | ||||||
| 			s = WriteFile(hDestImage, buffer, rSize, &wSize, NULL); | 			s = WriteFile(hDestImage, buffer, rSize, &wSize, NULL); | ||||||
|  |  | ||||||
|  | @ -157,10 +157,6 @@ typedef struct { | ||||||
| 	FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|err; \ | 	FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|err; \ | ||||||
| 	goto out; } while(0) | 	goto out; } while(0) | ||||||
| 
 | 
 | ||||||
| #define UPDATE_PERCENT(msg, percent) if (GetTickCount64() > LastRefresh + MAX_REFRESH) { \ |  | ||||||
| 	LastRefresh = GetTickCount64(); PrintInfo(0, msg, percent); \ |  | ||||||
| 	UpdateProgress(OP_FORMAT, percent); } |  | ||||||
| 
 |  | ||||||
| // For ext2/ext3/ext4 formatting
 | // For ext2/ext3/ext4 formatting
 | ||||||
| typedef struct { | typedef struct { | ||||||
| 	uint64_t max_size; | 	uint64_t max_size; | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/iso.c
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/iso.c
									
										
									
									
									
								
							|  | @ -445,6 +445,8 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha | ||||||
| 	if ((p_udf_dirent == NULL) || (psz_path == NULL)) | 	if ((p_udf_dirent == NULL) || (psz_path == NULL)) | ||||||
| 		return 1; | 		return 1; | ||||||
| 
 | 
 | ||||||
|  | 	if (psz_path[0] == 0) | ||||||
|  | 		UpdateProgressWithInfoInit(NULL, TRUE); | ||||||
| 	while ((p_udf_dirent = udf_readdir(p_udf_dirent)) != NULL) { | 	while ((p_udf_dirent = udf_readdir(p_udf_dirent)) != NULL) { | ||||||
| 		if (FormatStatus) goto out; | 		if (FormatStatus) goto out; | ||||||
| 		psz_basename = udf_get_filename(p_udf_dirent); | 		psz_basename = udf_get_filename(p_udf_dirent); | ||||||
|  | @ -524,7 +526,7 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha | ||||||
| 					} | 					} | ||||||
| 					file_length -= read; | 					file_length -= read; | ||||||
| 					if (nb_blocks++ % PROGRESS_THRESHOLD == 0) | 					if (nb_blocks++ % PROGRESS_THRESHOLD == 0) | ||||||
| 						UpdateProgress(OP_DOS, 100.0f*nb_blocks/total_blocks); | 						UpdateProgressWithInfo(OP_FILE_COPY, MSG_231, nb_blocks, total_blocks); | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			if ((preserve_timestamps) && (!SetFileTime(file_handle, to_filetime(udf_get_attribute_time(p_udf_dirent)), | 			if ((preserve_timestamps) && (!SetFileTime(file_handle, to_filetime(udf_get_attribute_time(p_udf_dirent)), | ||||||
|  | @ -586,6 +588,8 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path) | ||||||
| 		return 1; | 		return 1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if (psz_path[0] == 0) | ||||||
|  | 		UpdateProgressWithInfoInit(NULL, TRUE); | ||||||
| 	_CDIO_LIST_FOREACH(p_entnode, p_entlist) { | 	_CDIO_LIST_FOREACH(p_entnode, p_entlist) { | ||||||
| 		if (FormatStatus) goto out; | 		if (FormatStatus) goto out; | ||||||
| 		p_statbuf = (iso9660_stat_t*) _cdio_list_node_data(p_entnode); | 		p_statbuf = (iso9660_stat_t*) _cdio_list_node_data(p_entnode); | ||||||
|  | @ -677,7 +681,7 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path) | ||||||
| 						} | 						} | ||||||
| 						extent_length -= ISO_BLOCKSIZE; | 						extent_length -= ISO_BLOCKSIZE; | ||||||
| 						if (nb_blocks++ % PROGRESS_THRESHOLD == 0) | 						if (nb_blocks++ % PROGRESS_THRESHOLD == 0) | ||||||
| 							UpdateProgress(OP_DOS, 100.0f*nb_blocks/total_blocks); | 							UpdateProgressWithInfo(OP_FILE_COPY, MSG_231, nb_blocks, total_blocks); | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | @ -764,7 +768,7 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan) | ||||||
| 	} else { | 	} else { | ||||||
| 		uprintf("Extracting files...\n"); | 		uprintf("Extracting files...\n"); | ||||||
| 		IGNORE_RETVAL(_chdirU(app_dir)); | 		IGNORE_RETVAL(_chdirU(app_dir)); | ||||||
| 		PrintInfo(0, 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); | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								src/net.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/net.c
									
										
									
									
									
								
							|  | @ -316,7 +316,6 @@ uint64_t DownloadToFileOrBuffer(const char* url, const char* file, BYTE** buffer | ||||||
| 	const char* short_name; | 	const char* short_name; | ||||||
| 	unsigned char buf[DOWNLOAD_BUFFER_SIZE]; | 	unsigned char buf[DOWNLOAD_BUFFER_SIZE]; | ||||||
| 	char hostname[64], urlpath[128], strsize[32]; | 	char hostname[64], urlpath[128], strsize[32]; | ||||||
| 	HWND hProgressBar = NULL; |  | ||||||
| 	BOOL r = FALSE; | 	BOOL r = FALSE; | ||||||
| 	DWORD dwSize, dwWritten, dwDownloaded; | 	DWORD dwSize, dwWritten, dwDownloaded; | ||||||
| 	HANDLE hFile = INVALID_HANDLE_VALUE; | 	HANDLE hFile = INVALID_HANDLE_VALUE; | ||||||
|  | @ -343,16 +342,8 @@ uint64_t DownloadToFileOrBuffer(const char* url, const char* file, BYTE** buffer | ||||||
| 
 | 
 | ||||||
| 	FormatStatus = 0; | 	FormatStatus = 0; | ||||||
| 	DownloadStatus = 404; | 	DownloadStatus = 404; | ||||||
| 	if (hProgressDialog != NULL) { | 	if (hProgressDialog != NULL) | ||||||
| 		// Use the progress control provided, if any
 | 		UpdateProgressWithInfoInit(hProgressDialog, FALSE); | ||||||
| 		hProgressBar = GetDlgItem(hProgressDialog, IDC_PROGRESS); |  | ||||||
| 		if (hProgressBar != NULL) { |  | ||||||
| 			SendMessage(hProgressBar, PBM_SETSTATE, (WPARAM)PBST_NORMAL, 0); |  | ||||||
| 			SendMessage(hProgressBar, PBM_SETMARQUEE, FALSE, 0); |  | ||||||
| 			SendMessage(hProgressBar, PBM_SETPOS, 0, 0); |  | ||||||
| 		} |  | ||||||
| 		SendMessage(hProgressDialog, UM_PROGRESS_INIT, 0, 0); |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	assert(url != NULL); | 	assert(url != NULL); | ||||||
| 	if (buffer != NULL) | 	if (buffer != NULL) | ||||||
|  | @ -449,12 +440,8 @@ uint64_t DownloadToFileOrBuffer(const char* url, const char* file, BYTE** buffer | ||||||
| 			goto out; | 			goto out; | ||||||
| 		if (!pfInternetReadFile(hRequest, buf, sizeof(buf), &dwDownloaded) || (dwDownloaded == 0)) | 		if (!pfInternetReadFile(hRequest, buf, sizeof(buf), &dwDownloaded) || (dwDownloaded == 0)) | ||||||
| 			break; | 			break; | ||||||
| 		if (hProgressDialog != NULL) { | 		if (hProgressDialog != NULL) | ||||||
| 			SendMessage(hProgressBar, PBM_SETPOS, (WPARAM)((1.0f * MAX_PROGRESS * size) / (1.0f * total_size)), 0); | 			UpdateProgressWithInfo(OP_NOOP, MSG_241, size, total_size); | ||||||
| 			if (bTaskBarProgress) |  | ||||||
| 				SetTaskbarProgressValue((ULONGLONG)((1.0f * MAX_PROGRESS * size) / (1.0f * total_size)), MAX_PROGRESS); |  | ||||||
| 			PrintInfo(0, MSG_241, (100.0f*size) / (1.0f*total_size)); |  | ||||||
| 		} |  | ||||||
| 		if (file != NULL) { | 		if (file != NULL) { | ||||||
| 			if (!WriteFile(hFile, buf, dwDownloaded, &dwWritten, NULL)) { | 			if (!WriteFile(hFile, buf, dwDownloaded, &dwWritten, NULL)) { | ||||||
| 				uprintf("Error writing file '%s': %s", short_name, WinInetErrorString()); | 				uprintf("Error writing file '%s': %s", short_name, WinInetErrorString()); | ||||||
|  | @ -477,9 +464,8 @@ uint64_t DownloadToFileOrBuffer(const char* url, const char* file, BYTE** buffer | ||||||
| 		DownloadStatus = 200; | 		DownloadStatus = 200; | ||||||
| 		r = TRUE; | 		r = TRUE; | ||||||
| 		if (hProgressDialog != NULL) { | 		if (hProgressDialog != NULL) { | ||||||
|  | 			UpdateProgressWithInfo(OP_NOOP, MSG_241, total_size, total_size); | ||||||
| 			uprintf("Successfully downloaded '%s'", short_name); | 			uprintf("Successfully downloaded '%s'", short_name); | ||||||
| 			SendMessage(hProgressBar, PBM_SETPOS, (WPARAM)MAX_PROGRESS, 0); |  | ||||||
| 			PrintInfo(0, MSG_241, 100.0f); |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -2870,6 +2870,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | ||||||
| 	FILE* fd; | 	FILE* fd; | ||||||
| 	BOOL attached_console = FALSE, external_loc_file = FALSE, lgp_set = FALSE, automount = TRUE; | 	BOOL attached_console = FALSE, external_loc_file = FALSE, lgp_set = FALSE, automount = TRUE; | ||||||
| 	BOOL disable_hogger = FALSE, previous_enable_HDDs = FALSE, vc = IsRegistryNode(REGKEY_HKCU, vs_reg); | 	BOOL disable_hogger = FALSE, previous_enable_HDDs = FALSE, vc = IsRegistryNode(REGKEY_HKCU, vs_reg); | ||||||
|  | 	BOOL alt_pressed = FALSE, alt_command = FALSE; | ||||||
| 	BYTE *loc_data; | 	BYTE *loc_data; | ||||||
| 	DWORD loc_size, size; | 	DWORD loc_size, size; | ||||||
| 	char tmp_path[MAX_PATH] = "", loc_file[MAX_PATH] = "", ini_path[MAX_PATH] = "", ini_flags[] = "rb"; | 	char tmp_path[MAX_PATH] = "", loc_file[MAX_PATH] = "", ini_path[MAX_PATH] = "", ini_flags[] = "rb"; | ||||||
|  | @ -3245,6 +3246,12 @@ relaunch: | ||||||
| 		// ** *****  **** ** **********
 | 		// ** *****  **** ** **********
 | ||||||
| 		// .,ABCDEFGHIJKLMNOPQRSTUVWXYZ
 | 		// .,ABCDEFGHIJKLMNOPQRSTUVWXYZ
 | ||||||
| 
 | 
 | ||||||
|  | 		// Sigh... The things one need to do to detect standalone use of the 'Alt' key.
 | ||||||
|  | 		if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam != VK_MENU)) | ||||||
|  | 			alt_command = TRUE; | ||||||
|  | 		else if (GetAsyncKeyState(VK_MENU)) | ||||||
|  | 			alt_pressed = TRUE; | ||||||
|  | 
 | ||||||
| 		// Ctrl-A => Select the log data
 | 		// Ctrl-A => Select the log data
 | ||||||
| 		if ( (IsWindowVisible(hLogDialog)) && (GetKeyState(VK_CONTROL) & 0x8000) && | 		if ( (IsWindowVisible(hLogDialog)) && (GetKeyState(VK_CONTROL) & 0x8000) && | ||||||
| 			(msg.message == WM_KEYDOWN) && (msg.wParam == 'A') ) { | 			(msg.message == WM_KEYDOWN) && (msg.wParam == 'A') ) { | ||||||
|  | @ -3478,6 +3485,15 @@ relaunch: | ||||||
| 			continue; | 			continue; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		// Standalone 'Alt' key toggles progress report between percent, rate (if available)
 | ||||||
|  | 		// and remaining time (if availabe)
 | ||||||
|  | 		if (alt_pressed && !GetAsyncKeyState(VK_MENU)) { | ||||||
|  | 			alt_pressed = FALSE; | ||||||
|  | 			if (!alt_command) | ||||||
|  | 				update_progress_type = (update_progress_type + 1) % UPT_MAX; | ||||||
|  | 			alt_command = FALSE; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		// Let the system handle dialog messages (e.g. those from the tab key)
 | 		// Let the system handle dialog messages (e.g. those from the tab key)
 | ||||||
| 		if (!IsDialogMessage(hDlg, &msg) && !IsDialogMessage(hLogDialog, &msg)) { | 		if (!IsDialogMessage(hDlg, &msg) && !IsDialogMessage(hLogDialog, &msg)) { | ||||||
| 			TranslateMessage(&msg); | 			TranslateMessage(&msg); | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								src/rufus.h
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/rufus.h
									
										
									
									
									
								
							|  | @ -224,14 +224,17 @@ enum timer_type { | ||||||
| 
 | 
 | ||||||
| /* Action type, for progress bar breakdown */ | /* Action type, for progress bar breakdown */ | ||||||
| enum action_type { | enum action_type { | ||||||
| 	OP_ANALYZE_MBR, | 	OP_NOOP_WITH_TASKBAR = -3, | ||||||
|  | 	OP_NOOP = -2, | ||||||
|  | 	OP_INIT = -1, | ||||||
|  | 	OP_ANALYZE_MBR = 0, | ||||||
| 	OP_BADBLOCKS, | 	OP_BADBLOCKS, | ||||||
| 	OP_ZERO_MBR, | 	OP_ZERO_MBR, | ||||||
| 	OP_PARTITION, | 	OP_PARTITION, | ||||||
| 	OP_FORMAT, | 	OP_FORMAT, | ||||||
| 	OP_CREATE_FS, | 	OP_CREATE_FS, | ||||||
| 	OP_FIX_MBR, | 	OP_FIX_MBR, | ||||||
| 	OP_DOS, | 	OP_FILE_COPY, | ||||||
| 	OP_FINALIZE, | 	OP_FINALIZE, | ||||||
| 	OP_MAX | 	OP_MAX | ||||||
| }; | }; | ||||||
|  | @ -472,10 +475,13 @@ extern void PrintStatusInfo(BOOL info, BOOL debug, unsigned int duration, int ms | ||||||
| #define PrintInfo(...) PrintStatusInfo(TRUE, FALSE, __VA_ARGS__) | #define PrintInfo(...) PrintStatusInfo(TRUE, FALSE, __VA_ARGS__) | ||||||
| #define PrintInfoDebug(...) PrintStatusInfo(TRUE, TRUE, __VA_ARGS__) | #define PrintInfoDebug(...) PrintStatusInfo(TRUE, TRUE, __VA_ARGS__) | ||||||
| extern void UpdateProgress(int op, float percent); | extern void UpdateProgress(int op, float percent); | ||||||
|  | extern void UpdateProgressWithInfo(int op, int msg, uint64_t processed, uint64_t total); | ||||||
|  | #define UpdateProgressWithInfoInit(hProgressDialog, bNoAltMode) UpdateProgressWithInfo(OP_INIT, (int)bNoAltMode, (uint64_t)(uintptr_t)hProgressDialog, 0); | ||||||
| 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); | ||||||
| extern char* SizeToHumanReadable(uint64_t size, BOOL copy_to_log, BOOL fake_units); | extern char* SizeToHumanReadable(uint64_t size, BOOL copy_to_log, BOOL fake_units); | ||||||
| extern char* TimestampToHumanReadable(uint64_t ts); | extern char* TimestampToHumanReadable(uint64_t ts); | ||||||
|  | extern char* RateToHumanReadable(uint64_t transferred, uint64_t total); | ||||||
| extern HWND MyCreateDialog(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc); | extern HWND MyCreateDialog(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc); | ||||||
| extern INT_PTR MyDialogBox(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc); | extern INT_PTR MyDialogBox(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc); | ||||||
| extern void CenterDialog(HWND hDlg, HWND hParent); | extern void CenterDialog(HWND hDlg, HWND hParent); | ||||||
|  | @ -505,7 +511,6 @@ extern char* MountISO(const char* path); | ||||||
| extern void UnMountISO(void); | extern void UnMountISO(void); | ||||||
| extern BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs); | extern BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs); | ||||||
| extern uint16_t GetSyslinuxVersion(char* buf, size_t buf_size, char** ext); | extern uint16_t GetSyslinuxVersion(char* buf, size_t buf_size, char** ext); | ||||||
| extern BOOL CreateProgress(void); |  | ||||||
| extern BOOL SetAutorun(const char* path); | extern BOOL SetAutorun(const char* path); | ||||||
| extern char* FileDialog(BOOL save, char* path, const ext_t* ext, DWORD options); | extern char* FileDialog(BOOL save, char* path, const ext_t* ext, DWORD options); | ||||||
| extern BOOL FileIO(BOOL save, char* path, char** buffer, DWORD* size); | extern BOOL FileIO(BOOL save, char* path, char** buffer, DWORD* size); | ||||||
|  | @ -524,7 +529,6 @@ extern BOOL CheckForUpdates(BOOL force); | ||||||
| extern void DownloadNewVersion(void); | extern void DownloadNewVersion(void); | ||||||
| extern BOOL DownloadISO(void); | extern BOOL DownloadISO(void); | ||||||
| extern BOOL IsDownloadable(const char* url); | extern BOOL IsDownloadable(const char* url); | ||||||
| extern const char* ResolveRedirect(const char* url); |  | ||||||
| extern BOOL IsShown(HWND hDlg); | extern BOOL IsShown(HWND hDlg); | ||||||
| extern char* get_token_data_file_indexed(const char* token, const char* filename, int index); | extern char* get_token_data_file_indexed(const char* token, const char* filename, int index); | ||||||
| #define get_token_data_file(token, filename) get_token_data_file_indexed(token, filename, 1) | #define get_token_data_file(token, filename) get_token_data_file_indexed(token, filename, 1) | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | ||||||
| IDD_DIALOG DIALOGEX 12, 12, 232, 326 | IDD_DIALOG DIALOGEX 12, 12, 232, 326 | ||||||
| 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_ACCEPTFILES | EXSTYLE WS_EX_ACCEPTFILES | ||||||
| CAPTION "Rufus 3.7.1562" | CAPTION "Rufus 3.7.1563" | ||||||
| FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP |     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP | ||||||
|  | @ -394,8 +394,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 3,7,1562,0 |  FILEVERSION 3,7,1563,0 | ||||||
|  PRODUCTVERSION 3,7,1562,0 |  PRODUCTVERSION 3,7,1563,0 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -413,13 +413,13 @@ BEGIN | ||||||
|             VALUE "Comments", "https://akeo.ie" |             VALUE "Comments", "https://akeo.ie" | ||||||
|             VALUE "CompanyName", "Akeo Consulting" |             VALUE "CompanyName", "Akeo Consulting" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "3.7.1562" |             VALUE "FileVersion", "3.7.1563" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "© 2011-2019 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "© 2011-2019 Pete Batard (GPL v3)" | ||||||
|             VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html" |             VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html" | ||||||
|             VALUE "OriginalFilename", "rufus-3.7.exe" |             VALUE "OriginalFilename", "rufus-3.7.exe" | ||||||
|             VALUE "ProductName", "Rufus" |             VALUE "ProductName", "Rufus" | ||||||
|             VALUE "ProductVersion", "3.7.1562" |             VALUE "ProductVersion", "3.7.1563" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
							
								
								
									
										23
									
								
								src/stdio.c
									
										
									
									
									
								
							
							
						
						
									
										23
									
								
								src/stdio.c
									
										
									
									
									
								
							|  | @ -695,6 +695,29 @@ char* TimestampToHumanReadable(uint64_t ts) | ||||||
| 	return str; | 	return str; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // TODO: Add granularity
 | ||||||
|  | char* RateToHumanReadable(uint64_t transferred, uint64_t total) | ||||||
|  | { | ||||||
|  | 	const uint64_t refresh_rate = 1000; | ||||||
|  | 	static uint64_t start_time, last_refresh = 0; | ||||||
|  | 	uint64_t current_time, rate; | ||||||
|  | 	if (total == 0) { | ||||||
|  | 		// init
 | ||||||
|  | 		start_time = GetTickCount64(); | ||||||
|  | 		last_refresh = start_time; | ||||||
|  | 	} else { | ||||||
|  | 		current_time = GetTickCount64(); | ||||||
|  | 		if (current_time <= start_time) | ||||||
|  | 			return NULL; | ||||||
|  | 		rate = (transferred  * 1000) / (current_time - start_time); | ||||||
|  | 		if (current_time > last_refresh + refresh_rate) { | ||||||
|  | 			last_refresh = current_time; | ||||||
|  | 			uprintf("%s/s", SizeToHumanReadable(rate, FALSE, FALSE)); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Convert custom error code to messages
 | // Convert custom error code to messages
 | ||||||
| const char* _StrError(DWORD error_code) | const char* _StrError(DWORD error_code) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -219,7 +219,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int file_system) | ||||||
| 
 | 
 | ||||||
| 	uprintf("Successfully wrote '%s'", &path[3]); | 	uprintf("Successfully wrote '%s'", &path[3]); | ||||||
| 	if (boot_type != BT_IMAGE) | 	if (boot_type != BT_IMAGE) | ||||||
| 		UpdateProgress(OP_DOS, -1.0f); | 		UpdateProgress(OP_FILE_COPY, -1.0f); | ||||||
| 
 | 
 | ||||||
| 	/* Now flush the media */ | 	/* Now flush the media */ | ||||||
| 	if (!FlushFileBuffers(f_handle)) { | 	if (!FlushFileBuffers(f_handle)) { | ||||||
|  | @ -380,7 +380,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int file_system) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (boot_type != BT_IMAGE) | 	if (boot_type != BT_IMAGE) | ||||||
| 		UpdateProgress(OP_DOS, -1.0f); | 		UpdateProgress(OP_FILE_COPY, -1.0f); | ||||||
| 
 | 
 | ||||||
| 	r = TRUE; | 	r = TRUE; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										73
									
								
								src/ui.c
									
										
									
									
									
								
							
							
						
						
									
										73
									
								
								src/ui.c
									
										
									
									
									
								
							|  | @ -44,6 +44,8 @@ | ||||||
| UINT_PTR UM_LANGUAGE_MENU_MAX = UM_LANGUAGE_MENU; | UINT_PTR UM_LANGUAGE_MENU_MAX = UM_LANGUAGE_MENU; | ||||||
| HIMAGELIST hUpImageList, hDownImageList; | HIMAGELIST hUpImageList, hDownImageList; | ||||||
| extern BOOL enable_fido, use_vds; | extern BOOL enable_fido, use_vds; | ||||||
|  | // TODO: Use an enum or something
 | ||||||
|  | int update_progress_type = UPT_PERCENT; | ||||||
| int advanced_device_section_height, advanced_format_section_height; | int advanced_device_section_height, advanced_format_section_height; | ||||||
| // (empty) check box width, (empty) drop down width, button height (for and without dropdown match)
 | // (empty) check box width, (empty) drop down width, button height (for and without dropdown match)
 | ||||||
| int cbw, ddw, ddbh = 0, bh = 0; | int cbw, ddw, ddbh = 0, bh = 0; | ||||||
|  | @ -1157,16 +1159,16 @@ void InitProgress(BOOL bOnlyFormat) | ||||||
| 			// 1 extra slot for PBR writing
 | 			// 1 extra slot for PBR writing
 | ||||||
| 			switch (selection_default) { | 			switch (selection_default) { | ||||||
| 			case BT_MSDOS: | 			case BT_MSDOS: | ||||||
| 				nb_slots[OP_DOS] = 3 + 1; | 				nb_slots[OP_FILE_COPY] = 3 + 1; | ||||||
| 				break; | 				break; | ||||||
| 			case BT_FREEDOS: | 			case BT_FREEDOS: | ||||||
| 				nb_slots[OP_DOS] = 5 + 1; | 				nb_slots[OP_FILE_COPY] = 5 + 1; | ||||||
| 				break; | 				break; | ||||||
| 			case BT_IMAGE: | 			case BT_IMAGE: | ||||||
| 				nb_slots[OP_DOS] = img_report.is_iso ? -1 : 0; | 				nb_slots[OP_FILE_COPY] = img_report.is_iso ? -1 : 0; | ||||||
| 				break; | 				break; | ||||||
| 			default: | 			default: | ||||||
| 				nb_slots[OP_DOS] = 2 + 1; | 				nb_slots[OP_FILE_COPY] = 2 + 1; | ||||||
| 				break; | 				break; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | @ -1262,6 +1264,69 @@ void UpdateProgress(int op, float percent) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // This updates the progress bar as well as the data displayed on it so that we can
 | ||||||
|  | // display percentage completed, rate of transfer and estimated remaining duration.
 | ||||||
|  | // During init (op = OP_INIT) an optional HWND can be passed on which to look for
 | ||||||
|  | // a progress bar.
 | ||||||
|  | void UpdateProgressWithInfo(int op, int msg, uint64_t processed, uint64_t total) | ||||||
|  | { | ||||||
|  | 	HWND hProgressDialog = (HWND)(uintptr_t)processed; | ||||||
|  | 	static HWND hProgressBar = NULL; | ||||||
|  | 	static uint64_t start_time = 0, last_refresh = 0; | ||||||
|  | 	uint64_t rate = 0, current_time = GetTickCount64(); | ||||||
|  | 	static float percent = 0.0f; | ||||||
|  | 	char msg_data[128]; | ||||||
|  | 	static BOOL bNoAltMode = FALSE; | ||||||
|  | 
 | ||||||
|  | 	if (op == OP_INIT) { | ||||||
|  | 		start_time = current_time - 1; | ||||||
|  | 		last_refresh = 0; | ||||||
|  | 		percent = 0.0f; | ||||||
|  | 		rate = 0; | ||||||
|  | 		hProgressBar = NULL; | ||||||
|  | 		bNoAltMode = (BOOL)msg; | ||||||
|  | 		if (hProgressDialog != NULL) { | ||||||
|  | 			// Use the progress control provided, if any
 | ||||||
|  | 			hProgressBar = GetDlgItem(hProgressDialog, IDC_PROGRESS); | ||||||
|  | 			if (hProgressBar != NULL) { | ||||||
|  | 				SendMessage(hProgressBar, PBM_SETSTATE, (WPARAM)PBST_NORMAL, 0); | ||||||
|  | 				SendMessage(hProgressBar, PBM_SETMARQUEE, FALSE, 0); | ||||||
|  | 				SendMessage(hProgressBar, PBM_SETPOS, 0, 0); | ||||||
|  | 			} | ||||||
|  | 			SendMessage(hProgressDialog, UM_PROGRESS_INIT, 0, 0); | ||||||
|  | 		} | ||||||
|  | 	} else if ((hProgressBar != NULL) || (op > 0)) { | ||||||
|  | 		if (processed > total) | ||||||
|  | 			processed = total; | ||||||
|  | 		percent = (100.0f * processed) / (1.0f * total); | ||||||
|  | 		// TODO: Better transfer rate computation using a weighted algorithm such as one from
 | ||||||
|  | 		// https://stackoverflow.com/questions/2779600/how-to-estimate-download-time-remaining-accurately
 | ||||||
|  | 		rate = (current_time == start_time) ? 0 : (processed * 1000) / (current_time - start_time); | ||||||
|  | 		if ((processed == total) || (current_time > last_refresh + MAX_REFRESH)) { | ||||||
|  | 			if (bNoAltMode) | ||||||
|  | 				update_progress_type = 0; | ||||||
|  | 			if (update_progress_type == UPT_SPEED) { | ||||||
|  | 				static_sprintf(msg_data, "%s/s", SizeToHumanReadable(rate, FALSE, FALSE)); | ||||||
|  | 			} else if (update_progress_type == UPT_TIME) { | ||||||
|  | 				uint64_t seconds = (rate == 0) ? 24 * 3600 : (total - processed) / rate + 1; | ||||||
|  | 				static_sprintf(msg_data, "%d:%02d:%02d", (uint32_t)(seconds / 3600), (uint16_t)((seconds % 3600) / 60), (uint16_t)(seconds % 60)); | ||||||
|  | 			} else { | ||||||
|  | 				static_sprintf(msg_data, "%0.1f%%", percent); | ||||||
|  | 			} | ||||||
|  | 			last_refresh = current_time; | ||||||
|  | 			if (op < 0) { | ||||||
|  | 				SendMessage(hProgressBar, PBM_SETPOS, (WPARAM)(MAX_PROGRESS * percent / 100.0f), 0); | ||||||
|  | 				if (op == OP_NOOP_WITH_TASKBAR) | ||||||
|  | 					SetTaskbarProgressValue((ULONGLONG)(MAX_PROGRESS * percent / 100.0f), MAX_PROGRESS); | ||||||
|  | 			} else { | ||||||
|  | 				UpdateProgress(op, percent); | ||||||
|  | 			} | ||||||
|  | 			if (msg >= 0) | ||||||
|  | 				PrintInfo(0, msg, msg_data); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void ShowLanguageMenu(RECT rcExclude) | void ShowLanguageMenu(RECT rcExclude) | ||||||
| { | { | ||||||
| 	TPMPARAMS tpm; | 	TPMPARAMS tpm; | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/ui.h
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/ui.h
									
										
									
									
									
								
							|  | @ -43,6 +43,14 @@ | ||||||
| 											  TBSTYLE_AUTOSIZE | TBSTYLE_LIST    | \ | 											  TBSTYLE_AUTOSIZE | TBSTYLE_LIST    | \ | ||||||
| 											  TBSTYLE_TOOLTIPS ) | 											  TBSTYLE_TOOLTIPS ) | ||||||
| 
 | 
 | ||||||
|  | // Types of update progress we report
 | ||||||
|  | enum update_progress_type { | ||||||
|  | 	UPT_PERCENT = 0, | ||||||
|  | 	UPT_SPEED, | ||||||
|  | 	UPT_TIME, | ||||||
|  | 	UPT_MAX | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| extern HWND hMultiToolbar, hSaveToolbar, hHashToolbar, hAdvancedDeviceToolbar, hAdvancedFormatToolbar; | extern HWND hMultiToolbar, hSaveToolbar, hHashToolbar, hAdvancedDeviceToolbar, hAdvancedFormatToolbar; | ||||||
| extern HFONT hInfoFont; | extern HFONT hInfoFont; | ||||||
| extern UINT_PTR UM_LANGUAGE_MENU_MAX; | extern UINT_PTR UM_LANGUAGE_MENU_MAX; | ||||||
|  | @ -53,7 +61,7 @@ extern const char *sfd_name, *flash_type[BADLOCKS_PATTERN_TYPES]; | ||||||
| extern char *short_image_path, image_option_txt[128]; | extern char *short_image_path, image_option_txt[128]; | ||||||
| extern int advanced_device_section_height, advanced_format_section_height; | extern int advanced_device_section_height, advanced_format_section_height; | ||||||
| extern int windows_to_go_selection, persistence_unit_selection; | extern int windows_to_go_selection, persistence_unit_selection; | ||||||
| extern int selection_default, cbw, ddw, ddbh, bh; | extern int selection_default, cbw, ddw, ddbh, bh, update_progress_type; | ||||||
| 
 | 
 | ||||||
| extern void SetComboEntry(HWND hDlg, int data); | extern void SetComboEntry(HWND hDlg, int data); | ||||||
| extern void GetBasicControlsWidth(HWND hDlg); | extern void GetBasicControlsWidth(HWND hDlg); | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/vhd.c
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/vhd.c
									
										
									
									
									
								
							|  | @ -580,7 +580,7 @@ DWORD WINAPI WimProgressCallback(DWORD dwMsgId, WPARAM wParam, LPARAM lParam, PV | ||||||
| 		// the files have been processed), so we don't use it
 | 		// the files have been processed), so we don't use it
 | ||||||
| #if 0 | #if 0 | ||||||
| 		PrintInfo(0, MSG_267, (DWORD)wParam); | 		PrintInfo(0, MSG_267, (DWORD)wParam); | ||||||
| 		UpdateProgress(OP_DOS, 0.98f*(DWORD)wParam); | 		UpdateProgress(OP_FILE_COPY, 0.98f*(DWORD)wParam); | ||||||
| #endif | #endif | ||||||
| 		break; | 		break; | ||||||
| 	case WIM_MSG_PROCESS: | 	case WIM_MSG_PROCESS: | ||||||
|  | @ -600,12 +600,12 @@ DWORD WINAPI WimProgressCallback(DWORD dwMsgId, WPARAM wParam, LPARAM lParam, PV | ||||||
| 				if (wim_proc_files > wim_nb_files) | 				if (wim_proc_files > wim_nb_files) | ||||||
| 					wim_proc_files = wim_nb_files; | 					wim_proc_files = wim_nb_files; | ||||||
| 				LastRefresh = GetTickCount64(); | 				LastRefresh = GetTickCount64(); | ||||||
| 				// x^3 progress, so as not to give a better idea right from the onset
 | 				// x^3 progress, so as to give a better idea right from the onset of the dismal
 | ||||||
| 				// as to the dismal speed with which the WIM API can actually apply files...
 | 				// speed with which the WIM API actually applies files...
 | ||||||
| 				apply_percent = 4.636942595f * ((float)wim_proc_files) / ((float)wim_nb_files); | 				apply_percent = 4.636942595f * ((float)wim_proc_files) / ((float)wim_nb_files); | ||||||
| 				apply_percent = apply_percent * apply_percent * apply_percent; | 				apply_percent = apply_percent * apply_percent * apply_percent; | ||||||
| 				PrintInfo(0, MSG_267, apply_percent); | 				PrintInfo(0, MSG_267, apply_percent); | ||||||
| 				UpdateProgress(OP_DOS, apply_percent); | 				UpdateProgress(OP_FILE_COPY, apply_percent); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		// Halt on error
 | 		// Halt on error
 | ||||||
|  | @ -710,7 +710,7 @@ static DWORD WINAPI WimApplyImageThread(LPVOID param) | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 	PrintInfo(0, MSG_267, 99.8f); | 	PrintInfo(0, MSG_267, 99.8f); | ||||||
| 	UpdateProgress(OP_DOS, 99.8f); | 	UpdateProgress(OP_FILE_COPY, 99.8f); | ||||||
| 	r = TRUE; | 	r = TRUE; | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue