kpargv.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /** @file kpargv.h
  2. *
  3. * @brief Parsed ARGuments Vector
  4. */
  5. #ifndef _klish_kpargv_h
  6. #define _klish_kpargv_h
  7. #include <faux/list.h>
  8. #include <klish/kentry.h>
  9. typedef enum {
  10. KPARSE_NONE,
  11. KPARSE_OK,
  12. KPARSE_INPROGRESS,
  13. KPARSE_NOTFOUND,
  14. KPARSE_INCOMPLETED,
  15. KPARSE_ILLEGAL,
  16. KPARSE_ERROR,
  17. } kpargv_status_e;
  18. typedef struct kpargv_s kpargv_t;
  19. typedef struct kparg_s kparg_t;
  20. typedef faux_list_node_t kpargv_pargs_node_t;
  21. C_DECL_BEGIN
  22. // Parg
  23. kparg_t *kparg_new(kentry_t *entry, const char *value);
  24. void kparg_free(kparg_t *parg);
  25. kentry_t *kparg_entry(const kparg_t *parg);
  26. bool_t kparg_set_value(kparg_t *parg, const char *value);
  27. const char *kparg_value(const kparg_t *parg);
  28. // Pargv
  29. kpargv_t *kpargv_new();
  30. void kpargv_free(kpargv_t *pargv);
  31. // Status
  32. kpargv_status_e kpargv_status(const kpargv_t *pargv);
  33. bool_t kpargv_set_status(kpargv_t *pargv, kpargv_status_e status);
  34. const char *kpargv_status_str(const kpargv_t *pargv);
  35. // Level
  36. size_t kpargv_level(const kpargv_t *pargv);
  37. bool_t kpargv_set_level(kpargv_t *pargv, size_t level);
  38. // Command
  39. const kentry_t *kpargv_command(const kpargv_t *pargv);
  40. bool_t kpargv_set_command(kpargv_t *pargv, const kentry_t *command);
  41. // Continuable
  42. bool_t kpargv_continuable(const kpargv_t *pargv);
  43. bool_t kpargv_set_continuable(kpargv_t *pargv, bool_t continuable);
  44. // Pargs
  45. faux_list_t *kpargv_pargs(const kpargv_t *pargv);
  46. ssize_t kpargv_pargs_len(const kpargv_t *pargv);
  47. bool_t kpargv_pargs_is_empty(const kpargv_t *pargv);
  48. bool_t kpargv_add_parg(kpargv_t *pargv, kparg_t *parg);
  49. kpargv_pargs_node_t *kpargv_pargs_iter(const kpargv_t *pargv);
  50. kparg_t *kpargv_pargs_each(kpargv_pargs_node_t **iter);
  51. kparg_t *kpargv_pargs_last(const kpargv_t *pargv);
  52. kparg_t *kpargv_entry_exists(const kpargv_t *pargv, const void *entry);
  53. C_DECL_END
  54. #endif // _klish_kpargv_h