(arg_printusage): try to keep options shorter than column width
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4990 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -48,22 +48,24 @@ RCSID("$Id$");
|
||||
#define ISFLAG(X) ((X).type == arg_flag || (X).type == arg_negative_flag)
|
||||
|
||||
static size_t
|
||||
print_arg (FILE *stream, int mdoc, int longp, struct getargs *arg)
|
||||
print_arg (char *string, size_t len, int mdoc, int longp, struct getargs *arg)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
*string = '\0';
|
||||
|
||||
if (ISFLAG(*arg))
|
||||
return 0;
|
||||
|
||||
if(mdoc){
|
||||
if(longp)
|
||||
fprintf(stream, "= Ns");
|
||||
fprintf(stream, " Ar ");
|
||||
strcat_truncate(string, "= Ns", len);
|
||||
strcat_truncate(string, " Ar ", len);
|
||||
}else
|
||||
if (longp)
|
||||
putc ('=', stream);
|
||||
strcat_truncate (string, "=", len);
|
||||
else
|
||||
putc (' ', stream);
|
||||
strcat_truncate (string, " ", len);
|
||||
|
||||
if (arg->arg_help)
|
||||
s = arg->arg_help;
|
||||
@@ -74,7 +76,7 @@ print_arg (FILE *stream, int mdoc, int longp, struct getargs *arg)
|
||||
else
|
||||
s = "<undefined>";
|
||||
|
||||
fprintf (stream, "%s", s);
|
||||
strcat_truncate(string, s, len);
|
||||
return 1 + strlen(s);
|
||||
}
|
||||
|
||||
@@ -85,6 +87,7 @@ mandoc_template(struct getargs *args,
|
||||
{
|
||||
int i;
|
||||
char timestr[64], cmd[64];
|
||||
char buf[128];
|
||||
const char *p;
|
||||
time_t t;
|
||||
|
||||
@@ -113,13 +116,13 @@ mandoc_template(struct getargs *args,
|
||||
for(i = 0; i < num_args; i++){
|
||||
if(args[i].short_name){
|
||||
printf(".Op Fl %c", args[i].short_name);
|
||||
print_arg(stdout, 1, 0, args + i);
|
||||
printf("\n");
|
||||
print_arg(buf, sizeof(buf), 1, 0, args + i);
|
||||
printf("%s\n", buf);
|
||||
}
|
||||
if(args[i].long_name){
|
||||
printf(".Op Fl -%s", args[i].long_name);
|
||||
print_arg(stdout, 1, 1, args + i);
|
||||
printf("\n");
|
||||
print_arg(buf, sizeof(buf), 1, 1, args + i);
|
||||
printf("%s\n", buf);
|
||||
}
|
||||
/*
|
||||
if(args[i].type == arg_strings)
|
||||
@@ -135,15 +138,16 @@ mandoc_template(struct getargs *args,
|
||||
printf(".It Xo\n");
|
||||
if(args[i].short_name){
|
||||
printf(".Fl %c", args[i].short_name);
|
||||
print_arg(stdout, 1, 0, args + i);
|
||||
print_arg(buf, sizeof(buf), 1, 0, args + i);
|
||||
printf("%s", buf);
|
||||
if(args[i].long_name)
|
||||
printf(" Ns ,");
|
||||
printf("\n");
|
||||
}
|
||||
if(args[i].long_name){
|
||||
printf(".Fl -%s", args[i].long_name);
|
||||
print_arg(stdout, 1, 1, args + i);
|
||||
printf("\n");
|
||||
print_arg(buf, sizeof(buf), 1, 1, args + i);
|
||||
printf("%s\n", buf);
|
||||
}
|
||||
printf(".Xc\n");
|
||||
if(args[i].help)
|
||||
@@ -165,6 +169,16 @@ mandoc_template(struct getargs *args,
|
||||
printf(".\\\".Sh BUGS\n");
|
||||
}
|
||||
|
||||
static int
|
||||
check_column(FILE *f, int col, int len, int columns)
|
||||
{
|
||||
if(col + len > columns) {
|
||||
fprintf(f, "\n");
|
||||
col = fprintf(f, " ");
|
||||
}
|
||||
return col;
|
||||
}
|
||||
|
||||
void
|
||||
arg_printusage (struct getargs *args,
|
||||
size_t num_args,
|
||||
@@ -172,66 +186,79 @@ arg_printusage (struct getargs *args,
|
||||
{
|
||||
int i;
|
||||
size_t max_len = 0;
|
||||
char buf[128];
|
||||
int col = 0, columns;
|
||||
struct winsize ws;
|
||||
|
||||
if(getenv("GETARGMANDOC")){
|
||||
mandoc_template(args, num_args, extra_string);
|
||||
return;
|
||||
}
|
||||
fprintf (stderr, "Usage: %s", __progname);
|
||||
if(get_window_size(2, &ws) == 0)
|
||||
columns = ws.ws_col;
|
||||
else
|
||||
columns = 80;
|
||||
col = 0;
|
||||
col += fprintf (stderr, "Usage: %s", __progname);
|
||||
for (i = 0; i < num_args; ++i) {
|
||||
size_t len = 0;
|
||||
|
||||
if (args[i].long_name) {
|
||||
fprintf (stderr, " [--");
|
||||
if (args[i].type == arg_negative_flag) {
|
||||
fprintf (stderr, "no-");
|
||||
buf[0] = '\0';
|
||||
strcat_truncate(buf, "[--", sizeof(buf));
|
||||
len += 2;
|
||||
if(args[i].type == arg_negative_flag) {
|
||||
strcat_truncate(buf, "no-", sizeof(buf));
|
||||
len += 3;
|
||||
}
|
||||
fprintf (stderr, "%s", args[i].long_name);
|
||||
len += 2 + strlen(args[i].long_name);
|
||||
len += print_arg (stderr, 0, 1, &args[i]);
|
||||
putc (']', stderr);
|
||||
strcat_truncate(buf, args[i].long_name, sizeof(buf));
|
||||
len += strlen(args[i].long_name);
|
||||
len += print_arg(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
||||
0, 1, &args[i]);
|
||||
strcat_truncate(buf, "]", sizeof(buf));
|
||||
if(args[i].type == arg_strings)
|
||||
fprintf (stderr, "...");
|
||||
strcat_truncate(buf, "...", sizeof(buf));
|
||||
col = check_column(stderr, col, strlen(buf) + 1, columns);
|
||||
col += fprintf(stderr, " %s", buf);
|
||||
}
|
||||
if (args[i].short_name) {
|
||||
snprintf(buf, sizeof(buf), "[-%c", args[i].short_name);
|
||||
len += 2;
|
||||
fprintf (stderr, " [-%c", args[i].short_name);
|
||||
len += print_arg (stderr, 0, 0, &args[i]);
|
||||
putc (']', stderr);
|
||||
len += print_arg(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
||||
0, 0, &args[i]);
|
||||
strcat_truncate(buf, "]", sizeof(buf));
|
||||
if(args[i].type == arg_strings)
|
||||
fprintf (stderr, "...");
|
||||
strcat_truncate(buf, "...", sizeof(buf));
|
||||
col = check_column(stderr, col, strlen(buf) + 1, columns);
|
||||
col += fprintf(stderr, " %s", buf);
|
||||
}
|
||||
if (args[i].long_name && args[i].short_name)
|
||||
len += 4;
|
||||
len += 2; /* ", " */
|
||||
max_len = max(max_len, len);
|
||||
}
|
||||
if (extra_string)
|
||||
if (extra_string) {
|
||||
col = check_column(stderr, col, strlen(extra_string) + 1, columns);
|
||||
fprintf (stderr, " %s\n", extra_string);
|
||||
else
|
||||
} else
|
||||
fprintf (stderr, "\n");
|
||||
for (i = 0; i < num_args; ++i) {
|
||||
if (args[i].help) {
|
||||
size_t count = 0;
|
||||
|
||||
if (args[i].short_name) {
|
||||
fprintf (stderr, "-%c", args[i].short_name);
|
||||
count += 2;
|
||||
count += print_arg (stderr, 0, 0, &args[i]);
|
||||
}
|
||||
if (args[i].short_name && args[i].long_name) {
|
||||
fprintf (stderr, " or ");
|
||||
count += 4;
|
||||
count += fprintf (stderr, "-%c", args[i].short_name);
|
||||
print_arg (buf, sizeof(buf), 0, 0, &args[i]);
|
||||
count += fprintf(stderr, "%s", buf);
|
||||
}
|
||||
if (args[i].short_name && args[i].long_name)
|
||||
count += fprintf (stderr, ", ");
|
||||
if (args[i].long_name) {
|
||||
fprintf (stderr, "--");
|
||||
if (args[i].type == arg_negative_flag) {
|
||||
fprintf (stderr, "no-");
|
||||
count += 3;
|
||||
}
|
||||
fprintf (stderr, "%s", args[i].long_name);
|
||||
count += 2 + strlen(args[i].long_name);
|
||||
count += print_arg (stderr, 0, 1, &args[i]);
|
||||
count += fprintf (stderr, "--");
|
||||
if (args[i].type == arg_negative_flag)
|
||||
count += fprintf (stderr, "no-");
|
||||
count += fprintf (stderr, "%s", args[i].long_name);
|
||||
print_arg (buf, sizeof(buf), 0, 1, &args[i]);
|
||||
count += fprintf(stderr, "%s", buf);
|
||||
}
|
||||
while(count++ <= max_len)
|
||||
putc (' ', stderr);
|
||||
|
Reference in New Issue
Block a user