DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 
A Flexible UNIX Command Line Processing Facility - Args(3C++)

The final program

Here is the final program, with some extra functions for modularity:

       #include <Args.h>
       #include <string.h>
       #include <osfcn.h>
   

int compile_only = 0; int optimize = 0; int allow_anachronisms = 1; int profiling = 0; const char* output_filename = "a.out"; int dryrun = 0;

extern void add_define(const char*, const char*); extern void add_includedir(const char*); extern void align(const char*); extern void compile(const char*);

static void getdefines(const Opt* opt) { Suboptsiter si(*opt); const Subopt* subopt; while (si.next(subopt)) add_define(subopt->name(), subopt->value()); }

static void process_letter_option(const Opt* opt) { switch (opt->chr()) { case 'I': add_includedir(opt->value()); break; case 'D': getdefines(opt); break; case 'c': compile_only = 1; break; case 'O': optimize = 1; break; case 'o': output_filename = opt->value(); break; case 'p': if (opt->flag() == '+') allow_anachronisms = 0; else profiling = 1; break; } }

static void process_option(const Opt* opt) { const char* key = opt->keyword(); if (key != 0) { if (strcmp(key, "align") == 0) align(opt->value()); else dryrun = 1; } else process_letter_option(opt); }

static void process_nonoption_args(const Args& args) { Argsiter ai(args); const char* filename; while (ai.next(filename)) compile(filename); }

const char* keywords[] = { "dryrun", "align:", 0 };

main(int argc, const char*const* argv) { Args args(argc, argv, "co:OI:D;p", Args::intermix | Args::plusoptions, keywords); if (args.error()) exit(1); Optsiter oi(args); const Opt* opt; while (oi.next(opt)) process_option(opt); process_nonoption_args(args); }


Previous topic: Invocation errors

© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 27 April 2004