[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

redundancy, and how to reduce it

From: Andrew D Jewell
Subject: redundancy, and how to reduce it
Date: Sun, 14 Jul 2002 19:38:34 -0400

When adding new options to gnu utilities, I am always annoyed that I have to add each option in four places :


The solution I've come up with is to replace the glocal "stuct option" definition in the main program source with

typedef struct lineface {
  const char * longOpt;
  int          shortOpt;
  const char * parmName;
  const char * doc;
} lineface;

which might look like:
{"numeric-sort", 'n', 0, "compare according to string numerical value"},
{"delimiter", 't', "CHAR", "use DELIM instead of whitespace for field delimiter"},

Then with calls to functions like these :

char * GetShortOpts(const lineface * lf, enum HyphenType);
struct option * GetLongOpts(const lineface * lf);
void PrintUsage(FILE * f, const lineface * lf);

One generates what one needs on the fly.

Plus, with the hidden --generate_texinfo_template option, one calls
void PrintTexinfo(FILE * f, const lineface * lf, const char * program_name);
which gives a decent first blush of the texi file :

@item -n
@itemx --numeric-sort
@opindex -n
@opindex --numeric-sort
@cindex *** CONCEPT FOR --numeric-sort
compare according to string numerical value

@item -t @var{CHAR}
@itemx address@hidden
@opindex -t
@opindex --delimiter
@cindex *** CONCEPT FOR --delimiter
use DELIM instead of whitespace for field delimiter

Note that this does not give access to all of the features of getopt_long, but does allow everything I've found in practice in gnu tools.

This is certainly a great boon going forward, but retro-fitting the code is a small pain.

Retro-fitting all the translations is a much larger pain (but can be automated) and again, the result will be easier going forward, as the msgid will become
"compare according to string numerical value"
instead of
"  -n, --numeric-sort          compare according to string numerical value\n"

Is this something of interest to the community as a whole?
Should I work on changing some standard tools and submitting patches, or should I shut the hell up?

Source, and more comments, available at http://alexautils.sourceforge.net/http://alexautils.sourceforge.net/textutils-2.0.21-alexa06.tar.gz (join is the only command so far to make full use of it. Comments in lib/lineface.h)

Comments more than welcome,
Andy Jewell

reply via email to

[Prev in Thread] Current Thread [Next in Thread]