kscheme.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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/kplugin.h>
  10. #include <klish/kaction.h>
  11. #include <klish/kparam.h>
  12. #include <klish/kcommand.h>
  13. #include <klish/kview.h>
  14. #define VIEW_LIST .views = &(iview_t * []) {
  15. #define END_VIEW_LIST NULL }
  16. #define VIEW &(iview_t)
  17. #define PTYPE_LIST .ptypes = &(iptype_t * []) {
  18. #define END_PTYPE_LIST NULL }
  19. #define PTYPE &(iptype_t)
  20. #define COMMAND_LIST .commands = &(icommand_t * []) {
  21. #define END_COMMAND_LIST NULL }
  22. #define COMMAND &(icommand_t)
  23. #define PARAM_LIST .params = &(iparam_t * []) {
  24. #define END_PARAM_LIST NULL }
  25. #define PARAM &(iparam_t)
  26. #define ACTION_LIST .actions = &(iaction_t * []) {
  27. #define END_ACTION_LIST NULL }
  28. #define ACTION &(iaction_t)
  29. #define PLUGIN_LIST .plugins = &(iplugin_t * []) {
  30. #define END_PLUGIN_LIST NULL }
  31. #define PLUGIN &(iplugin_t)
  32. typedef struct kscheme_s kscheme_t;
  33. typedef struct ischeme_s {
  34. char *name;
  35. iplugin_t * (*plugins)[];
  36. iptype_t * (*ptypes)[];
  37. iview_t * (*views)[];
  38. } ischeme_t;
  39. typedef enum {
  40. KSCHEME_ERROR_OK,
  41. KSCHEME_ERROR_INTERNAL,
  42. KSCHEME_ERROR_ALLOC,
  43. } kscheme_error_e;
  44. C_DECL_BEGIN
  45. // ischeme_t
  46. char *ischeme_to_text(const ischeme_t *ischeme, int level);
  47. // kscheme_t
  48. kscheme_t *kscheme_new(kscheme_error_e *error);
  49. void kscheme_free(kscheme_t *scheme);
  50. const char *kscheme_strerror(kscheme_error_e error);
  51. bool_t kscheme_add_view(kscheme_t *scheme, kview_t *view);
  52. kview_t *kscheme_find_view(const kscheme_t *scheme, const char *name);
  53. bool_t kscheme_add_ptype(kscheme_t *scheme, kptype_t *ptype);
  54. kptype_t *kscheme_find_ptype(const kscheme_t *scheme, const char *name);
  55. bool_t kscheme_add_plugin(kscheme_t *scheme, kplugin_t *plugin);
  56. kplugin_t *kscheme_find_plugin(const kscheme_t *scheme, const char *name);
  57. bool_t kscheme_nested_from_ischeme(kscheme_t *kscheme, ischeme_t *ischeme,
  58. faux_error_t *error_stack);
  59. kscheme_t *kscheme_from_ischeme(ischeme_t *ischeme, faux_error_t *error_stack);
  60. C_DECL_END
  61. #endif // _klish_kscheme_h