Advertisement
Guest User

p_ini

a guest
Feb 22nd, 2013
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.97 KB | None | 0 0
  1. #define ITP(%0) pini:%0
  2. #define PTI(%0) int:%0
  3. #define IOP_PARAMS_4 30// Максимально открытых файлов
  4. #define IOP_PARAMS_6 30 // Максимальная длина строки адреса файла
  5. #define IOP_PARAMS_7 20 // Максимальная длина имени ключа
  6. #define IOP_PARAMS_8 2005 // Максимум ключей в 1 файле
  7. #define IOP_PARAMS_9 100 // Максимальная длина значения ключа
  8. #define ERROR_EXIST_FAYL -1
  9. #define ERROR_CREATE_FAYL -2
  10. #define ERROR_DELETE_FAYL -3
  11. #define ERROR_OPEN_FAYL -4
  12. #define ERROR_CLOSE_FAYL -5
  13. #define ERROR_SET_FAYL -6
  14. #define ERROR_GET_FAYL -7
  15. static stock pini:FILEOPENNED[IOP_PARAMS_4],
  16.  FILEADRESS[pini:IOP_PARAMS_4][IOP_PARAMS_6],
  17.  FILEKEYKOLVO[pini:IOP_PARAMS_4],
  18.  FILEKEY[pini:IOP_PARAMS_4][IOP_PARAMS_8][IOP_PARAMS_7],
  19.  FILEKEYVALUE[pini:IOP_PARAMS_4][IOP_PARAMS_8][IOP_PARAMS_9],
  20.  hashstr[IOP_PARAMS_7+IOP_PARAMS_9+10],
  21.  positionf;
  22. stock pini:OpenFile(adress[])
  23. {
  24.     new File:Fili;
  25.     Fili=fopen(adress,io_read);
  26.     if (!Fili)
  27.     {
  28.         Fili=fopen(adress,io_read);
  29.         if (!Fili) {fclose(Fili);return pini:ERROR_OPEN_FAYL;}
  30.     }
  31.     new pini:pFile=pini:-1;
  32.     for(new i=1;i<IOP_PARAMS_4,pFile==pini:-1;i++)
  33.         pFile= (FILEOPENNED[i]==pini:0) ? (pini:i) : pFile;
  34.     if pFile==pini:-1 *then {fclose(Fili);return pini:ERROR_OPEN_FAYL;}
  35.     FILEOPENNED[int:pFile]=pFile;
  36.     for FILEKEYKOLVO[pFile]=-1; (FILEKEYKOLVO[pFile]++)<IOP_PARAMS_8-1 && fread(Fili,hashstr); do
  37.     {
  38.         positionf=strfind(hashstr,"=");
  39.         strmid(FILEKEY[pFile][FILEKEYKOLVO[pFile]],hashstr,0,positionf);
  40.         strmid(FILEKEYVALUE[pFile][FILEKEYKOLVO[pFile]],hashstr,positionf+1,strlen(hashstr)-1);
  41.     }
  42.     fclose(Fili);
  43.     strmid(FILEADRESS[pFile],adress,0,IOP_PARAMS_6);
  44.     return pFile;
  45. }
  46. stock CloseFile(pini:File)
  47. {
  48.     if !FILEOPENNED[int:File] *then return pini:ERROR_CLOSE_FAYL;
  49.     fremove(FILEADRESS[File]);
  50.     new File:pFile;// = fopen(FILEADRESS[File]);
  51.     //fclose(pFile);
  52.     pFile = fopen(FILEADRESS[File],io_write);
  53.     if !pFile *then return pini:ERROR_CLOSE_FAYL;
  54.     for positionf=-1;positionf++<(FILEKEYKOLVO[File]-1); do
  55.     {
  56.         fwrite(pFile,FILEKEY[File][positionf]);
  57.         fputchar(pFile,'=',false);
  58.         fwrite(pFile,FILEKEYVALUE[File][positionf]);
  59.         fputchar(pFile,'\n',true);
  60.         FILEKEY[File][positionf]="";
  61.         FILEKEYVALUE[File][positionf]="";
  62.     }
  63.     fclose(pFile);
  64.     FILEOPENNED[File]=pini:0;
  65.     FILEADRESS[File][0]=0;
  66.     FILEKEYKOLVO[File]=0;
  67.     return true;
  68. }
  69. stock SetStringFile(pini:File,key[],source[])
  70. {
  71.     if !FILEOPENNED[int:File] *then return pini:ERROR_SET_FAYL;
  72.     positionf=-1;
  73.     for new i=-1;i++<(FILEKEYKOLVO[File]-1) && positionf==-1; do
  74.         if FILEKEY[File][i][0]==key[0] *then
  75.             positionf=strcmp(key,FILEKEY[File][i],true)==0 ? i:-1;
  76.     if positionf==-1 *then
  77.     {
  78.         if 1+FILEKEYKOLVO[File] >IOP_PARAMS_8 *then return pini:ERROR_SET_FAYL;
  79.         FILEKEYKOLVO[File]+=1;
  80.         positionf=FILEKEYKOLVO[File]-1;
  81.         format(FILEKEY[File][positionf],IOP_PARAMS_7,"%s",key);
  82.     }
  83.     format(FILEKEYVALUE[File][positionf],IOP_PARAMS_9,"%s",source);
  84.     return true;
  85. }
  86. stock GetStringFile(pini:File,const key[],dest[])
  87. {
  88.     if !FILEOPENNED[int:File] *then return pini:ERROR_GET_FAYL;
  89.     positionf=-1;
  90.     for new i=-1;i++<(FILEKEYKOLVO[File]-1) && positionf==-1; do
  91.         if FILEKEY[File][i][0]==key[0] *then
  92.             positionf=strcmp(key,FILEKEY[File][i],true)==0 ? i:-1;
  93.     if positionf==-1 *then return ERROR_GET_FAYL;
  94.     format(dest,IOP_PARAMS_9,"%s",FILEKEYVALUE[File][positionf]);
  95.     return true;
  96. }
  97. stock SetIntegerFile(pini:File,key[],source)
  98. {
  99.     if !FILEOPENNED[int:File] *then return pini:ERROR_SET_FAYL;
  100.     positionf=-1;
  101.     for new i=-1;i++<(FILEKEYKOLVO[File]-1) && positionf==-1; do
  102.         if FILEKEY[File][i][0]==key[0] *then
  103.             positionf=strcmp(key,FILEKEY[File][i],true)==0 ? i:-1;
  104.     if positionf==-1 *then
  105.     {
  106.         if(1+FILEKEYKOLVO[File] >IOP_PARAMS_8) return pini:ERROR_SET_FAYL;
  107.         FILEKEYKOLVO[File]+=1;
  108.         positionf=FILEKEYKOLVO[File]-1;
  109.         format(FILEKEY[File][positionf],IOP_PARAMS_7,"%s",key);
  110.     }
  111.     format(FILEKEYVALUE[File][positionf],IOP_PARAMS_9,"%d",source);
  112.     return true;
  113. }
  114. stock GetIntegerFile(pini:File,const key[],&dest)
  115. {
  116.     if !FILEOPENNED[int:File] *then return pini:ERROR_GET_FAYL;
  117.     positionf=-1;
  118.     for new i=-1;i++<(FILEKEYKOLVO[File]-1) && positionf==-1; do
  119.         if FILEKEY[File][i][0]==key[0] *then
  120.             positionf=strcmp(key,FILEKEY[File][i],true)==0 ? i:-1;
  121.     if positionf==-1 *then return ERROR_GET_FAYL;
  122.     dest=strval(FILEKEYVALUE[File][positionf]);
  123.     return true;
  124. }
  125. stock SetFloatFile(pini:File,key[],Float:source)
  126. {
  127.     if !FILEOPENNED[int:File] *then return pini:ERROR_SET_FAYL;
  128.     positionf=-1;
  129.     for new i=-1;i++<(FILEKEYKOLVO[File]-1) && positionf==-1; do
  130.         if FILEKEY[File][i][0]==key[0] *then
  131.             positionf=strcmp(key,FILEKEY[File][i],true)==0 ? i:-1;
  132.     if positionf==-1 *then
  133.     {
  134.         if(1+FILEKEYKOLVO[File] >IOP_PARAMS_8) return pini:ERROR_SET_FAYL;
  135.         FILEKEYKOLVO[File]+=1;
  136.         positionf=FILEKEYKOLVO[File]-1;
  137.         format(FILEKEY[File][positionf],IOP_PARAMS_7,"%s",key);
  138.     }
  139.     format(FILEKEYVALUE[File][positionf],IOP_PARAMS_9,"%f",source);
  140.     return true;
  141. }
  142. stock GetFloatFile(pini:File,const key[],&Float:dest)
  143. {
  144.     if !FILEOPENNED[int:File] *then return pini:ERROR_GET_FAYL;
  145.     positionf=-1;
  146.     for new i=-1;i++<(FILEKEYKOLVO[File]-1) && positionf==-1; do
  147.         if FILEKEY[File][i][0]==key[0] *then
  148.             positionf=strcmp(key,FILEKEY[File][i],true)==0 ? i:-1;
  149.     if positionf==-1 *then return ERROR_GET_FAYL;
  150.     dest=floatstr(FILEKEYVALUE[File][positionf]);
  151.     return true;
  152. }
  153. stock SetBooleanFile(pini:File,key[],bool:source)
  154. {
  155.     if !FILEOPENNED[int:File] *then return pini:ERROR_SET_FAYL;
  156.     positionf=-1;
  157.     for new i=-1;i++<(FILEKEYKOLVO[File]-1) && positionf==-1; do
  158.         if FILEKEY[File][i][0]==key[0] *then
  159.             positionf=strcmp(key,FILEKEY[File][i],true)==0 ? i:-1;
  160.     if positionf==-1 *then
  161.     {
  162.         if(1+FILEKEYKOLVO[File] >IOP_PARAMS_8) return pini:ERROR_SET_FAYL;
  163.         FILEKEYKOLVO[File]+=1;
  164.         positionf=FILEKEYKOLVO[File]-1;
  165.         format(FILEKEY[File][positionf],IOP_PARAMS_7,"%s",key);
  166.     }
  167.     if(source)
  168.     format(FILEKEYVALUE[File][positionf],IOP_PARAMS_9,"1");
  169.     else
  170.     format(FILEKEYVALUE[File][positionf],IOP_PARAMS_9,"0");
  171.     return true;
  172. }
  173. stock GetBooleanFile(pini:File,const key[],&bool:dest)
  174. {
  175.     if !FILEOPENNED[int:File] *then return pini:ERROR_GET_FAYL;
  176.     positionf=-1;
  177.     for new i=-1;i++<(FILEKEYKOLVO[File]-1) && positionf==-1; do
  178.         if FILEKEY[File][i][0]==key[0] *then
  179.             positionf=strcmp(key,FILEKEY[File][i],true)==0 ? i:-1;
  180.     if positionf==-1 *then return ERROR_GET_FAYL;
  181.     dest = strval(FILEKEYVALUE[File][positionf])==1 ? true : false;
  182.     return true;
  183. }
  184. stock CreateFile(adress[])
  185. {
  186.     if fexist(adress) *then return ERROR_EXIST_FAYL;
  187.     new File:Fili=fopen(adress);
  188.     if(!int:Fili) return ERROR_CREATE_FAYL;
  189.     fclose(Fili);
  190.     return true;
  191. }
  192. stock DeleteFile(adress[])
  193. {
  194.     if(!fexist(adress)) return ERROR_EXIST_FAYL;
  195.     if(!fremove(adress)) return ERROR_DELETE_FAYL;
  196.     return true;
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement