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.

126 lignes
3.3 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_ConfigSerializerPair;
  12. struct INI_ConfigItem;
  13. typedef void INI_ConfigLoadType(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_ConfigSaveType(struct INI_ConfigItem*, const char*);
  19. typedef void INI_ConfigOverrideType(struct INI_ConfigItem*, uint8_t, const char*[]);
  20. typedef struct {
  21. size_t size;
  22. INI_ConfigLoadType* load;
  23. INI_ConfigSaveType* save;
  24. INI_ConfigOverrideType* override;
  25. } INI_ConfigTypeFns;
  26. typedef struct INI_ConfigItem {
  27. INI_ConfigTypeFns fns;
  28. const char* section;
  29. const char* key;
  30. const char* cmdline_option;
  31. const void* default_value;
  32. void* validator;
  33. INI_ConfigSerializerPair 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_ConfigLoadI32(INI_ConfigItem*, const char*);
  49. void INI_ConfigLoadString(INI_ConfigItem*, const char*);
  50. INI_ConfigSaveItemResult INI_ConfigSaveU8(INI_ConfigItem*, const char*);
  51. INI_ConfigSaveItemResult INI_ConfigSaveU16(INI_ConfigItem*, const char*);
  52. INI_ConfigSaveItemResult INI_ConfigSaveI32(INI_ConfigItem*, const char*);
  53. INI_ConfigSaveItemResult INI_ConfigSaveString(INI_ConfigItem*, const char*);
  54. void INI_ConfigOverrideU8(INI_ConfigItem*, uint8_t, const char*[]);
  55. void INI_ConfigOverrideU16(INI_ConfigItem*, uint8_t, const char*[]);
  56. void INI_ConfigOverrideI32(INI_ConfigItem*, uint8_t, const char*[]);
  57. void INI_ConfigOverrideString(INI_ConfigItem*, uint8_t, const char*[]);
  58. #define INI_CONFIG_TYPE_FNS_I32 (INI_ConfigTypeFns) { \
  59. .size = sizeof(int32_t), \
  60. .load = INI_ConfigLoadI32, \
  61. .save = INI_ConfigSaveI32, \
  62. .override = INI_ConfigOverrideI32, \
  63. }
  64. #define INI_CONFIG_TYPE_FNS_U16 (INI_ConfigTypeFns) { \
  65. .size = sizeof(uint16_t), \
  66. .load = INI_ConfigLoadU16, \
  67. .save = INI_ConfigSaveU16, \
  68. .override = INI_ConfigOverrideU16, \
  69. }
  70. #define INI_CONFIG_TYPE_FNS_U8 (INI_ConfigTypeFns) { \
  71. .size = sizeof(uint8_t), \
  72. .load = INI_ConfigLoadU8, \
  73. .save = INI_ConfigSaveU8, \
  74. .override = INI_ConfigOverrideU8, \
  75. }
  76. #define INI_CONFIG_TYPE_FNS_VOID (INI_ConfigTypeFns) { \
  77. .size = 0, \
  78. .load = NULL, \
  79. .save = NULL, \
  80. .override = NULL, \
  81. }
  82. #define INI_CONFIG_TYPE_FNS_STRING(X) (INI_ConfigTypeFns) { \
  83. .size = (X), \
  84. .load = INI_ConfigLoadString, \
  85. .save = INI_ConfigSaveString, \
  86. .override = INI_ConfigOverrideString, \
  87. }
  88. #define INI_CONFIG_ITEM_NULL (INI_ConfigItem) { \
  89. INI_CONFIG_TYPE_FNS_VOID, \
  90. NULL, \
  91. NULL, \
  92. NULL, \
  93. NULL, \
  94. NULL, \
  95. { \
  96. .serialize = NULL, \
  97. .deserialize = NULL, \
  98. }, \
  99. NULL, \
  100. }
  101. #endif