kscheme.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /** @file kscheme.h
  2. *
  3. * @brief Klish Scheme
  4. */
  5. #ifndef _klish_kscheme_h
  6. #define _klish_kscheme_h
  7. #include <faux/error.h>
  8. #include <klish/kptype.h>
  9. #include <klish/kaction.h>
  10. #include <klish/kparam.h>
  11. #include <klish/kcommand.h>
  12. #include <klish/kview.h>
  13. #define VIEW_LIST .views = &(iview_t * []) {
  14. #define END_VIEW_LIST NULL }
  15. #define VIEW &(iview_t)
  16. #define PTYPE_LIST .ptypes = &(iptype_t * []) {
  17. #define END_PTYPE_LIST NULL }
  18. #define PTYPE &(iptype_t)
  19. #define COMMAND_LIST .commands = &(icommand_t * []) {
  20. #define END_COMMAND_LIST NULL }
  21. #define COMMAND &(icommand_t)
  22. #define PARAM_LIST .params = &(iparam_t * []) {
  23. #define END_PARAM_LIST NULL }
  24. #define PARAM &(iparam_t)
  25. #define ACTION_LIST .actions = &(iaction_t * []) {
  26. #define END_ACTION_LIST NULL }
  27. #define ACTION &(iaction_t)
  28. typedef struct kscheme_s kscheme_t;
  29. typedef struct ischeme_s {
  30. char *name;
  31. iptype_t * (*ptypes)[];
  32. iview_t * (*views)[];
  33. } ischeme_t;
  34. typedef enum {
  35. KSCHEME_ERROR_OK,
  36. KSCHEME_ERROR_INTERNAL,
  37. KSCHEME_ERROR_ALLOC,
  38. } kscheme_error_e;
  39. C_DECL_BEGIN
  40. kscheme_t *kscheme_new(kscheme_error_e *error);
  41. void kscheme_free(kscheme_t *scheme);
  42. const char *kscheme_strerror(kscheme_error_e error);
  43. bool_t kscheme_add_view(kscheme_t *scheme, kview_t *view);
  44. kview_t *kscheme_find_view(const kscheme_t *scheme, const char *name);
  45. bool_t kscheme_add_ptype(kscheme_t *scheme, kptype_t *ptype);
  46. kptype_t *kscheme_find_ptype(const kscheme_t *scheme, const char *name);
  47. bool_t kscheme_nested_from_ischeme(kscheme_t *kscheme, ischeme_t *ischeme,
  48. faux_error_t *error_stack);
  49. kscheme_t *kscheme_from_ischeme(ischeme_t *ischeme, faux_error_t *error_stack);
  50. C_DECL_END
  51. #endif // _klish_kscheme_h