From 6e939e7804c33e54577a6801e266bab9a8c6a24c Mon Sep 17 00:00:00 2001 From: Dan Horak Date: Sat, 19 Jul 2008 16:32:52 +0200 Subject: [PATCH] s390-tools-1.5.0-fmtpercentage --- dasdfmt/dasdfmt.c | 32 +++++++++++++++++++++++++++++--- dasdfmt/dasdfmt.h | 4 +++- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/dasdfmt/dasdfmt.c b/dasdfmt/dasdfmt.c index 55616cc..54e8950 100644 --- a/dasdfmt/dasdfmt.c +++ b/dasdfmt/dasdfmt.c @@ -47,6 +47,7 @@ static void exit_usage(int exitcode) " -V or --version means print version\n" " -L or --no_label means don't write disk label\n" " -p or --progressbar means show a progress bar\n" + " -P or --percentage means show a progress bar\n" " -m x or --hashmarks=x means show a hashmark every x " "cylinders\n" " -v means verbose mode\n" @@ -169,6 +170,7 @@ static void init_info(dasdfmt_info_t *info) info->print_progressbar = 0; info->print_hashmarks = 0; info->hashstep = 0; + info->print_percentage = 0; info->force = 0; info->writenolabel = 0; info->labelspec = 0; @@ -550,7 +552,7 @@ static void dasdfmt_format(dasdfmt_info_t *info, struct hd_geometry *drive_geo, format_data_t *format_params) { format_data_t format_step; - int j, k, cyl, tmp, p1, p2; + int j, k, cyl, tmp, p1, p2, p; if (info->print_hashmarks) { if ((info->hashstep < 1) || (info->hashstep > 1000)) { @@ -609,6 +611,24 @@ static void dasdfmt_format(dasdfmt_info_t *info, struct hd_geometry *drive_geo, printf("#"); fflush(stdout); } + if(info->print_percentage) + { + p2 = p1; + p1 = cyl*100/drive_geo->cylinders; + if (p1 != p2) + { + p = (k - format_params->start_unit) * 100 / + (format_params->stop_unit + - format_params->start_unit); + printf("cyl %5d of %5d | %3d%%\n", + (k - format_params->start_unit) + / drive_geo->heads, + (format_params->stop_unit + - format_params->start_unit) + / drive_geo->heads, p); + fflush(stdout); + } + } if (k % drive_geo->heads == 0) { k += drive_geo->heads; @@ -840,11 +860,17 @@ int main(int argc,char *argv[]) break; case 'p': - if (!info.print_hashmarks) info.print_progressbar=1; + if (!info.print_hashmarks && !info.print_percentage) + info.print_progressbar=1; + break; + + case 'P': + if (!info.print_hashmarks && !info.print_progressbar) + info.print_percentage=1; break; case 'm': - if (!info.print_progressbar) + if (!info.print_progressbar && !info.print_percentage) { hashstep_str=optarg; info.print_hashmarks=1; diff --git a/dasdfmt/dasdfmt.h b/dasdfmt/dasdfmt.h index 2dc1583..32d0803 100644 --- a/dasdfmt/dasdfmt.h +++ b/dasdfmt/dasdfmt.h @@ -147,7 +147,7 @@ struct hd_geometry { if (*endptr) ERRMSG_EXIT(EXIT_MISUSE,"%s: " str " " \ "is in invalid format\n",prog_name);} -#define dasdfmt_getopt_string "b:n:l:f:d:m:hpLtyvVFk" +#define dasdfmt_getopt_string "b:n:l:f:d:m:hpPLtyvVFk" static struct option dasdfmt_getopt_long_options[]= { @@ -158,6 +158,7 @@ static struct option dasdfmt_getopt_long_options[]= { "force", 0, 0, 'F'}, { "progressbar", 0, 0, 'p'}, { "hashmarks", 1, 0, 'm'}, + { "percentage", 0, 0, 'P'}, { "label", 1, 0, 'l'}, { "devno", 1, 0, 'n'}, { "device", 1, 0, 'f'}, @@ -192,6 +193,7 @@ typedef struct dasdfmt_info { int withoutprompt; int print_progressbar; int print_hashmarks, hashstep; + int print_percentage; int force; int writenolabel; int labelspec; -- 1.6.0.6