Example defobj/Arguments/1.
Let's say you want to add a new argument, say `protocol' to your standard list of commands. In other words you want the following to happen at the command line when you type --help. ------------------------ mgd@wijiji[/opt/src/mgd/src/mySwarmApp] $ ./mySwarmApp --help Usage: mySwarmApp [OPTION...] -s, --varyseed Select random number seed from current time -S, --seed=INTEGER Specify seed for random numbers -b, --batch Run in batch mode -m, --mode=MODE Specify mode of use (for archiving) -p, --protocol=PROTOCOL Set protocol -?, --help Give this help list --usage Give a short usage message -V, --version Print program version Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. Report bugs to bug-swarm@swarm.org. ----------------------- To implement this you need to make your own subclass of Arguments like the following: #import <defobj/Arguments.h> @interface MySwarmAppArguments: Arguments_c { const char *protocolArg; } - (const char *)getProtocolArg; @end @implementation MySwarmAppArguments + createBegin: (id <Zone>)aZone { static struct argp_option options[] = { {"protocol", 'p', "PROTOCOL", 0, "Set protocol", 3}, { 0 } }; MySwarmAppArguments *obj = [super createBegin: aZone]; [obj addOptions: options]; return obj; } - (int)parseKey: (int)key arg: (const char *)arg { if (key == 'p') { protocolArg = arg; return 0; } else return [super parseKey: key arg: arg]; } - (const char *)getProtocolArg { return protocolArg; } @end To actually invoke this in the main.m program, you do the following: int main (int argc, const char ** argv) { initSwarmArguments (argc, argv, [MySwarmAppArguments class]); // the usual - buildObjects:, - buildActions:, - activateIn: calls return 0; } |