mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[ui] UI redesign
* Better guide the user through the flow of operations * Also follow a concept design by Fahad Al-Riyami * Closes #117
This commit is contained in:
		
							parent
							
								
									95db209b04
								
							
						
					
					
						commit
						a44518355f
					
				
					 31 changed files with 3114 additions and 3572 deletions
				
			
		|  | @ -366,6 +366,7 @@ | ||||||
|     <ClInclude Include="..\src\smart.h" /> |     <ClInclude Include="..\src\smart.h" /> | ||||||
|     <ClInclude Include="..\src\sys_types.h" /> |     <ClInclude Include="..\src\sys_types.h" /> | ||||||
|     <ClInclude Include="..\src\dev.h" /> |     <ClInclude Include="..\src\dev.h" /> | ||||||
|  |     <ClInclude Include="..\src\ui.h" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <Manifest Include="..\src\rufus.manifest" /> |     <Manifest Include="..\src\rufus.manifest" /> | ||||||
|  |  | ||||||
|  | @ -149,6 +149,9 @@ | ||||||
|     <ClInclude Include="..\src\process.h"> |     <ClInclude Include="..\src\process.h"> | ||||||
|       <Filter>Header Files</Filter> |       <Filter>Header Files</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|  |     <ClInclude Include="..\src\ui.h"> | ||||||
|  |       <Filter>Header Files</Filter> | ||||||
|  |     </ClInclude> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <None Include="..\res\rufus.ico"> |     <None Include="..\res\rufus.ico"> | ||||||
|  |  | ||||||
|  | @ -1,3 +1,3 @@ | ||||||
| @echo off | @echo off | ||||||
| "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\signtool" sign /v /sha1 5759b23dc8f45e9120a7317f306e5b6890b612f0 /fd SHA256 /tr http://timestamp.comodoca.com/rfc3161 /td SHA256 %1 | "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\signtool" sign /v /sha1 9ce9a71ccab3b38a74781b975f1c228222cf7d3b /fd SHA256 /tr http://timestamp.comodoca.com/rfc3161 /td SHA256 %1 | ||||||
| exit | exit | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								configure
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								configure
									
										
									
									
										vendored
									
									
								
							|  | @ -1,6 +1,6 @@ | ||||||
| #! /bin/sh | #! /bin/sh | ||||||
| # Guess values for system-dependent variables and create Makefiles. | # Guess values for system-dependent variables and create Makefiles. | ||||||
| # Generated by GNU Autoconf 2.69 for rufus 2.18. | # Generated by GNU Autoconf 2.69 for rufus 3.0. | ||||||
| # | # | ||||||
| # Report bugs to <https://github.com/pbatard/rufus/issues>. | # Report bugs to <https://github.com/pbatard/rufus/issues>. | ||||||
| # | # | ||||||
|  | @ -580,8 +580,8 @@ MAKEFLAGS= | ||||||
| # Identity of this package. | # Identity of this package. | ||||||
| PACKAGE_NAME='rufus' | PACKAGE_NAME='rufus' | ||||||
| PACKAGE_TARNAME='rufus' | PACKAGE_TARNAME='rufus' | ||||||
| PACKAGE_VERSION='2.18' | PACKAGE_VERSION='3.0' | ||||||
| PACKAGE_STRING='rufus 2.18' | PACKAGE_STRING='rufus 3.0' | ||||||
| PACKAGE_BUGREPORT='https://github.com/pbatard/rufus/issues' | PACKAGE_BUGREPORT='https://github.com/pbatard/rufus/issues' | ||||||
| PACKAGE_URL='https://rufus.akeo.ie' | PACKAGE_URL='https://rufus.akeo.ie' | ||||||
| 
 | 
 | ||||||
