2 * sim_progress.c --- simple progress meter
7 struct ext2_sim_progress {
18 static errcode_t ext2fs_progress_display(ext2_sim_progmeter prog)
22 fputs(prog->label, prog->f);
23 width = prog->labelwidth - strlen(prog->label);
26 if (prog->labelwidth + prog->barwidth > 80) {
28 for (width = prog->labelwidth; width > 0; width--)
31 for (i=0; i < prog->barwidth; i++)
33 for (i=0; i < prog->barwidth; i++)
40 void ext2fs_progress_update(ext2_sim_progmeter prog, __u32 current)
42 int old_level, level, num, i;
44 level = prog->barwidth * current / prog->maxdone;
45 old_level = prog->barwidth * prog->current / prog->maxdone;
46 prog->current = current;
48 num = level - old_level;
53 for (i=0; i < num; i++)
57 for (i=0; i < num; i++)
59 for (i=0; i < num; i++)
61 for (i=0; i < num; i++)
67 errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog,
69 int labelwidth, int barwidth,
70 __u32 maxdone, int flags)
72 ext2_sim_progmeter prog;
74 prog = malloc(sizeof(struct ext2_sim_progress));
77 memset(prog, 0, sizeof(struct ext2_sim_progress));
79 prog->label = malloc(strlen(label)+1);
84 strcpy(prog->label, label);
85 prog->labelwidth = labelwidth;
86 prog->barwidth = barwidth;
88 prog->maxdone = maxdone;
95 return ext2fs_progress_display(prog);
98 void ext2fs_progress_close(ext2_sim_progmeter prog)