From 7237cc723749fe432df14b75bf771ca6373e926e Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 19 Mar 2018 09:48:44 +0100 Subject: [PATCH] Some tweaks to hard disk image creation. --- src/86box.h | 3 ++- src/disk/hdd_image.c | 30 +++++++++++++++--------------- src/pc.c | 19 ++++++++++++++++--- src/win/win_settings.c | 22 +++++++++------------- 4 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/86box.h b/src/86box.h index 7998741cf..28a46cc0b 100644 --- a/src/86box.h +++ b/src/86box.h @@ -8,7 +8,7 @@ * * Main include file for the application. * - * Version: @(#)86box.h 1.0.20 2018/03/18 + * Version: @(#)86box.h 1.0.21 2018/03/19 * * Authors: Miran Grca, * Fred N. van Kempen, @@ -134,6 +134,7 @@ extern int config_changed; /* config has changed */ #ifdef HAVE_STDARG_H extern void pclog_ex(const char *fmt, va_list); #endif +extern void pclog_toggle_suppr(void); extern void pclog(const char *fmt, ...); extern void fatal(const char *fmt, ...); extern void set_screen_size(int x, int y); diff --git a/src/disk/hdd_image.c b/src/disk/hdd_image.c index 4e41057fd..272138b38 100644 --- a/src/disk/hdd_image.c +++ b/src/disk/hdd_image.c @@ -8,7 +8,7 @@ * * Handling of hard disk image files. * - * Version: @(#)hdd_image.c 1.0.12 2018/02/08 + * Version: @(#)hdd_image.c 1.0.13 2018/03/19 * * Authors: Miran Grca, * Fred N. van Kempen, @@ -288,29 +288,29 @@ int hdd_image_load(int id) if (ftello64(hdd_images[id].file) < (full_size + hdd_images[id].base)) { s = (full_size + hdd_images[id].base) - ftello64(hdd_images[id].file); prepare_new_hard_disk: - s >>= 9; - t = (s >> 11) << 11; - s -= t; - t >>= 11; + t = s >> 20; /* Amount of 1 MB blocks. */ + s &= 0xfffff; /* 1 MB mask. */ empty_sector_1mb = (char *) malloc(1048576); memset(empty_sector_1mb, 0, 1048576); + /* Temporarily switch off suppression of seen messages so that the + progress gets displayed. */ + pclog_toggle_suppr(); pclog("Writing image sectors: ["); - if (s > 0) { - for (i = 0; i < s; i++) { + + /* First, write all the 1 MB blocks. */ + if (t > 0) { + for (i = 0; i < t; i++) { + fwrite(empty_sector_1mb, 1, 1045876, hdd_images[id].file); pclog("#"); - fwrite(empty_sector, 1, 512, hdd_images[id].file); } } - if (t > 0) { - for (i = 0; i < t; i++) { - pclog("#"); - fwrite(empty_sector_1mb, 1, 1045876, hdd_images[id].file); - } - } - pclog("]\n"); + /* Then, write the remainder. */ + fwrite(empty_sector_1mb, 1, s, hdd_images[id].file); + pclog("#]\n"); + pclog_toggle_suppr(); free(empty_sector_1mb); } diff --git a/src/pc.c b/src/pc.c index 172875c0a..09268e0c5 100644 --- a/src/pc.c +++ b/src/pc.c @@ -8,7 +8,7 @@ * * Main emulator module where most things are controlled. * - * Version: @(#)pc.c 1.0.67 2018/03/19 + * Version: @(#)pc.c 1.0.68 2018/03/19 * * Authors: Sarah Walker, * Miran Grca, @@ -170,9 +170,13 @@ int unscaled_size_x = SCREEN_RES_X, /* current unscaled size X */ efscrnsz_y = SCREEN_RES_Y; +#ifndef RELEASE_BUILD static char buff[1024]; static int seen = 0; +static int suppr_seen = 1; +#endif + /* * Log something to the logfile or stdout. * @@ -197,10 +201,10 @@ pclog_ex(const char *fmt, va_list ap) } vsprintf(temp, fmt, ap); - if (! strcmp(buff, temp)) { + if (suppr_seen && ! strcmp(buff, temp)) { seen++; } else { - if (seen) { + if (suppr_seen && seen) { fprintf(stdlog, "*** %d repeats ***\n", seen); } seen = 0; @@ -213,6 +217,15 @@ pclog_ex(const char *fmt, va_list ap) } +void +pclog_toggle_suppr(void) +{ +#ifndef RELEASE_BUILD + suppr_seen ^= 1; +#endif +} + + /* Log something. We only do this in non-release builds. */ void pclog(const char *fmt, ...) diff --git a/src/win/win_settings.c b/src/win/win_settings.c index 6f380a4b9..6544035b6 100644 --- a/src/win/win_settings.c +++ b/src/win/win_settings.c @@ -8,7 +8,7 @@ * * Windows 86Box Settings dialog handler. * - * Version: @(#)win_settings.c 1.0.45 2018/03/19 + * Version: @(#)win_settings.c 1.0.46 2018/03/19 * * Author: Miran Grca, * @@ -2986,10 +2986,9 @@ win_settings_hard_disks_add_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM } memset(buf, 0, 512); - size >>= 9; - r = (size >> 11) << 11; - size -= r; - r >>= 11; + + r = size >> 20; + size &= 0xfffff; if (size || r) { h = GetDlgItem(hdlg, IDT_1731); @@ -3005,10 +3004,10 @@ win_settings_hard_disks_add_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM ShowWindow(h, SW_HIDE); h = GetDlgItem(hdlg, IDC_PBAR_IMG_CREATE); - SendMessage(h, PBM_SETRANGE32, (WPARAM) 0, (LPARAM) (size + r - 1)); - SendMessage(h, PBM_SETPOS, (WPARAM) 0, (LPARAM) 0); EnableWindow(h, TRUE); ShowWindow(h, SW_SHOW); + SendMessage(h, PBM_SETRANGE32, (WPARAM) 0, (LPARAM) r); + SendMessage(h, PBM_SETPOS, (WPARAM) 0, (LPARAM) 0); h = GetDlgItem(hdlg, IDT_1752); EnableWindow(h, TRUE); @@ -3017,11 +3016,8 @@ win_settings_hard_disks_add_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM if (size) { - for (i = 0; i < size; i++) - { - fwrite(buf, 1, 512, f); - SendMessage(h, PBM_SETPOS, (WPARAM) i, (LPARAM) 0); - } + fwrite(buf, 1, size, f); + SendMessage(h, PBM_SETPOS, (WPARAM) 1, (LPARAM) 0); } if (r) @@ -3031,7 +3027,7 @@ win_settings_hard_disks_add_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM for (i = 0; i < r; i++) { fwrite(big_buf, 1, 1048576, f); - SendMessage(h, PBM_SETPOS, (WPARAM) (size + i), (LPARAM) 0); + SendMessage(h, PBM_SETPOS, (WPARAM) (size + 1), (LPARAM) 0); } free(big_buf); }