kparam.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /** @file kparam.h
  2. *
  3. * @brief Klish scheme's "param" entry
  4. */
  5. #ifndef _klish_kparam_h
  6. #define _klish_kparam_h
  7. #include <faux/list.h>
  8. #include <klish/kptype.h>
  9. typedef struct kparam_s kparam_t;
  10. typedef faux_list_node_t kparam_params_node_t;
  11. typedef enum {
  12. KPARAM_NONE, // Illegal
  13. KPARAM_COMMON, // Common parameter
  14. KPARAM_SUBCOMMAND, // The value of this parameter is its name
  15. KPARAM_SWITCH, // User can choose one of nested parameters
  16. KPARAM_MULTI, // Nested parameters can be used several times
  17. } kparam_mode_e;
  18. C_DECL_BEGIN
  19. kparam_t *kparam_new(const char *name);
  20. void kparam_free(kparam_t *param);
  21. const char *kparam_name(const kparam_t *param);
  22. const char *kparam_help(const kparam_t *param);
  23. bool_t kparam_set_help(kparam_t *param, const char *help);
  24. const char *kparam_ptype_ref(const kparam_t *param);
  25. bool_t kparam_set_ptype_ref(kparam_t *param, const char *ptype_ref);
  26. kptype_t *kparam_ptype(const kparam_t *param);
  27. bool_t kparam_set_ptype(kparam_t *param, kptype_t *ptype);
  28. kparam_mode_e kparam_mode(const kparam_t *param);
  29. bool_t kparam_set_mode(kparam_t *param, kparam_mode_e mode);
  30. // PARAMs
  31. faux_list_t *kparam_params(const kparam_t *param);
  32. bool_t kparam_add_params(kparam_t *param, kparam_t *nested_param);
  33. kparam_t *kparam_find_param(const kparam_t *param, const char *name);
  34. ssize_t kparam_params_len(const kparam_t *param);
  35. kparam_params_node_t *kparam_params_iter(const kparam_t *param);
  36. kparam_t *kparam_params_each(kparam_params_node_t **iter);
  37. C_DECL_END
  38. #endif // _klish_kparam_h