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;
75 retval = ext2fs_get_mem(sizeof(struct ext2_sim_progress),
79 memset(prog, 0, sizeof(struct ext2_sim_progress));
81 retval = ext2fs_get_mem(strlen(label)+1, (void **) &prog->label);
86 strcpy(prog->label, label);
87 prog->labelwidth = labelwidth;
88 prog->barwidth = barwidth;
90 prog->maxdone = maxdone;
97 return ext2fs_progress_display(prog);
100 void ext2fs_progress_close(ext2_sim_progmeter prog)
104 ext2fs_free_mem((void **) &prog->label);
105 ext2fs_free_mem((void **) &prog);