Advertisement
MdSadmanSiraj

argp example 1

Jul 15th, 2022
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.44 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <argp.h>
  3.  
  4. const char *argp_program_version =
  5.   "argp-ex3 1.0";
  6. const char *argp_program_bug_address =
  7.  
  8. /* Program documentation. */
  9. static char doc[] =
  10.   "Argp example #3 -- a program with options and arguments using argp";
  11.  
  12. /* A description of the arguments we accept. */
  13. static char args_doc[] = "ARG1 ARG2";
  14.  
  15. /* The options we understand. */
  16. static struct argp_option options[] = {
  17.   {"verbose",  'v', 0,      0,  "Produce verbose output" },
  18.   {"quiet",    'q', 0,      0,  "Don't produce any output" },
  19.   {"silent",   's', 0,      OPTION_ALIAS },
  20.   {"output",   'o', "FILE", 0,
  21.    "Output to FILE instead of standard output" },
  22.   { 0 }
  23. };
  24.  
  25. /* Used by main to communicate with parse_opt. */
  26. struct arguments
  27. {
  28.   char *args[2];                /* arg1 & arg2 */
  29.   int silent, verbose;
  30.   char *output_file;
  31. };
  32.  
  33. /* Parse a single option. */
  34. static error_t
  35. parse_opt (int key, char *arg, struct argp_state *state)
  36. {
  37.   /* Get the input argument from argp_parse, which we
  38.      know is a pointer to our arguments structure. */
  39.   struct arguments *arguments = state->input;
  40.  
  41.   switch (key)
  42.     {
  43.     case 'q': case 's':
  44.       arguments->silent = 1;
  45.       break;
  46.     case 'v':
  47.       arguments->verbose = 1;
  48.       break;
  49.     case 'o':
  50.       arguments->output_file = arg;
  51.       break;
  52.  
  53.     case ARGP_KEY_ARG:
  54.       if (state->arg_num >= 2)
  55.         /* Too many arguments. */
  56.         argp_usage (state);
  57.  
  58.       arguments->args[state->arg_num] = arg;
  59.  
  60.       break;
  61.  
  62.     case ARGP_KEY_END:
  63.       if (state->arg_num < 2)
  64.         /* Not enough arguments. */
  65.         argp_usage (state);
  66.       break;
  67.  
  68.     default:
  69.       return ARGP_ERR_UNKNOWN;
  70.     }
  71.   return 0;
  72. }
  73.  
  74. /* Our argp parser. */
  75. static struct argp argp = { options, parse_opt, args_doc, doc };
  76.  
  77. int
  78. main (int argc, char **argv)
  79. {
  80.   struct arguments arguments;
  81.  
  82.   /* Default values. */
  83.   arguments.silent = 0;
  84.   arguments.verbose = 0;
  85.   arguments.output_file = "-";
  86.  
  87.   /* Parse our arguments; every option seen by parse_opt will
  88.      be reflected in arguments. */
  89.   argp_parse (&argp, argc, argv, 0, 0, &arguments);
  90.  
  91.   printf ("ARG1 = %s\nARG2 = %s\nOUTPUT_FILE = %s\n"
  92.           "VERBOSE = %s\nSILENT = %s\n",
  93.           arguments.args[0], arguments.args[1],
  94.           arguments.output_file,
  95.           arguments.verbose ? "yes" : "no",
  96.           arguments.silent ? "yes" : "no");
  97.  
  98.   exit (0);
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement