diff options
Diffstat (limited to 'src/pacman')
-rw-r--r-- | src/pacman/Makefile.am | 3 | ||||
-rw-r--r-- | src/pacman/add.c | 2 | ||||
-rw-r--r-- | src/pacman/callback.c (renamed from src/pacman/trans.c) | 260 | ||||
-rw-r--r-- | src/pacman/callback.h (renamed from src/pacman/trans.h) | 28 | ||||
-rw-r--r-- | src/pacman/downloadprog.c | 162 | ||||
-rw-r--r-- | src/pacman/downloadprog.h | 28 | ||||
-rw-r--r-- | src/pacman/log.c | 73 | ||||
-rw-r--r-- | src/pacman/log.h | 4 | ||||
-rw-r--r-- | src/pacman/pacman.c | 4 | ||||
-rw-r--r-- | src/pacman/remove.c | 2 | ||||
-rw-r--r-- | src/pacman/sync.c | 2 | ||||
-rw-r--r-- | src/pacman/util.c | 67 | ||||
-rw-r--r-- | src/pacman/util.h | 1 |
13 files changed, 277 insertions, 359 deletions
diff --git a/src/pacman/Makefile.am b/src/pacman/Makefile.am index 21099657..241188ab 100644 --- a/src/pacman/Makefile.am +++ b/src/pacman/Makefile.am @@ -16,14 +16,13 @@ pacman_SOURCES = \ add.c \ conf.h conf.c \ deptest.c \ - downloadprog.h downloadprog.c \ log.h log.c \ package.h package.c \ pacman.h pacman.c \ query.c \ remove.c \ sync.c \ - trans.h trans.c \ + callback.h callback.c \ util.h util.c pacman_LDADD = $(top_builddir)/lib/libalpm/.libs/libalpm.la \ diff --git a/src/pacman/add.c b/src/pacman/add.c index 7a8f7809..3d0622cc 100644 --- a/src/pacman/add.c +++ b/src/pacman/add.c @@ -31,7 +31,7 @@ /* pacman */ #include "pacman.h" #include "log.h" -#include "trans.h" +#include "callback.h" #include "conf.h" #include "util.h" diff --git a/src/pacman/trans.c b/src/pacman/callback.c index e67d5607..d86c7d9c 100644 --- a/src/pacman/trans.c +++ b/src/pacman/callback.c @@ -1,8 +1,8 @@ /* - * trans.c - * - * Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - * + * callback.c + * + * Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org> + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, * USA. */ @@ -24,28 +24,105 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sys/time.h> #include <sys/stat.h> #include <unistd.h> #include <dirent.h> #include <wchar.h> +#include <math.h> #include <alpm.h> /* pacman */ -#include "trans.h" +#include "callback.h" #include "util.h" #include "log.h" #include "conf.h" /* TODO this should not have to be defined twice- trans.c & log.c */ #define LOG_STR_LEN 256 +#define FILENAME_TRIM_LEN 23 extern config_t *config; +/* download progress bar */ +static float rate_last; +static int xfered_last; +static struct timeval initial_time; + +/* transaction progress bar ? */ static int prevpercent=0; /* for less progressbar output */ -/* Callback to handle transaction events - */ +/* refactored from cb_trans_progress */ +static void fill_progress(const int percent, const int proglen) +{ + const unsigned short chomp = alpm_option_get_chomp(); + const unsigned int hashlen = proglen - 8; + const unsigned int hash = percent * hashlen / 100; + static unsigned int lasthash = 0, mouth = 0; + unsigned int i; + + /* printf("\ndebug: proglen: %i\n", proglen); DEBUG*/ + + if(percent == 0) { + lasthash = 0; + mouth = 0; + } + + /* magic numbers, how I loathe thee */ + if(proglen > 8) { + printf(" ["); + for(i = hashlen; i > 1; --i) { + /* if special progress bar enabled */ + if(chomp) { + if(i > hashlen - hash) { + printf("-"); + } else if(i == hashlen - hash) { + if(lasthash == hash) { + if(mouth) { + printf("\033[1;33mC\033[m"); + } else { + printf("\033[1;33mc\033[m"); + } + } else { + lasthash = hash; + mouth = mouth == 1 ? 0 : 1; + if(mouth) { + printf("\033[1;33mC\033[m"); + } else { + printf("\033[1;33mc\033[m"); + } + } + } else if(i%3 == 0) { + printf("\033[0;37mo\033[m"); + } else { + printf("\033[0;37m \033[m"); + } + } /* else regular progress bar */ + else if(i > hashlen - hash) { + printf("#"); + } else { + printf("-"); + } + } + printf("]"); + } + /* print percent after progress bar */ + if(proglen > 5) { + printf(" %3d%%", percent); + } + + if(percent == 100) { + printf("\n"); + } else { + printf("\r"); + } + fflush(stdout); +} + + + +/* callback to handle messages/notifications from libalpm transactions */ void cb_trans_evt(pmtransevt_t event, void *data1, void *data2) { char str[LOG_STR_LEN] = ""; @@ -154,6 +231,7 @@ void cb_trans_evt(pmtransevt_t event, void *data1, void *data2) } } +/* callback to handle questions from libalpm transactions (yes/no) */ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2, void *data3, int *response) { @@ -278,6 +356,7 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2, } } +/* callback to handle display of transaction progress */ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, int howmany, int remain) { @@ -377,7 +456,172 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, if(percent >= 100) { set_output_padding(0); /* restore padding */ } +} + +/* callback to handle display of download progress */ +void cb_dl_progress(const char *filename, int xfered, int total) +{ + const int infolen = 50; + char *fname, *p; + + float rate = 0.0, timediff = 0.0, f_xfered = 0.0; + unsigned int eta_h = 0, eta_m = 0, eta_s = 0; + int percent; + char rate_size = 'K', xfered_size = 'K'; + + if(config->noprogressbar) { + return; + } + + /* XXX: big fat hack: due to the fact that we switch out printf/pm_fprintf, + * not everything honors our 'neednl' newline hackery. This forces a newline + * if we need one before drawing the progress bar */ + MSG(NL,NULL); + + /* this is basically a switch on xferred: 0, total, and anything else */ + if(xfered == 0) { + /* set default starting values */ + gettimeofday(&initial_time, NULL); + xfered_last = 0; + rate_last = 0.0; + timediff = get_update_timediff(1); + rate = 0.0; + eta_s = 0; + set_output_padding(1); /* we need padding from pm_fprintf output */ + } else if(xfered == total) { + /* compute final values */ + struct timeval current_time; + float diff_sec, diff_usec; + + gettimeofday(¤t_time, NULL); + diff_sec = current_time.tv_sec - initial_time.tv_sec; + diff_usec = current_time.tv_usec - initial_time.tv_usec; + timediff = diff_sec + (diff_usec / 1000000.0); + rate = (float)total / (timediff * 1024.0); + + /* round elapsed time to the nearest second */ + eta_s = (int)floorf(timediff + 0.5); + + set_output_padding(0); /* shut off padding */ + } else { + /* compute current average values */ + timediff = get_update_timediff(0); + + if(timediff < UPDATE_SPEED_SEC) { + /* return if the calling interval was too short */ + return; + } + rate = (float)(xfered - xfered_last) / (timediff * 1024.0); + /* average rate to reduce jumpiness */ + rate = (float)(rate + 2*rate_last) / 3; + eta_s = (unsigned int)(total - xfered) / (rate * 1024.0); + rate_last = rate; + xfered_last = xfered; + } + + percent = (int)((float)xfered) / ((float)total) * 100; + + /* fix up time for display */ + eta_h = eta_s / 3600; + eta_s -= eta_h * 3600; + eta_m = eta_s / 60; + eta_s -= eta_m * 60; + fname = strdup(filename); + /* strip extension if it's there + * NOTE: in the case of package files, only the pkgname is sent now */ + if((p = strstr(fname, PM_EXT_PKG)) || (p = strstr(fname, PM_EXT_DB))) { + *p = '\0'; + } + if(strlen(fname) > FILENAME_TRIM_LEN) { + strcpy(fname + FILENAME_TRIM_LEN -3,"..."); + } + + /* Awesome formatting for progress bar. We need a mess of Kb->Mb->Gb stuff + * here. We'll use limit of 2048 for each until we get some empirical */ + /* rate_size = 'K'; was set above */ + if(rate > 2048.0) { + rate /= 1024.0; + rate_size = 'M'; + if(rate > 2048.0) { + rate /= 1024.0; + rate_size = 'G'; + /* we should not go higher than this for a few years (9999.9 Gb/s?)*/ + } + } + + f_xfered = (float) xfered / 1024.0; /* convert to K by default */ + /* xfered_size = 'K'; was set above */ + if(f_xfered > 2048.0) { + f_xfered /= 1024.0; + xfered_size = 'M'; + if(f_xfered > 2048.0) { + f_xfered /= 1024.0; + xfered_size = 'G'; + /* I should seriously hope that archlinux packages never break + * the 9999.9GB mark... we'd have more serious problems than the progress + * bar in pacman */ + } + } + + printf(" %-*s %6.1f%c %#6.1f%c/s %02u:%02u:%02u", FILENAME_TRIM_LEN, fname, + f_xfered, xfered_size, rate, rate_size, eta_h, eta_m, eta_s); + + free(fname); + + fill_progress(percent, getcols() - infolen); + return; +} + +/* Callback to handle notifications from the library */ +void cb_log(unsigned short level, char *msg) +{ + char str[LOG_STR_LEN] = ""; + + if(!strlen(msg)) { + return; + } + + switch(level) { + case PM_LOG_DEBUG: + sprintf(str, _("debug")); + break; + case PM_LOG_ERROR: + sprintf(str, _("error")); + break; + case PM_LOG_WARNING: + sprintf(str, _("warning")); + break; + case PM_LOG_FUNCTION: + /* TODO we should increase the indent level when this occurs so we can see + * program flow easier. It'll be fun + */ + sprintf(str, _("function")); + break; + default: + sprintf(str, "???"); + break; + } + +#ifdef PACMAN_DEBUG + /* If debug is on, we'll timestamp the output */ + if(alpm_option_get_logmask() & PM_LOG_DEBUG) { + time_t t; + struct tm *tmp; + char timestr[10] = {0}; + + t = time(NULL); + tmp = localtime(&t); + strftime(timestr, 9, "%H:%M:%S", tmp); + timestr[8] = '\0'; + + MSG(NL, "[%s] %s: %s", timestr, str, msg); + } else { + MSG(NL, "%s: %s", str, msg); + } +#else + MSG(NL, "%s: %s", str, msg); +#endif } /* vim: set ts=2 sw=2 noet: */ diff --git a/src/pacman/trans.h b/src/pacman/callback.h index 0c0f9e01..bc7038d3 100644 --- a/src/pacman/trans.h +++ b/src/pacman/callback.h @@ -1,8 +1,8 @@ /* - * trans.h - * - * Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - * + * callback.h + * + * Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org> + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -15,25 +15,31 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, * USA. */ -#ifndef _PM_TRANS_H -#define _PM_TRANS_H +#ifndef _PM_CALLBACK_H +#define _PM_CALLBACK_H #include <alpm.h> -/* callback to handle messages/notifications from pacman transactions */ +/* callback to handle messages/notifications from libalpm transactions */ void cb_trans_evt(pmtransevt_t event, void *data1, void *data2); -/* callback to handle questions from pacman transactions (yes/no) */ +/* callback to handle questions from libalpm transactions (yes/no) */ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2, void *data3, int *response); -/* callback to handle display of the progress bar for transactions */ +/* callback to handle display of transaction progress */ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, int howmany, int remain); -#endif /* _PM_TRANS_H */ +/* callback to handle display of download progress */ +void cb_dl_progress(const char *filename, int xfered, int total); + +/* callback to handle messages/notifications from pacman library */ +void cb_log(unsigned short level, char *msg); + +#endif /* _PM_CALLBACK_H */ /* vim: set ts=2 sw=2 noet: */ diff --git a/src/pacman/downloadprog.c b/src/pacman/downloadprog.c deleted file mode 100644 index fccdc322..00000000 --- a/src/pacman/downloadprog.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * downloadprog.c - * - * Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -#include "config.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/time.h> -#include <math.h> - -#include <alpm.h> - -/* pacman */ -#include "downloadprog.h" -#include "util.h" -#include "log.h" -#include "conf.h" - -/* progress bar */ -static float rate_last; -static int xfered_last; -static struct timeval initial_time; - -/* pacman options */ -extern config_t *config; - -#define FILENAME_TRIM_LEN 23 - -void log_progress(const char *filename, int xfered, int total) -{ - const int infolen = 50; - char *fname, *p; - - float rate = 0.0, timediff = 0.0, f_xfered = 0.0; - unsigned int eta_h = 0, eta_m = 0, eta_s = 0; - int percent; - char rate_size = 'K', xfered_size = 'K'; - - if(config->noprogressbar) { - return; - } - - /* XXX: big fat hack: due to the fact that we switch out printf/pm_fprintf, - * not everything honors our 'neednl' newline hackery. This forces a newline - * if we need one before drawing the progress bar */ - MSG(NL,NULL); - - /* this is basically a switch on xferred: 0, total, and anything else */ - if(xfered == 0) { - /* set default starting values */ - gettimeofday(&initial_time, NULL); - xfered_last = 0; - rate_last = 0.0; - timediff = get_update_timediff(1); - rate = 0.0; - eta_s = 0; - set_output_padding(1); /* we need padding from pm_fprintf output */ - } else if(xfered == total) { - /* compute final values */ - struct timeval current_time; - float diff_sec, diff_usec; - - gettimeofday(¤t_time, NULL); - diff_sec = current_time.tv_sec - initial_time.tv_sec; - diff_usec = current_time.tv_usec - initial_time.tv_usec; - timediff = diff_sec + (diff_usec / 1000000.0); - rate = (float)total / (timediff * 1024.0); - - /* round elapsed time to the nearest second */ - eta_s = (int)floorf(timediff + 0.5); - - set_output_padding(0); /* shut off padding */ - } else { - /* compute current average values */ - timediff = get_update_timediff(0); - - if(timediff < UPDATE_SPEED_SEC) { - /* return if the calling interval was too short */ - return; - } - rate = (float)(xfered - xfered_last) / (timediff * 1024.0); - /* average rate to reduce jumpiness */ - rate = (float)(rate + 2*rate_last) / 3; - eta_s = (unsigned int)(total - xfered) / (rate * 1024.0); - rate_last = rate; - xfered_last = xfered; - } - - percent = (int)((float)xfered) / ((float)total) * 100; - - /* fix up time for display */ - eta_h = eta_s / 3600; - eta_s -= eta_h * 3600; - eta_m = eta_s / 60; - eta_s -= eta_m * 60; - - fname = strdup(filename); - /* strip extension if it's there - * NOTE: in the case of package files, only the pkgname is sent now */ - if((p = strstr(fname, PM_EXT_PKG)) || (p = strstr(fname, PM_EXT_DB))) { - *p = '\0'; - } - if(strlen(fname) > FILENAME_TRIM_LEN) { - strcpy(fname + FILENAME_TRIM_LEN -3,"..."); - } - - /* Awesome formatting for progress bar. We need a mess of Kb->Mb->Gb stuff - * here. We'll use limit of 2048 for each until we get some empirical */ - /* rate_size = 'K'; was set above */ - if(rate > 2048.0) { - rate /= 1024.0; - rate_size = 'M'; - if(rate > 2048.0) { - rate /= 1024.0; - rate_size = 'G'; - /* we should not go higher than this for a few years (9999.9 Gb/s?)*/ - } - } - - f_xfered = (float) xfered / 1024.0; /* convert to K by default */ - /* xfered_size = 'K'; was set above */ - if(f_xfered > 2048.0) { - f_xfered /= 1024.0; - xfered_size = 'M'; - if(f_xfered > 2048.0) { - f_xfered /= 1024.0; - xfered_size = 'G'; - /* I should seriously hope that archlinux packages never break - * the 9999.9GB mark... we'd have more serious problems than the progress - * bar in pacman */ - } - } - - printf(" %-*s %6.1f%c %#6.1f%c/s %02u:%02u:%02u", FILENAME_TRIM_LEN, fname, - f_xfered, xfered_size, rate, rate_size, eta_h, eta_m, eta_s); - - free(fname); - - fill_progress(percent, getcols() - infolen); - return; -} - -/* vim: set ts=2 sw=2 noet: */ diff --git a/src/pacman/downloadprog.h b/src/pacman/downloadprog.h deleted file mode 100644 index e79fcc51..00000000 --- a/src/pacman/downloadprog.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * downloadprog.h - * - * Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ -#ifndef _PM_DOWNLOADPROG_H -#define _PM_DOWNLOADPROG_H - -void log_progress(const char *filename, int xfered, int total); - -#endif /* _PM_DOWNLOADPROG_H */ - -/* vim: set ts=2 sw=2 noet: */ diff --git a/src/pacman/log.c b/src/pacman/log.c index e6298743..5a4fbf2e 100644 --- a/src/pacman/log.c +++ b/src/pacman/log.c @@ -47,58 +47,6 @@ void set_output_padding(int on) needpad = on; } -/* Callback to handle notifications from the library - */ -void cb_log(unsigned short level, char *msg) -{ - char str[LOG_STR_LEN] = ""; - - if(!strlen(msg)) { - return; - } - - switch(level) { - case PM_LOG_DEBUG: - sprintf(str, _("debug")); - break; - case PM_LOG_ERROR: - sprintf(str, _("error")); - break; - case PM_LOG_WARNING: - sprintf(str, _("warning")); - break; - case PM_LOG_FUNCTION: - /* TODO we should increase the indent level when this occurs so we can see - * program flow easier. It'll be fun - */ - sprintf(str, _("function")); - break; - default: - sprintf(str, "???"); - break; - } - -#ifdef PACMAN_DEBUG - /* If debug is on, we'll timestamp the output */ - if(alpm_option_get_logmask() & PM_LOG_DEBUG) { - time_t t; - struct tm *tmp; - char timestr[10] = {0}; - - t = time(NULL); - tmp = localtime(&t); - strftime(timestr, 9, "%H:%M:%S", tmp); - timestr[8] = '\0'; - - MSG(NL, "[%s] %s: %s", timestr, str, msg); - } else { - MSG(NL, "%s: %s", str, msg); - } -#else - MSG(NL, "%s: %s", str, msg); -#endif -} - /* Wrapper to fprintf() that allows to choose if we want the output * to be appended on the current line, or written to a new one */ @@ -146,25 +94,8 @@ void pm_fprintf(FILE *file, unsigned short line, char *fmt, ...) neednl = (str[strlen(str)-1] == '\n') ? 0 : 1; } -/* Check verbosity option and, if set, print the - * string to stdout - */ -void vprint(char *fmt, ...) -{ - va_list args; - - char str[LOG_STR_LEN]; - - if(config->verbose > 0) { - va_start(args, fmt); - vsnprintf(str, LOG_STR_LEN, fmt, args); - va_end(args); - pm_fprintf(stdout, NL, str); - } -} - -/* presents a prompt and gets a Y/N answer - */ +/* presents a prompt and gets a Y/N answer */ +/* TODO there must be a better way */ int yesno(char *fmt, ...) { char str[LOG_STR_LEN]; diff --git a/src/pacman/log.h b/src/pacman/log.h index 1205e8e6..f9aea4de 100644 --- a/src/pacman/log.h +++ b/src/pacman/log.h @@ -42,11 +42,7 @@ enum { void set_output_padding(int on); -/* callback to handle messages/notifications from pacman library */ -void cb_log(unsigned short level, char *msg); - void pm_fprintf(FILE *file, unsigned short line, char *fmt, ...); -void vprint(char *fmt, ...); int yesno(char *fmt, ...); diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 9eef9dde..1be43ee8 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -44,7 +44,7 @@ #include "pacman.h" #include "util.h" #include "log.h" -#include "downloadprog.h" +#include "callback.h" #include "conf.h" #include "package.h" @@ -517,7 +517,7 @@ int main(int argc, char *argv[]) } /* set library parameters */ - alpm_option_set_dlcb(log_progress); + alpm_option_set_dlcb(cb_dl_progress); if(config->verbose > 0) { printf("Root : %s\n", alpm_option_get_root()); diff --git a/src/pacman/remove.c b/src/pacman/remove.c index 941eab52..d3c0648c 100644 --- a/src/pacman/remove.c +++ b/src/pacman/remove.c @@ -32,7 +32,7 @@ #include "pacman.h" #include "util.h" #include "log.h" -#include "trans.h" +#include "callback.h" #include "conf.h" extern config_t *config; diff --git a/src/pacman/sync.c b/src/pacman/sync.c index 5b20147c..b963eb84 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -39,7 +39,7 @@ #include "util.h" #include "log.h" #include "package.h" -#include "trans.h" +#include "callback.h" #include "conf.h" extern config_t *config; diff --git a/src/pacman/util.c b/src/pacman/util.c index a7259e25..376582a7 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -369,71 +369,4 @@ float get_update_timediff(int first_call) return(retval); } -/* refactored from cb_trans_progress */ -void fill_progress(const int percent, const int proglen) -{ - const unsigned short chomp = alpm_option_get_chomp(); - const unsigned int hashlen = proglen - 8; - const unsigned int hash = percent * hashlen / 100; - static unsigned int lasthash = 0, mouth = 0; - unsigned int i; - - /* printf("\ndebug: proglen: %i\n", proglen); DEBUG*/ - - if(percent == 0) { - lasthash = 0; - mouth = 0; - } - - /* magic numbers, how I loathe thee */ - if(proglen > 8) { - printf(" ["); - for(i = hashlen; i > 1; --i) { - /* if special progress bar enabled */ - if(chomp) { - if(i > hashlen - hash) { - printf("-"); - } else if(i == hashlen - hash) { - if(lasthash == hash) { - if(mouth) { - printf("\033[1;33mC\033[m"); - } else { - printf("\033[1;33mc\033[m"); - } - } else { - lasthash = hash; - mouth = mouth == 1 ? 0 : 1; - if(mouth) { - printf("\033[1;33mC\033[m"); - } else { - printf("\033[1;33mc\033[m"); - } - } - } else if(i%3 == 0) { - printf("\033[0;37mo\033[m"); - } else { - printf("\033[0;37m \033[m"); - } - } /* else regular progress bar */ - else if(i > hashlen - hash) { - printf("#"); - } else { - printf("-"); - } - } - printf("]"); - } - /* print percent after progress bar */ - if(proglen > 5) { - printf(" %3d%%", percent); - } - - if(percent == 100) { - printf("\n"); - } else { - printf("\r"); - } - fflush(stdout); -} - /* vim: set ts=2 sw=2 noet: */ diff --git a/src/pacman/util.h b/src/pacman/util.h index 85ce6ede..e43208aa 100644 --- a/src/pacman/util.h +++ b/src/pacman/util.h @@ -43,7 +43,6 @@ int reg_match(char *string, char *pattern); void list_display(const char *title, alpm_list_t *list); void display_targets(alpm_list_t *syncpkgs); float get_update_timediff(int first_call); -void fill_progress(const int percent, const int proglen); #endif /* _PM_UTIL_H */ |