kscheme.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. // ischeme_t
  41. char *ischeme_to_text(const ischeme_t *ischeme, int level);
  42. // kscheme_t
  43. kscheme_t *kscheme_new(kscheme_error_e *error);
  44. void kscheme_free(kscheme_t *scheme);
  45. const char *kscheme_strerror(kscheme_error_e error);
  46. bool_t kscheme_add_view(kscheme_t *scheme, kview_t *view);
  47. kview_t *kscheme_find_view(const kscheme_t *scheme, const char *name);
  48. bool_t kscheme_add_ptype(kscheme_t *scheme, kptype_t *ptype);
  49. kptype_t *kscheme_find_ptype(const kscheme_t *scheme, const char *name);
  50. bool_t kscheme_nested_from_ischeme(kscheme_t *kscheme, ischeme_t *ischeme,
  51. faux_error_t *error_stack);
  52. kscheme_t *kscheme_from_ischeme(ischeme_t *ischeme, faux_error_t *error_stack);
  53. C_DECL_END
  54. #endif // _klish_kscheme_h