e2fsprogs/resize/sim_progress.c
Theodore Ts'o d1154eb460 Shorten compile commands run by the build system
The DEFS line in MCONFIG had gotten so long that it exceeded 4k, and
this was starting to cause some tools heartburn.  It also made "make
V=1" almost useless, since trying to following the individual commands
run by make was lost in the noise of all of the defines.

So fix this by putting the configure-generated defines in lib/config.h
and the directory pathnames to lib/dirpaths.h.

In addition, clean up some vestigal defines in configure.in and in the
Makefiles to further shorten the cc command lines.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2011-09-18 17:34:37 -04:00

119 lines
2.4 KiB
C

/*
* sim_progress.c --- simple progress meter
*
* Copyright (C) 1997, 1998 by Theodore Ts'o and
* PowerQuest, Inc.
*
* Copyright (C) 1999, 2000 by Theosore Ts'o
*
* %Begin-Header%
* This file may be redistributed under the terms of the GNU Public
* License.
* %End-Header%
*/
#include "config.h"
#include "resize2fs.h"
struct ext2_sim_progress {
FILE *f;
char *label;
int labelwidth;
int barwidth;
__u32 maxdone;
__u32 current;
int shown;
int flags;
};
static errcode_t ext2fs_progress_display(ext2_sim_progmeter prog)
{
int i, width;
fputs(prog->label, prog->f);
width = prog->labelwidth - strlen(prog->label);
while (width-- > 0)
putc(' ', prog->f);
if (prog->labelwidth + prog->barwidth > 80) {
fputs("\n", prog->f);
for (width = prog->labelwidth; width > 0; width--)
putc(' ', prog->f);
}
for (i=0; i < prog->barwidth; i++)
putc('-', prog->f);
for (i=0; i < prog->barwidth; i++)
putc('\b', prog->f);
fflush(prog->f);
return 0;
}
void ext2fs_progress_update(ext2_sim_progmeter prog, __u32 current)
{
int old_level, level, num, i;
level = prog->barwidth * current / prog->maxdone;
old_level = prog->barwidth * prog->current / prog->maxdone;
prog->current = current;
num = level - old_level;
if (num == 0)
return;
if (num > 0) {
for (i=0; i < num; i++)
putc('X', prog->f);
} else {
num = -num;
for (i=0; i < num; i++)
putc('\b', prog->f);
for (i=0; i < num; i++)
putc('-', prog->f);
for (i=0; i < num; i++)
putc('\b', prog->f);
}
fflush(prog->f);
}
errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog,
const char *label,
int labelwidth, int barwidth,
__u32 maxdone, int flags)
{
ext2_sim_progmeter prog;
errcode_t retval;
retval = ext2fs_get_mem(sizeof(struct ext2_sim_progress), &prog);
if (retval)
return retval;
memset(prog, 0, sizeof(struct ext2_sim_progress));
retval = ext2fs_get_mem(strlen(label)+1, &prog->label);
if (retval) {
free(prog);
return retval;
}
strcpy(prog->label, label);
prog->labelwidth = labelwidth;
prog->barwidth = barwidth;
prog->flags = flags;
prog->maxdone = maxdone;
prog->current = 0;
prog->shown = 0;
prog->f = stdout;
*ret_prog = prog;
return ext2fs_progress_display(prog);
}
void ext2fs_progress_close(ext2_sim_progmeter prog)
{
if (prog->label)
ext2fs_free_mem(&prog->label);
ext2fs_free_mem(&prog);
printf("\n");
return;
}