Ryan Finnie's extensions to the GUI feedback mode in pscp.
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 21 Nov 2001 22:58:01 +0000 (22:58 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 21 Nov 2001 22:58:01 +0000 (22:58 +0000)
git-svn-id: svn://svn.tartarus.org/sgt/putty@1395 cda61777-01e9-0310-a592-d414129be87e

scp.c

diff --git a/scp.c b/scp.c
index b09653f..c11f499 100644 (file)
--- 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)