-
-#ifdef CONFIG_FEATURE_WGET_STATUSBAR
-/* Stuff below is from BSD rcp util.c, as added to openshh.
- * Original copyright notice is retained at the end of this file.
- *
- */
-
-
-static int
-getttywidth(void)
-{
- int width=0;
- get_terminal_width_height(0, &width, NULL);
- return (width);
-}
-
-static void
-updateprogressmeter(int ignore)
-{
- int save_errno = errno;
-
- progressmeter(0);
- errno = save_errno;
-}
-
-static void alarmtimer(int iwait)
-{
- struct itimerval itv;
-
- itv.it_value.tv_sec = iwait;
- itv.it_value.tv_usec = 0;
- itv.it_interval = itv.it_value;
- setitimer(ITIMER_REAL, &itv, NULL);
-}
-
-
-static void
-progressmeter(int flag)
-{
- static struct timeval lastupdate;
- static off_t lastsize, totalsize;
-
- struct timeval now, td, tvwait;
- off_t abbrevsize;
- int elapsed, ratio, barlength, i;
- char buf[256];
-
- if (flag == -1) {
- (void) gettimeofday(&start, (struct timezone *) 0);
- lastupdate = start;
- lastsize = 0;
- totalsize = filesize; /* as filesize changes.. */
- }
-
- (void) gettimeofday(&now, (struct timezone *) 0);
- ratio = 100;
- if (totalsize != 0 && !chunked) {
- ratio = (int) (100 * transferred / totalsize);
- ratio = MIN(ratio, 100);
- }
-
- fprintf(stderr, "\r%-20.20s%4d%% ", curfile, ratio);
-
- barlength = getttywidth() - 51;
- if (barlength > 0 && barlength < sizeof(buf)) {
- i = barlength * ratio / 100;
- memset(buf, '*', i);
- memset(buf + i, ' ', barlength - i);
- buf[barlength] = '\0';
- fprintf(stderr, "|%s|", buf);
- }
- i = 0;
- abbrevsize = transferred;
- while (abbrevsize >= 100000) {
- i++;
- abbrevsize >>= 10;
- }
- /* See http://en.wikipedia.org/wiki/Tera */
- fprintf(stderr, "%6d %c%c ", (int)abbrevsize, " KMGTPEZY"[i], i?'B':' ');
-
- timersub(&now, &lastupdate, &tvwait);
- if (transferred > lastsize) {
- lastupdate = now;
- lastsize = transferred;
- if (tvwait.tv_sec >= STALLTIME)
- timeradd(&start, &tvwait, &start);
- tvwait.tv_sec = 0;
- }
- timersub(&now, &start, &td);
- elapsed = td.tv_sec;
-
- if (tvwait.tv_sec >= STALLTIME) {
- fprintf(stderr, " - stalled -");
- } else if (transferred <= 0 || elapsed <= 0 || transferred > totalsize || chunked) {
- fprintf(stderr, "--:--:-- ETA");
- } else {
- /* totalsize / (transferred/elapsed) - elapsed: */
- int eta = (int) (totalsize*elapsed/transferred - elapsed);
- i = eta % 3600;
- fprintf(stderr, "%02d:%02d:%02d ETA", eta / 3600, i / 60, i % 60);
- }
-
- if (flag == -1) {
- struct sigaction sa;
- sa.sa_handler = updateprogressmeter;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = SA_RESTART;
- sigaction(SIGALRM, &sa, NULL);
- alarmtimer(1);
- } else if (flag == 1) {
- alarmtimer(0);
- transferred = 0;
- putc('\n', stderr);
- }
-}
-#endif
-
-/* Original copyright notice which applies to the CONFIG_FEATURE_WGET_STATUSBAR stuff,
- * much of which was blatantly stolen from openssh. */
-
-/*-
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. <BSD Advertising Clause omitted per the July 22, 1999 licensing change
- * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change>
- *
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Id: wget.c,v 1.75 2004/10/08 08:27:40 andersen Exp $
- */