args.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #ifndef TOOLBOX_ARGS_H
  2. #define TOOLBOX_ARGS_H
  3. #include <stdbool.h>
  4. #include <stddef.h>
  5. #include <stdint.h>
  6. #ifdef TOOLBOX_TYPEDEF
  7. typedef struct args args_st;
  8. #endif
  9. #define MAX_NUM_OF_OPTIONS 1024
  10. struct args_op {
  11. bool mand;
  12. enum {
  13. TOGGLE,
  14. STRING,
  15. INT8, INT16, INT32, INT64,
  16. FLOAT, DOUBLE
  17. } type;
  18. char abv;
  19. const void *ret;
  20. struct {
  21. const char *cstr;
  22. size_t size;
  23. } verb;
  24. const char *desc;
  25. };
  26. struct args {
  27. const int argc;
  28. char **argv;
  29. size_t mand_num;
  30. char prepender;
  31. struct {
  32. size_t size;
  33. struct args_op data[MAX_NUM_OF_OPTIONS];
  34. } ops;
  35. };
  36. __attribute__((__pure__))
  37. struct args
  38. args_create(int argc, char **argv);
  39. void
  40. args_set_toggle(struct args *self
  41. , const char abreviation, const char *restrict verbose
  42. , const char *restrict description, bool mandatory
  43. , bool *ret);
  44. void
  45. args_set_op_str(struct args *self
  46. , const char abreviation, const char *restrict verbose
  47. , const char *restrict description
  48. , bool mandatory, void *ret);
  49. void
  50. args_set_op_float(struct args *self
  51. , const char abreviation, const char *restrict verbose
  52. , const char *restrict description, bool mandatory
  53. , bool is_double, void *ret);
  54. void
  55. args_set_op_int(struct args *self
  56. , const char abreviation, const char *restrict verbose
  57. , const char *restrict description, bool mandatory
  58. , size_t size_in_byte, void *ret);
  59. void
  60. args_check(struct args *self);
  61. #endif