Define simple configuration on INI files.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

156 lignes
4.4 KiB

  1. #ifndef INI_CONFIG_H
  2. #define INI_CONFIG_H
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <stdint.h>
  6. #include <stdbool.h>
  7. #include <minIni.h>
  8. typedef struct {
  9. void* serialize;
  10. void* deserialize;
  11. } INI_ConfigTransformer;
  12. struct INI_ConfigItem;
  13. typedef void INI_ConfigTypeLoad(struct INI_ConfigItem*, const char*);
  14. typedef enum {
  15. INI_CONFIG_SAVE_ITEM_ERROR = -1,
  16. INI_CONFIG_SAVE_ITEM_OK,
  17. } INI_ConfigSaveItemResult;
  18. typedef INI_ConfigSaveItemResult INI_ConfigTypeSave(struct INI_ConfigItem*, const char*);
  19. typedef void INI_ConfigTypeOverride(struct INI_ConfigItem*, uint8_t, const char*[]);
  20. typedef struct {
  21. size_t size;
  22. INI_ConfigTypeLoad* load;
  23. INI_ConfigTypeSave* save;
  24. INI_ConfigTypeOverride* override;
  25. } INI_ConfigType;
  26. typedef struct INI_ConfigItem {
  27. INI_ConfigType type;
  28. const char* section;
  29. const char* key;
  30. const char* cmdline_option;
  31. const void* default_value;
  32. void* validator;
  33. INI_ConfigTransformer transformer;
  34. void* dest;
  35. } INI_ConfigItem;
  36. void INI_ConfigGetDefaultPath(char*, size_t);
  37. const char* INI_ConfigGetCommandlineOption(uint8_t, const char*[], const char*);
  38. typedef enum {
  39. INI_CONFIG_INITIALIZE_RESULT_ERROR = -1,
  40. INI_CONFIG_INITIALIZE_RESULT_OK,
  41. INI_CONFIG_INITIALIZE_RESULT_WARNING
  42. } INI_ConfigInitializeResult;
  43. INI_ConfigInitializeResult INI_ConfigInitialize(INI_ConfigItem[], const char*, uint8_t, const char*[]);
  44. typedef int32_t INI_ConfigSaveResult;
  45. INI_ConfigSaveResult INI_ConfigSave(INI_ConfigItem[], const char*);
  46. void INI_ConfigLoadU8(INI_ConfigItem*, const char*);
  47. void INI_ConfigLoadU16(INI_ConfigItem*, const char*);
  48. void INI_ConfigLoadU32(INI_ConfigItem*, const char*);
  49. void INI_ConfigLoadI8(INI_ConfigItem*, const char*);
  50. void INI_ConfigLoadI16(INI_ConfigItem*, const char*);
  51. void INI_ConfigLoadI32(INI_ConfigItem*, const char*);
  52. void INI_ConfigLoadString(INI_ConfigItem*, const char*);
  53. INI_ConfigSaveItemResult INI_ConfigSaveU8(INI_ConfigItem*, const char*);
  54. INI_ConfigSaveItemResult INI_ConfigSaveU16(INI_ConfigItem*, const char*);
  55. INI_ConfigSaveItemResult INI_ConfigSaveU32(INI_ConfigItem*, const char*);
  56. INI_ConfigSaveItemResult INI_ConfigSaveI8(INI_ConfigItem*, const char*);
  57. INI_ConfigSaveItemResult INI_ConfigSaveI16(INI_ConfigItem*, const char*);
  58. INI_ConfigSaveItemResult INI_ConfigSaveI32(INI_ConfigItem*, const char*);
  59. INI_ConfigSaveItemResult INI_ConfigSaveString(INI_ConfigItem*, const char*);
  60. void INI_ConfigOverrideU8(INI_ConfigItem*, uint8_t, const char*[]);
  61. void INI_ConfigOverrideU16(INI_ConfigItem*, uint8_t, const char*[]);
  62. void INI_ConfigOverrideU32(INI_ConfigItem*, uint8_t, const char*[]);
  63. void INI_ConfigOverrideI8(INI_ConfigItem*, uint8_t, const char*[]);
  64. void INI_ConfigOverrideI16(INI_ConfigItem*, uint8_t, const char*[]);
  65. void INI_ConfigOverrideI32(INI_ConfigItem*, uint8_t, const char*[]);
  66. void INI_ConfigOverrideString(INI_ConfigItem*, uint8_t, const char*[]);
  67. #define INI_CONFIG_TYPE_U8 (INI_ConfigType) { \
  68. .size = sizeof(uint8_t), \
  69. .load = INI_ConfigLoadU8, \
  70. .save = INI_ConfigSaveU8, \
  71. .override = INI_ConfigOverrideU8, \
  72. }
  73. #define INI_CONFIG_TYPE_U16 (INI_ConfigType) { \
  74. .size = sizeof(uint16_t), \
  75. .load = INI_ConfigLoadU16, \
  76. .save = INI_ConfigSaveU16, \
  77. .override = INI_ConfigOverrideU16, \
  78. }
  79. #define INI_CONFIG_TYPE_U32 (INI_ConfigType) { \
  80. .size = sizeof(uint32_t), \
  81. .load = INI_ConfigLoadU32, \
  82. .save = INI_ConfigSaveU32, \
  83. .override = INI_ConfigOverrideU32, \
  84. }
  85. #define INI_CONFIG_TYPE_I8 (INI_ConfigType) { \
  86. .size = sizeof(int8_t), \
  87. .load = INI_ConfigLoadI8, \
  88. .save = INI_ConfigSaveI8, \
  89. .override = INI_ConfigOverrideI8, \
  90. }
  91. #define INI_CONFIG_TYPE_I16 (INI_ConfigType) { \
  92. .size = sizeof(int16_t), \
  93. .load = INI_ConfigLoadI16, \
  94. .save = INI_ConfigSaveI16, \
  95. .override = INI_ConfigOverrideI16, \
  96. }
  97. #define INI_CONFIG_TYPE_I32 (INI_ConfigType) { \
  98. .size = sizeof(int32_t), \
  99. .load = INI_ConfigLoadI32, \
  100. .save = INI_ConfigSaveI32, \
  101. .override = INI_ConfigOverrideI32, \
  102. }
  103. #define INI_CONFIG_TYPE_FNS_STRING(X) (INI_ConfigType) { \
  104. .size = (sizeof(char) * X), \
  105. .load = INI_ConfigLoadString, \
  106. .save = INI_ConfigSaveString, \
  107. .override = INI_ConfigOverrideString, \
  108. }
  109. #define INI_CONFIG_TRANSFORMER_NONE (INI_ConfigTransformer) { \
  110. .serialize = NULL, \
  111. .deserialize = NULL, \
  112. }
  113. #define INI_CONFIG_ITEM_NULL (INI_ConfigItem) { \
  114. (INI_ConfigType) { \
  115. .size = 0, \
  116. .load = NULL, \
  117. .save = NULL, \
  118. .override = NULL, \
  119. }, \
  120. NULL, \
  121. NULL, \
  122. NULL, \
  123. NULL, \
  124. NULL, \
  125. INI_CONFIG_TRANSFORMER_NONE, \
  126. NULL, \
  127. }
  128. #endif