From d524be1c2d942affbe81fe35c08b4b7e4338fef3 Mon Sep 17 00:00:00 2001 From: simon Date: Wed, 21 Nov 2001 22:58:01 +0000 Subject: [PATCH] Ryan Finnie's extensions to the GUI feedback mode in pscp. git-svn-id: svn://svn.tartarus.org/sgt/putty@1395 cda61777-01e9-0310-a592-d414129be87e --- scp.c | 61 +++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/scp.c b/scp.c index b09653f0..c11f499e 100644 --- a/scp.c +++ b/scp.c @@ -49,6 +49,9 @@ #define WM_STATS_ELAPSED ( WM_APP_BASE+405 ) #define WM_RET_ERR_CNT ( WM_APP_BASE+406 ) #define WM_LS_RET_ERR_CNT ( WM_APP_BASE+407 ) +#define WM_STATS_DONE ( WM_APP_BASE+408 ) +#define WM_STATS_ETA ( WM_APP_BASE+409 ) +#define WM_STATS_RATEBS ( WM_APP_BASE+410 ) static int list = 0; static int verbose = 0; @@ -65,6 +68,9 @@ static int errs = 0; #define NAME_STR_MAX 2048 static char statname[NAME_STR_MAX + 1]; static unsigned long statsize = 0; +static unsigned long statdone = 0; +static unsigned long stateta = 0; +static unsigned long statratebs = 0; static int statperct = 0; static unsigned long statelapsed = 0; static int gui_mode = 0; @@ -79,7 +85,9 @@ static void tell_char(FILE * stream, char c); static void tell_str(FILE * stream, char *str); static void tell_user(FILE * stream, char *fmt, ...); static void gui_update_stats(char *name, unsigned long size, - int percentage, unsigned long elapsed); + int percentage, unsigned long elapsed, + unsigned long done, unsigned long eta, + unsigned long ratebs); /* * The maximum amount of queued data we accept before we stop and @@ -257,7 +265,9 @@ static void tell_user(FILE * stream, char *fmt, ...) } static void gui_update_stats(char *name, unsigned long size, - int percentage, unsigned long elapsed) + int percentage, unsigned long elapsed, + unsigned long done, unsigned long eta, + unsigned long ratebs) { unsigned int i; @@ -272,6 +282,18 @@ static void gui_update_stats(char *name, unsigned long size, send_msg((HWND) atoi(gui_hwnd), WM_STATS_SIZE, (WPARAM) size); statsize = size; } + if (statdone != done) { + send_msg((HWND) atoi(gui_hwnd), WM_STATS_DONE, (WPARAM) done); + statdone = done; + } + if (stateta != eta) { + send_msg((HWND) atoi(gui_hwnd), WM_STATS_ETA, (WPARAM) eta); + stateta = eta; + } + if (statratebs != ratebs) { + send_msg((HWND) atoi(gui_hwnd), WM_STATS_RATEBS, (WPARAM) ratebs); + statratebs = ratebs; + } if (statelapsed != elapsed) { send_msg((HWND) atoi(gui_hwnd), WM_STATS_ELAPSED, (WPARAM) elapsed); @@ -668,26 +690,29 @@ static void print_stats(char *name, unsigned long size, unsigned long done, char etastr[10]; int pct; int len; + int elap; - /* GUI Adaptation - Sept 2000 */ - if (gui_mode) - gui_update_stats(name, size, (int) (100 * (done * 1.0 / size)), - (unsigned long) difftime(now, start)); - else { - if (now > start) - ratebs = (float) done / (now - start); - else - ratebs = (float) done; + elap = (unsigned long) difftime(now, start); - if (ratebs < 1.0) - eta = size - done; - else - eta = (unsigned long) ((size - done) / ratebs); - sprintf(etastr, "%02ld:%02ld:%02ld", - eta / 3600, (eta % 3600) / 60, eta % 60); + if (now > start) + ratebs = (float) done / elap; + else + ratebs = (float) done; + + if (ratebs < 1.0) + eta = size - done; + else + eta = (unsigned long) ((size - done) / ratebs); + sprintf(etastr, "%02ld:%02ld:%02ld", + eta / 3600, (eta % 3600) / 60, eta % 60); - pct = (int) (100 * (done * 1.0 / size)); + pct = (int) (100 * (done * 1.0 / size)); + if (gui_mode) + /* GUI Adaptation - Sept 2000 */ + gui_update_stats(name, size, pct, elap, done, eta, + (unsigned long) ratebs); + else { len = printf("\r%-25.25s | %10ld kB | %5.1f kB/s | ETA: %8s | %3d%%", name, done / 1024, ratebs / 1024.0, etastr, pct); if (len < prev_stats_len) -- 2.11.0