static void usage(const char *program_name) { fprintf(stdout, "\n"); fprintf(stdout, "USAGE: %s [-options]\n", program_name); fprintf(stdout, "\n"); fprintf(stdout, " General Options:\n"); fprintf(stdout, " -? You're reading it.\n"); fprintf(stdout, " -v Verbose output.\n"); // fprintf(stdout, " -V Version and compiled in options.\n"); fprintf(stdout, " -i <iface> Interface to sniff from.\n"); fprintf(stdout, " -f <format> Output format line. See Format options.\n"); fprintf(stdout, " -b <bfp> Berkley packet filter.\n"); fprintf(stdout, " -d <dir> Directory to write session files to.\n"); fprintf(stdout, " -D Enable daemon mode.\n"); fprintf(stdout, " -u <user> User to drop priveleges to after daemonising.\n"); fprintf(stdout, " -g <group> Group to drop priveleges to after daemonising.\n"); fprintf(stdout, " -T <dir> Direct to chroot into.\n"); fprintf(stdout, " -P <path> Path to PID file (/var/run).\n"); fprintf(stdout, " -p <file> Name of pidfile (cxtracker.pid).\n"); fprintf(stdout, " -r <pcap> PCAP file to read.\n"); fprintf(stdout, " -w <name> Dump PCAP to file with specified prefix.\n"); fprintf(stdout, " -F Flush output after every write to dump file.\n"); fprintf(stdout, " -s <bytes> Roll over dump file based on size.\n"); fprintf(stdout, " -t <interval> Roll over dump file based on time intervals.\n"); fprintf(stdout, "\n"); fprintf(stdout, " Long Options:\n"); fprintf(stdout, " --help Same as '?'\n"); // fprintf(stdout, " --version Same as 'V'\n"); fprintf(stdout, " --interface Same as 'i'\n"); fprintf(stdout, " --format Same as 'f'\n"); fprintf(stdout, " --bpf Same as 'b'\n"); fprintf(stdout, " --log-dir Same as 'd'\n"); fprintf(stdout, " --daemonize Same as 'D'\n"); fprintf(stdout, " --user Same as 'u'\n"); fprintf(stdout, " --group Same as 'g'\n"); fprintf(stdout, " --chroot-dir Same as 'T'\n"); fprintf(stdout, " --pid-file Same as 'p'\n"); fprintf(stdout, " --pcap-file Same as 'r'\n"); fprintf(stdout, "\n"); format_options(); }
void parse_args(int argc, char **argv, struct _options *options, struct _flags *flags) { options->dsn = G_define_option(); options->dsn->key = "output"; options->dsn->type = TYPE_STRING; options->dsn->label = _("Name of output directory or OGR or PostGIS data source"); options->dsn->description = _("Examples:\n" "\t\tESRI Shapefile: directory containing a shapefile\n" "\t\tMapInfo File: directory containing a mapinfo file\n" "\t\tPostGIS database: connection string, eg. 'PG:dbname=db user=grass'"); options->dsn->required = NO; options->dsn->guisection = _("Settings"); options->format = G_define_option(); options->format->key = "format"; options->format->description = _("Format for output vector data"); options->format->required = NO; options->format->type = TYPE_STRING; options->format->options = format_options(); #ifdef HAVE_OGR options->format->answer = "ESRI_Shapefile"; #else #ifdef HAVE_POSTGRES options->format->answer = "PostgreSQL"; #endif /* HAVE_POSTGRES */ #endif /* HAVE_OGR */ options->format->guisection = _("Settings"); options->opts = G_define_option(); options->opts->key = "options"; options->opts->label = _("Creation options"); options->opts->description = _("Examples:\n" "\t\t'SHPT=POINTZ': create 3D point Shapefile data\n" "\t\t'GEOM_TYPE=geography': use geography PostGIS data\n" "\t\t'SCHEMA=grass': create new PostGIS tables in 'grass' schema"); options->opts->required = NO; options->opts->multiple = YES; options->opts->type = TYPE_STRING; options->opts->guisection = _("Settings"); options->input = G_define_standard_option(G_OPT_F_INPUT); options->input->key = "loadsettings"; options->input->required = NO; options->input->description = _("Name of input file to read settings from"); options->input->guisection = _("Settings"); options->output = G_define_standard_option(G_OPT_F_OUTPUT); options->output->key = "savesettings"; options->output->required = NO; options->output->description = _("Name for output file where to save current settings"); flags->f = G_define_flag(); flags->f->key = 'f'; flags->f->description = _("List supported formats and exit"); flags->f->guisection = _("Print"); flags->f->suppress_required = YES; flags->r = G_define_flag(); flags->r->key = 'r'; flags->r->description = _("Cease using OGR/PostGIS, revert to native output and exit"); flags->r->suppress_required = YES; flags->r->guisection = _("Native"); flags->p = G_define_flag(); flags->p->key = 'p'; flags->p->description = _("Print current status"); flags->p->guisection = _("Print"); flags->p->suppress_required = YES; flags->g = G_define_flag(); flags->g->key = 'g'; flags->g->description = _("Print current status in shell script style"); flags->g->guisection = _("Print"); flags->g->suppress_required = YES; if (G_parser(argc, argv)) exit(EXIT_FAILURE); /* check options */ if (options->dsn->answer && options->format->answer && options->input->answer) G_fatal_error(_("%s= and %s=/%s= are mutually exclusive"), options->input->key, options->dsn->key, options->format->key); if (flags->f->answer || flags->p->answer || flags->r->answer || flags->g->answer || options->output->answer) return; if (!options->dsn->answer && !options->input->answer) G_fatal_error(_("%s= or %s= must be specified"), options->dsn->key, options->input->key); if (options->dsn->answer && !options->format->answer) G_fatal_error(_("%s= must be specified"), options->format->key); }