support a string for the argument name
print negative flags with `no-' git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2452 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		@@ -48,27 +48,25 @@ RCSID("$Id$");
 | 
				
			|||||||
static size_t
 | 
					static size_t
 | 
				
			||||||
print_arg (int longp, struct getargs *arg)
 | 
					print_arg (int longp, struct getargs *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    switch (arg->type) {
 | 
					    const char *s;
 | 
				
			||||||
    case arg_integer:
 | 
					
 | 
				
			||||||
	if (longp) {
 | 
					    if (arg->type == arg_flag || arg->type == arg_negative_flag)
 | 
				
			||||||
	    fprintf (stderr, "=n");
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
	    fprintf (stderr, " n");
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return 2;
 | 
					 | 
				
			||||||
    case arg_string:
 | 
					 | 
				
			||||||
	if (longp) {
 | 
					 | 
				
			||||||
	    fprintf (stderr, "=s");
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
	    fprintf (stderr, " s");
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return 2;
 | 
					 | 
				
			||||||
    case arg_flag:
 | 
					 | 
				
			||||||
    case arg_negative_flag:
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
    default:
 | 
					
 | 
				
			||||||
	abort ();
 | 
					    if (longp)
 | 
				
			||||||
    }
 | 
						putc ('=', stderr);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
						putc (' ', stderr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (arg->arg_help)
 | 
				
			||||||
 | 
						s = arg->arg_help;
 | 
				
			||||||
 | 
					    else if (arg->type == arg_integer)
 | 
				
			||||||
 | 
						s = "n";
 | 
				
			||||||
 | 
					    else if (arg->type == arg_string)
 | 
				
			||||||
 | 
						s = "s";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fprintf (stderr, "%s", s);
 | 
				
			||||||
 | 
					    return 1 + strlen(s);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -85,8 +83,14 @@ arg_printusage (struct getargs *args,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (args[i].long_name) {
 | 
						if (args[i].long_name) {
 | 
				
			||||||
	    len += 2 + strlen(args[i].long_name);
 | 
						    len += 2 + strlen(args[i].long_name);
 | 
				
			||||||
	    fprintf (stderr, " [--%s", args[i].long_name);
 | 
						    fprintf (stderr,
 | 
				
			||||||
 | 
							     " [--%s%s",
 | 
				
			||||||
 | 
							     args[i].type == arg_negative_flag ?
 | 
				
			||||||
 | 
							     "no-" : "",
 | 
				
			||||||
 | 
							     args[i].long_name);
 | 
				
			||||||
	    len += print_arg (1, &args[i]);
 | 
						    len += print_arg (1, &args[i]);
 | 
				
			||||||
 | 
						    if (args[i].type == arg_negative_flag)
 | 
				
			||||||
 | 
							len += 3;
 | 
				
			||||||
	    putc (']', stderr);
 | 
						    putc (']', stderr);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (args[i].short_name) {
 | 
						if (args[i].short_name) {
 | 
				
			||||||
@@ -117,8 +121,13 @@ arg_printusage (struct getargs *args,
 | 
				
			|||||||
		count += 4;
 | 
							count += 4;
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	    if (args[i].long_name) {
 | 
						    if (args[i].long_name) {
 | 
				
			||||||
		fprintf (stderr, "--%s", args[i].long_name);
 | 
							fprintf (stderr, "--%s%s",
 | 
				
			||||||
 | 
								 args[i].type == arg_negative_flag ?
 | 
				
			||||||
 | 
								 "no-" : "",
 | 
				
			||||||
 | 
								 args[i].long_name);
 | 
				
			||||||
		count += 2 + strlen(args[i].long_name);
 | 
							count += 2 + strlen(args[i].long_name);
 | 
				
			||||||
 | 
							if (args[i].type == arg_negative_flag)
 | 
				
			||||||
 | 
							    count += 3;
 | 
				
			||||||
		count += print_arg (1, &args[i]);
 | 
							count += print_arg (1, &args[i]);
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	    while(count++ <= max_len)
 | 
						    while(count++ <= max_len)
 | 
				
			||||||
@@ -293,11 +302,11 @@ int bar_int;
 | 
				
			|||||||
char *baz_string;
 | 
					char *baz_string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct getargs args[] = {
 | 
					struct getargs args[] = {
 | 
				
			||||||
    { NULL, '1', arg_flag, &flag1, "one" },
 | 
					    { NULL, '1', arg_flag, &flag1, "one", NULL },
 | 
				
			||||||
    { NULL, '2', arg_flag, &flag2, "two" },
 | 
					    { NULL, '2', arg_flag, &flag2, "two", NULL },
 | 
				
			||||||
    { "foo", 'f', arg_flag, &foo_flag, "foo" },
 | 
					    { "foo", 'f', arg_negative_flag, &foo_flag, "foo", NULL },
 | 
				
			||||||
    { "bar", 'b', arg_integer, &bar_int, "bar" },
 | 
					    { "bar", 'b', arg_integer, &bar_int, "bar", "seconds"},
 | 
				
			||||||
    { "baz", 'x', arg_string, &baz_string, "baz" },
 | 
					    { "baz", 'x', arg_string, &baz_string, "baz", "name" },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char **argv)
 | 
					int main(int argc, char **argv)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user