|  | @ -1228,7 +1228,7 @@ if test "$ac_init_help" = "long"; then | ||||||
|   # Omit some internal or obsolete options to make the list less imposing. |   # Omit some internal or obsolete options to make the list less imposing. | ||||||
|   # This message is too long to be a string in the A/UX 3.1 sh. |   # This message is too long to be a string in the A/UX 3.1 sh. | ||||||
|   cat <<_ACEOF |   cat <<_ACEOF | ||||||
| \`configure' configures rufus 2.18 to adapt to many kinds of systems. | \`configure' configures rufus 3.0 to adapt to many kinds of systems. | ||||||
| 
 | 
 | ||||||
| Usage: $0 [OPTION]... [VAR=VALUE]... | Usage: $0 [OPTION]... [VAR=VALUE]... | ||||||
| 
 | 
 | ||||||
|  | @ -1294,7 +1294,7 @@ fi | ||||||
| 
 | 
 | ||||||
| if test -n "$ac_init_help"; then | if test -n "$ac_init_help"; then | ||||||
|   case $ac_init_help in |   case $ac_init_help in | ||||||
|      short | recursive ) echo "Configuration of rufus 2.18:";; |      short | recursive ) echo "Configuration of rufus 3.0:";; | ||||||
|    esac |    esac | ||||||
|   cat <<\_ACEOF |   cat <<\_ACEOF | ||||||
| 
 | 
 | ||||||
|  | @ -1385,7 +1385,7 @@ fi | ||||||
| test -n "$ac_init_help" && exit $ac_status | test -n "$ac_init_help" && exit $ac_status | ||||||
| if $ac_init_version; then | if $ac_init_version; then | ||||||
|   cat <<\_ACEOF |   cat <<\_ACEOF | ||||||
| rufus configure 2.18 | rufus configure 3.0 | ||||||
| generated by GNU Autoconf 2.69 | generated by GNU Autoconf 2.69 | ||||||
| 
 | 
 | ||||||
| Copyright (C) 2012 Free Software Foundation, Inc. | Copyright (C) 2012 Free Software Foundation, Inc. | ||||||
|  | @ -1440,7 +1440,7 @@ cat >config.log <<_ACEOF | ||||||
| This file contains any messages produced by compilers while | This file contains any messages produced by compilers while | ||||||
| running configure, to aid debugging if configure makes a mistake. | running configure, to aid debugging if configure makes a mistake. | ||||||
| 
 | 
 | ||||||
| It was created by rufus $as_me 2.18, which was | It was created by rufus $as_me 3.0, which was | ||||||
| generated by GNU Autoconf 2.69.  Invocation command line was | generated by GNU Autoconf 2.69.  Invocation command line was | ||||||
| 
 | 
 | ||||||
|   $ $0 $@ |   $ $0 $@ | ||||||
|  | @ -2303,7 +2303,7 @@ fi | ||||||
| 
 | 
 | ||||||
| # Define the identity of the package. | # Define the identity of the package. | ||||||
|  PACKAGE='rufus' |  PACKAGE='rufus' | ||||||
|  VERSION='2.18' |  VERSION='3.0' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| cat >>confdefs.h <<_ACEOF | cat >>confdefs.h <<_ACEOF | ||||||
|  | @ -4481,7 +4481,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 | ||||||
| # report actual input values of CONFIG_FILES etc. instead of their | # report actual input values of CONFIG_FILES etc. instead of their | ||||||
| # values after options handling. | # values after options handling. | ||||||
| ac_log=" | ac_log=" | ||||||
| This file was extended by rufus $as_me 2.18, which was | This file was extended by rufus $as_me 3.0, which was | ||||||
| generated by GNU Autoconf 2.69.  Invocation command line was | generated by GNU Autoconf 2.69.  Invocation command line was | ||||||
| 
 | 
 | ||||||
|   CONFIG_FILES    = $CONFIG_FILES |   CONFIG_FILES    = $CONFIG_FILES | ||||||
|  | @ -4535,7 +4535,7 @@ _ACEOF | ||||||
| cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 | ||||||
| ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" | ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" | ||||||
| ac_cs_version="\\ | ac_cs_version="\\ | ||||||
| rufus config.status 2.18 | rufus config.status 3.0 | ||||||
| configured by $0, generated by GNU Autoconf 2.69, | configured by $0, generated by GNU Autoconf 2.69, | ||||||
|   with options \\"\$ac_cs_config\\" |   with options \\"\$ac_cs_config\\" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| AC_INIT([rufus], [2.18], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.akeo.ie]) | AC_INIT([rufus], [3.0], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.akeo.ie]) | ||||||
| AM_INIT_AUTOMAKE([-Wno-portability foreign no-dist no-dependencies]) | AM_INIT_AUTOMAKE([-Wno-portability foreign no-dist no-dependencies]) | ||||||
| AC_CONFIG_SRCDIR([src/rufus.c]) | AC_CONFIG_SRCDIR([src/rufus.c]) | ||||||
| AC_CONFIG_MACRO_DIR([m4]) | AC_CONFIG_MACRO_DIR([m4]) | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ | ||||||
|        for an interesting struggle, when you also happen to have a comma in one of the fields... --> |        for an interesting struggle, when you also happen to have a comma in one of the fields... --> | ||||||
|   <Identity |   <Identity | ||||||
|    Name="Rufus" |    Name="Rufus" | ||||||
|    Version="2.18.1213.0" |    Version="3.0.1213.0" | ||||||
|    ProcessorArchitecture="x86" |    ProcessorArchitecture="x86" | ||||||
|    Publisher='CN=Akeo Consulting, O=Akeo Consulting, STREET="24, Grey Rock", L=Milford, S=Co Donegal, PostalCode=Co Donegal, C=IE' /> |    Publisher='CN=Akeo Consulting, O=Akeo Consulting, STREET="24, Grey Rock", L=Milford, S=Co Donegal, PostalCode=Co Donegal, C=IE' /> | ||||||
|     <Properties> |     <Properties> | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| @echo off | @echo off | ||||||
| set VERSION=2.18 | set VERSION=3.0 | ||||||
| 
 | 
 | ||||||
| rem Make sure you don't have anything you don't want included in the package, as anything residing in the | rem Make sure you don't have anything you don't want included in the package, as anything residing in the | ||||||
| rem current directory will be included, including any previous .appx, which makes for nice recursion... | rem current directory will be included, including any previous .appx, which makes for nice recursion... | ||||||
|  | @ -17,7 +17,7 @@ copy "..\..\rufus-%VERSION%.exe" "rufus.exe" | ||||||
| "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\MakePri" new /o /pr . /cf priconfig.xml | "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\MakePri" new /o /pr . /cf priconfig.xml | ||||||
| "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\MakeAppx" pack /o /d . /p Rufus-%VERSION%.appx | "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\MakeAppx" pack /o /d . /p Rufus-%VERSION%.appx | ||||||
| if ERRORLEVEL 1 goto out | if ERRORLEVEL 1 goto out | ||||||
| "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\SignTool" sign /v /sha1 5759b23dc8f45e9120a7317f306e5b6890b612f0 /fd SHA256 /tr http://timestamp.comodoca.com/rfc3161 /td SHA256 Rufus-%VERSION%.appx | "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\SignTool" sign /v /sha1 9ce9a71ccab3b38a74781b975f1c228222cf7d3b /fd SHA256 /tr http://timestamp.comodoca.com/rfc3161 /td SHA256 Rufus-%VERSION%.appx | ||||||
| :out | :out | ||||||
| del /q rufus.exe | del /q rufus.exe | ||||||
| del /q priconfig.xml | del /q priconfig.xml | ||||||
|  |  | ||||||
|  | @ -15,6 +15,52 @@ content. PLEASE, do not just look at this Changelog when updating your | ||||||
| translation, but always use the English section of rufus.loc as your base. | translation, but always use the English section of rufus.loc as your base. | ||||||
| For instance, MSG_114, that was introduced in v1.0.8 is MORE than one line! | For instance, MSG_114, that was introduced in v1.0.8 is MORE than one line! | ||||||
| 
 | 
 | ||||||
|  | o Version 1.0.23 (2018.??.??) | ||||||
|  |   - All positioning ('m', 's') has now been removed as well as some controls, for the 3.0 UI redesign | ||||||
|  |   - Removed: MSG_086, MSG_087, MSG_163 | ||||||
|  |   - *NEW*      IDS_DRIVE_PROPERTIES_TXT "Drive Properties" | ||||||
|  |   - *NEW*      IDS_BOOT_SELECTION_TXT "Boot selection" | ||||||
|  |                Note: The current translation was taken from MSG_278 when available, which was for "Boot type". | ||||||
|  |                However, "Boot selection", is more appropriate, so please update if it makes sense. | ||||||
|  |   - *NEW*      IDC_SELECT "SELECT" | ||||||
|  |   - *NEW*      IDS_IMAGE_OPTION_TXT "Image Option" | ||||||
|  |   - *UPDATED*  IDS_PARTITION_TYPE_TXT Partition scheme and target system type -> "Partition scheme" | ||||||
|  |   - *NEW*      IDS_TARGET_SYSTEM_TXT "Target system" | ||||||
|  |   - *NEW*      IDS_STATUS_TXT "Status" | ||||||
|  |   - *REPLACED* MSG_031 -> "BIOS (or UEFI-CSM)" | ||||||
|  |   - *REPLACED* MSG_032 -> "UEFI (non CSM)" | ||||||
|  |   - *REPLACED* MSG_033 -> "BIOS or UEFI"  | ||||||
|  |   - *REMOVED*  MSG_087 | ||||||
|  | 	- *RENAMED*  IDC_WINDOWS_INSTALL -> MSG_117 | ||||||
|  | 	- *RENAMED*  IDC_WINDOWS_TO_GO -> MSG_118 | ||||||
|  |   - *NEW*      MSG_119 "advanced drive properties" | ||||||
|  |   - *NEW*      MSG_120 "advanced format options" | ||||||
|  |   - *NEW*      MSG_121 "Show %s" | ||||||
|  |   - *NEW*      MSG_122 "Hide %s" | ||||||
|  |      MSG_119/120 + MSG_121/122 are used to create the advanced options clickable toolbars | ||||||
|  |   - *REPLACED* MSG_150 -> "Type of computer you plan to use this bootable drive with. It is up to YOU to find whether your target is of BIOS or UEFI type.\n" | ||||||
|  | 	                        "Be mindful that CSM, which can be enabled or disabled on UEFI computers, means 'BIOS emulation', and is not really UEFI." | ||||||
|  |   - *REPLACED* MSG_151 -> "Note: 'UEFI-CSM' means that the device will only boot in BIOS emulation mode (also known as 'Legacy Mode') under UEFI, and not in native UEFI mode." | ||||||
|  |                Be mindful that you probably don't want to translate 'Legacy Mode' as this is an option that usually appears in English in the UEFI settings. | ||||||
|  |   - *REPLACED* MSG_152 -> "Note: 'non CSM' means that the device will only boot in native UEFI mode, and not in BIOS emulation mode (also known as 'Legacy Mode')." | ||||||
|  |   - *REPLACED* MSG_163 -> "Method that will be used to create partitions." | ||||||
|  |   - *NEW*      MSG_278 "Checking for conflicting processes..." | ||||||
|  |   - *REPLACED* MSG_280 "Image selection" -> "Disk or ISO image" | ||||||
|  |   - *REPLACED* MSG_281 "(Please select an image)" -> "%s (Please select)" | ||||||
|  |      MSG_281 + MSG_280 are used to create the message that appears in the boot selection dropdown when an image has not been selected. | ||||||
|  |   - *NEW*      MSG_299 "Timestamp validation error" | ||||||
|  |   - *NEW*      MSG_300 "Rufus could not validate that the timestamp of the downloaded update is more recent than the one for the " | ||||||
|  | 	                     "current executable.\n\nIn order to prevent potential attack scenarios, the update process has been aborted and " | ||||||
|  | 	                     "the download will be deleted. Please check the log for more details." | ||||||
|  | 	- *NEW*      MSG_301 "Show application settings" | ||||||
|  |   - *NEW*      MSG_302 "Show information about this application" | ||||||
|  |   - *NEW*      MSG_303 "Show the log" | ||||||
|  |   - *NEW*      MSG_314 "Create a disk image of the selected device" | ||||||
|  |   - *UPDATED*  On IDD_LOG, IDC_LOG_CLEAR, IDC_LOG_SAVE and IDCANCEL were updated to remove the redundant mention of "Log" in the buttons | ||||||
|  |                for the languages who did that. *PLEASE* verify that the modification looks correct in your language. | ||||||
|  |   - *UPDATED*  Log dialog buttons (in the 'g IDD_LOG' section). "Save Log", "Clear Log" "Close Log" have become "Save", "Clear", "Close". | ||||||
|  |                I updated existing translations to remove the mention of "Log". Please check that it was done properly. | ||||||
|  | 
 | ||||||
| o Version 1.0.22 (2017.07.17) | o Version 1.0.22 (2017.07.17) | ||||||
|   - *NEW* MSG_295 "Warning: Unofficial version" |   - *NEW* MSG_295 "Warning: Unofficial version" | ||||||
|   - *NEW* MSG_296 "This version of Rufus was NOT produced by its official developer(s).\n\nAre you sure you want to run it?" |   - *NEW* MSG_296 "This version of Rufus was NOT produced by its official developer(s).\n\nAre you sure you want to run it?" | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -69,6 +69,7 @@ uint32_t bufnum, sum_count[CHECKSUM_MAX] = { 16, 20, 32 }; | ||||||
| HANDLE data_ready[CHECKSUM_MAX] = { 0 }, thread_ready[CHECKSUM_MAX] = { 0 }; | HANDLE data_ready[CHECKSUM_MAX] = { 0 }, thread_ready[CHECKSUM_MAX] = { 0 }; | ||||||
| DWORD read_size[2]; | DWORD read_size[2]; | ||||||
| unsigned char ALIGNED(64) buffer[2][BUFFER_SIZE]; | unsigned char ALIGNED(64) buffer[2][BUFFER_SIZE]; | ||||||
|  | extern BOOL progress_in_use; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Rotate 32 bit integers by n bytes. |  * Rotate 32 bit integers by n bytes. | ||||||
|  | @ -818,6 +819,7 @@ INT_PTR CALLBACK ChecksumCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM | ||||||
| 		dw = rect.right - rect.left - dw + 12; | 		dw = rect.right - rect.left - dw + 12; | ||||||
| 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_MD5), 0, 0, dw, 0, 1.0f); | 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_MD5), 0, 0, dw, 0, 1.0f); | ||||||
| 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SHA1), 0, 0, dw, 0, 1.0f); | 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SHA1), 0, 0, dw, 0, 1.0f); | ||||||
|  | 		ResizeButtonHeight(hDlg, IDOK); | ||||||
| 
 | 
 | ||||||
| 		safe_release_dc(GetDlgItem(hDlg, IDC_MD5), hDC); | 		safe_release_dc(GetDlgItem(hDlg, IDC_MD5), hDC); | ||||||
| 
 | 
 | ||||||
|  | @ -834,8 +836,6 @@ INT_PTR CALLBACK ChecksumCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM | ||||||
| 		case IDCANCEL: | 		case IDCANCEL: | ||||||
| 			reset_localization(IDD_CHECKSUM); | 			reset_localization(IDD_CHECKSUM); | ||||||
| 			EndDialog(hDlg, LOWORD(wParam)); | 			EndDialog(hDlg, LOWORD(wParam)); | ||||||
| 			// Reset focus to our toolbar
 |  | ||||||
| 			PostMessage(hMainDialog, WM_NEXTDLGCTL, (WPARAM)hStatusToolbar, TRUE); |  | ||||||
| 			return (INT_PTR)TRUE; | 			return (INT_PTR)TRUE; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -927,6 +927,7 @@ 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
 | ||||||
|  | 	progress_in_use = TRUE; | ||||||
| 	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) { | 		if (GetTickCount64() > LastRefresh + MAX_REFRESH) { | ||||||
|  | @ -982,6 +983,7 @@ DWORD WINAPI SumThread(void* param) | ||||||
| 	r = 0; | 	r = 0; | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
|  | 	progress_in_use = FALSE; | ||||||
| 	for (i = 0; i < CHECKSUM_MAX; i++) { | 	for (i = 0; i < CHECKSUM_MAX; i++) { | ||||||
| 		if (sum_thread[i] != NULL) | 		if (sum_thread[i] != NULL) | ||||||
| 			TerminateThread(sum_thread[i], 1); | 			TerminateThread(sum_thread[i], 1); | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/dev.c
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/dev.c
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * Device detection and enumeration |  * Device detection and enumeration | ||||||
|  * Copyright © 2014-2017 Pete Batard <pete@akeo.ie> |  * Copyright © 2014-2018 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 | ||||||
|  | @ -84,8 +84,8 @@ static BOOL GetUSBProperties(char* parent_path, char* device_id, usb_device_prop | ||||||
| 		uprintf("Could not open hub %s: %s", parent_path, WindowsErrorString()); | 		uprintf("Could not open hub %s: %s", parent_path, WindowsErrorString()); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 	memset(&conn_info, 0, sizeof(conn_info)); |  | ||||||
| 	size = sizeof(conn_info); | 	size = sizeof(conn_info); | ||||||
|  | 	memset(&conn_info, 0, size); | ||||||
| 	conn_info.ConnectionIndex = (ULONG)props->port; | 	conn_info.ConnectionIndex = (ULONG)props->port; | ||||||
| 	// coverity[tainted_data_argument]
 | 	// coverity[tainted_data_argument]
 | ||||||
| 	if (!DeviceIoControl(handle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX, &conn_info, size, &conn_info, size, &size, NULL)) { | 	if (!DeviceIoControl(handle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX, &conn_info, size, &conn_info, size, &size, NULL)) { | ||||||
|  | @ -105,8 +105,8 @@ static BOOL GetUSBProperties(char* parent_path, char* device_id, usb_device_prop | ||||||
| 
 | 
 | ||||||
| 	// In their great wisdom, Microsoft decided to BREAK the USB speed report between Windows 7 and Windows 8
 | 	// In their great wisdom, Microsoft decided to BREAK the USB speed report between Windows 7 and Windows 8
 | ||||||
| 	if (nWindowsVersion >= WINDOWS_8) { | 	if (nWindowsVersion >= WINDOWS_8) { | ||||||
| 		memset(&conn_info_v2, 0, sizeof(conn_info_v2)); |  | ||||||
| 		size = sizeof(conn_info_v2); | 		size = sizeof(conn_info_v2); | ||||||
|  | 		memset(&conn_info_v2, 0, size); | ||||||
| 		conn_info_v2.ConnectionIndex = (ULONG)props->port; | 		conn_info_v2.ConnectionIndex = (ULONG)props->port; | ||||||
| 		conn_info_v2.Length = size; | 		conn_info_v2.Length = size; | ||||||
| 		conn_info_v2.SupportedUsbProtocols.Usb300 = 1; | 		conn_info_v2.SupportedUsbProtocols.Usb300 = 1; | ||||||
|  | @ -152,8 +152,8 @@ BOOL ResetDevice(int index) | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	memset(&cycle_port, 0, sizeof(cycle_port)); |  | ||||||
| 	size = sizeof(cycle_port); | 	size = sizeof(cycle_port); | ||||||
|  | 	memset(&cycle_port, 0, size); | ||||||
| 	cycle_port.ConnectionIndex = DrivePort[index]; | 	cycle_port.ConnectionIndex = DrivePort[index]; | ||||||
| 	uprintf("Cycling port %d (reset) on %s", DrivePort[index], DriveHub.String[index]); | 	uprintf("Cycling port %d (reset) on %s", DrivePort[index], DriveHub.String[index]); | ||||||
| 	// As per https://msdn.microsoft.com/en-us/library/windows/hardware/ff537340.aspx
 | 	// As per https://msdn.microsoft.com/en-us/library/windows/hardware/ff537340.aspx
 | ||||||
|  | @ -845,7 +845,7 @@ BOOL GetDevices(DWORD devnum) | ||||||
| 		i = 0; | 		i = 0; | ||||||
| 	IGNORE_RETVAL(ComboBox_SetCurSel(hDeviceList, i)); | 	IGNORE_RETVAL(ComboBox_SetCurSel(hDeviceList, i)); | ||||||
| 	SendMessage(hMainDialog, WM_COMMAND, (CBN_SELCHANGE<<16) | IDC_DEVICE, 0); | 	SendMessage(hMainDialog, WM_COMMAND, (CBN_SELCHANGE<<16) | IDC_DEVICE, 0); | ||||||
| 	SendMessage(hMainDialog, WM_COMMAND, (CBN_SELCHANGE<<16) | IDC_FILESYSTEM, | 	SendMessage(hMainDialog, WM_COMMAND, (CBN_SELCHANGE<<16) | IDC_FILE_SYSTEM, | ||||||
| 		ComboBox_GetCurSel(hFileSystem)); | 		ComboBox_GetCurSel(hFileSystem)); | ||||||
| 	r = TRUE; | 	r = TRUE; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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-2016 Pete Batard <pete@akeo.ie> |  * Copyright © 2011-2018 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 | ||||||
|  | @ -57,6 +57,7 @@ const GUID PARTITION_SYSTEM_GUID = | ||||||
|  * Globals |  * Globals | ||||||
|  */ |  */ | ||||||
| RUFUS_DRIVE_INFO SelectedDrive; | RUFUS_DRIVE_INFO SelectedDrive; | ||||||
|  | const char* sfd_name = "Super Floppy Disk"; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * The following methods get or set the AutoMount setting (which is different from AutoRun) |  * The following methods get or set the AutoMount setting (which is different from AutoRun) | ||||||
|  | @ -765,7 +766,7 @@ BOOL GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSys | ||||||
| 		// Detect drives that are using the whole disk as a single partition
 | 		// Detect drives that are using the whole disk as a single partition
 | ||||||
| 		if ((DriveLayout->PartitionEntry[0].Mbr.PartitionType != PARTITION_ENTRY_UNUSED) && | 		if ((DriveLayout->PartitionEntry[0].Mbr.PartitionType != PARTITION_ENTRY_UNUSED) && | ||||||
| 			(DriveLayout->PartitionEntry[0].StartingOffset.QuadPart == 0LL)) { | 			(DriveLayout->PartitionEntry[0].StartingOffset.QuadPart == 0LL)) { | ||||||
| 			suprintf("Partition type: SFD (Super Floppy Disk) or Unpartitioned"); | 			suprintf("Partition type: SFD (%s) or Unpartitioned", sfd_name); | ||||||
| 			super_floppy_disk = TRUE; | 			super_floppy_disk = TRUE; | ||||||
| 		} else { | 		} else { | ||||||
| 			suprintf("Partition type: MBR, NB Partitions: %d", SelectedDrive.nPartitions); | 			suprintf("Partition type: MBR, NB Partitions: %d", SelectedDrive.nPartitions); | ||||||
|  | @ -1098,7 +1099,7 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Compute the start offset of our first partition
 | 	// Compute the start offset of our first partition
 | ||||||
| 	if ((partition_style == PARTITION_STYLE_GPT) || (!IsChecked(IDC_EXTRA_PARTITION))) { | 	if ((partition_style == PARTITION_STYLE_GPT) || (!IsChecked(IDC_OLD_BIOS_FIXES))) { | ||||||
| 		// Go with the MS 1 MB wastage at the beginning...
 | 		// Go with the MS 1 MB wastage at the beginning...
 | ||||||
| 		DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart = MB; | 		DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart = MB; | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -1164,7 +1165,7 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m | ||||||
| 	} | 	} | ||||||
| 	DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart = main_part_size_in_sectors * SelectedDrive.SectorSize; | 	DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart = main_part_size_in_sectors * SelectedDrive.SectorSize; | ||||||
| 	if (partition_style == PARTITION_STYLE_MBR) { | 	if (partition_style == PARTITION_STYLE_MBR) { | ||||||
| 		DriveLayoutEx.PartitionEntry[pn].Mbr.BootIndicator = IsChecked(IDC_BOOT); | 		DriveLayoutEx.PartitionEntry[pn].Mbr.BootIndicator = (bt != BT_NON_BOOTABLE); | ||||||
| 		switch (file_system) { | 		switch (file_system) { | ||||||
| 		case FS_FAT16: | 		case FS_FAT16: | ||||||
| 			DriveLayoutEx.PartitionEntry[pn].Mbr.PartitionType = 0x0e;	// FAT16 LBA
 | 			DriveLayoutEx.PartitionEntry[pn].Mbr.PartitionType = 0x0e;	// FAT16 LBA
 | ||||||
|  |  | ||||||
							
								
								
									
										85
									
								
								src/format.c
									
										
									
									
									
								
							
							
						
						
									
										85
									
								
								src/format.c
									
										
									
									
									
								
							|  | @ -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-2017 Pete Batard <pete@akeo.ie> |  * Copyright © 2011-2018 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 | ||||||
|  | @ -61,7 +61,7 @@ static int task_number = 0; | ||||||
| extern const int nb_steps[FS_MAX]; | extern const int nb_steps[FS_MAX]; | ||||||
| extern uint32_t dur_mins, dur_secs; | extern uint32_t dur_mins, dur_secs; | ||||||
| static int fs_index = 0, wintogo_index = -1; | static int fs_index = 0, wintogo_index = -1; | ||||||
| extern BOOL force_large_fat32, enable_ntfs_compression, lock_drive, zero_drive, disable_file_indexing; | extern BOOL force_large_fat32, enable_ntfs_compression, lock_drive, zero_drive, disable_file_indexing, write_as_image; | ||||||
| uint8_t *grub2_buf = NULL; | uint8_t *grub2_buf = NULL; | ||||||
| long grub2_len; | long grub2_len; | ||||||
| static BOOL WritePBR(HANDLE hLogicalDrive); | static BOOL WritePBR(HANDLE hLogicalDrive); | ||||||
|  | @ -683,7 +683,6 @@ static BOOL FormatDrive(DWORD DriveIndex) | ||||||
| 	WCHAR wLabel[64]; | 	WCHAR wLabel[64]; | ||||||
| 	ULONG ulClusterSize; | 	ULONG ulClusterSize; | ||||||
| 	size_t i; | 	size_t i; | ||||||
| 	int fs; |  | ||||||
| 
 | 
 | ||||||
| 	GetWindowTextU(hFileSystem, FSType, ARRAYSIZE(FSType)); | 	GetWindowTextU(hFileSystem, FSType, ARRAYSIZE(FSType)); | ||||||
| 	// Might have a (Default) suffix => remove it
 | 	// Might have a (Default) suffix => remove it
 | ||||||
|  | @ -693,7 +692,6 @@ static BOOL FormatDrive(DWORD DriveIndex) | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	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))) { | ||||||
| 		PrintInfoDebug(0, MSG_220, FSType, dur_mins, dur_secs); | 		PrintInfoDebug(0, MSG_220, FSType, dur_mins, dur_secs); | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -751,9 +749,9 @@ static BOOL FormatDrive(DWORD DriveIndex) | ||||||
| 	task_number = 0; | 	task_number = 0; | ||||||
| 	fs_index = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | 	fs_index = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); | ||||||
| 
 | 
 | ||||||
| 	uprintf("%s format was selected\n", IsChecked(IDC_QUICKFORMAT)?"Quick":"Slow"); | 	uprintf("%s format was selected\n", IsChecked(IDC_QUICK_FORMAT)?"Quick":"Slow"); | ||||||
| 	pfFormatEx(wVolumeName, SelectedDrive.MediaType, wFSType, wLabel, | 	pfFormatEx(wVolumeName, SelectedDrive.MediaType, wFSType, wLabel, | ||||||
| 		IsChecked(IDC_QUICKFORMAT), ulClusterSize, FormatExCallback); | 		IsChecked(IDC_QUICK_FORMAT), ulClusterSize, FormatExCallback); | ||||||
| 
 | 
 | ||||||
| 	if ((fs == FS_NTFS) && (enable_ntfs_compression) && (pfEnableVolumeCompression != NULL)) { | 	if ((fs == FS_NTFS) && (enable_ntfs_compression) && (pfEnableVolumeCompression != NULL)) { | ||||||
| 		wVolumeName[wcslen(wVolumeName)] = '\\';	// Add trailing backslash back again
 | 		wVolumeName[wcslen(wVolumeName)] = '\\';	// Add trailing backslash back again
 | ||||||
|  | @ -864,9 +862,6 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | ||||||
| 	FAKE_FD fake_fd = { 0 }; | 	FAKE_FD fake_fd = { 0 }; | ||||||
| 	FILE* fp = (FILE*)&fake_fd; | 	FILE* fp = (FILE*)&fake_fd; | ||||||
| 	const char* using_msg = "Using %s MBR\n"; | 	const char* using_msg = "Using %s MBR\n"; | ||||||
| 	int fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); |  | ||||||
| 	int bt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); |  | ||||||
| 	int tt = GETTARGETTYPE((int)ComboBox_GetItemData(hPartitionScheme, ComboBox_GetCurSel(hPartitionScheme))); |  | ||||||
| 
 | 
 | ||||||
| 	AnalyzeMBR(hPhysicalDrive, "Drive"); | 	AnalyzeMBR(hPhysicalDrive, "Drive"); | ||||||
| 
 | 
 | ||||||
|  | @ -906,7 +901,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | ||||||
| 		buffer[0x1c2] = 0x0c; | 		buffer[0x1c2] = 0x0c; | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
| 	if ((IsChecked(IDC_BOOT)) && (tt == TT_BIOS)) { | 	if ((bt != BT_NON_BOOTABLE) && (tt == TT_BIOS)) { | ||||||
| 		// Set first partition bootable - masquerade as per the DiskID selected
 | 		// Set first partition bootable - masquerade as per the DiskID selected
 | ||||||
| 		buffer[0x1be] = IsChecked(IDC_RUFUS_MBR) ? | 		buffer[0x1be] = IsChecked(IDC_RUFUS_MBR) ? | ||||||
| 			(BYTE)ComboBox_GetItemData(hDiskID, ComboBox_GetCurSel(hDiskID)):0x80; | 			(BYTE)ComboBox_GetItemData(hDiskID, ComboBox_GetCurSel(hDiskID)):0x80; | ||||||
|  | @ -936,21 +931,21 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | ||||||
| 
 | 
 | ||||||
| 	// Syslinux
 | 	// Syslinux
 | ||||||
| 	if ( (bt == BT_SYSLINUX_V4) || (bt == BT_SYSLINUX_V6) || | 	if ( (bt == BT_SYSLINUX_V4) || (bt == BT_SYSLINUX_V6) || | ||||||
| 		 ((bt == BT_ISO) && HAS_SYSLINUX(img_report)) ) { | 		 ((bt == BT_IMAGE) && HAS_SYSLINUX(img_report)) ) { | ||||||
| 		uprintf(using_msg, "Syslinux"); | 		uprintf(using_msg, "Syslinux"); | ||||||
| 		r = write_syslinux_mbr(fp); | 		r = write_syslinux_mbr(fp); | ||||||
| 		goto notify; | 		goto notify; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Grub 2.0
 | 	// Grub 2.0
 | ||||||
| 	if ( ((bt == BT_ISO) && (img_report.has_grub2)) || (bt == BT_GRUB2) ) { | 	if ( ((bt == BT_IMAGE) && (img_report.has_grub2)) || (bt == BT_GRUB2) ) { | ||||||
| 		uprintf(using_msg, "Grub 2.0"); | 		uprintf(using_msg, "Grub 2.0"); | ||||||
| 		r = write_grub2_mbr(fp); | 		r = write_grub2_mbr(fp); | ||||||
| 		goto notify; | 		goto notify; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Grub4DOS
 | 	// Grub4DOS
 | ||||||
| 	if ( ((bt == BT_ISO) && (img_report.has_grub4dos)) || (bt == BT_GRUB4DOS) ) { | 	if ( ((bt == BT_IMAGE) && (img_report.has_grub4dos)) || (bt == BT_GRUB4DOS) ) { | ||||||
| 		uprintf(using_msg, "Grub4DOS"); | 		uprintf(using_msg, "Grub4DOS"); | ||||||
| 		r = write_grub4dos_mbr(fp); | 		r = write_grub4dos_mbr(fp); | ||||||
| 		goto notify; | 		goto notify; | ||||||
|  | @ -964,7 +959,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// KolibriOS
 | 	// KolibriOS
 | ||||||
| 	if ( (bt == BT_ISO) && HAS_KOLIBRIOS(img_report) && (IS_FAT(fs))) { | 	if ( (bt == BT_IMAGE) && HAS_KOLIBRIOS(img_report) && (IS_FAT(fs))) { | ||||||
| 		uprintf(using_msg, "KolibriOS"); | 		uprintf(using_msg, "KolibriOS"); | ||||||
| 		r = write_kolibrios_mbr(fp); | 		r = write_kolibrios_mbr(fp); | ||||||
| 		goto notify; | 		goto notify; | ||||||
|  | @ -997,7 +992,7 @@ static BOOL WriteSBR(HANDLE hPhysicalDrive) | ||||||
| { | { | ||||||
| 	// TODO: Do we need anything special for 4K sectors?
 | 	// TODO: Do we need anything special for 4K sectors?
 | ||||||
| 	DWORD size, max_size, mbr_size = 0x200; | 	DWORD size, max_size, mbr_size = 0x200; | ||||||
| 	int r, bt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); | 	int r; | ||||||
| 	unsigned char* buf = NULL; | 	unsigned char* buf = NULL; | ||||||
| 	FAKE_FD fake_fd = { 0 }; | 	FAKE_FD fake_fd = { 0 }; | ||||||
| 	FILE* fp = (FILE*)&fake_fd; | 	FILE* fp = (FILE*)&fake_fd; | ||||||
|  | @ -1005,11 +1000,11 @@ static BOOL WriteSBR(HANDLE hPhysicalDrive) | ||||||
| 	fake_fd._handle = (char*)hPhysicalDrive; | 	fake_fd._handle = (char*)hPhysicalDrive; | ||||||
| 	set_bytes_per_sector(SelectedDrive.SectorSize); | 	set_bytes_per_sector(SelectedDrive.SectorSize); | ||||||
| 	// Ensure that we have sufficient space for the SBR
 | 	// Ensure that we have sufficient space for the SBR
 | ||||||
| 	max_size = IsChecked(IDC_EXTRA_PARTITION) ? | 	max_size = IsChecked(IDC_OLD_BIOS_FIXES) ? | ||||||
| 		(DWORD)(SelectedDrive.SectorsPerTrack * SelectedDrive.SectorSize) : 1*MB; | 		(DWORD)(SelectedDrive.SectorsPerTrack * SelectedDrive.SectorSize) : 1*MB; | ||||||
| 	max_size -= mbr_size; | 	max_size -= mbr_size; | ||||||
| 	// Syslinux has precedence over Grub
 | 	// Syslinux has precedence over Grub
 | ||||||
| 	if ((bt == BT_ISO) && (!HAS_SYSLINUX(img_report))) { | 	if ((bt == BT_IMAGE) && (!HAS_SYSLINUX(img_report))) { | ||||||
| 		if (img_report.has_grub4dos) | 		if (img_report.has_grub4dos) | ||||||
| 			bt = BT_GRUB4DOS; | 			bt = BT_GRUB4DOS; | ||||||
| 		if (img_report.has_grub2) | 		if (img_report.has_grub2) | ||||||
|  | @ -1059,12 +1054,12 @@ static BOOL WriteSBR(HANDLE hPhysicalDrive) | ||||||
| /*
 | /*
 | ||||||
|  * Process the Partition Boot Record |  * Process the Partition Boot Record | ||||||
|  */ |  */ | ||||||
| static __inline const char* bt_to_name(int bt) { | static __inline const char* bt_to_name(void) { | ||||||
| 	switch (bt) { | 	switch (bt) { | ||||||
| 	case BT_FREEDOS: return "FreeDOS"; | 	case BT_FREEDOS: return "FreeDOS"; | ||||||
| 	case BT_REACTOS: return "ReactOS"; | 	case BT_REACTOS: return "ReactOS"; | ||||||
| 	default: | 	default: | ||||||
| 		return ((bt==BT_ISO) && HAS_KOLIBRIOS(img_report)) ? "KolibriOS" : "Standard"; | 		return ((bt==BT_IMAGE) && HAS_KOLIBRIOS(img_report)) ? "KolibriOS" : "Standard"; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| static BOOL WritePBR(HANDLE hLogicalVolume) | static BOOL WritePBR(HANDLE hLogicalVolume) | ||||||
|  | @ -1072,7 +1067,6 @@ static BOOL WritePBR(HANDLE hLogicalVolume) | ||||||
| 	int i; | 	int i; | ||||||
| 	FAKE_FD fake_fd = { 0 }; | 	FAKE_FD fake_fd = { 0 }; | ||||||
| 	FILE* fp = (FILE*)&fake_fd; | 	FILE* fp = (FILE*)&fake_fd; | ||||||
| 	int bt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); |  | ||||||
| 	const char* using_msg = "Using %s %s partition boot record\n"; | 	const char* using_msg = "Using %s %s partition boot record\n"; | ||||||
| 
 | 
 | ||||||
| 	fake_fd._handle = (char*)hLogicalVolume; | 	fake_fd._handle = (char*)hLogicalVolume; | ||||||
|  | @ -1080,7 +1074,7 @@ static BOOL WritePBR(HANDLE hLogicalVolume) | ||||||
| 
 | 
 | ||||||
| 	switch (ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem))) { | 	switch (ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem))) { | ||||||
| 	case FS_FAT16: | 	case FS_FAT16: | ||||||
| 		uprintf(using_msg, bt_to_name(bt), "FAT16"); | 		uprintf(using_msg, bt_to_name(), "FAT16"); | ||||||
| 		if (!is_fat_16_fs(fp)) { | 		if (!is_fat_16_fs(fp)) { | ||||||
| 			uprintf("New volume does not have a FAT16 boot sector - aborting\n"); | 			uprintf("New volume does not have a FAT16 boot sector - aborting\n"); | ||||||
| 			break; | 			break; | ||||||
|  | @ -1090,7 +1084,7 @@ static BOOL WritePBR(HANDLE hLogicalVolume) | ||||||
| 			if (!write_fat_16_fd_br(fp, 0)) break; | 			if (!write_fat_16_fd_br(fp, 0)) break; | ||||||
| 		} else if (bt == BT_REACTOS) { | 		} else if (bt == BT_REACTOS) { | ||||||
| 			if (!write_fat_16_ros_br(fp, 0)) break; | 			if (!write_fat_16_ros_br(fp, 0)) break; | ||||||
| 		} else if ((bt == BT_ISO) && HAS_KOLIBRIOS(img_report)) { | 		} else if ((bt == BT_IMAGE) && HAS_KOLIBRIOS(img_report)) { | ||||||
| 			uprintf("FAT16 is not supported for KolibriOS\n"); break; | 			uprintf("FAT16 is not supported for KolibriOS\n"); break; | ||||||
| 		} else { | 		} else { | ||||||
| 			if (!write_fat_16_br(fp, 0)) break; | 			if (!write_fat_16_br(fp, 0)) break; | ||||||
|  | @ -1100,7 +1094,7 @@ static BOOL WritePBR(HANDLE hLogicalVolume) | ||||||
| 			break; | 			break; | ||||||
| 		return TRUE; | 		return TRUE; | ||||||
| 	case FS_FAT32: | 	case FS_FAT32: | ||||||
| 		uprintf(using_msg, bt_to_name(bt), "FAT32"); | 		uprintf(using_msg, bt_to_name(), "FAT32"); | ||||||
| 		for (i=0; i<2; i++) { | 		for (i=0; i<2; i++) { | ||||||
| 			if (!is_fat_32_fs(fp)) { | 			if (!is_fat_32_fs(fp)) { | ||||||
| 				uprintf("New volume does not have a %s FAT32 boot sector - aborting\n", i?"secondary":"primary"); | 				uprintf("New volume does not have a %s FAT32 boot sector - aborting\n", i?"secondary":"primary"); | ||||||
|  | @ -1112,11 +1106,11 @@ static BOOL WritePBR(HANDLE hLogicalVolume) | ||||||
| 				if (!write_fat_32_fd_br(fp, 0)) break; | 				if (!write_fat_32_fd_br(fp, 0)) break; | ||||||
| 			} else if (bt == BT_REACTOS) { | 			} else if (bt == BT_REACTOS) { | ||||||
| 				if (!write_fat_32_ros_br(fp, 0)) break; | 				if (!write_fat_32_ros_br(fp, 0)) break; | ||||||
| 			} else if ((bt == BT_ISO) && HAS_KOLIBRIOS(img_report)) { | 			} else if ((bt == BT_IMAGE) && HAS_KOLIBRIOS(img_report)) { | ||||||
| 				if (!write_fat_32_kos_br(fp, 0)) break; | 				if (!write_fat_32_kos_br(fp, 0)) break; | ||||||
| 			} else if ((bt == BT_ISO) && HAS_BOOTMGR(img_report)) { | 			} else if ((bt == BT_IMAGE) && HAS_BOOTMGR(img_report)) { | ||||||
| 				if (!write_fat_32_pe_br(fp, 0)) break; | 				if (!write_fat_32_pe_br(fp, 0)) break; | ||||||
| 			} else if ((bt == BT_ISO) && HAS_WINPE(img_report)) { | 			} else if ((bt == BT_IMAGE) && HAS_WINPE(img_report)) { | ||||||
| 				if (!write_fat_32_nt_br(fp, 0)) break; | 				if (!write_fat_32_nt_br(fp, 0)) break; | ||||||
| 			} else { | 			} else { | ||||||
| 				if (!write_fat_32_br(fp, 0)) break; | 				if (!write_fat_32_br(fp, 0)) break; | ||||||
|  | @ -1128,7 +1122,7 @@ static BOOL WritePBR(HANDLE hLogicalVolume) | ||||||
| 		} | 		} | ||||||
| 		return TRUE; | 		return TRUE; | ||||||
| 	case FS_NTFS: | 	case FS_NTFS: | ||||||
| 		uprintf(using_msg, bt_to_name(bt), "NTFS"); | 		uprintf(using_msg, bt_to_name(), "NTFS"); | ||||||
| 		if (!is_ntfs_fs(fp)) { | 		if (!is_ntfs_fs(fp)) { | ||||||
| 			uprintf("New volume does not have an NTFS boot sector - aborting\n"); | 			uprintf("New volume does not have an NTFS boot sector - aborting\n"); | ||||||
| 			break; | 			break; | ||||||
|  | @ -1644,7 +1638,7 @@ out: | ||||||
|  */ |  */ | ||||||
| DWORD WINAPI FormatThread(void* param) | DWORD WINAPI FormatThread(void* param) | ||||||
| { | { | ||||||
| 	int i, r, pt, tt, fs, bt; | 	int i, r; | ||||||
| 	BOOL ret, use_large_fat32, windows_to_go; | 	BOOL ret, use_large_fat32, windows_to_go; | ||||||
| 	DWORD DriveIndex = (DWORD)(uintptr_t)param; | 	DWORD DriveIndex = (DWORD)(uintptr_t)param; | ||||||
| 	HANDLE hPhysicalDrive = INVALID_HANDLE_VALUE; | 	HANDLE hPhysicalDrive = INVALID_HANDLE_VALUE; | ||||||
|  | @ -1661,12 +1655,9 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 	char kolibri_dst[] = "?:\\MTLD_F32"; | 	char kolibri_dst[] = "?:\\MTLD_F32"; | ||||||
| 	char grub4dos_dst[] = "?:\\grldr"; | 	char grub4dos_dst[] = "?:\\grldr"; | ||||||
| 
 | 
 | ||||||
| 	fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem)); |  | ||||||
| 	bt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); |  | ||||||
| 	pt = GETPARTTYPE((int)ComboBox_GetItemData(hPartitionScheme, ComboBox_GetCurSel(hPartitionScheme))); |  | ||||||
| 	tt = GETTARGETTYPE((int)ComboBox_GetItemData(hPartitionScheme, ComboBox_GetCurSel(hPartitionScheme))); |  | ||||||
| 	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)); | ||||||
| 	windows_to_go = (togo_mode) && HAS_WINTOGO(img_report) && (Button_GetCheck(GetDlgItem(hMainDialog, IDC_WINDOWS_TO_GO)) == BST_CHECKED); | 	windows_to_go = display_togo_option && (bt == BT_IMAGE) && HAS_WINTOGO(img_report) && | ||||||
|  | 		(ComboBox_GetCurSel(GetDlgItem(hMainDialog, IDC_IMAGE_OPTION)) == 1); | ||||||
| 	large_drive = (SelectedDrive.DiskSize > (1*TB)); | 	large_drive = (SelectedDrive.DiskSize > (1*TB)); | ||||||
| 	if (large_drive) | 	if (large_drive) | ||||||
| 		uprintf("Notice: Large drive detected (may produce short writes)"); | 		uprintf("Notice: Large drive detected (may produce short writes)"); | ||||||
|  | @ -1676,9 +1667,9 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 		// http://msdn.microsoft.com/en-us/library/windows/hardware/dn640535.aspx#gpt_faq_what_disk_require_msr
 | 		// http://msdn.microsoft.com/en-us/library/windows/hardware/dn640535.aspx#gpt_faq_what_disk_require_msr
 | ||||||
| 		extra_partitions = XP_MSR | XP_EFI; | 		extra_partitions = XP_MSR | XP_EFI; | ||||||
| 	else if ( (fs == FS_NTFS) && ((bt == BT_UEFI_NTFS) || | 	else if ( (fs == FS_NTFS) && ((bt == BT_UEFI_NTFS) || | ||||||
| 			  ((bt == BT_ISO) && IS_EFI_BOOTABLE(img_report) && ((tt == TT_UEFI) || (windows_to_go) || (allow_dual_uefi_bios)))) ) | 			  ((bt == BT_IMAGE) && IS_EFI_BOOTABLE(img_report) && ((tt == TT_UEFI) || (windows_to_go) || (allow_dual_uefi_bios)))) ) | ||||||
| 		extra_partitions = XP_UEFI_NTFS; | 		extra_partitions = XP_UEFI_NTFS; | ||||||
| 	else if (IsChecked(IDC_EXTRA_PARTITION)) | 	else if (IsChecked(IDC_OLD_BIOS_FIXES)) | ||||||
| 		extra_partitions = XP_COMPAT; | 		extra_partitions = XP_COMPAT; | ||||||
| 
 | 
 | ||||||
| 	PrintInfoDebug(0, MSG_225); | 	PrintInfoDebug(0, MSG_225); | ||||||
|  | @ -1707,7 +1698,7 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 		// Do it in reverse so that we always end on the first volume letter
 | 		// Do it in reverse so that we always end on the first volume letter
 | ||||||
| 		for (i=(int)safe_strlen(drive_letters); i>0; i--) { | 		for (i=(int)safe_strlen(drive_letters); i>0; i--) { | ||||||
| 			drive_name[0] = drive_letters[i-1]; | 			drive_name[0] = drive_letters[i-1]; | ||||||
| 			if (IsChecked(IDC_BOOT) && ((bt == BT_ISO) || (bt == BT_IMG))) { | 			if (bt == BT_IMAGE) { | ||||||
| 				// If we are using an image, check that it isn't located on the drive we are trying to format
 | 				// If we are using an image, check that it isn't located on the drive we are trying to format
 | ||||||
| 				if ((PathGetDriveNumberU(image_path) + 'A') == drive_letters[i-1]) { | 				if ((PathGetDriveNumberU(image_path) + 'A') == drive_letters[i-1]) { | ||||||
| 					uprintf("ABORTED: Cannot use an image that is located on the target drive!\n"); | 					uprintf("ABORTED: Cannot use an image that is located on the target drive!\n"); | ||||||
|  | @ -1755,7 +1746,7 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 	// Note, Microsoft's way of cleaning partitions (IOCTL_DISK_CREATE_DISK, which is what we apply
 | 	// Note, Microsoft's way of cleaning partitions (IOCTL_DISK_CREATE_DISK, which is what we apply
 | ||||||
| 	// in InitializeDisk) is *NOT ENOUGH* to reset a disk and can render it inoperable for partitioning
 | 	// in InitializeDisk) is *NOT ENOUGH* to reset a disk and can render it inoperable for partitioning
 | ||||||
| 	// or formatting under Windows. See https://github.com/pbatard/rufus/issues/759 for details.
 | 	// or formatting under Windows. See https://github.com/pbatard/rufus/issues/759 for details.
 | ||||||
| 	if ((!IsChecked(IDC_BOOT)) || (bt != BT_IMG))  { | 	if ((bt != BT_IMAGE) || (img_report.is_iso)) { | ||||||
| 		if ((!ClearMBRGPT(hPhysicalDrive, SelectedDrive.DiskSize, SelectedDrive.SectorSize, use_large_fat32)) || | 		if ((!ClearMBRGPT(hPhysicalDrive, SelectedDrive.DiskSize, SelectedDrive.SectorSize, use_large_fat32)) || | ||||||
| 			(!InitializeDisk(hPhysicalDrive))) { | 			(!InitializeDisk(hPhysicalDrive))) { | ||||||
| 			uprintf("Could not reset partitions\n"); | 			uprintf("Could not reset partitions\n"); | ||||||
|  | @ -1764,7 +1755,7 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (IsChecked(IDC_BADBLOCKS)) { | 	if (IsChecked(IDC_BAD_BLOCKS)) { | ||||||
| 		do { | 		do { | ||||||
| 			// create a log file for bad blocks report. Since %USERPROFILE% may
 | 			// create a log file for bad blocks report. Since %USERPROFILE% may
 | ||||||
| 			// have localized characters, we use the UTF-8 API.
 | 			// have localized characters, we use the UTF-8 API.
 | ||||||
|  | @ -1830,7 +1821,7 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Write an image file
 | 	// Write an image file
 | ||||||
| 	if (IsChecked(IDC_BOOT) && (bt == BT_IMG)) { | 	if ((bt == BT_IMAGE) && write_as_image) { | ||||||
| 		hSourceImage = CreateFileU(image_path, GENERIC_READ, FILE_SHARE_READ, NULL, | 		hSourceImage = CreateFileU(image_path, GENERIC_READ, FILE_SHARE_READ, NULL, | ||||||
| 			OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); | 			OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); | ||||||
| 		if (hSourceImage == INVALID_HANDLE_VALUE) { | 		if (hSourceImage == INVALID_HANDLE_VALUE) { | ||||||
|  | @ -1935,18 +1926,18 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 		uprintf("Warning: Failed to refresh label: %s", WindowsErrorString()); | 		uprintf("Warning: Failed to refresh label: %s", WindowsErrorString()); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (IsChecked(IDC_BOOT)) { | 	if (bt != BT_NON_BOOTABLE) { | ||||||
| 		if (bt == BT_UEFI_NTFS) { | 		if (bt == BT_UEFI_NTFS) { | ||||||
| 			// All good
 | 			// All good
 | ||||||
| 		} else if (tt == TT_UEFI) { | 		} else if (tt == TT_UEFI) { | ||||||
| 			// For once, no need to do anything - just check our sanity
 | 			// For once, no need to do anything - just check our sanity
 | ||||||
| 			if ( (bt != BT_ISO) || !IS_EFI_BOOTABLE(img_report) || (fs > FS_NTFS) ) { | 			if ( (bt != BT_IMAGE) || !IS_EFI_BOOTABLE(img_report) || (fs > FS_NTFS) ) { | ||||||
| 				uprintf("Spock gone crazy error in %s:%d", __FILE__, __LINE__); | 				uprintf("Spock gone crazy error in %s:%d", __FILE__, __LINE__); | ||||||
| 				FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; | 				FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; | ||||||
| 				goto out; | 				goto out; | ||||||
| 			} | 			} | ||||||
| 		} else if ( (bt == BT_SYSLINUX_V4) || (bt == BT_SYSLINUX_V6) || | 		} else if ( (bt == BT_SYSLINUX_V4) || (bt == BT_SYSLINUX_V6) || | ||||||
| 			((bt == BT_ISO) && (HAS_SYSLINUX(img_report) || HAS_REACTOS(img_report)) && | 			((bt == BT_IMAGE) && (HAS_SYSLINUX(img_report) || HAS_REACTOS(img_report)) && | ||||||
| 				(!HAS_WINDOWS(img_report) || !allow_dual_uefi_bios)) ) { | 				(!HAS_WINDOWS(img_report) || !allow_dual_uefi_bios)) ) { | ||||||
| 			if (!InstallSyslinux(DriveIndex, drive_name[0], fs)) { | 			if (!InstallSyslinux(DriveIndex, drive_name[0], fs)) { | ||||||
| 				FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; | 				FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; | ||||||
|  | @ -1973,7 +1964,7 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 			safe_unlockclose(hLogicalVolume); | 			safe_unlockclose(hLogicalVolume); | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		if (IsChecked(IDC_SET_ICON)) | 		if (IsChecked(IDC_EXTENDED_LABEL)) | ||||||
| 			SetAutorun(drive_name); | 			SetAutorun(drive_name); | ||||||
| 	} | 	} | ||||||
| 	CHECK_FOR_USER_CANCEL; | 	CHECK_FOR_USER_CANCEL; | ||||||
|  | @ -1985,7 +1976,7 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 		goto out; | 		goto out; | ||||||
| 	CHECK_FOR_USER_CANCEL; | 	CHECK_FOR_USER_CANCEL; | ||||||
| 
 | 
 | ||||||
| 	if (IsChecked(IDC_BOOT)) { | 	if (bt != BT_NON_BOOTABLE) { | ||||||
| 		if ((bt == BT_MSDOS) || (bt == BT_FREEDOS)) { | 		if ((bt == BT_MSDOS) || (bt == BT_FREEDOS)) { | ||||||
| 			UpdateProgress(OP_DOS, -1.0f); | 			UpdateProgress(OP_DOS, -1.0f); | ||||||
| 			PrintInfoDebug(0, MSG_230); | 			PrintInfoDebug(0, MSG_230); | ||||||
|  | @ -2001,7 +1992,7 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 				IsFileInDB(FILES_DIR "\\grub4dos-" GRUB4DOS_VERSION "\\grldr")?"✓":"✗"); | 				IsFileInDB(FILES_DIR "\\grub4dos-" GRUB4DOS_VERSION "\\grldr")?"✓":"✗"); | ||||||
| 			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 ((bt == BT_ISO) && (image_path != NULL)) { | 		} else if ((bt == BT_IMAGE) && (image_path != NULL) && (img_report.is_iso)) { | ||||||
| 			UpdateProgress(OP_DOS, 0.0f); | 			UpdateProgress(OP_DOS, 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) { | ||||||
|  | @ -2052,12 +2043,12 @@ DWORD WINAPI FormatThread(void* param) | ||||||
| 		} | 		} | ||||||
| 		UpdateProgress(OP_FINALIZE, -1.0f); | 		UpdateProgress(OP_FINALIZE, -1.0f); | ||||||
| 		PrintInfoDebug(0, MSG_233); | 		PrintInfoDebug(0, MSG_233); | ||||||
| 		if (IsChecked(IDC_SET_ICON)) | 		if (IsChecked(IDC_EXTENDED_LABEL)) | ||||||
| 			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
 | ||||||
| 		RemountVolume(drive_name); | 		RemountVolume(drive_name); | ||||||
| 		// NTFS fixup (WinPE/AIK images don't seem to boot without an extra checkdisk)
 | 		// NTFS fixup (WinPE/AIK images don't seem to boot without an extra checkdisk)
 | ||||||
| 		if ((bt == BT_ISO) && (fs == FS_NTFS)) { | 		if ((bt == BT_IMAGE) && (img_report.is_iso) && (fs == FS_NTFS)) { | ||||||
| 			// Try to ensure that all messages from Checkdisk will be in English
 | 			// Try to ensure that all messages from Checkdisk will be in English
 | ||||||
| 			if (PRIMARYLANGID(GetThreadUILanguage()) != LANG_ENGLISH) { | 			if (PRIMARYLANGID(GetThreadUILanguage()) != LANG_ENGLISH) { | ||||||
| 				SetThreadUILanguage(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); | 				SetThreadUILanguage(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); | ||||||
|  |  | ||||||
|  | @ -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-2018 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 | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								src/iso.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/iso.c
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * ISO file extraction |  * ISO file extraction | ||||||
|  * Copyright © 2011-2016 Pete Batard <pete@akeo.ie> |  * Copyright © 2011-2018 Pete Batard <pete@akeo.ie> | ||||||
|  * Based on libcdio's iso & udf samples: |  * Based on libcdio's iso & udf samples: | ||||||
|  * Copyright © 2003-2014 Rocky Bernstein <rocky@gnu.org> |  * Copyright © 2003-2014 Rocky Bernstein <rocky@gnu.org> | ||||||
|  * |  * | ||||||
|  | @ -1170,7 +1170,7 @@ BOOL ExtractEfiImgFiles(const char* dir) | ||||||
| 	iso9660_readfat_private* p_private = NULL; | 	iso9660_readfat_private* p_private = NULL; | ||||||
| 	libfat_sector_t s; | 	libfat_sector_t s; | ||||||
| 	int32_t dc, c; | 	int32_t dc, c; | ||||||
| 	struct libfat_filesystem *fs = NULL; | 	struct libfat_filesystem *lf_fs = NULL; | ||||||
| 	struct libfat_direntry direntry; | 	struct libfat_direntry direntry; | ||||||
| 	char name[12] = { 0 }; | 	char name[12] = { 0 }; | ||||||
| 	char path[64]; | 	char path[64]; | ||||||
|  | @ -1201,17 +1201,17 @@ BOOL ExtractEfiImgFiles(const char* dir) | ||||||
| 		uprintf("Error reading ISO-9660 file %s at LSN %lu\n", img_report.efi_img_path, (long unsigned int)p_private->lsn); | 		uprintf("Error reading ISO-9660 file %s at LSN %lu\n", img_report.efi_img_path, (long unsigned int)p_private->lsn); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 	fs = libfat_open(iso9660_readfat, (intptr_t)p_private); | 	lf_fs = libfat_open(iso9660_readfat, (intptr_t)p_private); | ||||||
| 	if (fs == NULL) { | 	if (lf_fs == NULL) { | ||||||
| 		uprintf("FAT access error"); | 		uprintf("FAT access error"); | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Navigate to /EFI/BOOT
 | 	// Navigate to /EFI/BOOT
 | ||||||
| 	if (libfat_searchdir(fs, 0, "EFI        ", &direntry) < 0) | 	if (libfat_searchdir(lf_fs, 0, "EFI        ", &direntry) < 0) | ||||||
| 		goto out; | 		goto out; | ||||||
| 	dc = direntry.entry[26] + (direntry.entry[27] << 8); | 	dc = direntry.entry[26] + (direntry.entry[27] << 8); | ||||||
| 	if (libfat_searchdir(fs, dc, "BOOT       ", &direntry) < 0) | 	if (libfat_searchdir(lf_fs, dc, "BOOT       ", &direntry) < 0) | ||||||
| 		goto out; | 		goto out; | ||||||
| 	dc = direntry.entry[26] + (direntry.entry[27] << 8); | 	dc = direntry.entry[26] + (direntry.entry[27] << 8); | ||||||
| 
 | 
 | ||||||
|  | @ -1228,7 +1228,7 @@ BOOL ExtractEfiImgFiles(const char* dir) | ||||||
| 			} else | 			} else | ||||||
| 				name[k++] = toupper(efi_bootname[i][j]); | 				name[k++] = toupper(efi_bootname[i][j]); | ||||||
| 		} | 		} | ||||||
| 		c = libfat_searchdir(fs, dc, name, &direntry); | 		c = libfat_searchdir(lf_fs, dc, name, &direntry); | ||||||
| 		if (c > 0) { | 		if (c > 0) { | ||||||
| 			if (dir == NULL) { | 			if (dir == NULL) { | ||||||
| 				if (!ret) | 				if (!ret) | ||||||
|  | @ -1265,9 +1265,9 @@ BOOL ExtractEfiImgFiles(const char* dir) | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				written = 0; | 				written = 0; | ||||||
| 				s = libfat_clustertosector(fs, c); | 				s = libfat_clustertosector(lf_fs, c); | ||||||
| 				while ((s != 0) && (s < 0xFFFFFFFFULL) && (written < file_size)) { | 				while ((s != 0) && (s < 0xFFFFFFFFULL) && (written < file_size)) { | ||||||
| 					buf = libfat_get_sector(fs, s); | 					buf = libfat_get_sector(lf_fs, s); | ||||||
| 					size = MIN(LIBFAT_SECTOR_SIZE, file_size - written); | 					size = MIN(LIBFAT_SECTOR_SIZE, file_size - written); | ||||||
| 					if (!WriteFileWithRetry(handle, buf, size, &size, WRITE_RETRIES) || | 					if (!WriteFileWithRetry(handle, buf, size, &size, WRITE_RETRIES) || | ||||||
| 						(size != MIN(LIBFAT_SECTOR_SIZE, file_size - written))) { | 						(size != MIN(LIBFAT_SECTOR_SIZE, file_size - written))) { | ||||||
|  | @ -1276,7 +1276,7 @@ BOOL ExtractEfiImgFiles(const char* dir) | ||||||
| 						continue; | 						continue; | ||||||
| 					} | 					} | ||||||
| 					written += size; | 					written += size; | ||||||
| 					s = libfat_nextsector(fs, s); | 					s = libfat_nextsector(lf_fs, s); | ||||||
| 				} | 				} | ||||||
| 				CloseHandle(handle); | 				CloseHandle(handle); | ||||||
| 				ret = TRUE; | 				ret = TRUE; | ||||||
|  | @ -1285,8 +1285,8 @@ BOOL ExtractEfiImgFiles(const char* dir) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
| 	if (fs != NULL) | 	if (lf_fs != NULL) | ||||||
| 		libfat_close(fs); | 		libfat_close(lf_fs); | ||||||
| 	if (p_statbuf != NULL) | 	if (p_statbuf != NULL) | ||||||
| 		safe_free(p_statbuf->rr.psz_symlink); | 		safe_free(p_statbuf->rr.psz_symlink); | ||||||
| 	safe_free(p_statbuf); | 	safe_free(p_statbuf); | ||||||
|  |  | ||||||
|  | @ -34,6 +34,9 @@ RUFUS_URL "\\line\n" | ||||||
| 
 | 
 | ||||||
| const char* additional_copyrights = | const char* additional_copyrights = | ||||||
| "{\\rtf1\\ansi\n" | "{\\rtf1\\ansi\n" | ||||||
|  | "UI redesign concept by Fahad Al-Riyami\\line\n" | ||||||
|  | "Used with kind authorization\\line\n" | ||||||
|  | "\\line\n" | ||||||
| "Icon by PC Unleashed:\\line\n" | "Icon by PC Unleashed:\\line\n" | ||||||
| "http://pcunleashed.com\\line\n" | "http://pcunleashed.com\\line\n" | ||||||
| "Freeware\\line\n" | "Freeware\\line\n" | ||||||
|  |  | ||||||
|  | @ -44,7 +44,7 @@ | ||||||
|  *   u: 32 bit unsigned CSV list |  *   u: 32 bit unsigned CSV list | ||||||
|  * Remember to update the size of the array in localization.h when adding/removing elements |  * Remember to update the size of the array in localization.h when adding/removing elements | ||||||
|  */ |  */ | ||||||
| const loc_parse parse_cmd[9] = { | const loc_parse parse_cmd[7] = { | ||||||
| 	// Translation name and Windows LCIDs it should apply to
 | 	// Translation name and Windows LCIDs it should apply to
 | ||||||
| 	{ 'l', LC_LOCALE, "ssu" },	// l "en_US" "English (US)" 0x0009,0x1009
 | 	{ 'l', LC_LOCALE, "ssu" },	// l "en_US" "English (US)" 0x0009,0x1009
 | ||||||
| 	// Base translation to add on top of (eg. "English (UK)" can be used to build on top of "English (US)"
 | 	// Base translation to add on top of (eg. "English (UK)" can be used to build on top of "English (US)"
 | ||||||
|  | @ -55,10 +55,6 @@ const loc_parse parse_cmd[9] = { | ||||||
| 	{ 't', LC_TEXT, "cs" },		// t IDC_CONTROL "Translation"
 | 	{ 't', LC_TEXT, "cs" },		// t IDC_CONTROL "Translation"
 | ||||||
| 	// Set the section/dialog to which the next commands should apply
 | 	// Set the section/dialog to which the next commands should apply
 | ||||||
| 	{ 'g', LC_GROUP, "c" },		// g IDD_DIALOG
 | 	{ 'g', LC_GROUP, "c" },		// g IDD_DIALOG
 | ||||||
| 	// Resize a dialog (dx dy pixel increment)
 |  | ||||||
| 	{ 's', LC_SIZE, "cii" },	// s IDC_CONTROL +10 +10
 |  | ||||||
| 	// Move a dialog (dx dy pixed displacement)
 |  | ||||||
| 	{ 'm', LC_MOVE, "cii" },	// m IDC_CONTROL -5 0
 |  | ||||||
| 	// Set the font to use for the text controls that follow
 | 	// Set the font to use for the text controls that follow
 | ||||||
| 	// Use f "Default" 0 to reset the font
 | 	// Use f "Default" 0 to reset the font
 | ||||||
| 	{ 'f', LC_FONT, "si" },		// f "MS Dialog" 10
 | 	{ 'f', LC_FONT, "si" },		// f "MS Dialog" 10
 | ||||||
|  | @ -80,6 +76,8 @@ char* default_msg_table[MSG_MAX-MSG_000] = {"%s", 0}; | ||||||
| char* current_msg_table[MSG_MAX-MSG_000] = {"%s", 0}; | char* current_msg_table[MSG_MAX-MSG_000] = {"%s", 0}; | ||||||
| char** msg_table = NULL; | char** msg_table = NULL; | ||||||
| 
 | 
 | ||||||
|  | extern BOOL progress_in_use; | ||||||
|  | 
 | ||||||
| static void mtab_destroy(BOOL reinit) | static void mtab_destroy(BOOL reinit) | ||||||
| { | { | ||||||
| 	size_t j; | 	size_t j; | ||||||
|  | @ -259,8 +257,6 @@ BOOL dispatch_loc_cmd(loc_cmd* lcmd) | ||||||
| 	switch(lcmd->command) { | 	switch(lcmd->command) { | ||||||
| 	// NB: For commands that take an ID, ctrl_id is always a valid index at this stage
 | 	// NB: For commands that take an ID, ctrl_id is always a valid index at this stage
 | ||||||
| 	case LC_TEXT: | 	case LC_TEXT: | ||||||
| 	case LC_MOVE: |  | ||||||
| 	case LC_SIZE: |  | ||||||
| 		add_dialog_command(dlg_index, lcmd); | 		add_dialog_command(dlg_index, lcmd); | ||||||
| 		break; | 		break; | ||||||
| 	case LC_GROUP: | 	case LC_GROUP: | ||||||
|  | @ -344,16 +340,6 @@ void apply_localization(int dlg_id, HWND hDlg) | ||||||
| 						SetWindowTextU(hCtrl, lcmd->txt[1]); | 						SetWindowTextU(hCtrl, lcmd->txt[1]); | ||||||
| 				} | 				} | ||||||
| 				break; | 				break; | ||||||
| 			case LC_MOVE: |  | ||||||
| 				if (hCtrl != NULL) { |  | ||||||
| 					ResizeMoveCtrl(hDlg, hCtrl, lcmd->num[0], lcmd->num[1], 0, 0, fScale); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 			case LC_SIZE: |  | ||||||
| 				if (hCtrl != NULL) { |  | ||||||
| 					ResizeMoveCtrl(hDlg, hCtrl, 0, 0, lcmd->num[0], lcmd->num[1], fScale); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -388,7 +374,7 @@ char* lmprintf(uint32_t msg_id, ...) | ||||||
| 	buf[buf_id][0] = 0; | 	buf[buf_id][0] = 0; | ||||||
| 
 | 
 | ||||||
| 	msg_id &= MSG_MASK; | 	msg_id &= MSG_MASK; | ||||||
| 	if ((msg_id > MSG_000) && (msg_id < MSG_MAX)) { | 	if ((msg_id >= MSG_000) && (msg_id < MSG_MAX)) { | ||||||
| 		format = msg_table[msg_id - MSG_000]; | 		format = msg_table[msg_id - MSG_000]; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -426,9 +412,17 @@ static char *output_msg[2]; | ||||||
| static uint64_t last_msg_time[2] = { 0, 0 }; | static uint64_t last_msg_time[2] = { 0, 0 }; | ||||||
| 
 | 
 | ||||||
| static void PrintInfoMessage(char* msg) { | static void PrintInfoMessage(char* msg) { | ||||||
| 	SetWindowTextU(hInfo, msg); | 	SetWindowTextU(hProgress, msg); | ||||||
| 	// Make sure our field gets redrawn
 | 	// Make sure our field gets redrawn
 | ||||||
| 	SendMessage(hInfo, WM_PAINT, 0, 0); | 	// If the progress bar is not active, it looks like WM_PAINT is
 | ||||||
|  | 	// ignored. But InvalidateRect is causing refresh tearing so we
 | ||||||
|  | 	// don't want to use that while active.
 | ||||||
|  | 	// Refresh still sucks though and marquee no longer works... :(
 | ||||||
|  | 	// TODO: Create our own progress bar control with text overlay and inverted text
 | ||||||
|  | 	if (!progress_in_use) | ||||||
|  | 		InvalidateRect(hProgress, NULL, TRUE); | ||||||
|  | 	else | ||||||
|  | 		SendMessage(hProgress, WM_PAINT, 0, 0); | ||||||
| } | } | ||||||
| static void PrintStatusMessage(char* msg) { | static void PrintStatusMessage(char* msg) { | ||||||
| 	SendMessageLU(hStatus, SB_SETTEXTW, SBT_OWNERDRAW | SB_SECTION_LEFT, msg); | 	SendMessageLU(hStatus, SB_SETTEXTW, SBT_OWNERDRAW | SB_SECTION_LEFT, msg); | ||||||
|  | @ -446,6 +440,7 @@ static void CALLBACK OutputMessageTimeout(HWND hWnd, UINT uMsg, UINT_PTR idEvent | ||||||
| 
 | 
 | ||||||
| 	KillTimer(hMainDialog, idEvent); | 	KillTimer(hMainDialog, idEvent); | ||||||
| 	bOutputTimerArmed[i] = FALSE; | 	bOutputTimerArmed[i] = FALSE; | ||||||
|  | 
 | ||||||
| 	PrintMessage[i](output_msg[i]); | 	PrintMessage[i](output_msg[i]); | ||||||
| 	last_msg_time[i] = GetTickCount64(); | 	last_msg_time[i] = GetTickCount64(); | ||||||
| } | } | ||||||
|  | @ -507,6 +502,7 @@ void PrintStatusInfo(BOOL info, BOOL debug, unsigned int duration, int msg_id, . | ||||||
| 	if (!info) | 	if (!info) | ||||||
| 		szStatusMessage = szMessage[MSG_STATUS][(duration > 0)?MSG_LOW_PRI:MSG_HIGH_PRI]; | 		szStatusMessage = szMessage[MSG_STATUS][(duration > 0)?MSG_LOW_PRI:MSG_HIGH_PRI]; | ||||||
| 
 | 
 | ||||||
|  | 	if ((msg_id >= MSG_000) && (msg_id < MSG_MAX)) | ||||||
| 		format = msg_table[msg_id - MSG_000]; | 		format = msg_table[msg_id - MSG_000]; | ||||||
| 	if (format == NULL) { | 	if (format == NULL) { | ||||||
| 		safe_sprintf(msg_hi, MSG_LEN, "MSG_%03d UNTRANSLATED", msg_id - MSG_000); | 		safe_sprintf(msg_hi, MSG_LEN, "MSG_%03d UNTRANSLATED", msg_id - MSG_000); | ||||||
|  | @ -530,6 +526,7 @@ void PrintStatusInfo(BOOL info, BOOL debug, unsigned int duration, int msg_id, . | ||||||
| 
 | 
 | ||||||
| 	// Because we want the log messages in English, we go through the VA business once more, but this time with default_msg_table
 | 	// Because we want the log messages in English, we go through the VA business once more, but this time with default_msg_table
 | ||||||
| 	if (debug) { | 	if (debug) { | ||||||
|  | 		if ((msg_id >= MSG_000) && (msg_id < MSG_MAX)) | ||||||
| 			format = default_msg_table[msg_id - MSG_000]; | 			format = default_msg_table[msg_id - MSG_000]; | ||||||
| 		if (format == NULL) { | 		if (format == NULL) { | ||||||
| 			safe_sprintf(buf, sizeof(szStatusMessage), "(default) MSG_%03d UNTRANSLATED", msg_id - MSG_000); | 			safe_sprintf(buf, sizeof(szStatusMessage), "(default) MSG_%03d UNTRANSLATED", msg_id - MSG_000); | ||||||
|  |  | ||||||
|  | @ -113,8 +113,6 @@ static __inline void list_del(struct list_head *entry) | ||||||
| // The last command with a control ID *MUST* be LC_TEXT
 | // The last command with a control ID *MUST* be LC_TEXT
 | ||||||
| enum loc_command_type { | enum loc_command_type { | ||||||
| 	LC_GROUP, | 	LC_GROUP, | ||||||
| 	LC_MOVE, |  | ||||||
| 	LC_SIZE, |  | ||||||
| 	LC_TEXT,	// Delimits commands that take a Control ID and commands that don't
 | 	LC_TEXT,	// Delimits commands that take a Control ID and commands that don't
 | ||||||
| 	LC_VERSION, | 	LC_VERSION, | ||||||
| 	LC_LOCALE, | 	LC_LOCALE, | ||||||
|  | @ -151,7 +149,7 @@ typedef struct loc_dlg_list_struct { | ||||||
| 	struct list_head list; | 	struct list_head list; | ||||||
| } loc_dlg_list; | } loc_dlg_list; | ||||||
| 
 | 
 | ||||||
| extern const loc_parse parse_cmd[9]; | extern const loc_parse parse_cmd[7]; | ||||||
| extern struct list_head locale_list; | extern struct list_head locale_list; | ||||||
| extern char *default_msg_table[], *current_msg_table[], **msg_table; | extern char *default_msg_table[], *current_msg_table[], **msg_table; | ||||||
| int loc_line_nr; | int loc_line_nr; | ||||||
|  |  | ||||||
|  | @ -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-2016 Pete Batard <pete@akeo.ie> |  * Copyright © 2013-2018 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 | ||||||
|  | @ -36,44 +36,47 @@ const loc_control_id control_id[] = { | ||||||
| 	LOC_CTRL(IDD_UPDATE_POLICY), | 	LOC_CTRL(IDD_UPDATE_POLICY), | ||||||
| 	LOC_CTRL(IDD_NEW_VERSION), | 	LOC_CTRL(IDD_NEW_VERSION), | ||||||
| 	LOC_CTRL(IDD_CHECKSUM), | 	LOC_CTRL(IDD_CHECKSUM), | ||||||
|  | 	LOC_CTRL(IDD_LIST), | ||||||
| 	LOC_CTRL(IDC_DEVICE), | 	LOC_CTRL(IDC_DEVICE), | ||||||
| 	LOC_CTRL(IDC_FILESYSTEM), | 	LOC_CTRL(IDC_FILE_SYSTEM), | ||||||
| 	LOC_CTRL(IDC_START), | 	LOC_CTRL(IDC_START), | ||||||
| 	LOC_CTRL(IDC_PARTITION_TYPE), | 	LOC_CTRL(IDC_PARTITION_TYPE), | ||||||
| 	LOC_CTRL(IDC_CLUSTERSIZE), | 	LOC_CTRL(IDC_CLUSTER_SIZE), | ||||||
| 	LOC_CTRL(IDC_STATUS), | 	LOC_CTRL(IDC_STATUS), | ||||||
| 	LOC_CTRL(IDC_ABOUT), |  | ||||||
| 	LOC_CTRL(IDC_LABEL), | 	LOC_CTRL(IDC_LABEL), | ||||||
| 	LOC_CTRL(IDC_QUICKFORMAT), | 	LOC_CTRL(IDC_QUICK_FORMAT), | ||||||
| 	LOC_CTRL(IDC_BOOT), | 	LOC_CTRL(IDC_BAD_BLOCKS), | ||||||
| 	LOC_CTRL(IDC_BADBLOCKS), |  | ||||||
| 	LOC_CTRL(IDC_PROGRESS), | 	LOC_CTRL(IDC_PROGRESS), | ||||||
| 	LOC_CTRL(IDC_BOOTTYPE), | 	LOC_CTRL(IDC_BOOT_SELECTION), | ||||||
| 	LOC_CTRL(IDC_NBPASSES), | 	LOC_CTRL(IDC_NB_PASSES), | ||||||
| 	LOC_CTRL(IDC_TEST), | 	LOC_CTRL(IDC_TEST), | ||||||
| 	LOC_CTRL(IDC_SELECT_ISO), | 	LOC_CTRL(IDC_SELECT), | ||||||
| 	LOC_CTRL(IDC_SET_ICON), | 	LOC_CTRL(IDC_EXTENDED_LABEL), | ||||||
| 	LOC_CTRL(IDC_RUFUS_MBR), | 	LOC_CTRL(IDC_RUFUS_MBR), | ||||||
| 	LOC_CTRL(IDC_INFO), | 	LOC_CTRL(IDC_TARGET_SYSTEM), | ||||||
| 	LOC_CTRL(IDC_DISK_ID), | 	LOC_CTRL(IDC_DISK_ID), | ||||||
| 	LOC_CTRL(IDC_EXTRA_PARTITION), | 	LOC_CTRL(IDC_OLD_BIOS_FIXES), | ||||||
| 	LOC_CTRL(IDC_ENABLE_FIXED_DISKS), | 	LOC_CTRL(IDC_LIST_USB_HDD), | ||||||
| 	LOC_CTRL(IDC_STATUS_TOOLBAR), | 	LOC_CTRL(IDC_STATUS_TOOLBAR), | ||||||
| 	LOC_CTRL(IDC_HASH), | 	LOC_CTRL(IDC_HASH), | ||||||
|  | 	LOC_CTRL(IDC_SAVE), | ||||||
|  | 	LOC_CTRL(IDC_IMAGE_OPTION), | ||||||
| 	LOC_CTRL(IDC_ABOUT_LICENSE), | 	LOC_CTRL(IDC_ABOUT_LICENSE), | ||||||
| 	LOC_CTRL(IDC_ABOUT_ICON), | 	LOC_CTRL(IDC_ABOUT_ICON), | ||||||
| 	LOC_CTRL(IDC_ABOUT_UPDATES), |  | ||||||
| 	LOC_CTRL(IDC_ABOUT_COPYRIGHTS), | 	LOC_CTRL(IDC_ABOUT_COPYRIGHTS), | ||||||
| 	LOC_CTRL(IDC_ABOUT_BLURB), | 	LOC_CTRL(IDC_ABOUT_BLURB), | ||||||
| 	LOC_CTRL(IDC_LICENSE_TEXT), | 	LOC_CTRL(IDC_LICENSE_TEXT), | ||||||
| 	LOC_CTRL(IDC_NOTIFICATION_ICON), | 	LOC_CTRL(IDC_NOTIFICATION_ICON), | ||||||
| 	LOC_CTRL(IDC_NOTIFICATION_TEXT), | 	LOC_CTRL(IDC_NOTIFICATION_TEXT), | ||||||
| 	LOC_CTRL(IDC_NOTIFICATION_LINE), | 	LOC_CTRL(IDC_NOTIFICATION_LINE), | ||||||
| 	LOC_CTRL(IDC_ADVANCED), | 	LOC_CTRL(IDC_ADVANCED_DEVICE_TOOLBAR), | ||||||
| 	LOC_CTRL(IDS_ADVANCED_OPTIONS_GRP), | 	LOC_CTRL(IDC_ADVANCED_FORMAT_TOOLBAR), | ||||||
|  | 	LOC_CTRL(IDC_CHECKSUM_TOOLBAR), | ||||||
|  | 	LOC_CTRL(IDC_MULTI_TOOLBAR), | ||||||
|  | 	LOC_CTRL(IDC_LANG), | ||||||
|  | 	LOC_CTRL(IDC_ABOUT), | ||||||
|  | 	LOC_CTRL(IDC_SETTINGS), | ||||||
| 	LOC_CTRL(IDC_LOG), | 	LOC_CTRL(IDC_LOG), | ||||||
| 	LOC_CTRL(IDC_WINDOWS_INSTALL), |  | ||||||
| 	LOC_CTRL(IDC_WINDOWS_TO_GO), |  | ||||||
| 	LOC_CTRL(IDC_LOG_EDIT), | 	LOC_CTRL(IDC_LOG_EDIT), | ||||||
| 	LOC_CTRL(IDC_LOG_SAVE), | 	LOC_CTRL(IDC_LOG_SAVE), | ||||||
| 	LOC_CTRL(IDC_LOG_CLEAR), | 	LOC_CTRL(IDC_LOG_CLEAR), | ||||||
|  | @ -110,12 +113,33 @@ const loc_control_id control_id[] = { | ||||||
| 	LOC_CTRL(IDC_SELECTION_CHOICE14), | 	LOC_CTRL(IDC_SELECTION_CHOICE14), | ||||||
| 	LOC_CTRL(IDC_SELECTION_CHOICE15), | 	LOC_CTRL(IDC_SELECTION_CHOICE15), | ||||||
| 	LOC_CTRL(IDC_SELECTION_CHOICEMAX), | 	LOC_CTRL(IDC_SELECTION_CHOICEMAX), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ICON), | ||||||
|  | 	LOC_CTRL(IDC_LIST_TEXT), | ||||||
|  | 	LOC_CTRL(IDC_LIST_LINE), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM1), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM2), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM3), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM4), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM5), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM6), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM7), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM8), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM9), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM10), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM11), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM12), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM13), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM14), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEM15), | ||||||
|  | 	LOC_CTRL(IDC_LIST_ITEMMAX), | ||||||
|  | 	LOC_CTRL(IDC_ADVANCED_DRIVE_PROPERTIES), | ||||||
|  | 	LOC_CTRL(IDC_ADVANCED_FORMAT_OPTIONS), | ||||||
| 	LOC_CTRL(IDS_DEVICE_TXT), | 	LOC_CTRL(IDS_DEVICE_TXT), | ||||||
| 	LOC_CTRL(IDS_PARTITION_TYPE_TXT), | 	LOC_CTRL(IDS_PARTITION_TYPE_TXT), | ||||||
| 	LOC_CTRL(IDS_FILESYSTEM_TXT), | 	LOC_CTRL(IDS_FILE_SYSTEM_TXT), | ||||||
| 	LOC_CTRL(IDS_CLUSTERSIZE_TXT), | 	LOC_CTRL(IDS_CLUSTER_SIZE_TXT), | ||||||
| 	LOC_CTRL(IDS_LABEL_TXT), | 	LOC_CTRL(IDS_LABEL_TXT), | ||||||
| 	LOC_CTRL(IDS_FORMAT_OPTIONS_GRP), | 	LOC_CTRL(IDS_CSM_HELP_TXT), | ||||||
| 	LOC_CTRL(IDS_UPDATE_SETTINGS_GRP), | 	LOC_CTRL(IDS_UPDATE_SETTINGS_GRP), | ||||||
| 	LOC_CTRL(IDS_UPDATE_FREQUENCY_TXT), | 	LOC_CTRL(IDS_UPDATE_FREQUENCY_TXT), | ||||||
| 	LOC_CTRL(IDS_INCLUDE_BETAS_TXT), | 	LOC_CTRL(IDS_INCLUDE_BETAS_TXT), | ||||||
|  | @ -123,6 +147,12 @@ const loc_control_id control_id[] = { | ||||||
| 	LOC_CTRL(IDS_NEW_VERSION_DOWNLOAD_GRP), | 	LOC_CTRL(IDS_NEW_VERSION_DOWNLOAD_GRP), | ||||||
| 	LOC_CTRL(IDS_NEW_VERSION_NOTES_GRP), | 	LOC_CTRL(IDS_NEW_VERSION_NOTES_GRP), | ||||||
| 	LOC_CTRL(IDS_CHECK_NOW_GRP), | 	LOC_CTRL(IDS_CHECK_NOW_GRP), | ||||||
|  | 	LOC_CTRL(IDS_TARGET_SYSTEM_TXT), | ||||||
|  | 	LOC_CTRL(IDS_IMAGE_OPTION_TXT), | ||||||
|  | 	LOC_CTRL(IDS_BOOT_SELECTION_TXT), | ||||||
|  | 	LOC_CTRL(IDS_DRIVE_PROPERTIES_TXT), | ||||||
|  | 	LOC_CTRL(IDS_FORMAT_OPTIONS_TXT), | ||||||
|  | 	LOC_CTRL(IDS_STATUS_TXT), | ||||||
| 	LOC_CTRL(MSG_000), | 	LOC_CTRL(MSG_000), | ||||||
| 	LOC_CTRL(MSG_001), | 	LOC_CTRL(MSG_001), | ||||||
| 	LOC_CTRL(MSG_002), | 	LOC_CTRL(MSG_002), | ||||||
|  | @ -423,6 +453,27 @@ const loc_control_id control_id[] = { | ||||||
| 	LOC_CTRL(MSG_297), | 	LOC_CTRL(MSG_297), | ||||||
| 	LOC_CTRL(MSG_298), | 	LOC_CTRL(MSG_298), | ||||||
| 	LOC_CTRL(MSG_299), | 	LOC_CTRL(MSG_299), | ||||||
|  | 	LOC_CTRL(MSG_300), | ||||||
|  | 	LOC_CTRL(MSG_301), | ||||||
|  | 	LOC_CTRL(MSG_302), | ||||||
|  | 	LOC_CTRL(MSG_303), | ||||||
|  | 	LOC_CTRL(MSG_304), | ||||||
|  | 	LOC_CTRL(MSG_305), | ||||||
|  | 	LOC_CTRL(MSG_306), | ||||||
|  | 	LOC_CTRL(MSG_307), | ||||||
|  | 	LOC_CTRL(MSG_308), | ||||||
|  | 	LOC_CTRL(MSG_309), | ||||||
|  | 	LOC_CTRL(MSG_310), | ||||||
|  | 	LOC_CTRL(MSG_311), | ||||||
|  | 	LOC_CTRL(MSG_312), | ||||||
|  | 	LOC_CTRL(MSG_313), | ||||||
|  | 	LOC_CTRL(MSG_314), | ||||||
|  | 	LOC_CTRL(MSG_315), | ||||||
|  | 	LOC_CTRL(MSG_316), | ||||||
|  | 	LOC_CTRL(MSG_317), | ||||||
|  | 	LOC_CTRL(MSG_318), | ||||||
|  | 	LOC_CTRL(MSG_319), | ||||||
|  | 	LOC_CTRL(MSG_320), | ||||||
| 	LOC_CTRL(MSG_MAX), | 	LOC_CTRL(MSG_MAX), | ||||||
| 	LOC_CTRL(IDOK), | 	LOC_CTRL(IDOK), | ||||||
| 	LOC_CTRL(IDCANCEL), | 	LOC_CTRL(IDCANCEL), | ||||||
|  | @ -446,4 +497,5 @@ loc_dlg_list loc_dlg[] = { | ||||||
| 	LOC_DLG(IDD_UPDATE_POLICY), | 	LOC_DLG(IDD_UPDATE_POLICY), | ||||||
| 	LOC_DLG(IDD_NEW_VERSION), | 	LOC_DLG(IDD_NEW_VERSION), | ||||||
| 	LOC_DLG(IDD_CHECKSUM), | 	LOC_DLG(IDD_CHECKSUM), | ||||||
|  | 	LOC_DLG(IDD_LIST), | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -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-2017 Pete Batard <pete@akeo.ie>\ |  * Copyright © 2013-2018 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\ | ||||||
|  |  | ||||||
|  | @ -437,6 +437,19 @@ static __inline int ComboBox_GetLBTextU(HWND hCtrl, int index, char* lpString) | ||||||
| 	return size; | 	return size; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static __inline DWORD CharUpperBuffU(char* lpString, DWORD len) | ||||||
|  | { | ||||||
|  | 	DWORD ret; | ||||||
|  | 	wchar_t *wlpString = calloc(len, sizeof(wchar_t)); | ||||||
|  | 	if (wlpString == NULL) | ||||||
|  | 		return 0; | ||||||
|  | 	utf8_to_wchar_no_alloc(lpString, wlpString, len); | ||||||
|  | 	ret = CharUpperBuffW(wlpString, len); | ||||||
|  | 	wchar_to_utf8_no_alloc(wlpString, lpString, len); | ||||||
|  | 	free(wlpString); | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static __inline HANDLE CreateFileU(const char* lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, | static __inline HANDLE CreateFileU(const char* lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, | ||||||
| 								   LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, | 								   LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, | ||||||
| 								   DWORD dwFlagsAndAttributes,  HANDLE hTemplateFile) | 								   DWORD dwFlagsAndAttributes,  HANDLE hTemplateFile) | ||||||
|  |  | ||||||
							
								
								
									
										104
									
								
								src/resource.h
									
										
									
									
									
								
							
							
						
						
									
										104
									
								
								src/resource.h
									
										
									
									
									
								
							|  | @ -74,46 +74,48 @@ | ||||||
| #define IDR_TOGO_SAN_POLICY_XML         503 | #define IDR_TOGO_SAN_POLICY_XML         503 | ||||||
| #define IDR_TOGO_UNATTEND_XML           504 | #define IDR_TOGO_UNATTEND_XML           504 | ||||||
| #define IDC_DEVICE                      1001 | #define IDC_DEVICE                      1001 | ||||||
| #define IDC_FILESYSTEM                  1002 | #define IDC_FILE_SYSTEM                 1002 | ||||||
| #define IDC_START                       1003 | #define IDC_START                       1003 | ||||||
| #define IDC_PARTITION_TYPE              1004 | #define IDC_PARTITION_TYPE              1004 | ||||||
| #define IDC_CLUSTERSIZE                 1005 | #define IDC_CLUSTER_SIZE                1005 | ||||||
| #define IDC_STATUS                      1006 | #define IDC_STATUS                      1006 | ||||||
| #define IDC_ABOUT                       1007 | #define IDC_LABEL                       1007 | ||||||
| #define IDC_LABEL                       1008 | #define IDC_QUICK_FORMAT                1008 | ||||||
| #define IDC_QUICKFORMAT                 1009 | #define IDC_BAD_BLOCKS                  1009 | ||||||
| #define IDC_BOOT                        1010 | #define IDC_PROGRESS                    1010 | ||||||
| #define IDC_BADBLOCKS                   1011 | #define IDC_BOOT_SELECTION              1011 | ||||||
| #define IDC_PROGRESS                    1012 | #define IDC_NB_PASSES                   1012 | ||||||
| #define IDC_BOOTTYPE                    1013 | #define IDC_TEST                        1013 | ||||||
| #define IDC_NBPASSES                    1014 | #define IDC_SELECT                      1014 | ||||||
| #define IDC_TEST                        1015 | #define IDC_EXTENDED_LABEL              1015 | ||||||
| #define IDC_SELECT_ISO                  1016 | #define IDC_RUFUS_MBR                   1016 | ||||||
| #define IDC_SET_ICON                    1017 | #define IDC_TARGET_SYSTEM               1017 | ||||||
| #define IDC_RUFUS_MBR                   1018 | #define IDC_DISK_ID                     1020 | ||||||
| #define IDC_INFO                        1020 | #define IDC_OLD_BIOS_FIXES              1021 | ||||||
| #define IDC_DISK_ID                     1022 | #define IDC_LIST_USB_HDD                1022 | ||||||
| #define IDC_EXTRA_PARTITION             1023 | #define IDC_STATUS_TOOLBAR              1023 | ||||||
| #define IDC_ENABLE_FIXED_DISKS          1024 | #define IDC_HASH                        1024 | ||||||
| #define IDC_STATUS_TOOLBAR              1025 | #define IDC_SAVE                        1025 | ||||||
| #define IDC_HASH                        1026 | #define IDC_IMAGE_OPTION                1026 | ||||||
| #define IDC_ABOUT_LICENSE               1030 | #define IDC_ABOUT_LICENSE               1030 | ||||||
| #define IDC_ABOUT_ICON                  1031 | #define IDC_ABOUT_ICON                  1031 | ||||||
| #define IDC_ABOUT_UPDATES               1032 | #define IDC_ABOUT_COPYRIGHTS            1032 | ||||||
| #define IDC_ABOUT_COPYRIGHTS            1033 | #define IDC_ABOUT_BLURB                 1033 | ||||||
| #define IDC_ABOUT_BLURB                 1034 | #define IDC_LICENSE_TEXT                1034 | ||||||
| #define IDC_LICENSE_TEXT                1036 |  | ||||||
| #define IDC_NOTIFICATION_ICON           1040 | #define IDC_NOTIFICATION_ICON           1040 | ||||||
| #define IDC_NOTIFICATION_TEXT           1041 | #define IDC_NOTIFICATION_TEXT           1041 | ||||||
| #define IDC_NOTIFICATION_LINE           1042 | #define IDC_NOTIFICATION_LINE           1042 | ||||||
| #define IDC_ADVANCED                    1043 | #define IDC_ADVANCED_DEVICE_TOOLBAR     1043 | ||||||
| #define IDS_ADVANCED_OPTIONS_GRP        1044 | #define IDC_ADVANCED_FORMAT_TOOLBAR     1044 | ||||||
| #define IDC_LOG                         1045 | #define IDC_CHECKSUM_TOOLBAR            1049 | ||||||
| #define IDC_WINDOWS_INSTALL             1047 | #define IDC_MULTI_TOOLBAR               1050 | ||||||
| #define IDC_WINDOWS_TO_GO               1048 | #define IDC_LANG                        1051 | ||||||
| #define IDC_LOG_EDIT                    1050 | #define IDC_ABOUT                       1052 | ||||||
| #define IDC_LOG_SAVE                    1051 | #define IDC_SETTINGS                    1053 | ||||||
| #define IDC_LOG_CLEAR                   1052 | #define IDC_LOG                         1054 | ||||||
|  | #define IDC_LOG_EDIT                    1055 | ||||||
|  | #define IDC_LOG_SAVE                    1056 | ||||||
|  | #define IDC_LOG_CLEAR                   1057 | ||||||
| #define IDC_MORE_INFO                   1060 | #define IDC_MORE_INFO                   1060 | ||||||
| #define IDC_POLICY                      1061 | #define IDC_POLICY                      1061 | ||||||
| #define IDC_UPDATE_FREQUENCY            1062 | #define IDC_UPDATE_FREQUENCY            1062 | ||||||
|  | @ -166,12 +168,14 @@ | ||||||
| #define IDC_LIST_ITEM14                 1109 | #define IDC_LIST_ITEM14                 1109 | ||||||
| #define IDC_LIST_ITEM15                 1110 | #define IDC_LIST_ITEM15                 1110 | ||||||
| #define IDC_LIST_ITEMMAX                1111 | #define IDC_LIST_ITEMMAX                1111 | ||||||
|  | #define IDC_ADVANCED_DRIVE_PROPERTIES   1112 | ||||||
|  | #define IDC_ADVANCED_FORMAT_OPTIONS     1113 | ||||||
| #define IDS_DEVICE_TXT                  2000 | #define IDS_DEVICE_TXT                  2000 | ||||||
| #define IDS_PARTITION_TYPE_TXT          2001 | #define IDS_PARTITION_TYPE_TXT          2001 | ||||||
| #define IDS_FILESYSTEM_TXT              2002 | #define IDS_FILE_SYSTEM_TXT             2002 | ||||||
| #define IDS_CLUSTERSIZE_TXT             2003 | #define IDS_CLUSTER_SIZE_TXT            2003 | ||||||
| #define IDS_LABEL_TXT                   2004 | #define IDS_LABEL_TXT                   2004 | ||||||
| #define IDS_FORMAT_OPTIONS_GRP          2005 | #define IDS_CSM_HELP_TXT                2005 | ||||||
| #define IDS_UPDATE_SETTINGS_GRP         2006 | #define IDS_UPDATE_SETTINGS_GRP         2006 | ||||||
| #define IDS_UPDATE_FREQUENCY_TXT        2007 | #define IDS_UPDATE_FREQUENCY_TXT        2007 | ||||||
| #define IDS_INCLUDE_BETAS_TXT           2008 | #define IDS_INCLUDE_BETAS_TXT           2008 | ||||||
|  | @ -179,6 +183,12 @@ | ||||||
| #define IDS_NEW_VERSION_DOWNLOAD_GRP    2010 | #define IDS_NEW_VERSION_DOWNLOAD_GRP    2010 | ||||||
| #define IDS_NEW_VERSION_NOTES_GRP       2011 | #define IDS_NEW_VERSION_NOTES_GRP       2011 | ||||||
| #define IDS_CHECK_NOW_GRP               2012 | #define IDS_CHECK_NOW_GRP               2012 | ||||||
|  | #define IDS_TARGET_SYSTEM_TXT           2013 | ||||||
|  | #define IDS_IMAGE_OPTION_TXT            2014 | ||||||
|  | #define IDS_BOOT_SELECTION_TXT          2015 | ||||||
|  | #define IDS_DRIVE_PROPERTIES_TXT        2016 | ||||||
|  | #define IDS_FORMAT_OPTIONS_TXT          2017 | ||||||
|  | #define IDS_STATUS_TXT                  2018 | ||||||
| #define MSG_000                         3000 | #define MSG_000                         3000 | ||||||
| #define MSG_001                         3001 | #define MSG_001                         3001 | ||||||
| #define MSG_002                         3002 | #define MSG_002                         3002 | ||||||
|  | @ -480,7 +490,27 @@ | ||||||
| #define MSG_298                         3298 | #define MSG_298                         3298 | ||||||
| #define MSG_299                         3299 | #define MSG_299                         3299 | ||||||
| #define MSG_300                         3300 | #define MSG_300                         3300 | ||||||
| #define MSG_MAX                         3301 | #define MSG_301                         3301 | ||||||
|  | #define MSG_302                         3302 | ||||||
|  | #define MSG_303                         3303 | ||||||
|  | #define MSG_304                         3304 | ||||||
|  | #define MSG_305                         3305 | ||||||
|  | #define MSG_306                         3306 | ||||||
|  | #define MSG_307                         3307 | ||||||
|  | #define MSG_308                         3308 | ||||||
|  | #define MSG_309                         3309 | ||||||
|  | #define MSG_310                         3310 | ||||||
|  | #define MSG_311                         3311 | ||||||
|  | #define MSG_312                         3312 | ||||||
|  | #define MSG_313                         3313 | ||||||
|  | #define MSG_314                         3314 | ||||||
|  | #define MSG_315                         3315 | ||||||
|  | #define MSG_316                         3316 | ||||||
|  | #define MSG_317                         3317 | ||||||
|  | #define MSG_318                         3318 | ||||||
|  | #define MSG_319                         3319 | ||||||
|  | #define MSG_320                         3320 | ||||||
|  | #define MSG_MAX                         3321 | ||||||
| 
 | 
 | ||||||
| // Next default values for new objects
 | // Next default values for new objects
 | ||||||
| // 
 | // 
 | ||||||
|  | @ -489,7 +519,7 @@ | ||||||
| #define _APS_NO_MFC                     1 | #define _APS_NO_MFC                     1 | ||||||
| #define _APS_NEXT_RESOURCE_VALUE        505 | #define _APS_NEXT_RESOURCE_VALUE        505 | ||||||
| #define _APS_NEXT_COMMAND_VALUE         40001 | #define _APS_NEXT_COMMAND_VALUE         40001 | ||||||
| #define _APS_NEXT_CONTROL_VALUE         1079 | #define _APS_NEXT_CONTROL_VALUE         1114 | ||||||
| #define _APS_NEXT_SYMED_VALUE           4000 | #define _APS_NEXT_SYMED_VALUE           4000 | ||||||
| #endif | #endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
							
								
								
									
										2493
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										2493
									
								
								src/rufus.c
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										29
									
								
								src/rufus.h
									
										
									
									
									
								
							
							
						
						
									
										29
									
								
								src/rufus.h
									
										
									
									
									
								
							|  | @ -1,6 +1,6 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * Copyright © 2011-2017 Pete Batard <pete@akeo.ie> |  * Copyright © 2011-2018 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 | ||||||
|  | @ -152,7 +152,8 @@ enum user_message_type { | ||||||
| 	UM_PROGRESS_INIT, | 	UM_PROGRESS_INIT, | ||||||
| 	UM_PROGRESS_EXIT, | 	UM_PROGRESS_EXIT, | ||||||
| 	UM_NO_UPDATE, | 	UM_NO_UPDATE, | ||||||
| 	UM_SET_PARTITION_SCHEME_TOOLTIP, | 	UM_UPDATE_CSM_TOOLTIP, | ||||||
|  | 	UM_RESIZE_BUTTONS, | ||||||
| 	// Start of the WM IDs for the language menu items
 | 	// Start of the WM IDs for the language menu items
 | ||||||
| 	UM_LANGUAGE_MENU = WM_APP + 0x100 | 	UM_LANGUAGE_MENU = WM_APP + 0x100 | ||||||
| }; | }; | ||||||
|  | @ -173,8 +174,7 @@ typedef struct { | ||||||
| 
 | 
 | ||||||
| /* Status Bar sections */ | /* Status Bar sections */ | ||||||
| #define SB_SECTION_LEFT         0 | #define SB_SECTION_LEFT         0 | ||||||
| #define SB_SECTION_MIDDLE       1 | #define SB_SECTION_RIGHT        1 | ||||||
| #define SB_SECTION_RIGHT        2 |  | ||||||
| #define SB_TIMER_SECTION_SIZE   58.0f | #define SB_TIMER_SECTION_SIZE   58.0f | ||||||
| 
 | 
 | ||||||
| /* Timers used throughout the program */ | /* Timers used throughout the program */ | ||||||
|  | @ -218,14 +218,14 @@ enum fs_type { | ||||||
| enum boot_type { | enum boot_type { | ||||||
| 	BT_MSDOS = 0, | 	BT_MSDOS = 0, | ||||||
| 	BT_FREEDOS, | 	BT_FREEDOS, | ||||||
| 	BT_ISO, | 	BT_IMAGE, | ||||||
| 	BT_IMG, |  | ||||||
| 	BT_SYSLINUX_V4,		// Start of indexes that only display in advanced mode
 | 	BT_SYSLINUX_V4,		// Start of indexes that only display in advanced mode
 | ||||||
| 	BT_SYSLINUX_V6, | 	BT_SYSLINUX_V6, | ||||||
| 	BT_REACTOS, | 	BT_REACTOS, | ||||||
| 	BT_GRUB4DOS, | 	BT_GRUB4DOS, | ||||||
| 	BT_GRUB2, | 	BT_GRUB2, | ||||||
| 	BT_UEFI_NTFS, | 	BT_UEFI_NTFS, | ||||||
|  | 	BT_NON_BOOTABLE, | ||||||
| 	BT_MAX | 	BT_MAX | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -236,8 +236,6 @@ enum target_type { | ||||||
| }; | }; | ||||||
| // For the partition types we'll use Microsoft's PARTITION_STYLE_### constants
 | // For the partition types we'll use Microsoft's PARTITION_STYLE_### constants
 | ||||||
| #define PARTITION_STYLE_SFD PARTITION_STYLE_RAW | #define PARTITION_STYLE_SFD PARTITION_STYLE_RAW | ||||||
| #define GETTARGETTYPE(x) (((x)>0)?(((x) >> 16) & 0xFFFF):0) |  | ||||||
| #define GETPARTTYPE(x)   (((x)>0)?((x) & 0xFFFF):0); |  | ||||||
| 
 | 
 | ||||||
| enum checksum_type { | enum checksum_type { | ||||||
| 	CHECKSUM_MD5 = 0, | 	CHECKSUM_MD5 = 0, | ||||||
|  | @ -384,9 +382,9 @@ enum WindowsVersion { | ||||||
|  * Globals |  * Globals | ||||||
|  */ |  */ | ||||||
| extern HINSTANCE hMainInstance; | extern HINSTANCE hMainInstance; | ||||||
| extern HWND hMainDialog, hLogDlg, hStatus, hDeviceList, hCapacity; | extern HWND hMainDialog, hLogDialog, hStatus, hDeviceList, hCapacity; | ||||||
| extern HWND hPartitionScheme, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog; | extern HWND hPartitionScheme, hTargetSystem, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog; | ||||||
| extern HWND hInfo, hProgress, hDiskID, hStatusToolbar; | extern HWND hInfo, hProgress, hDiskID; | ||||||
| extern float fScale; | extern float fScale; | ||||||
| extern char szFolderPath[MAX_PATH], app_dir[MAX_PATH], temp_dir[MAX_PATH], system_dir[MAX_PATH], sysnative_dir[MAX_PATH]; | extern char szFolderPath[MAX_PATH], app_dir[MAX_PATH], temp_dir[MAX_PATH], system_dir[MAX_PATH], sysnative_dir[MAX_PATH]; | ||||||
| extern char* image_path; | extern char* image_path; | ||||||
|  | @ -395,12 +393,13 @@ extern BOOL PromptOnError; | ||||||
| extern unsigned long syslinux_ldlinux_len[2]; | extern unsigned long syslinux_ldlinux_len[2]; | ||||||
| extern const int nb_steps[FS_MAX]; | extern const int nb_steps[FS_MAX]; | ||||||
| extern BOOL use_own_c32[NB_OLD_C32], detect_fakes, iso_op_in_progress, format_op_in_progress, right_to_left_mode; | extern BOOL use_own_c32[NB_OLD_C32], detect_fakes, iso_op_in_progress, format_op_in_progress, right_to_left_mode; | ||||||
| extern BOOL allow_dual_uefi_bios, togo_mode, large_drive, usb_debug; | extern BOOL allow_dual_uefi_bios, display_togo_option, large_drive, usb_debug; | ||||||
| extern RUFUS_IMG_REPORT img_report; | extern RUFUS_IMG_REPORT img_report; | ||||||
| extern int64_t iso_blocking_status; | extern int64_t iso_blocking_status; | ||||||
| extern uint16_t rufus_version[3], embedded_sl_version[2]; | extern uint16_t rufus_version[3], embedded_sl_version[2]; | ||||||
| extern int nWindowsVersion; | extern int nWindowsVersion; | ||||||
| extern int nWindowsBuildNumber; | extern int nWindowsBuildNumber; | ||||||
|  | extern int fs, bt, pt, tt; | ||||||
| extern char WindowsVersionStr[128]; | extern char WindowsVersionStr[128]; | ||||||
| extern size_t ubuffer_pos; | extern size_t ubuffer_pos; | ||||||
| extern char ubuffer[UBUFFER_SIZE]; | extern char ubuffer[UBUFFER_SIZE]; | ||||||
|  | @ -430,7 +429,9 @@ extern HWND MyCreateDialog(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, | ||||||
| extern INT_PTR MyDialogBox(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc); | extern INT_PTR MyDialogBox(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc); | ||||||
| extern void CenterDialog(HWND hDlg); | extern void CenterDialog(HWND hDlg); | ||||||
| extern void ResizeMoveCtrl(HWND hDlg, HWND hCtrl, int dx, int dy, int dw, int dh, float scale); | extern void ResizeMoveCtrl(HWND hDlg, HWND hCtrl, int dx, int dy, int dw, int dh, float scale); | ||||||
|  | extern void ResizeButtonHeight(HWND hDlg, int id); | ||||||
| extern void CreateStatusBar(void); | extern void CreateStatusBar(void); | ||||||
|  | extern void CreateStaticFont(HDC hDC, HFONT* hFont, BOOL underlined); | ||||||
| extern void SetTitleBarIcon(HWND hDlg); | extern void SetTitleBarIcon(HWND hDlg); | ||||||
| extern BOOL CreateTaskbarList(void); | extern BOOL CreateTaskbarList(void); | ||||||
| extern BOOL SetTaskbarProgressState(TASKBAR_PROGRESS_FLAGS tbpFlags); | extern BOOL SetTaskbarProgressState(TASKBAR_PROGRESS_FLAGS tbpFlags); | ||||||
|  | @ -442,7 +443,7 @@ extern void DestroyAllTooltips(void); | ||||||
| extern BOOL Notification(int type, const notification_info* more_info, char* title, char* format, ...); | extern BOOL Notification(int type, const notification_info* more_info, char* title, char* format, ...); | ||||||
| extern int SelectionDialog(char* title, char* message, char** choices, int size); | extern int SelectionDialog(char* title, char* message, char** choices, int size); | ||||||
| extern void ListDialog(char* title, char* message, char** items, int size); | extern void ListDialog(char* title, char* message, char** items, int size); | ||||||
| extern SIZE GetTextSize(HWND hCtrl); | extern SIZE GetTextSize(HWND hCtrl, char* txt); | ||||||
| extern BOOL ExtractDOS(const char* path); | extern BOOL ExtractDOS(const char* path); | ||||||
| extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan); | extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan); | ||||||
| extern int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file, DWORD attributes); | extern int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file, DWORD attributes); | ||||||
|  | @ -512,6 +513,7 @@ extern BYTE SearchProcess(char* HandleName, DWORD dwTimeout, BOOL bPartialMatch, | ||||||
| extern BOOL EnablePrivileges(void); | extern BOOL EnablePrivileges(void); | ||||||
| extern void FlashTaskbar(HANDLE handle); | extern void FlashTaskbar(HANDLE handle); | ||||||
| extern DWORD WaitForSingleObjectWithMessages(HANDLE hHandle, DWORD dwMilliseconds); | extern DWORD WaitForSingleObjectWithMessages(HANDLE hHandle, DWORD dwMilliseconds); | ||||||
|  | #define GetTextWidth(hDlg, id) GetTextSize(GetDlgItem(hDlg, id), NULL).cx | ||||||
| 
 | 
 | ||||||
| DWORD WINAPI FormatThread(void* param); | DWORD WINAPI FormatThread(void* param); | ||||||
| DWORD WINAPI SaveImageThread(void* param); | DWORD WINAPI SaveImageThread(void* param); | ||||||
|  | @ -541,6 +543,7 @@ typedef struct { | ||||||
| } StrArray; | } StrArray; | ||||||
| extern void StrArrayCreate(StrArray* arr, uint32_t initial_size); | extern void StrArrayCreate(StrArray* arr, uint32_t initial_size); | ||||||
| extern int32_t StrArrayAdd(StrArray* arr, const char* str, BOOL ); | extern int32_t StrArrayAdd(StrArray* arr, const char* str, BOOL ); | ||||||
|  | extern int32_t StrArrayFind(StrArray* arr, const char* str); | ||||||
| extern void StrArrayClear(StrArray* arr); | extern void StrArrayClear(StrArray* arr); | ||||||
| extern void StrArrayDestroy(StrArray* arr); | extern void StrArrayDestroy(StrArray* arr); | ||||||
| #define IsStrArrayEmpty(arr) (arr.Index == 0) | #define IsStrArrayEmpty(arr) (arr.Index == 0) | ||||||
|  |  | ||||||
							
								
								
									
										203
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										203
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -30,67 +30,72 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | ||||||
| // Dialog | // Dialog | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| IDD_DIALOG DIALOGEX 12, 12, 242, 376 | 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 2.18.1221" | CAPTION "Rufus 3.0.1222" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     LTEXT           "Device",IDS_DEVICE_TXT,9,6,200,8 |     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP | ||||||
|     COMBOBOX        IDC_DEVICE,8,17,226,33,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     LTEXT           "Device",IDS_DEVICE_TXT,8,21,216,8 | ||||||
|     LTEXT           "Partition scheme and target system type",IDS_PARTITION_TYPE_TXT,9,35,222,8 |     COMBOBOX        IDC_DEVICE,8,30,196,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     COMBOBOX        IDC_PARTITION_TYPE,8,46,226,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     PUSHBUTTON      "...",IDC_SAVE,210,30,14,12,BS_ICON | ||||||
|     LTEXT           "File system",IDS_FILESYSTEM_TXT,9,64,222,10 |     LTEXT           "Boot selection",IDS_BOOT_SELECTION_TXT,8,43,216,8 | ||||||
|     COMBOBOX        IDC_FILESYSTEM,8,75,226,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     COMBOBOX        IDC_BOOT_SELECTION,8,52,148,10,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP | ||||||
|     LTEXT           "Cluster size",IDS_CLUSTERSIZE_TXT,9,93,222,10 |     PUSHBUTTON      "#",IDC_HASH,162,52,10,10,BS_ICON | ||||||
|     COMBOBOX        IDC_CLUSTERSIZE,8,104,226,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     PUSHBUTTON      "SELECT",IDC_SELECT,180,52,45,10 | ||||||
|     LTEXT           "New volume label",IDS_LABEL_TXT,9,121,222,10 |     LTEXT           "Image option",IDS_IMAGE_OPTION_TXT,8,65,216,8 | ||||||
|     EDITTEXT        IDC_LABEL,8,131,226,12,ES_AUTOHSCROLL |     COMBOBOX        IDC_IMAGE_OPTION,8,74,216,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     GROUPBOX        "Format Options",IDS_FORMAT_OPTIONS_GRP,7,149,227,89 |     LTEXT           "Partition scheme",IDS_PARTITION_TYPE_TXT,8,87,96,8 | ||||||
|     PUSHBUTTON      "",IDC_ADVANCED,220,148,14,10,BS_ICON |     COMBOBOX        IDC_PARTITION_TYPE,8,96,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     CONTROL         "Check device for bad blocks",IDC_BADBLOCKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,161,112,10 |     LTEXT           "Target system",IDS_TARGET_SYSTEM_TXT,128,87,96,8 | ||||||
|     COMBOBOX        IDC_NBPASSES,128,159,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     COMBOBOX        IDC_TARGET_SYSTEM,128,96,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     CONTROL         "Quick format",IDC_QUICKFORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,173,121,10 |     LTEXT           "?",IDS_CSM_HELP_TXT,226,97,8,15,SS_NOTIFY | NOT WS_VISIBLE | ||||||
|     CONTROL         "Create a bootable disk using",IDC_BOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,185,112,10 |     CONTROL         "Show advanced drive properties",IDC_ADVANCED_DRIVE_PROPERTIES, | ||||||
|     COMBOBOX        IDC_BOOTTYPE,128,184,75,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |                     "Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,8,109,216,10 | ||||||
|     PUSHBUTTON      "...",IDC_SELECT_ISO,207,183,21,14,BS_ICON |     CONTROL         "List USB Hard Drives",IDC_LIST_USB_HDD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,119,216,10 | ||||||
|     CONTROL         "Standard Windows installation",IDC_WINDOWS_INSTALL, |     CONTROL         "Add fixes for old BIOSes (extra partition, align, etc.)",IDC_OLD_BIOS_FIXES, | ||||||
|                     "Button",BS_AUTORADIOBUTTON | WS_GROUP,23,198,205,8 |                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,129,216,10 | ||||||
|     CONTROL         "Windows To Go",IDC_WINDOWS_TO_GO,"Button",BS_AUTORADIOBUTTON,23,210,205,8 |     CONTROL         "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,139,110,10 | ||||||
|     CONTROL         "Create extended label and icon files",IDC_SET_ICON, |     COMBOBOX        IDC_DISK_ID,128,139,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,221,216,10 |     LTEXT           "Format Options",IDS_FORMAT_OPTIONS_TXT,8,152,57,12,NOT WS_GROUP | ||||||
|     GROUPBOX        "Advanced Options",IDS_ADVANCED_OPTIONS_GRP,7,233,227,55 |     LTEXT           "Volume label",IDS_LABEL_TXT,8,167,216,8 | ||||||
|     CONTROL         "List USB Hard Drives",IDC_ENABLE_FIXED_DISKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,246,216,10 |     EDITTEXT        IDC_LABEL,8,176,216,12,ES_AUTOHSCROLL | ||||||
|     CONTROL         "Add fixes for old BIOSes (extra partition, align, etc.)",IDC_EXTRA_PARTITION, |     LTEXT           "File system",IDS_FILE_SYSTEM_TXT,8,189,96,8 | ||||||
|                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,258,216,10 |     COMBOBOX        IDC_FILE_SYSTEM,8,198,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     CONTROL         "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,271,112,10 |     LTEXT           "Cluster size",IDS_CLUSTER_SIZE_TXT,128,189,96,8 | ||||||
|     COMBOBOX        IDC_DISK_ID,128,269,100,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     COMBOBOX        IDC_CLUSTER_SIZE,128,198,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     CONTROL         "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,298,225,9 |     CONTROL         "Show advanced format options",IDC_ADVANCED_FORMAT_OPTIONS, | ||||||
|     EDITTEXT        IDC_INFO,8,316,225,12,ES_CENTER | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE |                     "Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,8,211,216,10 | ||||||
|     PUSHBUTTON      "About...",IDC_ABOUT,8,339,50,14 |     CONTROL         "Quick format",IDC_QUICK_FORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,221,216,10 | ||||||
|     PUSHBUTTON      "Log",IDC_LOG,63,339,21,14 |     CONTROL         "Create extended label and icon files",IDC_EXTENDED_LABEL, | ||||||
|     PUSHBUTTON      "T",IDC_TEST,90,339,12,14,NOT WS_VISIBLE |                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,231,216,10 | ||||||
|     DEFPUSHBUTTON   "Start",IDC_START,127,339,50,14 |     CONTROL         "Check device for bad blocks",IDC_BAD_BLOCKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,241,112,10 | ||||||
|     PUSHBUTTON      "Close",IDCANCEL,183,339,50,14 |     COMBOBOX        IDC_NB_PASSES,128,241,96,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|  |     LTEXT           "Status",IDS_STATUS_TXT,8,254,23,9,NOT WS_GROUP | ||||||
|  |     CONTROL         "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,273,216,9 | ||||||
|  |     PUSHBUTTON      "Multi Toolbar",IDC_ABOUT,8,294,74,10,NOT WS_VISIBLE | ||||||
|  |     PUSHBUTTON      "T",IDC_TEST,90,294,12,10,NOT WS_VISIBLE | ||||||
|  |     DEFPUSHBUTTON   "START",IDC_START,124,294,45,10 | ||||||
|  |     PUSHBUTTON      "CLOSE",IDCANCEL,178,294,45,10 | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| IDD_ABOUTBOX DIALOGEX 0, 0, 319, 237 | IDD_ABOUTBOX DIALOGEX 0, 0, 319, 237 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| CAPTION "About Rufus" | CAPTION "About Rufus" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     ICON            IDI_ICON,IDC_ABOUT_ICON,11,8,20,20 |     ICON            IDI_ICON,IDC_ABOUT_ICON,11,8,20,20 | ||||||
|     CONTROL         "",IDC_ABOUT_BLURB,"RichEdit20W",ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY,45,7,268,107 |     CONTROL         "",IDC_ABOUT_BLURB,"RichEdit20W",0x884,45,7,268,107 | ||||||
|     CONTROL         "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_TABSTOP,46,115,267,91,WS_EX_STATICEDGE |     CONTROL         "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",WS_VSCROLL | WS_TABSTOP | 0x804,46,115,267,91,WS_EX_STATICEDGE | ||||||
|     PUSHBUTTON      "License",IDC_ABOUT_LICENSE,46,215,50,14,WS_GROUP |     PUSHBUTTON      "License",IDC_ABOUT_LICENSE,46,216,50,12,WS_GROUP | ||||||
|     PUSHBUTTON      "Updates",IDC_ABOUT_UPDATES,100,215,50,14,NOT WS_VISIBLE | WS_GROUP |     DEFPUSHBUTTON   "OK",IDOK,253,216,50,12,WS_GROUP | ||||||
|     DEFPUSHBUTTON   "OK",IDOK,251,215,50,14,WS_GROUP |  | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| IDD_CHECKSUM DIALOGEX 0, 0, 301, 70 | IDD_CHECKSUM DIALOGEX 0, 0, 301, 70 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| CAPTION "Checksums" | CAPTION "Checksums" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     LTEXT           "MD5:",IDC_STATIC,9,10,18,8 |     LTEXT           "MD5:",IDC_STATIC,9,10,18,8 | ||||||
|     EDITTEXT        IDC_MD5,40,9,197,12,ES_LOWERCASE | ES_AUTOHSCROLL | ES_READONLY |     EDITTEXT        IDC_MD5,40,9,197,12,ES_LOWERCASE | ES_AUTOHSCROLL | ES_READONLY | ||||||
|  | @ -98,33 +103,33 @@ BEGIN | ||||||
|     EDITTEXT        IDC_SHA1,40,25,197,12,ES_LOWERCASE | ES_AUTOHSCROLL | ES_READONLY |     EDITTEXT        IDC_SHA1,40,25,197,12,ES_LOWERCASE | ES_AUTOHSCROLL | ES_READONLY | ||||||
|     LTEXT           "SHA256:",IDC_STATIC,9,42,27,8 |     LTEXT           "SHA256:",IDC_STATIC,9,42,27,8 | ||||||
|     EDITTEXT        IDC_SHA256,40,41,197,22,ES_MULTILINE | ES_LOWERCASE | ES_READONLY |     EDITTEXT        IDC_SHA256,40,41,197,22,ES_MULTILINE | ES_LOWERCASE | ES_READONLY | ||||||
|     DEFPUSHBUTTON   "OK",IDOK,243,49,50,14,WS_GROUP |     DEFPUSHBUTTON   "OK",IDOK,243,49,50,12,WS_GROUP | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| IDD_LICENSE DIALOGEX 0, 0, 335, 205 | IDD_LICENSE DIALOGEX 0, 0, 335, 213 | ||||||
| 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" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     DEFPUSHBUTTON   "Close",IDCANCEL,278,187,50,14 |     DEFPUSHBUTTON   "Close",IDCANCEL,278,192,50,12 | ||||||
|     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, 376 | IDD_LOG DIALOGEX 0, 0, 366, 326 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| CAPTION "Log" | CAPTION "Log" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     EDITTEXT        IDC_LOG_EDIT,0,0,366,346,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_CLIENTEDGE |     EDITTEXT        IDC_LOG_EDIT,0,0,366,296,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_CLIENTEDGE | ||||||
|     PUSHBUTTON      "Clear Log",IDC_LOG_CLEAR,198,354,50,14 |     PUSHBUTTON      "Clear",IDC_LOG_CLEAR,192,305,50,12 | ||||||
|     PUSHBUTTON      "Save Log",IDC_LOG_SAVE,253,354,50,14 |     PUSHBUTTON      "Save",IDC_LOG_SAVE,249,305,50,12 | ||||||
|     DEFPUSHBUTTON   "Close Log",IDCANCEL,308,354,50,14 |     DEFPUSHBUTTON   "Close",IDCANCEL,306,305,50,12 | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| IDD_NOTIFICATION DIALOGEX 0, 0, 263, 63 | IDD_NOTIFICATION DIALOGEX 0, 0, 263, 63 | ||||||
| STYLE DS_SETFONT | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME | STYLE DS_SETFONT | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME | ||||||
| CAPTION "Rufus" | CAPTION "Rufus" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     LTEXT           "",IDC_NOTIFICATION_LINE,0,0,263,39 |     LTEXT           "",IDC_NOTIFICATION_LINE,0,0,263,39 | ||||||
|     LTEXT           "",IDC_STATIC,0,0,263,38 |     LTEXT           "",IDC_STATIC,0,0,263,38 | ||||||
|  | @ -132,20 +137,20 @@ BEGIN | ||||||
|     LTEXT           "Message",IDC_NOTIFICATION_TEXT,35,10,219,20 |     LTEXT           "Message",IDC_NOTIFICATION_TEXT,35,10,219,20 | ||||||
|     DEFPUSHBUTTON   "No",IDNO,206,44,50,14 |     DEFPUSHBUTTON   "No",IDNO,206,44,50,14 | ||||||
|     PUSHBUTTON      "More information",IDC_MORE_INFO,8,44,76,14,NOT WS_VISIBLE |     PUSHBUTTON      "More information",IDC_MORE_INFO,8,44,76,14,NOT WS_VISIBLE | ||||||
|     PUSHBUTTON      "Yes",IDYES,154,44,50,14,NOT WS_VISIBLE |     PUSHBUTTON      "Yes",IDYES,149,44,50,14,NOT WS_VISIBLE | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| IDD_SELECTION DIALOGEX 0, 0, 312, 71 | IDD_SELECTION DIALOGEX 0, 0, 312, 71 | ||||||
| STYLE DS_SETFONT | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME | STYLE DS_SETFONT | DS_FIXEDSYS | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME | ||||||
| CAPTION "Rufus" | CAPTION "Rufus" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     LTEXT           "",IDC_SELECTION_LINE,0,0,312,47 |     LTEXT           "",IDC_SELECTION_LINE,0,0,312,47 | ||||||
|     LTEXT           "",IDC_STATIC,0,0,312,46 |     LTEXT           "",IDC_STATIC,0,0,312,46 | ||||||
|     ICON            IDI_ICON,IDC_SELECTION_ICON,6,6,20,20,0,WS_EX_TRANSPARENT |     ICON            IDI_ICON,IDC_SELECTION_ICON,6,6,20,20,0,WS_EX_TRANSPARENT | ||||||
|     LTEXT           "Message",IDC_SELECTION_TEXT,35,5,269,8 |     LTEXT           "Message",IDC_SELECTION_TEXT,35,5,269,8 | ||||||
|     DEFPUSHBUTTON   "OK",IDOK,196,52,50,14 |     DEFPUSHBUTTON   "OK",IDOK,196,53,50,12 | ||||||
|     PUSHBUTTON      "Cancel",IDCANCEL,254,52,50,14 |     PUSHBUTTON      "Cancel",IDCANCEL,254,53,50,12 | ||||||
|     CONTROL         "Choice 1",IDC_SELECTION_CHOICE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,35,18,269,10,WS_EX_TRANSPARENT |     CONTROL         "Choice 1",IDC_SELECTION_CHOICE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,35,18,269,10,WS_EX_TRANSPARENT | ||||||
|     CONTROL         "Choice 2",IDC_SELECTION_CHOICE2,"Button",BS_AUTORADIOBUTTON,35,31,269,10,WS_EX_TRANSPARENT |     CONTROL         "Choice 2",IDC_SELECTION_CHOICE2,"Button",BS_AUTORADIOBUTTON,35,31,269,10,WS_EX_TRANSPARENT | ||||||
|     CONTROL         "Choice 3",IDC_SELECTION_CHOICE3,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,35,44,269,10,WS_EX_TRANSPARENT |     CONTROL         "Choice 3",IDC_SELECTION_CHOICE3,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,35,44,269,10,WS_EX_TRANSPARENT | ||||||
|  | @ -165,66 +170,66 @@ BEGIN | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| IDD_LIST DIALOGEX 0, 0, 312, 59 | IDD_LIST DIALOGEX 0, 0, 312, 59 | ||||||
| STYLE DS_SETFONT | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME | STYLE DS_SETFONT | DS_FIXEDSYS | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME | ||||||
| CAPTION "Rufus" | CAPTION "Rufus" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     LTEXT           "",IDC_LIST_LINE,0,0,312,32 |     LTEXT           "",IDC_LIST_LINE,0,0,312,32 | ||||||
|     LTEXT           "",IDC_STATIC,0,0,312,31 |     LTEXT           "",IDC_STATIC,0,0,312,31 | ||||||
|     ICON            IDI_ICON,IDC_LIST_ICON,6,6,20,20,0,WS_EX_TRANSPARENT |     ICON            IDI_ICON,IDC_LIST_ICON,6,6,20,20,0,WS_EX_TRANSPARENT | ||||||
|     LTEXT           "Message",IDC_LIST_TEXT,35,5,269,8 |     LTEXT           "Message",IDC_LIST_TEXT,35,5,269,8 | ||||||
|     PUSHBUTTON      "OK",IDOK,254,39,50,14 |     PUSHBUTTON      "OK",IDOK,254,40,50,12 | ||||||
|     LTEXT           "List 1",IDC_LIST_ITEM1,35,17,269,10,SS_PATHELLIPSIS |     LTEXT           "List 1",IDC_LIST_ITEM1,35,17,269,10,SS_PATHELLIPSIS | ||||||
|     LTEXT           "List 2",IDC_LIST_ITEM2,35,28,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 2",IDC_LIST_ITEM2,35,28,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 3",IDC_LIST_ITEM3,35,39,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 3",IDC_LIST_ITEM3,35,39,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 4",IDC_LIST_ITEM4,35,50,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 4",IDC_LIST_ITEM4,35,50,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 5",IDC_LIST_ITEM5,35,61,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 5",IDC_LIST_ITEM5,35,61,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 6",IDC_LIST_ITEM6,35,72,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 6",IDC_LIST_ITEM6,35,72,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 7",IDC_LIST_ITEM7,35,73,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 7",IDC_LIST_ITEM7,35,73,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 8",IDC_LIST_ITEM8,35,84,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 8",IDC_LIST_ITEM8,35,84,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 9",IDC_LIST_ITEM9,35,95,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 9",IDC_LIST_ITEM9,35,95,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 10",IDC_LIST_ITEM10,35,106,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 10",IDC_LIST_ITEM10,35,106,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 11",IDC_LIST_ITEM11,35,117,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 11",IDC_LIST_ITEM11,35,117,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 12",IDC_LIST_ITEM12,35,128,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 12",IDC_LIST_ITEM12,35,128,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 13",IDC_LIST_ITEM13,35,139,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 13",IDC_LIST_ITEM13,35,139,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 14",IDC_LIST_ITEM14,35,150,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 14",IDC_LIST_ITEM14,35,150,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 15",IDC_LIST_ITEM15,35,161,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 15",IDC_LIST_ITEM15,35,161,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
|     LTEXT           "List 16",IDC_LIST_ITEMMAX,35,172,269,10,NOT WS_VISIBLE|SS_PATHELLIPSIS |     LTEXT           "List 16",IDC_LIST_ITEMMAX,35,172,269,10,SS_PATHELLIPSIS | NOT WS_VISIBLE | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| IDD_UPDATE_POLICY DIALOGEX 0, 0, 287, 198 | IDD_UPDATE_POLICY DIALOGEX 0, 0, 287, 198 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| CAPTION "Update policy and settings" | CAPTION "Update policy and settings" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     ICON            IDI_ICON,IDC_ABOUT_ICON,11,8,20,20 |     ICON            IDI_ICON,IDC_ABOUT_ICON,11,8,20,20 | ||||||
|     DEFPUSHBUTTON   "Close",IDCANCEL,221,172,50,14,WS_GROUP |     CONTROL         "",IDC_POLICY,"RichEdit20W",WS_VSCROLL | WS_TABSTOP | 0x804,46,8,235,132,WS_EX_STATICEDGE | ||||||
|     CONTROL         "",IDC_POLICY,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_TABSTOP,46,8,235,132,WS_EX_STATICEDGE |  | ||||||
|     GROUPBOX        "Settings",IDS_UPDATE_SETTINGS_GRP,45,145,165,46 |     GROUPBOX        "Settings",IDS_UPDATE_SETTINGS_GRP,45,145,165,46 | ||||||
|     LTEXT           "Check for updates",IDS_UPDATE_FREQUENCY_TXT,51,159,76,11 |     LTEXT           "Check for updates",IDS_UPDATE_FREQUENCY_TXT,51,158,80,10 | ||||||
|     COMBOBOX        IDC_UPDATE_FREQUENCY,133,155,66,12,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     COMBOBOX        IDC_UPDATE_FREQUENCY,133,158,66,12,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     LTEXT           "Include beta versions",IDS_INCLUDE_BETAS_TXT,51,174,76,11 |     LTEXT           "Include beta versions",IDS_INCLUDE_BETAS_TXT,51,173,80,10 | ||||||
|     COMBOBOX        IDC_INCLUDE_BETAS,133,172,36,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |     COMBOBOX        IDC_INCLUDE_BETAS,133,173,66,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | ||||||
|     GROUPBOX        "",IDS_CHECK_NOW_GRP,210,145,71,46 |     GROUPBOX        "",IDS_CHECK_NOW_GRP,210,145,71,46 | ||||||
|     PUSHBUTTON      "Check Now",IDC_CHECK_NOW,221,154,50,15 |     PUSHBUTTON      "Check Now",IDC_CHECK_NOW,221,158,50,11 | ||||||
|  |     DEFPUSHBUTTON   "Close",IDCANCEL,221,173,50,11,WS_GROUP | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| IDD_NEW_VERSION DIALOGEX 0, 0, 384, 268 | IDD_NEW_VERSION DIALOGEX 0, 0, 384, 268 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| CAPTION "Check For Updates - Rufus" | CAPTION "Check For Updates - Rufus" | ||||||
| FONT 8, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     PUSHBUTTON      "Close",IDCANCEL,167,244,50,14,WS_GROUP |     PUSHBUTTON      "Close",IDCANCEL,167,245,50,12,WS_GROUP | ||||||
|     CONTROL         "",IDC_RELEASE_NOTES,"RichEdit20W",WS_VSCROLL | 0x804,15,77,352,88,WS_EX_STATICEDGE |     CONTROL         "",IDC_RELEASE_NOTES,"RichEdit20W",WS_VSCROLL | 0x804,15,77,352,88,WS_EX_STATICEDGE | ||||||
|     DEFPUSHBUTTON   "Download",IDC_DOWNLOAD,293,211,74,14,WS_GROUP |  | ||||||
|     CONTROL         "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,15,212,270,11 |  | ||||||
|     GROUPBOX        "Release Notes",IDS_NEW_VERSION_NOTES_GRP,8,63,367,111 |     GROUPBOX        "Release Notes",IDS_NEW_VERSION_NOTES_GRP,8,63,367,111 | ||||||
|     LTEXT           "A newer version is available. Please download the latest version!",IDS_NEW_VERSION_AVAIL_TXT,10,32,366,8 |     LTEXT           "A newer version is available. Please download the latest version!",IDS_NEW_VERSION_AVAIL_TXT,10,32,366,8 | ||||||
|     LTEXT           "[...]",IDC_YOUR_VERSION,10,8,366,8 |     LTEXT           "[...]",IDC_YOUR_VERSION,10,8,366,8 | ||||||
|     LTEXT           "[...]",IDC_LATEST_VERSION,10,19,366,8 |     LTEXT           "[...]",IDC_LATEST_VERSION,10,19,366,8 | ||||||
|     CTEXT           "Click here to go to the website",IDC_WEBSITE,10,49,366,9,SS_NOTIFY |     CTEXT           "Click here to go to the website",IDC_WEBSITE,10,49,366,9,SS_NOTIFY | ||||||
|     GROUPBOX        "Download",IDS_NEW_VERSION_DOWNLOAD_GRP,8,177,367,58 |     GROUPBOX        "Download",IDS_NEW_VERSION_DOWNLOAD_GRP,8,177,367,58 | ||||||
|     EDITTEXT        IDC_DOWNLOAD_URL,15,191,351,13,ES_AUTOHSCROLL | ES_READONLY |     EDITTEXT        IDC_DOWNLOAD_URL,15,191,351,11,ES_AUTOHSCROLL | ES_READONLY | ||||||
|  |     CONTROL         "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,15,212,270,11 | ||||||
|  |     DEFPUSHBUTTON   "Download",IDC_DOWNLOAD,293,212,74,11,WS_GROUP | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -366,8 +371,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 2,18,1221,0 |  FILEVERSION 2,18,1222,0 | ||||||
|  PRODUCTVERSION 2,18,1221,0 |  PRODUCTVERSION 2,18,1222,0 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -384,13 +389,13 @@ BEGIN | ||||||
|         BEGIN |         BEGIN | ||||||
|             VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" |             VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "2.18.1221" |             VALUE "FileVersion", "2.18.1222" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "© 2011-2017 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)" | ||||||
|             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" |             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" | ||||||
|             VALUE "OriginalFilename", "rufus.exe" |             VALUE "OriginalFilename", "rufus.exe" | ||||||
|             VALUE "ProductName", "Rufus" |             VALUE "ProductName", "Rufus" | ||||||
|             VALUE "ProductVersion", "2.18.1221" |             VALUE "ProductVersion", "2.18.1222" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * Settings access, through either registry or INI file |  * Settings access, through either registry or INI file | ||||||
|  * Copyright © 2015-2016 Pete Batard <pete@akeo.ie> |  * Copyright © 2015-2016 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 | ||||||
|  | @ -36,6 +36,8 @@ extern char* ini_file; | ||||||
| #define SETTING_DISABLE_LGP                 "DisableLGP" | #define SETTING_DISABLE_LGP                 "DisableLGP" | ||||||
| 
 | 
 | ||||||
| #define SETTING_ADVANCED_MODE               "AdvancedMode" | #define SETTING_ADVANCED_MODE               "AdvancedMode" | ||||||
|  | #define SETTING_ADVANCED_MODE_DEVICE        "ShowAdvancedDriveProperties" | ||||||
|  | #define SETTING_ADVANCED_MODE_FORMAT        "ShowAdvancedFormatOptions" | ||||||
| #define SETTING_PRESERVE_TIMESTAMPS         "PreserveTimestamps" | #define SETTING_PRESERVE_TIMESTAMPS         "PreserveTimestamps" | ||||||
| #define SETTING_USE_PROPER_SIZE_UNITS       "UseProperSizeUnits" | #define SETTING_USE_PROPER_SIZE_UNITS       "UseProperSizeUnits" | ||||||
| #define SETTING_ENABLE_USB_DEBUG            "EnableUsbDebug" | #define SETTING_ENABLE_USB_DEBUG            "EnableUsbDebug" | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								src/smart.c
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/smart.c
									
										
									
									
									
								
							|  | @ -312,7 +312,7 @@ static int UsbCypressAtaPassthrough(HANDLE hPhysical, ATA_PASSTHROUGH_CMD* Comma | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* The various bridges we will try, in order */ | /* The various bridges we will try, in order */ | ||||||
| AtaPassThroughType pt[] = { | AtaPassThroughType ata_pt[] = { | ||||||
| 	{ SatAtaPassthrough, "SAT" }, | 	{ SatAtaPassthrough, "SAT" }, | ||||||
| 	{ UsbJmicronAtaPassthrough, "JMicron" }, | 	{ UsbJmicronAtaPassthrough, "JMicron" }, | ||||||
| 	{ UsbProlificAtaPassthrough, "Prolific" }, | 	{ UsbProlificAtaPassthrough, "Prolific" }, | ||||||
|  | @ -335,10 +335,10 @@ BOOL Identify(HANDLE hPhysical) | ||||||
| 	if (idd == NULL) | 	if (idd == NULL) | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 
 | 
 | ||||||
| 	for (i=0; i<ARRAYSIZE(pt); i++) { | 	for (i=0; i<ARRAYSIZE(ata_pt); i++) { | ||||||
| 		r = pt[i].fn(hPhysical, &Command, idd, sizeof(IDENTIFY_DEVICE_DATA), SPT_TIMEOUT_VALUE); | 		r = ata_pt[i].fn(hPhysical, &Command, idd, sizeof(IDENTIFY_DEVICE_DATA), SPT_TIMEOUT_VALUE); | ||||||
| 		if (r == SPT_SUCCESS) { | 		if (r == SPT_SUCCESS) { | ||||||
| 			uprintf("Success using %s\n", pt[i].type); | 			uprintf("Success using %s\n", ata_pt[i].type); | ||||||
| 			if (idd->CommandSetSupport.SmartCommands) { | 			if (idd->CommandSetSupport.SmartCommands) { | ||||||
| 				DumpBufferHex(idd, sizeof(IDENTIFY_DEVICE_DATA)); | 				DumpBufferHex(idd, sizeof(IDENTIFY_DEVICE_DATA)); | ||||||
| 				uprintf("SMART support detected!\n"); | 				uprintf("SMART support detected!\n"); | ||||||
|  | @ -347,9 +347,9 @@ BOOL Identify(HANDLE hPhysical) | ||||||
| 			} | 			} | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 		uprintf("No joy with: %s (%s)\n", pt[i].type, SptStrerr(r)); | 		uprintf("No joy with: %s (%s)\n", ata_pt[i].type, SptStrerr(r)); | ||||||
| 	} | 	} | ||||||
| 	if (i >= ARRAYSIZE(pt)) | 	if (i >= ARRAYSIZE(ata_pt)) | ||||||
| 		uprintf("NO ATA FOR YOU!\n"); | 		uprintf("NO ATA FOR YOU!\n"); | ||||||
| 
 | 
 | ||||||
| 	_mm_free(idd); | 	_mm_free(idd); | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								src/stdfn.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/stdfn.c
									
										
									
									
									
								
							|  | @ -370,9 +370,21 @@ int32_t StrArrayAdd(StrArray* arr, const char* str, BOOL duplicate) | ||||||
| 	return arr->Index++; | 	return arr->Index++; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | int32_t StrArrayFind(StrArray* arr, const char* str) | ||||||
|  | { | ||||||
|  | 	uint32_t i; | ||||||
|  | 	if ((str == NULL) || (arr == NULL) || (arr->String == NULL)) | ||||||
|  | 		return -1; | ||||||
|  | 	for (i = 0; i<arr->Index; i++) { | ||||||
|  | 		if (strcmp(arr->String[i], str) == 0) | ||||||
|  | 			return (int32_t)i; | ||||||
|  | 	} | ||||||
|  | 	return -1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void StrArrayClear(StrArray* arr) | void StrArrayClear(StrArray* arr) | ||||||
| { | { | ||||||
| 	size_t i; | 	uint32_t i; | ||||||
| 	if ((arr == NULL) || (arr->String == NULL)) | 	if ((arr == NULL) || (arr->String == NULL)) | ||||||
| 		return; | 		return; | ||||||
| 	for (i=0; i<arr->Index; i++) { | 	for (i=0; i<arr->Index; i++) { | ||||||
|  | @ -628,19 +640,23 @@ static BOOL CALLBACK EnumFontFamExProc(const LOGFONTA *lpelfe, | ||||||
| 	return TRUE; | 	return TRUE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOL IsFontAvailable(const char* font_name) { | BOOL IsFontAvailable(const char* font_name) | ||||||
|  | { | ||||||
|  | 	BOOL r; | ||||||
| 	LOGFONTA lf = { 0 }; | 	LOGFONTA lf = { 0 }; | ||||||
| 	HDC hDC = GetDC(hMainDialog); | 	HDC hDC = GetDC(hMainDialog); | ||||||
| 
 | 
 | ||||||
| 	if (font_name == NULL) { | 	if (font_name == NULL) { | ||||||
| 		ReleaseDC(hMainDialog, hDC); | 		safe_release_dc(hMainDialog, hDC); | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	lf.lfCharSet = DEFAULT_CHARSET; | 	lf.lfCharSet = DEFAULT_CHARSET; | ||||||
| 	safe_strcpy(lf.lfFaceName, LF_FACESIZE, font_name); | 	safe_strcpy(lf.lfFaceName, LF_FACESIZE, font_name); | ||||||
| 
 | 
 | ||||||
| 	return EnumFontFamiliesExA(hDC, &lf, EnumFontFamExProc, 0, 0); | 	r = EnumFontFamiliesExA(hDC, &lf, EnumFontFamExProc, 0, 0); | ||||||
|  | 	safe_release_dc(hMainDialog, hDC); | ||||||
|  | 	return r; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
							
								
								
									
										311
									
								
								src/stdlg.c
									
										
									
									
									
								
							
							
						
						
									
										311
									
								
								src/stdlg.c
									
										
									
									
									
								
							|  | @ -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-2017 Pete Batard <pete@akeo.ie> |  * Copyright © 2011-2018 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 | ||||||
|  | @ -54,12 +54,24 @@ static WNDPROC pOrgBrowseWndproc; | ||||||
| static const SETTEXTEX friggin_microsoft_unicode_amateurs = {ST_DEFAULT, CP_UTF8}; | static const SETTEXTEX friggin_microsoft_unicode_amateurs = {ST_DEFAULT, CP_UTF8}; | ||||||
| static BOOL notification_is_question; | static BOOL notification_is_question; | ||||||
| static const notification_info* notification_more_info; | static const notification_info* notification_more_info; | ||||||
| static BOOL settings_commcheck = FALSE; |  | ||||||
| static WNDPROC update_original_proc = NULL; | static WNDPROC update_original_proc = NULL; | ||||||
| static HWINEVENTHOOK fp_weh = NULL; | static HWINEVENTHOOK fp_weh = NULL; | ||||||
| static char *fp_title_str = "Microsoft Windows", *fp_button_str = "Format disk"; | static char *fp_title_str = "Microsoft Windows", *fp_button_str = "Format disk"; | ||||||
| 
 | 
 | ||||||
| extern loc_cmd* selected_locale; | extern loc_cmd* selected_locale; | ||||||
|  | extern int cbw, ddw, ddbh, bh; | ||||||
|  | 
 | ||||||
|  | static int update_settings_reposition_ids[] = { | ||||||
|  | 	IDC_POLICY, | ||||||
|  | 	IDS_UPDATE_SETTINGS_GRP, | ||||||
|  | 	IDS_UPDATE_FREQUENCY_TXT, | ||||||
|  | 	IDS_INCLUDE_BETAS_TXT, | ||||||
|  | 	IDC_UPDATE_FREQUENCY, | ||||||
|  | 	IDC_INCLUDE_BETAS, | ||||||
|  | 	IDS_CHECK_NOW_GRP, | ||||||
|  | 	IDC_CHECK_NOW, | ||||||
|  | 	IDCANCEL, | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * https://blogs.msdn.microsoft.com/oldnewthing/20040802-00/?p=38283/
 |  * https://blogs.msdn.microsoft.com/oldnewthing/20040802-00/?p=38283/
 | ||||||
|  | @ -390,95 +402,26 @@ fallback: | ||||||
|  */ |  */ | ||||||
| void CreateStatusBar(void) | void CreateStatusBar(void) | ||||||
| { | { | ||||||
| 	SIZE sz = {0, 0}; |  | ||||||
| 	RECT rect; | 	RECT rect; | ||||||
| 	LONG x, y, width, height; | 	int edge[2]; | ||||||
| 	int edge[3]; |  | ||||||
| 	TBBUTTON tbbStatusToolbarButtons[1]; |  | ||||||
| 	TBBUTTONINFO tbi; |  | ||||||
| 	HFONT hFont; | 	HFONT hFont; | ||||||
| 	HDC hDC; |  | ||||||
| 
 | 
 | ||||||
| 	// Create the status bar (WS_CLIPSIBLINGS since we have an overlapping button)
 | 	// Create the status bar
 | ||||||
| 	hStatus = CreateWindowExW(0, STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_TOOLTIPS | WS_CLIPSIBLINGS, | 	hStatus = CreateWindowExW(0, STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_TOOLTIPS, | ||||||
| 		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hMainDialog, | 		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hMainDialog, | ||||||
| 		(HMENU)IDC_STATUS, hMainInstance, NULL); | 		(HMENU)IDC_STATUS, hMainInstance, NULL); | ||||||
| 
 | 
 | ||||||
| 	// Keep track of the status bar height
 | 	// Create 2 status areas
 | ||||||
| 	GetClientRect(hStatus, &rect); |  | ||||||
| 	height = rect.bottom; |  | ||||||
| 
 |  | ||||||
| 	// Set the font we'll use to display the '#' sign in the toolbar button
 |  | ||||||
| 	hFont = CreateFontA(-MulDiv(10, GetDeviceCaps(GetDC(hMainDialog), LOGPIXELSY), 72), |  | ||||||
| 		0, 0, 0, FW_MEDIUM, FALSE, FALSE, FALSE, DEFAULT_CHARSET, |  | ||||||
| 		0, 0, PROOF_QUALITY, 0, "Segoe UI"); |  | ||||||
| 
 |  | ||||||
| 	// Find the width of our hash sign
 |  | ||||||
| 	hDC = GetDC(hMainDialog); |  | ||||||
| 	SelectObject(hDC, hFont); |  | ||||||
| 	GetTextExtentPoint32W(hDC, L"#", 1, &sz); |  | ||||||
| 	if (hDC != NULL) |  | ||||||
| 		ReleaseDC(hMainDialog, hDC); |  | ||||||
| 
 |  | ||||||
| 	// Create 3 status areas
 |  | ||||||
| 	GetClientRect(hMainDialog, &rect); | 	GetClientRect(hMainDialog, &rect); | ||||||
| 	edge[1] = rect.right - (int)(SB_TIMER_SECTION_SIZE * fScale); | 	edge[0] = rect.right - (int)(SB_TIMER_SECTION_SIZE * fScale); | ||||||
| 	edge[0] = edge[1] - (8 + sz.cx + 8 + 1); // There's 8 absolute pixels on right and left of the text
 | 	edge[1] = rect.right; | ||||||
| 	edge[2] = rect.right; |  | ||||||
| 	SendMessage(hStatus, SB_SETPARTS, (WPARAM)ARRAYSIZE(edge), (LPARAM)&edge); | 	SendMessage(hStatus, SB_SETPARTS, (WPARAM)ARRAYSIZE(edge), (LPARAM)&edge); | ||||||
| 
 | 
 | ||||||
| 	// NB: To add an icon on the status bar, you can use something like this:
 | 	// Set the font
 | ||||||
| 	//	SendMessage(hStatus, SB_SETICON, (WPARAM) 1, (LPARAM)LoadImage(GetLibraryHandle("rasdlg"),
 | 	hFont = CreateFontA(-MulDiv(9, GetDeviceCaps(GetDC(hMainDialog), LOGPIXELSY), 72), | ||||||
| 	//		MAKEINTRESOURCE(50), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR | LR_SHARED));
 | 		0, 0, 0, FW_MEDIUM, FALSE, FALSE, FALSE, DEFAULT_CHARSET, | ||||||
| 
 | 		0, 0, PROOF_QUALITY, 0, "Segoe UI"); | ||||||
| 	// This is supposed to create a toolips for a statusbar section (when SBARS_TOOLTIPS is in use)... but doesn't :(
 | 	SendMessage(hStatus, WM_SETFONT, (WPARAM)hFont, TRUE); | ||||||
| 	//	SendMessageLU(hStatus, SB_SETTIPTEXT, (WPARAM)2, (LPARAM)"HELLO");
 |  | ||||||
| 
 |  | ||||||
| 	// Compute the dimensions for the hash button
 |  | ||||||
| 	x = edge[0]; |  | ||||||
| 	y = rect.bottom - height + 1; |  | ||||||
| 	width = edge[1] - edge[0] - 1; |  | ||||||
| 	// How I wish there was a way to figure out how to make Windows controls look good
 |  | ||||||
| 	// at all scales, without adding all these crappy empirical adjustments...
 |  | ||||||
| 	if ((fScale > 1.20f) && (fScale <2.40f)) |  | ||||||
| 		height -= 1; |  | ||||||
| 	if (nWindowsVersion <= WINDOWS_7) |  | ||||||
| 		height += 1; |  | ||||||
| 
 |  | ||||||
| 	// Create the status toolbar
 |  | ||||||
| 	hStatusToolbar = CreateWindowExW(WS_EX_TRANSPARENT, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_TABSTOP | WS_DISABLED | |  | ||||||
| 		TBSTYLE_LIST | CCS_NOPARENTALIGN | CCS_NODIVIDER | CCS_NORESIZE, |  | ||||||
| 		x, y, width, height, hMainDialog, (HMENU)IDC_STATUS_TOOLBAR, hMainInstance, NULL); |  | ||||||
| 
 |  | ||||||
| 	// Set the button properties
 |  | ||||||
| 	SendMessage(hStatusToolbar, WM_SETFONT, (WPARAM)hFont, TRUE); |  | ||||||
| 	SendMessage(hStatusToolbar, TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_MIXEDBUTTONS); |  | ||||||
| 	SendMessage(hStatusToolbar, TB_SETIMAGELIST, 0, (LPARAM)NULL); |  | ||||||
| 	SendMessage(hStatusToolbar, TB_SETDISABLEDIMAGELIST, 0, (LPARAM)NULL); |  | ||||||
| 	SendMessage(hStatusToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(0,0)); |  | ||||||
| 
 |  | ||||||
| 	// Set our text
 |  | ||||||
| 	memset(tbbStatusToolbarButtons, 0, sizeof(TBBUTTON)); |  | ||||||
| 	tbbStatusToolbarButtons[0].idCommand = IDC_HASH; |  | ||||||
| 	tbbStatusToolbarButtons[0].fsStyle = BTNS_SHOWTEXT; |  | ||||||
| 	tbbStatusToolbarButtons[0].fsState = TBSTATE_ENABLED; |  | ||||||
| 	tbbStatusToolbarButtons[0].iString = (INT_PTR)L"#"; |  | ||||||
| 	SendMessage(hStatusToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); |  | ||||||
| 	SendMessage(hStatusToolbar, TB_ADDBUTTONS, (WPARAM)1, (LPARAM)&tbbStatusToolbarButtons); |  | ||||||
| 
 |  | ||||||
| 	SendMessage(hStatusToolbar, TB_SETBUTTONSIZE, 0, MAKELPARAM(width, height - 1)); |  | ||||||
| 	// Yeah, you'd think that TB_SETBUTTONSIZE would work for the width... but you'd be wrong.
 |  | ||||||
| 	// The only working method that actually enforces the requested width is TB_SETBUTTONINFO
 |  | ||||||
| 	tbi.cbSize = sizeof(tbi); |  | ||||||
| 	tbi.dwMask = TBIF_SIZE | TBIF_COMMAND; |  | ||||||
| 	tbi.cx = (WORD)width; |  | ||||||
| 	tbi.idCommand = IDC_HASH; |  | ||||||
| 	SendMessage(hStatusToolbar, TB_SETBUTTONINFO, (WPARAM)IDC_HASH, (LPARAM)&tbi); |  | ||||||
| 
 |  | ||||||
| 	// Need to resend the positioning for the toolbar to become active... One of Windows' mysteries
 |  | ||||||
| 	// Also use this opportunity to set our Z-order for tab stop
 |  | ||||||
| 	SetWindowPos(hStatusToolbar, GetDlgItem(hMainDialog, IDCANCEL), x, y, width, height, 0); |  | ||||||
| 	ShowWindow(hStatusToolbar, SW_SHOWNORMAL); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -545,6 +488,20 @@ void ResizeMoveCtrl(HWND hDlg, HWND hCtrl, int dx, int dy, int dw, int dh, float | ||||||
| 	InvalidateRect(hCtrl, NULL, TRUE); | 	InvalidateRect(hCtrl, NULL, TRUE); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void ResizeButtonHeight(HWND hDlg, int id) | ||||||
|  | { | ||||||
|  | 	HWND hCtrl; | ||||||
|  | 	RECT rc; | ||||||
|  | 	int dy = 0; | ||||||
|  | 
 | ||||||
|  | 	hCtrl = GetDlgItem(hDlg, id); | ||||||
|  | 	GetWindowRect(hCtrl, &rc); | ||||||
|  | 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||||
|  | 	if (rc.bottom - rc.top < bh) | ||||||
|  | 		dy = (bh - (rc.bottom - rc.top)) / 2; | ||||||
|  | 	SetWindowPos(hCtrl, HWND_TOP, rc.left, rc.top - dy, rc.right - rc.left, bh, 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * License callback |  * License callback | ||||||
|  */ |  */ | ||||||
|  | @ -557,6 +514,7 @@ INT_PTR CALLBACK LicenseCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM | ||||||
| 		hLicense = GetDlgItem(hDlg, IDC_LICENSE_TEXT); | 		hLicense = GetDlgItem(hDlg, IDC_LICENSE_TEXT); | ||||||
| 		apply_localization(IDD_LICENSE, hDlg); | 		apply_localization(IDD_LICENSE, hDlg); | ||||||
| 		CenterDialog(hDlg); | 		CenterDialog(hDlg); | ||||||
|  | 		ResizeButtonHeight(hDlg, IDCANCEL); | ||||||
| 		// Suppress any inherited RTL flags
 | 		// Suppress any inherited RTL flags
 | ||||||
| 		style = GetWindowLong(hLicense, GWL_EXSTYLE); | 		style = GetWindowLong(hLicense, GWL_EXSTYLE); | ||||||
| 		style &= ~(WS_EX_RTLREADING | WS_EX_RIGHT | WS_EX_LEFTSCROLLBAR); | 		style &= ~(WS_EX_RTLREADING | WS_EX_RIGHT | WS_EX_LEFTSCROLLBAR); | ||||||
|  | @ -587,10 +545,10 @@ INT_PTR CALLBACK AboutCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP | ||||||
| 	const int edit_id[2] = {IDC_ABOUT_BLURB, IDC_ABOUT_COPYRIGHTS}; | 	const int edit_id[2] = {IDC_ABOUT_BLURB, IDC_ABOUT_COPYRIGHTS}; | ||||||
| 	char about_blurb[2048]; | 	char about_blurb[2048]; | ||||||
| 	const char* edit_text[2] = {about_blurb, additional_copyrights}; | 	const char* edit_text[2] = {about_blurb, additional_copyrights}; | ||||||
| 	HWND hEdit[2]; | 	HWND hEdit[2], hCtrl; | ||||||
| 	TEXTRANGEW tr; | 	TEXTRANGEW tr; | ||||||
| 	ENLINK* enl; | 	ENLINK* enl; | ||||||
| 	RECT rect; | 	RECT rc; | ||||||
| 	REQRESIZE* rsz; | 	REQRESIZE* rsz; | ||||||
| 	wchar_t wUrl[256]; | 	wchar_t wUrl[256]; | ||||||
| 	static BOOL resized_already = TRUE; | 	static BOOL resized_already = TRUE; | ||||||
|  | @ -602,11 +560,19 @@ INT_PTR CALLBACK AboutCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP | ||||||
| 		apply_localization(IDD_ABOUTBOX, hDlg); | 		apply_localization(IDD_ABOUTBOX, hDlg); | ||||||
| 		SetTitleBarIcon(hDlg); | 		SetTitleBarIcon(hDlg); | ||||||
| 		CenterDialog(hDlg); | 		CenterDialog(hDlg); | ||||||
| 		if (settings_commcheck) | 		// Resize the 'License' button
 | ||||||
| 			ShowWindow(GetDlgItem(hDlg, IDC_ABOUT_UPDATES), SW_SHOW); | 		hCtrl = GetDlgItem(hDlg, IDC_ABOUT_LICENSE); | ||||||
|  | 		GetWindowRect(hCtrl, &rc); | ||||||
|  | 		MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||||
|  | 		dy = 0; | ||||||
|  | 		if (rc.bottom - rc.top < bh) | ||||||
|  | 			dy = (bh - (rc.bottom - rc.top)) / 2; | ||||||
|  | 		SetWindowPos(hCtrl, NULL, rc.left, rc.top - dy, | ||||||
|  | 			max(rc.right - rc.left, GetTextSize(hCtrl, NULL).cx + cbw), bh, SWP_NOZORDER); | ||||||
|  | 		ResizeButtonHeight(hDlg, IDOK); | ||||||
| 		static_sprintf(about_blurb, about_blurb_format, lmprintf(MSG_174|MSG_RTF), | 		static_sprintf(about_blurb, about_blurb_format, lmprintf(MSG_174|MSG_RTF), | ||||||
| 			lmprintf(MSG_175|MSG_RTF, rufus_version[0], rufus_version[1], rufus_version[2]), | 			lmprintf(MSG_175|MSG_RTF, rufus_version[0], rufus_version[1], rufus_version[2]), | ||||||
| 			right_to_left_mode?"Akeo \\\\ Pete Batard 2011-2017 © Copyright":"Copyright © 2011-2017 Pete Batard / Akeo", | 			right_to_left_mode?"Akeo \\\\ Pete Batard 2011-2018 © Copyright":"Copyright © 2011-2018 Pete Batard / Akeo", | ||||||
| 			lmprintf(MSG_176|MSG_RTF), lmprintf(MSG_177|MSG_RTF), lmprintf(MSG_178|MSG_RTF)); | 			lmprintf(MSG_176|MSG_RTF), lmprintf(MSG_177|MSG_RTF), lmprintf(MSG_178|MSG_RTF)); | ||||||
| 		for (i=0; i<ARRAYSIZE(hEdit); i++) { | 		for (i=0; i<ARRAYSIZE(hEdit); i++) { | ||||||
| 			hEdit[i] = GetDlgItem(hDlg, edit_id[i]); | 			hEdit[i] = GetDlgItem(hDlg, edit_id[i]); | ||||||
|  | @ -629,8 +595,8 @@ INT_PTR CALLBACK AboutCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP | ||||||
| 		case EN_REQUESTRESIZE: | 		case EN_REQUESTRESIZE: | ||||||
| 			if (!resized_already) { | 			if (!resized_already) { | ||||||
| 				resized_already = TRUE; | 				resized_already = TRUE; | ||||||
| 				GetWindowRect(GetDlgItem(hDlg, edit_id[0]), &rect); | 				GetWindowRect(GetDlgItem(hDlg, edit_id[0]), &rc); | ||||||
| 				dy = rect.bottom - rect.top; | 				dy = rc.bottom - rc.top; | ||||||
| 				rsz = (REQRESIZE *)lParam; | 				rsz = (REQRESIZE *)lParam; | ||||||
| 				dy -= rsz->rc.bottom - rsz->rc.top; | 				dy -= rsz->rc.bottom - rsz->rc.top; | ||||||
| 				ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, edit_id[0]), 0, 0, 0, -dy, 1.0f); | 				ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, edit_id[0]), 0, 0, 0, -dy, 1.0f); | ||||||
|  | @ -660,9 +626,6 @@ INT_PTR CALLBACK AboutCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP | ||||||
| 		case IDC_ABOUT_LICENSE: | 		case IDC_ABOUT_LICENSE: | ||||||
| 			MyDialogBox(hMainInstance, IDD_LICENSE, hDlg, LicenseCallback); | 			MyDialogBox(hMainInstance, IDD_LICENSE, hDlg, LicenseCallback); | ||||||
| 			break; | 			break; | ||||||
| 		case IDC_ABOUT_UPDATES: |  | ||||||
| 			MyDialogBox(hMainInstance, IDD_UPDATE_POLICY, hDlg, UpdateCallback); |  | ||||||
| 			break; |  | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
|  | @ -692,6 +655,8 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP | ||||||
| 	// To use the system message font
 | 	// To use the system message font
 | ||||||
| 	NONCLIENTMETRICS ncm; | 	NONCLIENTMETRICS ncm; | ||||||
| 	HFONT hDlgFont; | 	HFONT hDlgFont; | ||||||
|  | 	HWND hCtrl; | ||||||
|  | 	RECT rc; | ||||||
| 
 | 
 | ||||||
| 	switch (message) { | 	switch (message) { | ||||||
| 	case WM_INITDIALOG: | 	case WM_INITDIALOG: | ||||||
|  | @ -710,6 +675,11 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP | ||||||
| 		SendMessage(GetDlgItem(hDlg, IDC_MORE_INFO), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0)); | 		SendMessage(GetDlgItem(hDlg, IDC_MORE_INFO), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0)); | ||||||
| 		SendMessage(GetDlgItem(hDlg, IDYES), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0)); | 		SendMessage(GetDlgItem(hDlg, IDYES), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0)); | ||||||
| 		SendMessage(GetDlgItem(hDlg, IDNO), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0)); | 		SendMessage(GetDlgItem(hDlg, IDNO), WM_SETFONT, (WPARAM)hDlgFont, MAKELPARAM(TRUE, 0)); | ||||||
|  | 		if (bh != 0) { | ||||||
|  | 			ResizeButtonHeight(hDlg, IDC_MORE_INFO); | ||||||
|  | 			ResizeButtonHeight(hDlg, IDYES); | ||||||
|  | 			ResizeButtonHeight(hDlg, IDNO); | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		apply_localization(IDD_NOTIFICATION, hDlg); | 		apply_localization(IDD_NOTIFICATION, hDlg); | ||||||
| 		background_brush = CreateSolidBrush(GetSysColor(COLOR_WINDOW)); | 		background_brush = CreateSolidBrush(GetSysColor(COLOR_WINDOW)); | ||||||
|  | @ -731,7 +701,13 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP | ||||||
| 			ShowWindow(GetDlgItem(hDlg, IDYES), SW_SHOW); | 			ShowWindow(GetDlgItem(hDlg, IDYES), SW_SHOW); | ||||||
| 		} | 		} | ||||||
| 		if ((notification_more_info != NULL) && (notification_more_info->callback != NULL)) { | 		if ((notification_more_info != NULL) && (notification_more_info->callback != NULL)) { | ||||||
| 			ShowWindow(GetDlgItem(hDlg, IDC_MORE_INFO), SW_SHOW); | 			hCtrl = GetDlgItem(hDlg, IDC_MORE_INFO); | ||||||
|  | 			// Resize the 'More information' button
 | ||||||
|  | 			GetWindowRect(hCtrl, &rc); | ||||||
|  | 			MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||||
|  | 			SetWindowPos(hCtrl, NULL, rc.left, rc.top, | ||||||
|  | 				max(rc.right - rc.left, GetTextSize(hCtrl, NULL).cx + cbw), rc.bottom - rc.top, SWP_NOZORDER); | ||||||
|  | 			ShowWindow(hCtrl, SW_SHOW); | ||||||
| 		} | 		} | ||||||
| 		// Set the control text
 | 		// Set the control text
 | ||||||
| 		if (szMessageText != NULL) { | 		if (szMessageText != NULL) { | ||||||
|  | @ -844,16 +820,8 @@ INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARA | ||||||
| 				nDialogItems, IDC_SELECTION_CHOICEMAX - IDC_SELECTION_CHOICE1); | 				nDialogItems, IDC_SELECTION_CHOICEMAX - IDC_SELECTION_CHOICE1); | ||||||
| 			nDialogItems = IDC_SELECTION_CHOICEMAX - IDC_SELECTION_CHOICE1; | 			nDialogItems = IDC_SELECTION_CHOICEMAX - IDC_SELECTION_CHOICE1; | ||||||
| 		} | 		} | ||||||
| 		// TODO: This shouldn't be needed when using DS_SHELLFONT
 |  | ||||||
| 		// Get the system message box font. See http://stackoverflow.com/a/6057761
 | 		// Get the system message box font. See http://stackoverflow.com/a/6057761
 | ||||||
| 		ncm.cbSize = sizeof(ncm); | 		ncm.cbSize = sizeof(ncm); | ||||||
| 		// If we're compiling with the Vista SDK or later, the NONCLIENTMETRICS struct
 |  | ||||||
| 		// will be the wrong size for previous versions, so we need to adjust it.
 |  | ||||||
| #if defined(_MSC_VER) && (_MSC_VER >= 1500) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA) |  | ||||||
| 		// In versions of Windows prior to Vista, the iPaddedBorderWidth member
 |  | ||||||
| 		// is not present, so we need to subtract its size from cbSize.
 |  | ||||||
| 		ncm.cbSize -= sizeof(ncm.iPaddedBorderWidth); |  | ||||||
| #endif |  | ||||||
| 		SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0); | 		SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0); | ||||||
| 		hDlgFont = CreateFontIndirect(&(ncm.lfMessageFont)); | 		hDlgFont = CreateFontIndirect(&(ncm.lfMessageFont)); | ||||||
| 		// Set the dialog to use the system message box font
 | 		// Set the dialog to use the system message box font
 | ||||||
|  | @ -886,8 +854,7 @@ INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARA | ||||||
| 		dh = rect.bottom - rect.top; | 		dh = rect.bottom - rect.top; | ||||||
| 		DrawTextU(hDC, szMessageText, -1, &rect, DT_CALCRECT | DT_WORDBREAK); | 		DrawTextU(hDC, szMessageText, -1, &rect, DT_CALCRECT | DT_WORDBREAK); | ||||||
| 		dh = rect.bottom - rect.top - dh; | 		dh = rect.bottom - rect.top - dh; | ||||||
| 		if (hDC != NULL) | 		safe_release_dc(hCtrl, hDC); | ||||||
| 			ReleaseDC(hCtrl, hDC); |  | ||||||
| 		ResizeMoveCtrl(hDlg, hCtrl, 0, 0, 0, dh, 1.0f); | 		ResizeMoveCtrl(hDlg, hCtrl, 0, 0, 0, dh, 1.0f); | ||||||
| 		for (i = 0; i < nDialogItems; i++) | 		for (i = 0; i < nDialogItems; i++) | ||||||
| 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_CHOICE1 + i), 0, dh, 0, 0, 1.0f); | 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_CHOICE1 + i), 0, dh, 0, 0, 1.0f); | ||||||
|  | @ -901,6 +868,8 @@ INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARA | ||||||
| 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_LINE), 0, dh, 0, 0, 1.0f); | 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_LINE), 0, dh, 0, 0, 1.0f); | ||||||
| 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDOK), 0, dh, 0, 0, 1.0f); | 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDOK), 0, dh, 0, 0, 1.0f); | ||||||
| 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDCANCEL), 0, dh, 0, 0, 1.0f); | 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDCANCEL), 0, dh, 0, 0, 1.0f); | ||||||
|  | 		ResizeButtonHeight(hDlg, IDOK); | ||||||
|  | 		ResizeButtonHeight(hDlg, IDCANCEL); | ||||||
| 
 | 
 | ||||||
| 		// Set the radio selection
 | 		// Set the radio selection
 | ||||||
| 		Button_SetCheck(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1), BST_CHECKED); | 		Button_SetCheck(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1), BST_CHECKED); | ||||||
|  | @ -984,16 +953,8 @@ INT_PTR CALLBACK ListCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa | ||||||
| 				nDialogItems, IDC_LIST_ITEMMAX - IDC_LIST_ITEM1); | 				nDialogItems, IDC_LIST_ITEMMAX - IDC_LIST_ITEM1); | ||||||
| 			nDialogItems = IDC_LIST_ITEMMAX - IDC_LIST_ITEM1; | 			nDialogItems = IDC_LIST_ITEMMAX - IDC_LIST_ITEM1; | ||||||
| 		} | 		} | ||||||
| 		// TODO: This shouldn't be needed when using DS_SHELLFONT
 |  | ||||||
| 		// Get the system message box font. See http://stackoverflow.com/a/6057761
 | 		// Get the system message box font. See http://stackoverflow.com/a/6057761
 | ||||||
| 		ncm.cbSize = sizeof(ncm); | 		ncm.cbSize = sizeof(ncm); | ||||||
| 		// If we're compiling with the Vista SDK or later, the NONCLIENTMETRICS struct
 |  | ||||||
| 		// will be the wrong size for previous versions, so we need to adjust it.
 |  | ||||||
| #if defined(_MSC_VER) && (_MSC_VER >= 1500) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA) |  | ||||||
| 		// In versions of Windows prior to Vista, the iPaddedBorderWidth member
 |  | ||||||
| 		// is not present, so we need to subtract its size from cbSize.
 |  | ||||||
| 		ncm.cbSize -= sizeof(ncm.iPaddedBorderWidth); |  | ||||||
| #endif |  | ||||||
| 		SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0); | 		SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0); | ||||||
| 		hDlgFont = CreateFontIndirect(&(ncm.lfMessageFont)); | 		hDlgFont = CreateFontIndirect(&(ncm.lfMessageFont)); | ||||||
| 		// Set the dialog to use the system message box font
 | 		// Set the dialog to use the system message box font
 | ||||||
|  | @ -1026,8 +987,7 @@ INT_PTR CALLBACK ListCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa | ||||||
| 		dh = rect.bottom - rect.top; | 		dh = rect.bottom - rect.top; | ||||||
| 		DrawTextU(hDC, szMessageText, -1, &rect, DT_CALCRECT | DT_WORDBREAK); | 		DrawTextU(hDC, szMessageText, -1, &rect, DT_CALCRECT | DT_WORDBREAK); | ||||||
| 		dh = rect.bottom - rect.top - dh; | 		dh = rect.bottom - rect.top - dh; | ||||||
| 		if (hDC != NULL) | 		safe_release_dc(hCtrl, hDC); | ||||||
| 			ReleaseDC(hCtrl, hDC); |  | ||||||
| 		ResizeMoveCtrl(hDlg, hCtrl, 0, 0, 0, dh, 1.0f); | 		ResizeMoveCtrl(hDlg, hCtrl, 0, 0, 0, dh, 1.0f); | ||||||
| 		for (i = 0; i < nDialogItems; i++) | 		for (i = 0; i < nDialogItems; i++) | ||||||
| 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_LIST_ITEM1 + i), 0, dh, 0, 0, 1.0f); | 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_LIST_ITEM1 + i), 0, dh, 0, 0, 1.0f); | ||||||
|  | @ -1041,6 +1001,8 @@ INT_PTR CALLBACK ListCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa | ||||||
| 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_LIST_LINE), 0, dh, 0, 0, 1.0f); | 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_LIST_LINE), 0, dh, 0, 0, 1.0f); | ||||||
| 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDOK), 0, dh, 0, 0, 1.0f); | 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDOK), 0, dh, 0, 0, 1.0f); | ||||||
| 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDCANCEL), 0, dh, 0, 0, 1.0f); | 		ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDCANCEL), 0, dh, 0, 0, 1.0f); | ||||||
|  | 		ResizeButtonHeight(hDlg, IDOK); | ||||||
|  | 		ResizeButtonHeight(hDlg, IDCANCEL); | ||||||
| 		return (INT_PTR)TRUE; | 		return (INT_PTR)TRUE; | ||||||
| 	case WM_CTLCOLORSTATIC: | 	case WM_CTLCOLORSTATIC: | ||||||
| 		// Change the background colour for static text and icon
 | 		// Change the background colour for static text and icon
 | ||||||
|  | @ -1251,8 +1213,7 @@ LONG GetEntryWidth(HWND hDropDown, const char *entry) | ||||||
| 	if (hFont != NULL) | 	if (hFont != NULL) | ||||||
| 		SelectObject(hDC, hDefFont); | 		SelectObject(hDC, hDefFont); | ||||||
| 
 | 
 | ||||||
| 	if (hDC != NULL) | 	safe_release_dc(hDropDown, hDC); | ||||||
| 		ReleaseDC(hDropDown, hDC); |  | ||||||
| 	return size.cx; | 	return size.cx; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1289,12 +1250,88 @@ BOOL SetTaskbarProgressValue(ULONGLONG ullCompleted, ULONGLONG ullTotal) | ||||||
| 	return !FAILED(ptbl->lpVtbl->SetProgressValue(ptbl, hMainDialog, ullCompleted, ullTotal)); | 	return !FAILED(ptbl->lpVtbl->SetProgressValue(ptbl, hMainDialog, ullCompleted, ullTotal)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void Reposition(HWND hDlg, int id, int dx, int dw) | ||||||
|  | { | ||||||
|  | 	HWND hCtrl; | ||||||
|  | 	RECT rc; | ||||||
|  | 
 | ||||||
|  | 	hCtrl = GetDlgItem(hDlg, id); | ||||||
|  | 	GetWindowRect(hCtrl, &rc); | ||||||
|  | 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||||
|  | 	SetWindowPos(hCtrl, HWND_TOP, rc.left + dx, rc.top, rc.right - rc.left + dw, rc.bottom - rc.top, 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void PositionControls(HWND hDlg) | ||||||
|  | { | ||||||
|  | 	RECT rc; | ||||||
|  | 	HWND hCtrl; | ||||||
|  | 	int i, ow, dw;	// original width, delta
 | ||||||
|  | 
 | ||||||
|  | 	// Get the original size of the control
 | ||||||
|  | 	GetWindowRect(GetDlgItem(hDlg, IDS_UPDATE_FREQUENCY_TXT), &rc); | ||||||
|  | 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||||
|  | 	ow = rc.right - rc.left; | ||||||
|  | 	dw = GetTextWidth(hDlg, IDS_UPDATE_FREQUENCY_TXT) - ow; | ||||||
|  | 	dw = max(dw, GetTextWidth(hDlg, IDS_INCLUDE_BETAS_TXT) - ow); | ||||||
|  | 	if (dw > 0) { | ||||||
|  | 		GetWindowRect(hDlg, &rc); | ||||||
|  | 		SetWindowPos(hDlg, NULL, -1, -1, rc.right - rc.left + dw, rc.bottom - rc.top, SWP_NOMOVE | SWP_NOZORDER); | ||||||
|  | 		for (i = 0; i < ARRAYSIZE(update_settings_reposition_ids); i++) | ||||||
|  | 			Reposition(hDlg, update_settings_reposition_ids[i], (i < 4) ? 0 : dw, (i >= 4) ? 0 : dw); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	hCtrl = GetDlgItem(hDlg, IDC_UPDATE_FREQUENCY); | ||||||
|  | 	GetWindowRect(hCtrl, &rc); | ||||||
|  | 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||||
|  | 	ow = rc.right - rc.left; | ||||||
|  | 
 | ||||||
|  | 	dw = GetTextSize(hCtrl, lmprintf(MSG_013)).cx; | ||||||
|  | 	dw = max(dw, GetTextSize(hCtrl, lmprintf(MSG_030, lmprintf(MSG_014))).cx); | ||||||
|  | 	dw = max(dw, GetTextSize(hCtrl, lmprintf(MSG_015)).cx); | ||||||
|  | 	dw = max(dw, GetTextSize(hCtrl, lmprintf(MSG_016)).cx); | ||||||
|  | 	dw = max(dw, GetTextSize(hCtrl, lmprintf(MSG_008)).cx); | ||||||
|  | 	dw = max(dw, GetTextSize(hCtrl, lmprintf(MSG_009)).cx); | ||||||
|  | 	dw -= ow - ddw; | ||||||
|  | 	if (dw > 0) { | ||||||
|  | 		GetWindowRect(hDlg, &rc); | ||||||
|  | 		SetWindowPos(hDlg, NULL, -1, -1, rc.right - rc.left + dw, rc.bottom - rc.top, SWP_NOMOVE | SWP_NOZORDER); | ||||||
|  | 		for (i = 0; i < ARRAYSIZE(update_settings_reposition_ids); i++) { | ||||||
|  | 			if ((i >= 2) && (i <= 3)) | ||||||
|  | 				continue; | ||||||
|  | 			Reposition(hDlg, update_settings_reposition_ids[i], (i < 6) ? 0 : dw, (i >= 6) ? 0 : dw); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	GetWindowRect(GetDlgItem(hDlg, IDC_CHECK_NOW), &rc); | ||||||
|  | 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||||
|  | 	ow = rc.right - rc.left; | ||||||
|  | 	dw = GetTextWidth(hDlg, IDC_CHECK_NOW) - ow + cbw; | ||||||
|  | 	dw = max(dw, GetTextWidth(hDlg, IDCANCEL) - ow + cbw); | ||||||
|  | 	if (dw > 0) { | ||||||
|  | 		GetWindowRect(hDlg, &rc); | ||||||
|  | 		SetWindowPos(hDlg, NULL, -1, -1, rc.right - rc.left + dw, rc.bottom - rc.top, SWP_NOMOVE | SWP_NOZORDER); | ||||||
|  | 		for (i = 0; i < ARRAYSIZE(update_settings_reposition_ids); i++) { | ||||||
|  | 			if ((i >= 1) && (i <= 5)) | ||||||
|  | 				continue; | ||||||
|  | 			Reposition(hDlg, update_settings_reposition_ids[i], 0, dw); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	hCtrl = GetDlgItem(hDlg, IDC_CHECK_NOW); | ||||||
|  | 	GetWindowRect(hCtrl, &rc); | ||||||
|  | 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||||
|  | 	SetWindowPos(hCtrl, HWND_TOP, rc.left, rc.top, rc.right - rc.left, ddbh, 0); | ||||||
|  | 	hCtrl = GetDlgItem(hDlg, IDCANCEL); | ||||||
|  | 	GetWindowRect(hCtrl, &rc); | ||||||
|  | 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||||
|  | 	SetWindowPos(hCtrl, HWND_TOP, rc.left, rc.top, rc.right - rc.left, ddbh, 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Update policy and settings dialog callback |  * Update policy and settings dialog callback | ||||||
|  */ |  */ | ||||||
| INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) | INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) | ||||||
| { | { | ||||||
| 	int dy; | 	int i, dy; | ||||||
| 	RECT rect; | 	RECT rect; | ||||||
| 	REQRESIZE* rsz; | 	REQRESIZE* rsz; | ||||||
| 	HWND hPolicy; | 	HWND hPolicy; | ||||||
|  | @ -1308,6 +1345,7 @@ INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM l | ||||||
| 		resized_already = FALSE; | 		resized_already = FALSE; | ||||||
| 		hUpdatesDlg = hDlg; | 		hUpdatesDlg = hDlg; | ||||||
| 		apply_localization(IDD_UPDATE_POLICY, hDlg); | 		apply_localization(IDD_UPDATE_POLICY, hDlg); | ||||||
|  | 		PositionControls(hDlg); | ||||||
| 		SetTitleBarIcon(hDlg); | 		SetTitleBarIcon(hDlg); | ||||||
| 		CenterDialog(hDlg); | 		CenterDialog(hDlg); | ||||||
| 		hFrequency = GetDlgItem(hDlg, IDC_UPDATE_FREQUENCY); | 		hFrequency = GetDlgItem(hDlg, IDC_UPDATE_FREQUENCY); | ||||||
|  | @ -1362,14 +1400,8 @@ INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM l | ||||||
| 			dy -= rsz->rc.bottom - rsz->rc.top + 6;	// add the border
 | 			dy -= rsz->rc.bottom - rsz->rc.top + 6;	// add the border
 | ||||||
| 			ResizeMoveCtrl(hDlg, hDlg, 0, 0, 0, -dy, 1.0f); | 			ResizeMoveCtrl(hDlg, hDlg, 0, 0, 0, -dy, 1.0f); | ||||||
| 			ResizeMoveCtrl(hDlg, hPolicy, 0, 0, 0, -dy, 1.0f); | 			ResizeMoveCtrl(hDlg, hPolicy, 0, 0, 0, -dy, 1.0f); | ||||||
| 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDS_UPDATE_SETTINGS_GRP), 0, -dy, 0, 0, 1.0f); | 			for (i = 1; i < ARRAYSIZE(update_settings_reposition_ids); i++) | ||||||
| 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDS_UPDATE_FREQUENCY_TXT), 0, -dy, 0, 0, 1.0f); | 				ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, update_settings_reposition_ids[i]), 0, -dy, 0, 0, 1.0f); | ||||||
| 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_UPDATE_FREQUENCY), 0, -dy, 0, 0, 1.0f); |  | ||||||
| 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDS_INCLUDE_BETAS_TXT), 0, -dy, 0, 0, 1.0f); |  | ||||||
| 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_INCLUDE_BETAS), 0, -dy, 0, 0, 1.0f); |  | ||||||
| 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDS_CHECK_NOW_GRP), 0, -dy, 0, 0, 1.0f); |  | ||||||
| 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_CHECK_NOW), 0, -dy, 0, 0, 1.0f); |  | ||||||
| 			ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDCANCEL), 0, -dy, 0, 0, 1.0f); |  | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case WM_COMMAND: | 	case WM_COMMAND: | ||||||
|  | @ -1416,7 +1448,6 @@ BOOL SetUpdateCheck(void) | ||||||
| 	WriteSetting64(SETTING_COMM_CHECK, commcheck); | 	WriteSetting64(SETTING_COMM_CHECK, commcheck); | ||||||
| 	if (ReadSetting64(SETTING_COMM_CHECK) != commcheck) | 	if (ReadSetting64(SETTING_COMM_CHECK) != commcheck) | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 	settings_commcheck = TRUE; |  | ||||||
| 
 | 
 | ||||||
| 	// If the update interval is not set, this is the first time we run so prompt the user
 | 	// If the update interval is not set, this is the first time we run so prompt the user
 | ||||||
| 	if (ReadSetting32(SETTING_UPDATE_INTERVAL) == 0) { | 	if (ReadSetting32(SETTING_UPDATE_INTERVAL) == 0) { | ||||||
|  | @ -1448,28 +1479,29 @@ BOOL SetUpdateCheck(void) | ||||||
| 	return TRUE; | 	return TRUE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void CreateStaticFont(HDC dc, HFONT* hyperlink_font) { | void CreateStaticFont(HDC hDC, HFONT* hFont, BOOL underlined) | ||||||
|  | { | ||||||
| 	TEXTMETRIC tm; | 	TEXTMETRIC tm; | ||||||
| 	LOGFONT lf; | 	LOGFONT lf; | ||||||
| 
 | 
 | ||||||
| 	if (*hyperlink_font != NULL) | 	if (*hFont != NULL) | ||||||
| 		return; | 		return; | ||||||
| 	GetTextMetrics(dc, &tm); | 	GetTextMetrics(hDC, &tm); | ||||||
| 	lf.lfHeight = tm.tmHeight; | 	lf.lfHeight = tm.tmHeight; | ||||||
| 	lf.lfWidth = 0; | 	lf.lfWidth = 0; | ||||||
| 	lf.lfEscapement = 0; | 	lf.lfEscapement = 0; | ||||||
| 	lf.lfOrientation = 0; | 	lf.lfOrientation = 0; | ||||||
| 	lf.lfWeight = tm.tmWeight; | 	lf.lfWeight = tm.tmWeight; | ||||||
| 	lf.lfItalic = tm.tmItalic; | 	lf.lfItalic = tm.tmItalic; | ||||||
| 	lf.lfUnderline = TRUE; | 	lf.lfUnderline = underlined; | ||||||
| 	lf.lfStrikeOut = tm.tmStruckOut; | 	lf.lfStrikeOut = tm.tmStruckOut; | ||||||
| 	lf.lfCharSet = tm.tmCharSet; | 	lf.lfCharSet = tm.tmCharSet; | ||||||
| 	lf.lfOutPrecision = OUT_DEFAULT_PRECIS; | 	lf.lfOutPrecision = OUT_DEFAULT_PRECIS; | ||||||
| 	lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; | 	lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; | ||||||
| 	lf.lfQuality = DEFAULT_QUALITY; | 	lf.lfQuality = DEFAULT_QUALITY; | ||||||
| 	lf.lfPitchAndFamily = tm.tmPitchAndFamily; | 	lf.lfPitchAndFamily = tm.tmPitchAndFamily; | ||||||
| 	GetTextFace(dc, LF_FACESIZE, lf.lfFaceName); | 	GetTextFace(hDC, LF_FACESIZE, lf.lfFaceName); | ||||||
| 	*hyperlink_font = CreateFontIndirect(&lf); | 	*hFont = CreateFontIndirect(&lf); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1498,11 +1530,11 @@ INT_PTR CALLBACK NewVersionCallback(HWND hDlg, UINT message, WPARAM wParam, LPAR | ||||||
| 	char cmdline[] = APPLICATION_NAME " -w 150"; | 	char cmdline[] = APPLICATION_NAME " -w 150"; | ||||||
| 	static char* filepath = NULL; | 	static char* filepath = NULL; | ||||||
| 	static int download_status = 0; | 	static int download_status = 0; | ||||||
|  | 	static HFONT hyperlink_font = NULL; | ||||||
| 	LONG i; | 	LONG i; | ||||||
| 	HWND hNotes; | 	HWND hNotes; | ||||||
| 	STARTUPINFOA si; | 	STARTUPINFOA si; | ||||||
| 	PROCESS_INFORMATION pi; | 	PROCESS_INFORMATION pi; | ||||||
| 	HFONT hyperlink_font = NULL; |  | ||||||
| 	EXT_DECL(dl_ext, NULL, __VA_GROUP__("*.exe"), __VA_GROUP__(lmprintf(MSG_037))); | 	EXT_DECL(dl_ext, NULL, __VA_GROUP__("*.exe"), __VA_GROUP__(lmprintf(MSG_037))); | ||||||
| 
 | 
 | ||||||
| 	switch (message) { | 	switch (message) { | ||||||
|  | @ -1526,13 +1558,14 @@ INT_PTR CALLBACK NewVersionCallback(HWND hDlg, UINT message, WPARAM wParam, LPAR | ||||||
| 		SendMessage(GetDlgItem(hDlg, IDC_PROGRESS), PBM_SETRANGE, 0, (MAX_PROGRESS<<16) & 0xFFFF0000); | 		SendMessage(GetDlgItem(hDlg, IDC_PROGRESS), PBM_SETRANGE, 0, (MAX_PROGRESS<<16) & 0xFFFF0000); | ||||||
| 		if (update.download_url == NULL) | 		if (update.download_url == NULL) | ||||||
| 			EnableWindow(GetDlgItem(hDlg, IDC_DOWNLOAD), FALSE); | 			EnableWindow(GetDlgItem(hDlg, IDC_DOWNLOAD), FALSE); | ||||||
|  | 		ResizeButtonHeight(hDlg, IDCANCEL); | ||||||
| 		break; | 		break; | ||||||
| 	case WM_CTLCOLORSTATIC: | 	case WM_CTLCOLORSTATIC: | ||||||
| 		if ((HWND)lParam != GetDlgItem(hDlg, IDC_WEBSITE)) | 		if ((HWND)lParam != GetDlgItem(hDlg, IDC_WEBSITE)) | ||||||
| 			return FALSE; | 			return FALSE; | ||||||
| 		// Change the font for the hyperlink
 | 		// Change the font for the hyperlink
 | ||||||
| 		SetBkMode((HDC)wParam, TRANSPARENT); | 		SetBkMode((HDC)wParam, TRANSPARENT); | ||||||
| 		CreateStaticFont((HDC)wParam, &hyperlink_font); | 		CreateStaticFont((HDC)wParam, &hyperlink_font, TRUE); | ||||||
| 		SelectObject((HDC)wParam, hyperlink_font); | 		SelectObject((HDC)wParam, hyperlink_font); | ||||||
| 		SetTextColor((HDC)wParam, RGB(0,0,125));	// DARK_BLUE
 | 		SetTextColor((HDC)wParam, RGB(0,0,125));	// DARK_BLUE
 | ||||||
| 		return (INT_PTR)CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); | 		return (INT_PTR)CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); | ||||||
|  | @ -1657,7 +1690,7 @@ void SetTitleBarIcon(HWND hDlg) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Return the onscreen size of the text displayed by a control
 | // Return the onscreen size of the text displayed by a control
 | ||||||
| SIZE GetTextSize(HWND hCtrl) | SIZE GetTextSize(HWND hCtrl, char* txt) | ||||||
| { | { | ||||||
| 	SIZE sz = {0, 0}; | 	SIZE sz = {0, 0}; | ||||||
| 	HDC hDC; | 	HDC hDC; | ||||||
|  | @ -1673,6 +1706,7 @@ SIZE GetTextSize(HWND hCtrl) | ||||||
| 	if (hFont == NULL) | 	if (hFont == NULL) | ||||||
| 		goto out; | 		goto out; | ||||||
| 	SelectObject(hDC, hFont); | 	SelectObject(hDC, hFont); | ||||||
|  | 	if (txt == NULL) { | ||||||
| 		len = GetWindowTextLengthW(hCtrl); | 		len = GetWindowTextLengthW(hCtrl); | ||||||
| 		if (len <= 0) | 		if (len <= 0) | ||||||
| 			goto out; | 			goto out; | ||||||
|  | @ -1681,10 +1715,14 @@ SIZE GetTextSize(HWND hCtrl) | ||||||
| 			goto out; | 			goto out; | ||||||
| 		if (GetWindowTextW(hCtrl, wstr, len + 1) > 0) | 		if (GetWindowTextW(hCtrl, wstr, len + 1) > 0) | ||||||
| 			GetTextExtentPoint32W(hDC, wstr, len, &sz); | 			GetTextExtentPoint32W(hDC, wstr, len, &sz); | ||||||
|  | 	} else { | ||||||
|  | 		wstr = utf8_to_wchar(txt); | ||||||
|  | 		if (wstr != NULL) | ||||||
|  | 			GetTextExtentPoint32W(hDC, wstr, (int)wcslen(wstr), &sz); | ||||||
|  | 	} | ||||||
| out: | out: | ||||||
| 	safe_free(wstr); | 	safe_free(wstr); | ||||||
| 	if (hDC != NULL) | 	safe_release_dc(hCtrl, hDC); | ||||||
| 		ReleaseDC(hCtrl, hDC); |  | ||||||
| 	return sz; | 	return sz; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1692,7 +1730,6 @@ out: | ||||||
|  * The following is used to work around dialog template limitations when switching from LTR to RTL |  * The following is used to work around dialog template limitations when switching from LTR to RTL | ||||||
|  * or switching the font. This avoids having to multiply similar templates in the RC. |  * or switching the font. This avoids having to multiply similar templates in the RC. | ||||||
|  * TODO: Can we use http://stackoverflow.com/questions/6057239/which-font-is-the-default-for-mfc-dialog-controls?
 |  * TODO: Can we use http://stackoverflow.com/questions/6057239/which-font-is-the-default-for-mfc-dialog-controls?
 | ||||||
|  * TODO: We are supposed to use Segoe with font size 9 in Vista or later |  | ||||||
|   */ |   */ | ||||||
| 
 | 
 | ||||||
| // Produce a dialog template from our RC, and update its RTL and Font settings dynamically
 | // Produce a dialog template from our RC, and update its RTL and Font settings dynamically
 | ||||||
|  |  | ||||||
|  | @ -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-2016 Pete Batard |  *   Copyright 2012-2018 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 | ||||||
|  * |  * | ||||||
|  | @ -106,16 +106,15 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs_type) | ||||||
| 	const char* mboot_c32 = "mboot.c32"; | 	const char* mboot_c32 = "mboot.c32"; | ||||||
| 	char path[MAX_PATH], tmp[64]; | 	char path[MAX_PATH], tmp[64]; | ||||||
| 	const char *errmsg; | 	const char *errmsg; | ||||||
| 	struct libfat_filesystem *fs; | 	struct libfat_filesystem *lf_fs; | ||||||
| 	libfat_sector_t s, *secp; | 	libfat_sector_t s, *secp; | ||||||
| 	libfat_sector_t *sectors = NULL; | 	libfat_sector_t *sectors = NULL; | ||||||
| 	int ldlinux_sectors; | 	int ldlinux_sectors; | ||||||
| 	uint32_t ldlinux_cluster; | 	uint32_t ldlinux_cluster; | ||||||
| 	int i, nsectors, sl_fs_stype; | 	int i, nsectors, sl_fs_stype; | ||||||
| 	int bt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType)); | 	BOOL use_v5 = (bt == BT_SYSLINUX_V6) || ((bt == BT_IMAGE) && (SL_MAJOR(img_report.sl_version) >= 5)); | ||||||
| 	BOOL use_v5 = (bt == BT_SYSLINUX_V6) || ((bt == BT_ISO) && (SL_MAJOR(img_report.sl_version) >= 5)); |  | ||||||
| 
 | 
 | ||||||
| 	PrintInfoDebug(0, MSG_234, (bt == BT_ISO)?img_report.sl_version_str:embedded_sl_version_str[use_v5?1:0]); | 	PrintInfoDebug(0, MSG_234, (bt == BT_IMAGE)?img_report.sl_version_str:embedded_sl_version_str[use_v5?1:0]); | ||||||
| 
 | 
 | ||||||
| 	/* 4K sector size workaround */ | 	/* 4K sector size workaround */ | ||||||
| 	SECTOR_SHIFT = 0; | 	SECTOR_SHIFT = 0; | ||||||
|  | @ -219,7 +218,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs_type) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	uprintf("Successfully wrote '%s'", &path[3]); | 	uprintf("Successfully wrote '%s'", &path[3]); | ||||||
| 	if (bt != BT_ISO) | 	if (bt != BT_IMAGE) | ||||||
| 		UpdateProgress(OP_DOS, -1.0f); | 		UpdateProgress(OP_DOS, -1.0f); | ||||||
| 
 | 
 | ||||||
| 	/* Now flush the media */ | 	/* Now flush the media */ | ||||||
|  | @ -266,21 +265,21 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs_type) | ||||||
| 	case FS_FAT16: | 	case FS_FAT16: | ||||||
| 	case FS_FAT32: | 	case FS_FAT32: | ||||||
| 	case FS_EXFAT: | 	case FS_EXFAT: | ||||||
| 		fs = libfat_open(libfat_readfile, (intptr_t) d_handle); | 		lf_fs = libfat_open(libfat_readfile, (intptr_t) d_handle); | ||||||
| 		if (fs == NULL) { | 		if (lf_fs == NULL) { | ||||||
| 			uprintf("Syslinux FAT access error"); | 			uprintf("Syslinux FAT access error"); | ||||||
| 			goto out; | 			goto out; | ||||||
| 		} | 		} | ||||||
| 		ldlinux_cluster = libfat_searchdir(fs, 0, "LDLINUX SYS", NULL); | 		ldlinux_cluster = libfat_searchdir(lf_fs, 0, "LDLINUX SYS", NULL); | ||||||
| 		secp = sectors; | 		secp = sectors; | ||||||
| 		nsectors = 0; | 		nsectors = 0; | ||||||
| 		s = libfat_clustertosector(fs, ldlinux_cluster); | 		s = libfat_clustertosector(lf_fs, ldlinux_cluster); | ||||||
| 		while (s && nsectors < ldlinux_sectors) { | 		while (s && nsectors < ldlinux_sectors) { | ||||||
| 			*secp++ = s; | 			*secp++ = s; | ||||||
| 			nsectors++; | 			nsectors++; | ||||||
| 			s = libfat_nextsector(fs, s); | 			s = libfat_nextsector(lf_fs, s); | ||||||
| 		} | 		} | ||||||
| 		libfat_close(fs); | 		libfat_close(lf_fs); | ||||||
| 		break; | 		break; | ||||||
| 	default: | 	default: | ||||||
| 		uprintf("Unsupported Syslinux filesystem"); | 		uprintf("Unsupported Syslinux filesystem"); | ||||||
|  | @ -380,7 +379,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int fs_type) | ||||||
| 		fclose(fd); | 		fclose(fd); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (bt != BT_ISO) | 	if (bt != BT_IMAGE) | ||||||
| 		UpdateProgress(OP_DOS, -1.0f); | 		UpdateProgress(OP_DOS, -1.0f); | ||||||
| 
 | 
 | ||||||
| 	r = TRUE; | 	r = TRUE; | ||||||
|  |  | ||||||
							
								
								
									
										183
									
								
								src/ui.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								src/ui.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,183 @@ | ||||||
|  | /*
 | ||||||
|  |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  |  * UI element lists | ||||||
|  |  * Copyright © 2018 Pete Batard <pete@akeo.ie> | ||||||
|  |  * | ||||||
|  |  * 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 | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <windows.h> | ||||||
|  | #include "resource.h" | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | static int image_option_move_ids[] = { | ||||||
|  | 	IDS_PARTITION_TYPE_TXT, | ||||||
|  | 	IDC_PARTITION_TYPE, | ||||||
|  | 	IDS_TARGET_SYSTEM_TXT, | ||||||
|  | 	IDC_TARGET_SYSTEM, | ||||||
|  | 	IDS_CSM_HELP_TXT, | ||||||
|  | 	IDC_ADVANCED_DEVICE_TOOLBAR, | ||||||
|  | 	IDC_LIST_USB_HDD, | ||||||
|  | 	IDC_OLD_BIOS_FIXES, | ||||||
|  | 	IDC_RUFUS_MBR, | ||||||
|  | 	IDC_DISK_ID, | ||||||
|  | 	IDS_FORMAT_OPTIONS_TXT, | ||||||
|  | 	IDS_LABEL_TXT, | ||||||
|  | 	IDC_LABEL, | ||||||
|  | 	IDS_FILE_SYSTEM_TXT, | ||||||
|  | 	IDC_FILE_SYSTEM, | ||||||
|  | 	IDS_CLUSTER_SIZE_TXT, | ||||||
|  | 	IDC_CLUSTER_SIZE, | ||||||
|  | 	IDC_ADVANCED_FORMAT_TOOLBAR, | ||||||
|  | 	IDC_QUICK_FORMAT, | ||||||
|  | 	IDC_BAD_BLOCKS, | ||||||
|  | 	IDC_NB_PASSES, | ||||||
|  | 	IDC_EXTENDED_LABEL, | ||||||
|  | 	IDS_STATUS_TXT, | ||||||
|  | 	IDC_PROGRESS, | ||||||
|  | 	IDC_ABOUT, | ||||||
|  | 	IDC_LOG, | ||||||
|  | 	IDC_MULTI_TOOLBAR, | ||||||
|  | 	IDC_TEST, | ||||||
|  | 	IDC_START, | ||||||
|  | 	IDCANCEL, | ||||||
|  | 	IDC_STATUS, | ||||||
|  | 	IDC_STATUS_TOOLBAR, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int image_option_toggle_ids[] = { | ||||||
|  | 	IDS_IMAGE_OPTION_TXT, | ||||||
|  | 	IDC_IMAGE_OPTION, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int advanced_device_move_ids[] = { | ||||||
|  | 	IDC_LIST_USB_HDD, | ||||||
|  | 	IDC_OLD_BIOS_FIXES, | ||||||
|  | 	IDC_RUFUS_MBR, | ||||||
|  | 	IDS_FORMAT_OPTIONS_TXT, | ||||||
|  | 	IDS_LABEL_TXT, | ||||||
|  | 	IDC_LABEL, | ||||||
|  | 	IDS_FILE_SYSTEM_TXT, | ||||||
|  | 	IDC_FILE_SYSTEM, | ||||||
|  | 	IDS_CLUSTER_SIZE_TXT, | ||||||
|  | 	IDC_CLUSTER_SIZE, | ||||||
|  | 	IDC_ADVANCED_FORMAT_TOOLBAR, | ||||||
|  | 	IDC_QUICK_FORMAT, | ||||||
|  | 	IDC_BAD_BLOCKS, | ||||||
|  | 	IDC_NB_PASSES, | ||||||
|  | 	IDC_EXTENDED_LABEL, | ||||||
|  | 	IDS_STATUS_TXT, | ||||||
|  | 	IDC_PROGRESS, | ||||||
|  | 	IDC_ABOUT, | ||||||
|  | 	IDC_LOG, | ||||||
|  | 	IDC_MULTI_TOOLBAR, | ||||||
|  | 	IDC_TEST, | ||||||
|  | 	IDC_START, | ||||||
|  | 	IDCANCEL, | ||||||
|  | 	IDC_STATUS, | ||||||
|  | 	IDC_STATUS_TOOLBAR, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int advanced_device_toggle_ids[] = { | ||||||
|  | 	IDC_SAVE, | ||||||
|  | 	IDC_LIST_USB_HDD, | ||||||
|  | 	IDC_OLD_BIOS_FIXES, | ||||||
|  | 	IDC_RUFUS_MBR, | ||||||
|  | 	IDC_DISK_ID, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int advanced_format_move_ids[] = { | ||||||
|  | 	IDS_STATUS_TXT, | ||||||
|  | 	IDC_PROGRESS, | ||||||
|  | 	IDC_ABOUT, | ||||||
|  | 	IDC_LOG, | ||||||
|  | 	IDC_MULTI_TOOLBAR, | ||||||
|  | 	IDC_TEST, | ||||||
|  | 	IDC_START, | ||||||
|  | 	IDCANCEL, | ||||||
|  | 	IDC_STATUS, | ||||||
|  | 	IDC_STATUS_TOOLBAR, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int advanced_format_toggle_ids[] = { | ||||||
|  | 	IDC_QUICK_FORMAT, | ||||||
|  | 	IDC_BAD_BLOCKS, | ||||||
|  | 	IDC_NB_PASSES, | ||||||
|  | 	IDC_EXTENDED_LABEL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int main_button_ids[] = { | ||||||
|  | 	IDC_SELECT, | ||||||
|  | 	IDC_START, | ||||||
|  | 	IDCANCEL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int full_width_controls[] = { | ||||||
|  | 	IDS_DEVICE_TXT, | ||||||
|  | 	IDS_BOOT_SELECTION_TXT, | ||||||
|  | 	IDS_IMAGE_OPTION_TXT, | ||||||
|  | 	IDC_IMAGE_OPTION, | ||||||
|  | 	IDS_LABEL_TXT, | ||||||
|  | 	IDC_LABEL, | ||||||
|  | 	IDC_ADVANCED_DRIVE_PROPERTIES, | ||||||
|  | 	IDC_LIST_USB_HDD, | ||||||
|  | 	IDC_OLD_BIOS_FIXES, | ||||||
|  | 	IDC_ADVANCED_FORMAT_OPTIONS, | ||||||
|  | 	IDC_QUICK_FORMAT, | ||||||
|  | 	IDC_EXTENDED_LABEL, | ||||||
|  | 	IDC_PROGRESS, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int full_width_checkboxes[] = { | ||||||
|  | 	IDC_LIST_USB_HDD, | ||||||
|  | 	IDC_OLD_BIOS_FIXES, | ||||||
|  | 	IDC_QUICK_FORMAT, | ||||||
|  | 	IDC_EXTENDED_LABEL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int half_width_ids[] = { | ||||||
|  | 	IDC_BAD_BLOCKS, | ||||||
|  | 	IDC_RUFUS_MBR, | ||||||
|  | 	IDS_PARTITION_TYPE_TXT, | ||||||
|  | 	IDC_PARTITION_TYPE, | ||||||
|  | 	IDC_FILE_SYSTEM, | ||||||
|  | 	IDS_TARGET_SYSTEM_TXT, | ||||||
|  | 	IDC_TARGET_SYSTEM, | ||||||
|  | 	IDC_DISK_ID, | ||||||
|  | 	IDS_CLUSTER_SIZE_TXT, | ||||||
|  | 	IDC_CLUSTER_SIZE, | ||||||
|  | 	IDC_NB_PASSES, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int adjust_dpi_ids[][5] = { | ||||||
|  | 	{IDS_DEVICE_TXT, IDC_DEVICE, IDC_SAVE, 0, 0}, | ||||||
|  | 	{IDS_BOOT_SELECTION_TXT, IDC_BOOT_SELECTION, IDC_HASH, IDC_SELECT, 0}, | ||||||
|  | 	{IDS_IMAGE_OPTION_TXT, IDC_IMAGE_OPTION, 0, 0, 0}, | ||||||
|  | 	{IDS_PARTITION_TYPE_TXT, IDC_PARTITION_TYPE, IDS_TARGET_SYSTEM_TXT, IDC_TARGET_SYSTEM, IDS_CSM_HELP_TXT}, | ||||||
|  | 	{IDC_ADVANCED_DEVICE_TOOLBAR, 0, 0, 0, 0}, | ||||||
|  | 	{IDC_LIST_USB_HDD, 0, 0, 0, 0 }, | ||||||
|  | 	{IDC_OLD_BIOS_FIXES, 0, 0, 0, 0}, | ||||||
|  | 	{IDC_RUFUS_MBR, IDC_DISK_ID, 0, 0, 0}, | ||||||
|  | 	{IDS_FORMAT_OPTIONS_TXT, 0, 0, 0, 0}, | ||||||
|  | 	{IDS_LABEL_TXT, IDC_LABEL, 0, 0, 0}, | ||||||
|  | 	{IDS_FILE_SYSTEM_TXT, IDC_FILE_SYSTEM, IDS_CLUSTER_SIZE_TXT, IDC_CLUSTER_SIZE, 0}, | ||||||
|  | 	{IDC_ADVANCED_FORMAT_TOOLBAR, 0, 0, 0, 0}, | ||||||
|  | 	{IDC_QUICK_FORMAT, 0, 0, 0, 0}, | ||||||
|  | 	{IDC_EXTENDED_LABEL, 0, 0, 0, 0}, | ||||||
|  | 	{IDC_BAD_BLOCKS, IDC_NB_PASSES, 0, 0, 0}, | ||||||
|  | 	{IDS_STATUS_TXT, 0, 0, 0, 0}, | ||||||
|  | 	{IDC_PROGRESS, 0, 0, 0, 0 }, | ||||||
|  | 	{IDC_MULTI_TOOLBAR, IDC_TEST, IDC_START, IDCANCEL, 0} | ||||||
|  | }; | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue