| 
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "getopt.h"
#include "cmdline.h"
static
void clear_given (struct gengetopt_args_info *args_info);
static
void clear_args (struct gengetopt_args_info *args_info);
static int
cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required, const char *additional_error);
static char *
gengetopt_strdup (const char *s);
static
void clear_given (struct gengetopt_args_info *args_info)
{
  args_info->help_given = 0 ;
  args_info->version_given = 0 ;
  args_info->input_given = 0 ;
  args_info->output_given = 0 ;
  args_info->src_lang_given = 0 ;
  args_info->out_format_given = 0 ;
  args_info->verbose_given = 0 ;
  args_info->doc_given = 0 ;
  args_info->no_doc_given = 0 ;
  args_info->css_given = 0 ;
  args_info->title_given = 0 ;
  args_info->tab_given = 0 ;
  args_info->header_given = 0 ;
  args_info->footer_given = 0 ;
  args_info->tags_file_given = 0 ;
  args_info->line_number_given = 0 ;
  args_info->line_number_ref_given = 0 ;
  args_info->output_dir_given = 0 ;
  args_info->gen_version_given = 0 ;
}
static
void clear_args (struct gengetopt_args_info *args_info)
{
  args_info->input_arg = NULL;
  args_info->output_arg = NULL;
  args_info->src_lang_arg = NULL;
  args_info->out_format_arg = NULL;
  args_info->css_arg = NULL;
  args_info->title_arg = NULL;
  args_info->header_arg = NULL;
  args_info->footer_arg = NULL;
  args_info->tags_file_arg = NULL;
  args_info->output_dir_arg = NULL;
  args_info->gen_version_flag = 1;
}
void
cmdline_parser_print_version (void)
{
  printf ("%s %s\n", CMDLINE_PARSER_PACKAGE, CMDLINE_PARSER_VERSION);
}
void
cmdline_parser_print_help (void)
{
  cmdline_parser_print_version ();
  printf("\n"
  "Purpose:\n"
"  Highlight the syntax of a source file (e.g. Java) into a specific format \n  (e.g. HTML)\n"
  "\n"
  "Usage: %s [OPTIONS]... [FILES]...\n", CMDLINE_PARSER_PACKAGE);
  printf("\n");
  printf("%s\n","  -h, --help               Print help and exit");
  printf("%s\n","  -V, --version            Print version and exit");
  printf("%s\n","  -i, --input=STRING       input file. default std input");
  printf("%s\n","  -o, --output=STRING      output file. default std output");
  printf("%s\n","  -s, --src-lang=STRING    source language (e.g. java, javascript, cpp, \n                             prolog, perl, php3, python, ruby, flex, \n                             changelog, lua, caml, sml, log).   If not \n                             specified, the source language will be guessed \n                             from the file extension.");
  printf("%s\n","  -f, --out-format=STRING  output format (e.g. html, xhtml, esc)");
  printf("%s\n","  -v, --verbose            verbose mode on");
  printf("%s\n","  -d, --doc                create html with title and header");
  printf("%s\n","      --no-doc             cancel the --doc option even if it is implied \n                             (e.g., when css is given)");
  printf("%s\n","  -c, --css=STRING         use a css for formatting. Implies --doc");
  printf("%s\n","  -T, --title=STRING       give a title to the html. Implies --doc");
  printf("%s\n","  -t, --tab=INT            specify tab length. default 8");
  printf("%s\n","  -H, --header=STRING      file to insert as header");
  printf("%s\n","  -F, --footer=STRING      file to insert as footer");
  printf("%s\n","      --tags-file=STRING   specify format options (def. tags.j2h)");
  printf("%s\n","  -n, --line-number        number all output lines");
  printf("%s\n","      --line-number-ref    number all output lines and generate an anchor that \n                             can be referred to from another document");
  printf("%s\n","      --output-dir=STRING  output directory");
  printf("%s\n","      --gen-version        put gengetopt version in the generated file  \n                             (default=on)");
}
void
cmdline_parser_init (struct gengetopt_args_info *args_info)
{
  clear_given (args_info);
  clear_args (args_info);
  args_info->inputs = NULL;
  args_info->inputs_num = 0;
}
void
cmdline_parser_free (struct gengetopt_args_info *args_info)
{
  
  unsigned int i;
  if (args_info->input_arg)
    {
      free (args_info->input_arg); 
      args_info->input_arg = 0;
    }
  if (args_info->output_arg)
    {
      free (args_info->output_arg); 
      args_info->output_arg = 0;
    }
  if (args_info->src_lang_arg)
    {
      free (args_info->src_lang_arg); 
      args_info->src_lang_arg = 0;
    }
  if (args_info->out_format_arg)
    {
      free (args_info->out_format_arg); 
      args_info->out_format_arg = 0;
    }
  if (args_info->css_arg)
    {
      free (args_info->css_arg); 
      args_info->css_arg = 0;
    }
  if (args_info->title_arg)
    {
      free (args_info->title_arg); 
      args_info->title_arg = 0;
    }
  if (args_info->header_arg)
    {
      free (args_info->header_arg); 
      args_info->header_arg = 0;
    }
  if (args_info->footer_arg)
    {
      free (args_info->footer_arg); 
      args_info->footer_arg = 0;
    }
  if (args_info->tags_file_arg)
    {
      free (args_info->tags_file_arg); 
      args_info->tags_file_arg = 0;
    }
  if (args_info->output_dir_arg)
    {
      free (args_info->output_dir_arg); 
      args_info->output_dir_arg = 0;
    }
  
  for (i = 0; i < args_info->inputs_num; ++i)
    free (args_info->inputs [i]);
  
  if (args_info->inputs_num)
    free (args_info->inputs);
  
  clear_given (args_info);
}
char *
gengetopt_strdup (const char *s)
{
  char *result = NULL;
  if (!s)
    return result;
  result = (char*)malloc(strlen(s) + 1);
  if (result == (char*)0)
    return (char*)0;
  strcpy(result, s);
  return result;
}
int
cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info)
{
  return cmdline_parser2 (argc, argv, args_info, 0, 1, 1);
}
int
cmdline_parser2 (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required)
{
  int result;
  
  result = cmdline_parser_internal (argc, argv, args_info, override, initialize, check_required, NULL);
  
  if (result == EXIT_FAILURE)
    {
      cmdline_parser_free (args_info);
      exit (EXIT_FAILURE);
    }
  
  return result;
}
int
cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required, const char *additional_error)
{
  int c;	
  int error = 0;
  struct gengetopt_args_info local_args_info;
  if (initialize)
    cmdline_parser_init (args_info);
  cmdline_parser_init (&local_args_info);
  optarg = 0;
  optind = 1;
  opterr = 1;
  optopt = '?';
  while (1)
    {
      int option_index = 0;
      char *stop_char;
      static struct option long_options[] = {
        { "help",	0, NULL, 'h' },
        { "version",	0, NULL, 'V' },
        { "input",	1, NULL, 'i' },
        { "output",	1, NULL, 'o' },
        { "src-lang",	1, NULL, 's' },
        { "out-format",	1, NULL, 'f' },
        { "verbose",	0, NULL, 'v' },
        { "doc",	0, NULL, 'd' },
        { "no-doc",	0, NULL, 0 },
        { "css",	1, NULL, 'c' },
        { "title",	1, NULL, 'T' },
        { "tab",	1, NULL, 't' },
        { "header",	1, NULL, 'H' },
        { "footer",	1, NULL, 'F' },
        { "tags-file",	1, NULL, 0 },
        { "line-number",	0, NULL, 'n' },
        { "line-number-ref",	0, NULL, 0 },
        { "output-dir",	1, NULL, 0 },
        { "gen-version",	0, NULL, 0 },
        { NULL,	0, NULL, 0 }
      };
      stop_char = 0;
      c = getopt_long (argc, argv, "hVi:o:s:f:vdc:T:t:H:F:n", long_options, &option_index);
      if (c == -1) break;	
      switch (c)
        {
        case 'h':	
          if (local_args_info.help_given)
            {
              fprintf (stderr, "%s: `--help' (`-h') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->help_given && ! override)
            continue;
          local_args_info.help_given = 1;
          args_info->help_given = 1;
          return 0;
        case 'V':	
          if (local_args_info.version_given)
            {
              fprintf (stderr, "%s: `--version' (`-V') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->version_given && ! override)
            continue;
          local_args_info.version_given = 1;
          args_info->version_given = 1;
          return 0;
        case 'i':	
          if (local_args_info.input_given)
            {
              fprintf (stderr, "%s: `--input' (`-i') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->input_given && ! override)
            continue;
          local_args_info.input_given = 1;
          args_info->input_given = 1;
          if (args_info->input_arg)
            free (args_info->input_arg); 
          args_info->input_arg = gengetopt_strdup (optarg);
          break;
        case 'o':	
          if (local_args_info.output_given)
            {
              fprintf (stderr, "%s: `--output' (`-o') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->output_given && ! override)
            continue;
          local_args_info.output_given = 1;
          args_info->output_given = 1;
          if (args_info->output_arg)
            free (args_info->output_arg); 
          args_info->output_arg = gengetopt_strdup (optarg);
          break;
        case 's':	
          if (local_args_info.src_lang_given)
            {
              fprintf (stderr, "%s: `--src-lang' (`-s') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->src_lang_given && ! override)
            continue;
          local_args_info.src_lang_given = 1;
          args_info->src_lang_given = 1;
          if (args_info->src_lang_arg)
            free (args_info->src_lang_arg); 
          args_info->src_lang_arg = gengetopt_strdup (optarg);
          break;
        case 'f':	
          if (local_args_info.out_format_given)
            {
              fprintf (stderr, "%s: `--out-format' (`-f') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->out_format_given && ! override)
            continue;
          local_args_info.out_format_given = 1;
          args_info->out_format_given = 1;
          if (args_info->out_format_arg)
            free (args_info->out_format_arg); 
          args_info->out_format_arg = gengetopt_strdup (optarg);
          break;
        case 'v':	
          if (local_args_info.verbose_given)
            {
              fprintf (stderr, "%s: `--verbose' (`-v') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->verbose_given && ! override)
            continue;
          local_args_info.verbose_given = 1;
          args_info->verbose_given = 1;
          break;
        case 'd':	
          if (local_args_info.doc_given)
            {
              fprintf (stderr, "%s: `--doc' (`-d') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->doc_given && ! override)
            continue;
          local_args_info.doc_given = 1;
          args_info->doc_given = 1;
          break;
        case 'c':	
          if (local_args_info.css_given)
            {
              fprintf (stderr, "%s: `--css' (`-c') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->css_given && ! override)
            continue;
          local_args_info.css_given = 1;
          args_info->css_given = 1;
          if (args_info->css_arg)
            free (args_info->css_arg); 
          args_info->css_arg = gengetopt_strdup (optarg);
          break;
        case 'T':	
          if (local_args_info.title_given)
            {
              fprintf (stderr, "%s: `--title' (`-T') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->title_given && ! override)
            continue;
          local_args_info.title_given = 1;
          args_info->title_given = 1;
          if (args_info->title_arg)
            free (args_info->title_arg); 
          args_info->title_arg = gengetopt_strdup (optarg);
          break;
        case 't':	
          if (local_args_info.tab_given)
            {
              fprintf (stderr, "%s: `--tab' (`-t') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->tab_given && ! override)
            continue;
          local_args_info.tab_given = 1;
          args_info->tab_given = 1;
          args_info->tab_arg = strtol (optarg,&stop_char,0);
          break;
        case 'H':	
          if (local_args_info.header_given)
            {
              fprintf (stderr, "%s: `--header' (`-H') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->header_given && ! override)
            continue;
          local_args_info.header_given = 1;
          args_info->header_given = 1;
          if (args_info->header_arg)
            free (args_info->header_arg); 
          args_info->header_arg = gengetopt_strdup (optarg);
          break;
        case 'F':	
          if (local_args_info.footer_given)
            {
              fprintf (stderr, "%s: `--footer' (`-F') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->footer_given && ! override)
            continue;
          local_args_info.footer_given = 1;
          args_info->footer_given = 1;
          if (args_info->footer_arg)
            free (args_info->footer_arg); 
          args_info->footer_arg = gengetopt_strdup (optarg);
          break;
        case 'n':	
          if (local_args_info.line_number_given)
            {
              fprintf (stderr, "%s: `--line-number' (`-n') option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
              goto failure;
            }
          if (args_info->line_number_given && ! override)
            continue;
          local_args_info.line_number_given = 1;
          args_info->line_number_given = 1;
          break;
        case 0:	
          
          if (strcmp (long_options[option_index].name, "no-doc") == 0)
          {
            if (local_args_info.no_doc_given)
              {
                fprintf (stderr, "%s: `--no-doc' option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
                goto failure;
              }
            if (args_info->no_doc_given && ! override)
              continue;
            local_args_info.no_doc_given = 1;
            args_info->no_doc_given = 1;
            break;
          }
          
          
          else if (strcmp (long_options[option_index].name, "tags-file") == 0)
          {
            if (local_args_info.tags_file_given)
              {
                fprintf (stderr, "%s: `--tags-file' option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
                goto failure;
              }
            if (args_info->tags_file_given && ! override)
              continue;
            local_args_info.tags_file_given = 1;
            args_info->tags_file_given = 1;
            if (args_info->tags_file_arg)
              free (args_info->tags_file_arg); 
            args_info->tags_file_arg = gengetopt_strdup (optarg);
          }
          
          
          else if (strcmp (long_options[option_index].name, "line-number-ref") == 0)
          {
            if (local_args_info.line_number_ref_given)
              {
                fprintf (stderr, "%s: `--line-number-ref' option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
                goto failure;
              }
            if (args_info->line_number_ref_given && ! override)
              continue;
            local_args_info.line_number_ref_given = 1;
            args_info->line_number_ref_given = 1;
            break;
          }
          
          
          else if (strcmp (long_options[option_index].name, "output-dir") == 0)
          {
            if (local_args_info.output_dir_given)
              {
                fprintf (stderr, "%s: `--output-dir' option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
                goto failure;
              }
            if (args_info->output_dir_given && ! override)
              continue;
            local_args_info.output_dir_given = 1;
            args_info->output_dir_given = 1;
            if (args_info->output_dir_arg)
              free (args_info->output_dir_arg); 
            args_info->output_dir_arg = gengetopt_strdup (optarg);
          }
          
          
          else if (strcmp (long_options[option_index].name, "gen-version") == 0)
          {
            if (local_args_info.gen_version_given)
              {
                fprintf (stderr, "%s: `--gen-version' option given more than once%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
                goto failure;
              }
            if (args_info->gen_version_given && ! override)
              continue;
            local_args_info.gen_version_given = 1;
            args_info->gen_version_given = 1;
            args_info->gen_version_flag = !(args_info->gen_version_flag);
          }
          
          break;
        case '?':	
          
          goto failure;
        default:	
          fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : ""));
          abort ();
        } 
    } 
  if (check_required)
    {
      if (! args_info->out_format_given)
        {
          fprintf (stderr, "%s: '--out-format' ('-f') option required%s\n", CMDLINE_PARSER_PACKAGE, (additional_error ? additional_error : ""));
          error = 1;
        }
    }
  if ( error )
    return (EXIT_FAILURE);
  if (optind < argc)
    {
      int i = 0 ;
  
      args_info->inputs_num = argc - optind ;
      args_info->inputs = 
        (char **)(malloc ((args_info->inputs_num)*sizeof(char *))) ;
      while (optind < argc)
        args_info->inputs[ i++ ] = gengetopt_strdup (argv[optind++]) ; 
    }
  
  return 0;
failure:
  return (EXIT_FAILURE);
}
 |