(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:
Johan Danielsson
1998-05-29 22:14:08 +00:00
parent c803cad279
commit 052559a46f

View File

@@ -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);