|
Lines 75-80
static int bytes_per_second; /* current speed in bytes per second */
Link Here
|
| 75 |
static int win_size; /* terminal window size */ |
75 |
static int win_size; /* terminal window size */ |
| 76 |
static volatile sig_atomic_t win_resized; /* for window resizing */ |
76 |
static volatile sig_atomic_t win_resized; /* for window resizing */ |
| 77 |
|
77 |
|
|
|
78 |
static char displayname[2][MAX_WINSIZE]; |
| 79 |
static volatile sig_atomic_t displayname_num; |
| 80 |
|
| 78 |
/* units for format_size */ |
81 |
/* units for format_size */ |
| 79 |
static const char unit[] = " KMGT"; |
82 |
static const char unit[] = " KMGT"; |
| 80 |
|
83 |
|
|
Lines 119-132
format_size(char *buf, int size, off_t bytes)
Link Here
|
| 119 |
void |
122 |
void |
| 120 |
refresh_progress_meter(void) |
123 |
refresh_progress_meter(void) |
| 121 |
{ |
124 |
{ |
| 122 |
char buf[MAX_WINSIZE + 1], displayname[MAX_WINSIZE]; |
125 |
char buf[MAX_WINSIZE + 1]; |
| 123 |
off_t transferred; |
126 |
off_t transferred; |
| 124 |
double elapsed, now; |
127 |
double elapsed, now; |
| 125 |
int percent; |
128 |
int percent; |
| 126 |
off_t bytes_left; |
129 |
off_t bytes_left; |
| 127 |
int cur_speed; |
130 |
int cur_speed; |
| 128 |
int hours, minutes, seconds; |
131 |
int hours, minutes, seconds; |
| 129 |
int file_len; |
|
|
| 130 |
|
132 |
|
| 131 |
transferred = *counter - (cur_pos ? cur_pos : start_pos); |
133 |
transferred = *counter - (cur_pos ? cur_pos : start_pos); |
| 132 |
cur_pos = *counter; |
134 |
cur_pos = *counter; |
|
Lines 155-172
refresh_progress_meter(void)
Link Here
|
| 155 |
} else |
157 |
} else |
| 156 |
bytes_per_second = cur_speed; |
158 |
bytes_per_second = cur_speed; |
| 157 |
|
159 |
|
| 158 |
/* filename */ |
|
|
| 159 |
file_len = win_size - 35; |
| 160 |
displayname[0] = '\0'; |
| 161 |
if (file_len > 0) |
| 162 |
snprintf(displayname, file_len, "%*s ", file_len * -1, file); |
| 163 |
|
| 164 |
/* percent of transfer done */ |
160 |
/* percent of transfer done */ |
| 165 |
if (end_pos == 0 || cur_pos == end_pos) |
161 |
if (end_pos == 0 || cur_pos == end_pos) |
| 166 |
percent = 100; |
162 |
percent = 100; |
| 167 |
else |
163 |
else |
| 168 |
percent = ((float)cur_pos / end_pos) * 100; |
164 |
percent = ((float)cur_pos / end_pos) * 100; |
| 169 |
snprintf(buf, sizeof(buf), "\r%s %3d%% ", displayname, percent); |
165 |
snprintf(buf, sizeof(buf), "\r%s %3d%% ", displayname[displayname_num], |
|
|
166 |
percent); |
| 170 |
|
167 |
|
| 171 |
/* amount transferred */ |
168 |
/* amount transferred */ |
| 172 |
format_size(buf + strlen(buf), win_size - strlen(buf), |
169 |
format_size(buf + strlen(buf), win_size - strlen(buf), |
|
Lines 216-221
refresh_progress_meter(void)
Link Here
|
| 216 |
last_update = now; |
213 |
last_update = now; |
| 217 |
} |
214 |
} |
| 218 |
|
215 |
|
|
|
216 |
void |
| 217 |
update_progress_displayname(void) |
| 218 |
{ |
| 219 |
sig_atomic_t n = displayname_num ^ 1; |
| 220 |
int len, cols, file_len = win_size - 36; |
| 221 |
char buf[MAX_WINSIZE]; |
| 222 |
|
| 223 |
displayname[n][0] = '\0'; |
| 224 |
if (file_len > 0) { |
| 225 |
cols = file_len; |
| 226 |
if (snmprintf(displayname[n], sizeof displayname[0], &cols, |
| 227 |
"%*s", file_len * -1, file) == -1) { |
| 228 |
strnvis(buf, file, sizeof buf, VIS_SAFE); |
| 229 |
snprintf(displayname[n], sizeof displayname[0], "%*s", |
| 230 |
file_len * -1 , buf); |
| 231 |
} |
| 232 |
} |
| 233 |
displayname_num = n; |
| 234 |
} |
| 235 |
|
| 219 |
/*ARGSUSED*/ |
236 |
/*ARGSUSED*/ |
| 220 |
static void |
237 |
static void |
| 221 |
update_progress_meter(int ignore) |
238 |
update_progress_meter(int ignore) |
|
Lines 249-254
start_progress_meter(const char *f, off_t filesize, off_t *ctr)
Link Here
|
| 249 |
bytes_per_second = 0; |
266 |
bytes_per_second = 0; |
| 250 |
|
267 |
|
| 251 |
setscreensize(); |
268 |
setscreensize(); |
|
|
269 |
update_progress_displayname(); |
| 252 |
if (can_output()) |
270 |
if (can_output()) |
| 253 |
refresh_progress_meter(); |
271 |
refresh_progress_meter(); |
| 254 |
|
272 |
|