redundancy, and how to reduce it

Andrew D Jewell <[email protected]>
Newsgroups gmane.comp.gnu.textutils.bugs
Message-ID <[email protected]>
When adding new options to gnu utilities, I am always annoyed that I 
have to add each option in four places :

long-options
short-options
usage()
whatever.texi

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 --delimiter=@var{CHAR}
@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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.