args.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "args.h"
  2. #include <stdlib.h>
  3. const char *argp_program_version = "kratos 1.0";
  4. const char *argp_program_bug_address = "<adam.pioterek@student.put.poznan.pl>";
  5. static char doc[] =
  6. "Small utility to monitor Wi-Fi signal strength and modify Wi-Fi card power \
  7. thereupon";
  8. static char args_doc[] = "INTERFACE";
  9. static struct argp_option options[] = {
  10. {"daemon", 'd', 0, 0, "Run in background", 0 },
  11. {"interval", 'i', "NUMBER", 0, "Time between Wi-Fi strength checks (in seconds)", 0 },
  12. {"logfile", 'l', "FILE", 0,
  13. "Path to log (with -d defaults to /var/log/kratos.log, otherwise to stdout)",
  14. 0 },
  15. {"maxpwr", 'm', "NUMBER", 0, "Maximal tx power (default 15)", 0},
  16. {"verbose", 'v', 0, 0, "Produce verbose output", 0 },
  17. { 0 }
  18. };
  19. static error_t parse(int key, char *arg, struct argp_state *state) {
  20. arguments *args = (arguments*)state->input;
  21. switch (key) {
  22. case 'i':
  23. args->interval = strtol(arg, NULL, 10);
  24. break;
  25. case 'd':
  26. args->daemon = 1;
  27. if (strcmp(args->logfile, "-") == 0) {
  28. args->logfile = "/var/log/kratos.log";
  29. }
  30. break;
  31. case 'v':
  32. args->verbose = 1;
  33. break;
  34. case 'l':
  35. args->logfile = arg;
  36. break;
  37. case 'm':
  38. args->maxpwr = strtol(arg, NULL, 10);
  39. case ARGP_KEY_ARG:
  40. if (state->arg_num >= 1) {
  41. argp_usage(state);
  42. }
  43. args->ifname = arg;
  44. break;
  45. case ARGP_KEY_END:
  46. if (state->arg_num < 1) {
  47. argp_usage(state);
  48. }
  49. break;
  50. default:
  51. return ARGP_ERR_UNKNOWN;
  52. }
  53. return 0;
  54. }
  55. struct argp argp = { options, parse, args_doc, doc, 0, 0, 0 };