]>
git.ipfire.org Git - thirdparty/e2fsprogs.git/blob - resize/sim_progress.c
2 * sim_progress.c --- simple progress meter
4 * Copyright (C) 1997, 1998 by Theodore Ts'o and
7 * Copyright (C) 1999, 2000 by Theosore Ts'o
10 * This file may be redistributed under the terms of the GNU Public
16 #include "resize2fs.h"
18 struct ext2_sim_progress
{
29 static errcode_t
ext2fs_progress_display(ext2_sim_progmeter prog
)
33 fputs(prog
->label
, prog
->f
);
34 width
= prog
->labelwidth
- strlen(prog
->label
);
37 if (prog
->labelwidth
+ prog
->barwidth
> 80) {
39 for (width
= prog
->labelwidth
; width
> 0; width
--)
42 for (i
=0; i
< prog
->barwidth
; i
++)
44 for (i
=0; i
< prog
->barwidth
; i
++)
51 void ext2fs_progress_update(ext2_sim_progmeter prog
, __u32 current
)
53 int old_level
, level
, num
, i
;
55 level
= prog
->barwidth
* current
/ prog
->maxdone
;
56 old_level
= prog
->barwidth
* prog
->current
/ prog
->maxdone
;
57 prog
->current
= current
;
59 num
= level
- old_level
;
64 for (i
=0; i
< num
; i
++)
68 for (i
=0; i
< num
; i
++)
70 for (i
=0; i
< num
; i
++)
72 for (i
=0; i
< num
; i
++)
78 errcode_t
ext2fs_progress_init(ext2_sim_progmeter
*ret_prog
,
80 int labelwidth
, int barwidth
,
81 __u32 maxdone
, int flags
)
83 ext2_sim_progmeter prog
;
86 retval
= ext2fs_get_mem(sizeof(struct ext2_sim_progress
), &prog
);
89 memset(prog
, 0, sizeof(struct ext2_sim_progress
));
91 retval
= ext2fs_get_mem(strlen(label
)+1, &prog
->label
);
96 strcpy(prog
->label
, label
);
97 prog
->labelwidth
= labelwidth
;
98 prog
->barwidth
= barwidth
;
100 prog
->maxdone
= maxdone
;
107 return ext2fs_progress_display(prog
);
110 void ext2fs_progress_close(ext2_sim_progmeter prog
)
114 ext2fs_free_mem(&prog
->label
);
115 ext2fs_free_mem(&prog
);