iniManage.inc 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. /* --------------------------------------------------------------------------------------------
  2. *
  3. * iniManagement by Emmet_
  4. * Easy ini file management!
  5. *
  6. * iniManagement is a new, easy-to-use and quick file management script
  7. * which allows you to open files, close files, and write inside / read
  8. * from them.
  9. *
  10. * Functions:
  11. * • INI_Open(filename[]) - Opens a file.
  12. * • INI_Close(filename[]) - Closes a file.
  13. * • INI_IntSet(filename[], tagname[], val) - Writes an integer to a file.
  14. * • INI_FltSet(filename[], tagname[], Float:flt) - Writes a float to a file.
  15. * • INI_StrSet(filename[], tagname[], str[]) - Writes a string to a file.
  16. * • INI_GetInt(filename[], tagname[]) - Reads an integer from a file and returns it.
  17. * • INI_GetFlt(filename[], tagname[]) - Reads a float from a file and returns it.
  18. * • INI_GetStr(filename[], tagname[], str[]) - Reads a string from a file and returns it.
  19. *
  20. * Error codes:
  21. * • Error code 1 - The file you are trying to access doesn't exist.
  22. * • Error code 2 - The file you are trying to access is already opened.
  23. * • Error code 3 - There are already the maximum opened files possible.
  24. * • Error code 4 - The file you are trying to access is not opened.
  25. *
  26. * --------------------------------------------------------------------------------------------
  27. */
  28. // Includes
  29. #include <a_samp>
  30. //--------------------------------------------------------------------------------------------//
  31. // Limitations & Definitions
  32. #define MAX_OPENED_FILES 64
  33. #define MAX_STRING_SIZE 512
  34. #define MAX_FILENAME_LENGTH 255
  35. //--------------------------------------------------------------------------------------------//
  36. new File:fHandle[MAX_OPENED_FILES];
  37. new fName[MAX_OPENED_FILES][MAX_FILENAME_LENGTH];
  38. new bool:isOpened[MAX_OPENED_FILES];
  39. new openedFiles;
  40. //--------------------------------------------------------------------------------------------//
  41. stock INI_Open(filename[])
  42. {
  43. if (INI_IsOpened(filename) == 1)
  44. {
  45. print("Error code 2.");
  46. return 0;
  47. }
  48. if (openedFiles == MAX_OPENED_FILES)
  49. {
  50. print("Error code 3.");
  51. return 0;
  52. }
  53. new File: file = fopen(filename, io_readwrite);
  54. if (file)
  55. {
  56. openedFiles ++;
  57. isOpened[openedFiles] = true;
  58. fHandle[openedFiles] = file;
  59. format(fName[openedFiles], MAX_FILENAME_LENGTH, filename);
  60. return 1;
  61. }
  62. return 0;
  63. }
  64. //--------------------------------------------------------------------------------------------//
  65. stock INI_Close(filename[])
  66. {
  67. if (fexist(filename) == 0)
  68. {
  69. print("Error code 1.");
  70. return 0;
  71. }
  72. if (INI_IsOpened(filename) == 1)
  73. {
  74. openedFiles --;
  75. fHandle[openedFiles] = File:0;
  76. isOpened[INI_RetrieveID(filename)] = false;
  77. strdel(fName[INI_RetrieveID(filename)], 0, MAX_FILENAME_LENGTH);
  78. return 1;
  79. }
  80. else printf("Error code 4.");
  81. return 0;
  82. }
  83. //--------------------------------------------------------------------------------------------//
  84. stock INI_IntSet(filename[], tagname[], val)
  85. {
  86. if (fexist(filename) == 0)
  87. {
  88. print("Error code 1.");
  89. return 0;
  90. }
  91. if (INI_IsOpened(filename) == 0)
  92. {
  93. print("Error code 4.");
  94. return 0;
  95. }
  96. new string[MAX_STRING_SIZE];
  97. format(string, sizeof(string), "%s = %d\r\n", tagname, val);
  98. fwrite(fHandle[INI_RetrieveID(filename)], string);
  99. return 1;
  100. }
  101. //--------------------------------------------------------------------------------------------//
  102. stock INI_FltSet(filename[], tagname[], Float:flt)
  103. {
  104. if (fexist(filename) == 0)
  105. {
  106. print("Error code 1.");
  107. return 0;
  108. }
  109. if (INI_IsOpened(filename) == 0)
  110. {
  111. print("Error code 4.");
  112. return 0;
  113. }
  114. new string[MAX_STRING_SIZE];
  115. format(string, sizeof(string), "%s = %f\r\n", tagname, flt);
  116. fwrite(fHandle[INI_RetrieveID(filename)], string);
  117. return 1;
  118. }
  119. //--------------------------------------------------------------------------------------------//
  120. stock INI_StrSet(filename[], tagname[], str[])
  121. {
  122. if (fexist(filename) == 0)
  123. {
  124. print("Error code 1.");
  125. return 0;
  126. }
  127. if (INI_IsOpened(filename) == 0)
  128. {
  129. print("Error code 4.");
  130. return 0;
  131. }
  132. new string[MAX_STRING_SIZE];
  133. format(string, sizeof(string), "%s = %s\r\n", tagname, str);
  134. fwrite(fHandle[INI_RetrieveID(filename)], string);
  135. return 1;
  136. }
  137. //--------------------------------------------------------------------------------------------//
  138. stock INI_GetInt(filename[], tagname[])
  139. {
  140. if (fexist(filename) == 0)
  141. {
  142. print("Error code 1.");
  143. return 0;
  144. }
  145. if (INI_IsOpened(filename) == 0)
  146. {
  147. print("Error code 4.");
  148. return 0;
  149. }
  150. new string[MAX_STRING_SIZE];
  151. new tag[MAX_STRING_SIZE];
  152. new val[MAX_STRING_SIZE];
  153. while (fread(fHandle[INI_RetrieveID(filename)], string, MAX_STRING_SIZE))
  154. {
  155. if (strfind(string, "=") != -1)
  156. strmid(tag, string, 0, strfind(string, "="), sizeof(tag));
  157. if (strcmp(tag, tagname, false) == 0)
  158. {
  159. if (strfind(string, "=") != -1)
  160. {
  161. strmid(val, string, (strfind(string, "=") + 1), strlen(string), sizeof(string));
  162. return strval(val);
  163. }
  164. }
  165. }
  166. return 0;
  167. }
  168. //--------------------------------------------------------------------------------------------//
  169. stock Float:INI_GetFlt(filename[], tagname[])
  170. {
  171. if (fexist(filename) == 0)
  172. {
  173. print("Error code 1.");
  174. return 0.0;
  175. }
  176. if (INI_IsOpened(filename) == 0)
  177. {
  178. print("Error code 4.");
  179. return 0.0;
  180. }
  181. new string[MAX_STRING_SIZE];
  182. new tag[MAX_STRING_SIZE];
  183. new val[MAX_STRING_SIZE];
  184. while (fread(fHandle[INI_RetrieveID(filename)], string, MAX_STRING_SIZE))
  185. {
  186. if (strfind(string, "=") != -1)
  187. strmid(tag, string, 0, strfind(string, "="), sizeof(tag));
  188. if (strcmp(tag, tagname, false) == 0)
  189. {
  190. if (strfind(string, "=") != -1)
  191. {
  192. strmid(val, string, (strfind(string, "=") + 1), strlen(string), sizeof(string));
  193. return floatstr(val);
  194. }
  195. }
  196. }
  197. return 0.0;
  198. }
  199. //--------------------------------------------------------------------------------------------//
  200. stock INI_GetStr(filename[], tagname[], str[])
  201. {
  202. if (fexist(filename) == 0)
  203. {
  204. print("Error code 1.");
  205. return 0;
  206. }
  207. if (INI_IsOpened(filename) == 0)
  208. {
  209. print("Error code 4.");
  210. return 0;
  211. }
  212. new string[MAX_STRING_SIZE];
  213. new tag[MAX_STRING_SIZE];
  214. new val[MAX_STRING_SIZE];
  215. while (fread(fHandle[INI_RetrieveID(filename)], string, MAX_STRING_SIZE))
  216. {
  217. if (strfind(string, "=") != -1)
  218. strmid(tag, string, 0, strfind(string, "="), sizeof(tag));
  219. if (strcmp(tag, tagname, false) == 0)
  220. {
  221. if (strfind(string, "=") != -1)
  222. {
  223. strmid(val, string, (strfind(string, "=") + 1), strlen(string), sizeof(string));
  224. format(str, 256, val);
  225. return 1;
  226. }
  227. }
  228. }
  229. return 0;
  230. }
  231. //--------------------------------------------------------------------------------------------//
  232. stock INI_RetrieveID(filename[])
  233. {
  234. for (new i = 1; i <= openedFiles; i ++)
  235. {
  236. if (isOpened[i] == true)
  237. {
  238. if ((strcmp(fName[i], filename, false) == 0) && (strlen(fName[i]) == strlen(filename)))
  239. return i;
  240. }
  241. }
  242. return 0;
  243. }
  244. //--------------------------------------------------------------------------------------------//
  245. stock INI_IsOpened(filename[])
  246. {
  247. for (new i = 1; i <= openedFiles; i ++)
  248. {
  249. if (isOpened[i] == true)
  250. {
  251. if ((strcmp(fName[i], filename, false) == 0) && (strlen(fName[i]) == strlen(filename)))
  252. return 1;
  253. }
  254. }
  255. return 0;
  256. }