|
Lines 119-132
format_size(char *buf, int size, off_t bytes)
Link Here
|
| 119 |
void |
119 |
void |
| 120 |
refresh_progress_meter(int force_update) |
120 |
refresh_progress_meter(int force_update) |
| 121 |
{ |
121 |
{ |
| 122 |
char buf[MAX_WINSIZE + 1]; |
122 |
char buf[MAX_WINSIZE + 1], buf2[MAX_WINSIZE + 1]; |
| 123 |
off_t transferred; |
123 |
off_t transferred; |
| 124 |
double elapsed, now; |
124 |
double elapsed, now; |
| 125 |
int percent; |
125 |
int percent; |
| 126 |
off_t bytes_left; |
126 |
off_t bytes_left; |
| 127 |
int cur_speed; |
127 |
int cur_speed; |
| 128 |
int hours, minutes, seconds; |
128 |
int hours, minutes, seconds; |
| 129 |
int file_len; |
129 |
int file_len, cols; |
| 130 |
|
130 |
|
| 131 |
if ((!force_update && !alarm_fired && !win_resized) || !can_output()) |
131 |
if ((!force_update && !alarm_fired && !win_resized) || !can_output()) |
| 132 |
return; |
132 |
return; |
|
Lines 164-176
refresh_progress_meter(int force_update)
Link Here
|
| 164 |
} else |
164 |
} else |
| 165 |
bytes_per_second = cur_speed; |
165 |
bytes_per_second = cur_speed; |
| 166 |
|
166 |
|
|
|
167 |
last_update = now; |
| 168 |
|
| 169 |
/* Don't bother if we can't even display the percentage complete */ |
| 170 |
if (win_size < 4) |
| 171 |
return; |
| 172 |
|
| 167 |
/* filename */ |
173 |
/* filename */ |
| 168 |
buf[0] = '\0'; |
174 |
*buf = '\0'; |
| 169 |
file_len = win_size - 36; |
175 |
file_len = cols = win_size - 36; |
| 170 |
if (file_len > 0) { |
176 |
if (file_len > 0) { |
| 171 |
buf[0] = '\r'; |
177 |
snmprintf(buf, sizeof(buf), &cols, "%-*s", file_len, file); |
| 172 |
snmprintf(buf+1, sizeof(buf)-1, &file_len, "%-*s", |
178 |
/* If we used fewer columns than expected then pad */ |
| 173 |
file_len, file); |
179 |
if (cols < file_len) { |
|
|
180 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 181 |
"%*s", file_len - cols, ""); |
| 182 |
} |
| 174 |
} |
183 |
} |
| 175 |
|
184 |
|
| 176 |
/* percent of transfer done */ |
185 |
/* percent of transfer done */ |
|
Lines 178-195
refresh_progress_meter(int force_update)
Link Here
|
| 178 |
percent = 100; |
187 |
percent = 100; |
| 179 |
else |
188 |
else |
| 180 |
percent = ((float)cur_pos / end_pos) * 100; |
189 |
percent = ((float)cur_pos / end_pos) * 100; |
| 181 |
snprintf(buf + strlen(buf), win_size - strlen(buf), |
190 |
|
|
|
191 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 182 |
" %3d%% ", percent); |
192 |
" %3d%% ", percent); |
| 183 |
|
193 |
|
| 184 |
/* amount transferred */ |
194 |
/* amount transferred */ |
| 185 |
format_size(buf + strlen(buf), win_size - strlen(buf), |
195 |
format_size(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 186 |
cur_pos); |
196 |
cur_pos); |
| 187 |
strlcat(buf, " ", win_size); |
197 |
strlcat(buf, " ", sizeof(buf)); |
| 188 |
|
198 |
|
| 189 |
/* bandwidth usage */ |
199 |
/* bandwidth usage */ |
| 190 |
format_rate(buf + strlen(buf), win_size - strlen(buf), |
200 |
format_rate(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 191 |
(off_t)bytes_per_second); |
201 |
(off_t)bytes_per_second); |
| 192 |
strlcat(buf, "/s ", win_size); |
202 |
strlcat(buf, "/s ", sizeof(buf)); |
| 193 |
|
203 |
|
| 194 |
/* ETA */ |
204 |
/* ETA */ |
| 195 |
if (!transferred) |
205 |
if (!transferred) |
|
Lines 198-206
refresh_progress_meter(int force_update)
Link Here
|
| 198 |
stalled = 0; |
208 |
stalled = 0; |
| 199 |
|
209 |
|
| 200 |
if (stalled >= STALL_TIME) |
210 |
if (stalled >= STALL_TIME) |
| 201 |
strlcat(buf, "- stalled -", win_size); |
211 |
strlcat(buf, "- stalled -", sizeof(buf)); |
| 202 |
else if (bytes_per_second == 0 && bytes_left) |
212 |
else if (bytes_per_second == 0 && bytes_left) |
| 203 |
strlcat(buf, " --:-- ETA", win_size); |
213 |
strlcat(buf, " --:-- ETA", sizeof(buf)); |
| 204 |
else { |
214 |
else { |
| 205 |
if (bytes_left > 0) |
215 |
if (bytes_left > 0) |
| 206 |
seconds = bytes_left / bytes_per_second; |
216 |
seconds = bytes_left / bytes_per_second; |
|
Lines 213-232
refresh_progress_meter(int force_update)
Link Here
|
| 213 |
seconds -= minutes * 60; |
223 |
seconds -= minutes * 60; |
| 214 |
|
224 |
|
| 215 |
if (hours != 0) |
225 |
if (hours != 0) |
| 216 |
snprintf(buf + strlen(buf), win_size - strlen(buf), |
226 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 217 |
"%d:%02d:%02d", hours, minutes, seconds); |
227 |
"%d:%02d:%02d", hours, minutes, seconds); |
| 218 |
else |
228 |
else |
| 219 |
snprintf(buf + strlen(buf), win_size - strlen(buf), |
229 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 220 |
" %02d:%02d", minutes, seconds); |
230 |
" %02d:%02d", minutes, seconds); |
| 221 |
|
231 |
|
| 222 |
if (bytes_left > 0) |
232 |
if (bytes_left > 0) |
| 223 |
strlcat(buf, " ETA", win_size); |
233 |
strlcat(buf, " ETA", sizeof(buf)); |
| 224 |
else |
234 |
else |
| 225 |
strlcat(buf, " ", win_size); |
235 |
strlcat(buf, " ", sizeof(buf)); |
| 226 |
} |
236 |
} |
| 227 |
|
237 |
|
| 228 |
atomicio(vwrite, STDOUT_FILENO, buf, win_size - 1); |
238 |
/* Finally, truncate string at window width */ |
| 229 |
last_update = now; |
239 |
buf2[0] = '\r'; |
|
|
240 |
cols = win_size - 1; |
| 241 |
snmprintf(buf2 + 1, sizeof(buf2) - 1, &cols, "%s", buf); |
| 242 |
atomicio(vwrite, STDOUT_FILENO, buf2, strlen(buf2)); |
| 230 |
} |
243 |
} |
| 231 |
|
244 |
|
| 232 |
/*ARGSUSED*/ |
245 |
/*ARGSUSED*/ |