Loading files
d368afb60This file is pinned to the selected release. Download the original to open it in your design tool.
/*
* show_progress.c - simple progress bar functions
*
* Copyright (c) 2010 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
*
* See file CREDITS for list of people who contributed to this
* project.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
*
* 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.
*
*/
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include "progress.h"
#define FILESIZE_MAX 100000000
#define HASHES_PER_LINE 40
static int printed;
static int progress_max;
static int spin;
void show_progress(int now)
{
char spinchr[] = "\\|/-";
if (now < 0) {
printf("%c\b", spinchr[spin++ % (sizeof(spinchr) - 1)]);
return;
}
if (progress_max && progress_max != FILESIZE_MAX) {
uint64_t tmp = (int64_t)now * HASHES_PER_LINE;
now = lldiv(tmp, progress_max).quot;
}
while (printed < now) {
if (!(printed % HASHES_PER_LINE) && printed)
printf("\n");
printf("#");
printed++;
}
}
void init_progression_bar(int max)
{
printed = 0;
progress_max = max;
spin = 0;
if (progress_max && progress_max != FILESIZE_MAX)
printf("[%*s]\r[", HASHES_PER_LINE, "");
}