Dini.inc 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /*
  2. * Dini 1.5.1
  3. * (c) Copyright 2006 by DracoBlue
  4. *
  5. * @author : DracoBlue (http://dracoblue.com)
  6. * @date : 13th May 2006
  7. * @update : 3rd June 2007
  8. * @require : DUtils 1.8
  9. *
  10. * This file is provided as is (no warranties).
  11. *
  12. * Feel free to use it, a little message in
  13. * about box is honouring thing, isn't it?
  14. *
  15. */
  16. #if defined _dini_included
  17. #endinput
  18. #endif
  19. #define _dini_included
  20. #pragma library dutils
  21. #include <dutils>
  22. stock dini_Exists(filename[]) {
  23. if (fexist(filename)) return true;
  24. return false;
  25. }
  26. stock dini_Remove(filename[]) {
  27. if (!fexist(filename)) return false;
  28. fremove(filename);
  29. return true;
  30. }
  31. stock dini_Create(filename[]) {
  32. new File:fhnd;
  33. if (fexist(filename)) return false;
  34. fhnd=fopen(filename,io_write);
  35. fclose(fhnd);
  36. return true;
  37. }
  38. stock dini_PRIVATE_ExtractKey(line[]) {
  39. new tmp[MAX_STRING];
  40. tmp[0]=0;
  41. if (strfind(line,"=",true)==-1) return tmp;
  42. set(tmp,strlower(ret_memcpy(line,0,strfind(line,"=",true))));
  43. return tmp;
  44. }
  45. stock dini_PRIVATE_ExtractValue(line[]) {
  46. new tmp[MAX_STRING];
  47. tmp[0]=0;
  48. if (strfind(line,"=",true)==-1) {
  49. return tmp;
  50. }
  51. set(tmp,ret_memcpy(line,strfind(line,"=",true)+1,strlen(line)));
  52. return tmp;
  53. }
  54. stock dini_Set(filename[],key[],value[]) {
  55. new File:fohnd, File:fwhnd;
  56. new bool:wasset=false;
  57. new tmpres[MAX_STRING];
  58. if (key[0]==0) return false; /* If we have no sign in key, it can't be set*/
  59. format(tmpres,sizeof(tmpres),"%s.part",filename);
  60. fohnd=fopen(filename,io_read);
  61. if (!fohnd) return false;
  62. fremove(tmpres);
  63. fwhnd=fopen(tmpres,io_write);
  64. // if (!fwhnd) return false;
  65. while (fread(fohnd,tmpres)) {
  66. StripNewLine(tmpres);
  67. if ((!wasset)&&(equal(dini_PRIVATE_ExtractKey(tmpres),key,true))) {
  68. /* We've got what needs to be replaced! */
  69. format(tmpres,sizeof(tmpres),"%s=%s",key,value);
  70. wasset=true;
  71. }
  72. fwrite(fwhnd,tmpres);
  73. fwrite(fwhnd,"\r\n");
  74. }
  75. if (!wasset) {
  76. format(tmpres,sizeof(tmpres),"%s=%s",key,value);
  77. fwrite(fwhnd,tmpres);
  78. fwrite(fwhnd,"\r\n");
  79. }
  80. fclose(fohnd);
  81. fclose(fwhnd);
  82. format(tmpres,sizeof(tmpres),"%s.part",filename);
  83. if (fcopytextfile(tmpres,filename)) {
  84. return fremove(tmpres);
  85. }
  86. return false;
  87. }
  88. stock dini_IntSet(filename[],key[],value) {
  89. new valuestring[MAX_STRING];
  90. format(valuestring,sizeof(valuestring),"%d",value);
  91. return dini_Set(filename,key,valuestring);
  92. }
  93. stock dini_Int(filename[],key[]) {
  94. return strval(dini_Get(filename,key));
  95. }
  96. stock dini_FloatSet(filename[],key[],Float:value) {
  97. new valuestring[MAX_STRING];
  98. format(valuestring,sizeof(valuestring),"%f",value);
  99. return dini_Set(filename,key,valuestring);
  100. }
  101. stock Float:dini_Float(filename[],key[]) {
  102. return floatstr(dini_Get(filename,key));
  103. }
  104. stock dini_Bool(filename[],key[]) {
  105. return strval(dini_Get(filename,key));
  106. }
  107. stock dini_BoolSet(filename[],key[],value) {
  108. new valuestring[MAX_STRING];
  109. format(valuestring,sizeof(valuestring),"%d",value);
  110. return dini_Set(filename,key,valuestring);
  111. }
  112. stock dini_Unset(filename[],key[]) {
  113. new File:fohnd, File:fwhnd;
  114. new tmpres[MAX_STRING];
  115. format(tmpres,sizeof(tmpres),"%s.part",filename);
  116. fohnd=fopen(filename,io_read);
  117. if (!fohnd) return false;
  118. fremove(tmpres);
  119. fwhnd=fopen(tmpres,io_write);
  120. // if (!fwhnd) return false;
  121. while (fread(fohnd,tmpres)) {
  122. StripNewLine(tmpres);
  123. if (equal(dini_PRIVATE_ExtractKey(tmpres),key,true)) {
  124. /* We've got what needs to be removed! */
  125. } else {
  126. format(tmpres,sizeof(tmpres),"%s",tmpres);
  127. fwrite(fwhnd,tmpres);
  128. fwrite(fwhnd,"\r\n");
  129. }
  130. }
  131. fclose(fohnd);
  132. fclose(fwhnd);
  133. format(tmpres,sizeof(tmpres),"%s.part",filename);
  134. if (fcopytextfile(tmpres,filename)) {
  135. return fremove(tmpres);
  136. }
  137. return false;
  138. }
  139. stock dini_Get(filename[],key[]) {
  140. new File:fohnd;
  141. new tmpres[MAX_STRING];
  142. new tmpres2[MAX_STRING];
  143. tmpres[0]=0;
  144. fohnd=fopen(filename,io_read);
  145. if (!fohnd) return tmpres;
  146. while (fread(fohnd,tmpres)) {
  147. StripNewLine(tmpres);
  148. if (equal(dini_PRIVATE_ExtractKey(tmpres),key,true)) {
  149. /* We've got what we need */
  150. tmpres2[0]=0;
  151. strcat(tmpres2,dini_PRIVATE_ExtractValue(tmpres));
  152. fclose(fohnd);
  153. return tmpres2;
  154. }
  155. }
  156. fclose(fohnd);
  157. return tmpres;
  158. }
  159. stock dini_Isset(filename[],key[]) {
  160. new File:fohnd;
  161. new tmpres[MAX_STRING];
  162. fohnd=fopen(filename,io_read);
  163. if (!fohnd) return false;
  164. while (fread(fohnd,tmpres)) {
  165. StripNewLine(tmpres);
  166. if (equal(dini_PRIVATE_ExtractKey(tmpres),key,true)) {
  167. /* We've got what we need */
  168. fclose(fohnd);
  169. return true;
  170. }
  171. }
  172. fclose(fohnd);
  173. return false;
  174. }