Advertisement
drakee

dFile

Nov 26th, 2012
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.17 KB | None | 0 0
  1. /*
  2.  *              Dfile 1.1.1
  3.  *    All right reserved! © By: DrAkE
  4.  *         Freely redistributable.
  5.  *
  6.  * Owner        : DrAkE
  7.  * Time         : 2012.09.02
  8.  *
  9.  * Thanks to:
  10.  *          ChuckNorris     - Test, help
  11.  *          Fade            - Test, help
  12.  *          Y_Less          - boolstr function
  13.  *          JaTochNietDan   - FileManager
  14.  *          [S]trong        - Precepts, functions
  15.  *          Thiadmer        - PAWN.
  16.  *          SA:MP Team past, present, future - SA:MP.
  17.  *
  18.  *
  19.  * Functions:
  20.  *          dfile_Create - Create a file.
  21.  *          dfile_Delete - Delete a file.
  22.  *          dfile_Open - Open a file.
  23.  *          dfile_CreateDirectory - Create a directory.
  24.  *          dfile_DeleteDirectory - Delete a directory.
  25.  *          dfile_DirectoryExists - Check if the directory exists.
  26.  *          dfile_WriteString - Write string to the file.
  27.  *          dfile_WriteInt - Write integer to the file.
  28.  *          dfile_WriteBool - Write a bool integer to the file.
  29.  *          dfile_WriteFloat - Write a float integer to the file.
  30.  *          dfile_MultiSet - Write multi parameter and value to the file.
  31.  *          dfile_MultiGet - Get multi parameter and value from the file.
  32.  *          dfile_ReadString - Read a string from the file.
  33.  *          dfile_ReadInt - Read an integer from the file.
  34.  *          dfile_ReadFloat - Read a float integer from the file.
  35.  *          dfile_MoveFile - Move a file to the destination.
  36.  *          dfile_RenameFile - Rename a file.
  37.  *          dfile_SaveFile - Write the cache to the file.
  38.  *          dfile_FileExists - Check if the file exists.
  39.  *          dfile_ParseString - Check if the parameter and the string is equal.
  40.  *          dfile_ParseInt - Check if the parameter and the integer is equal.
  41.  *          dfile_ParseFloat - Check if the parameter and the float is equal.
  42.  *          dfile_ParseBool - Check if the parameter and the bool is equal.
  43.  *          dfile_IsSet - Check if the parameter has value.
  44.  *          dfile_UnSet - Delete the parameter's value.
  45.  *
  46.  * Update:
  47.  *      2011/01/28:
  48.  *          New functions:  - dfile_FileExists
  49.  *                          - dfile_DirectoryExists
  50.  *
  51.  *      2011/01/29:
  52.  *          New functions:  - dfile_RenameFile
  53.  *       Functions update:  - dfile_ReadString - don't need the file name.
  54.  *                          - dfile_Open - need when you write or read from a file.
  55.  *
  56.  *      2011/02/01:
  57.  *          New functions:  - dfile_IsSet
  58.  *                          - dfile_UnSet
  59.  *
  60.  *      2011/09/10:
  61.  *          New functions:  - dfile_MultiSet
  62.  *                          - dfile_MultiGet
  63.  *
  64.  *          Other:          - Faster :)
  65.  *
  66.  *      2012/02/04:
  67.  *          Other:          - don't need plugin anymore!
  68.  *
  69. */
  70. #if defined _dfile_included
  71.   #endinput
  72. #endif
  73. #define _dfile_included
  74.  
  75. #if defined USE_PLUGIN_FUNCTIONS
  76.     native file_move(file[],destination[]);
  77.     native file_delete(file[]);
  78.     native file_create(file[]);
  79.     native file_write(file[],text[],mode[] = "a");
  80.     native file_read(file[],storage[], size = sizeof(storage));
  81.     native file_log();
  82.     native file_exists(file[]);
  83.     native dir_create(directory[]);
  84.     native dir_delete(directory[]);
  85.     native dir_exists(directory[]);
  86. #endif
  87.  
  88. /*
  89. native dfile_Create(fajl[]);
  90. native dfile_Delete(fajl[]);
  91. native dfile_Open(fajl[]);
  92. native dfile_CreateDirectory(mappa[]);
  93. native dfile_DeleteDirectory(mappa[]);
  94. native dfile_DirectoryExists(mappa[]);
  95. native dfile_WriteString(parameter[], ertek[]);
  96. native dfile_WriteInt(parameter[], ertek[]);
  97. native dfile_WriteBool(parameter[], bool:ertek);
  98. native dfile_WriteFloat(parameter[], Float.ertek);
  99. native dfile_MultiSet(tipusok[],{Float,_}:...);
  100. native dfile_MultiGet(tipusok[],{Float,_}:...);
  101. native dfile_ReadString(parameter[]);
  102. native dfile_ReadInt(parameter[]);
  103. native dfile_ReadFloat(parameter[]);
  104. native dfile_ReadBool(parameter[]);
  105. native dfile_MoveFile(fajl[], cel[]);
  106. native dfile_RenameFile(reginev[], ujnev[]);
  107. native dfile_SaveFile();
  108. native dfile_FileExists(fajl[]);
  109. native dfile_ParseString(parameter[], ertek[]);
  110. native dfile_ParseInt(parameter[], ertek[]);
  111. native dfile_ParseFloat(parameter[], Float:ertek);
  112. native dfile_ParseBool(parameter[], bool:ertek);
  113. native dfile_IsSet(parameter[]);
  114. native dfile_UnSet(parameter[]);
  115. */
  116.  
  117. #define dfile_ReadFloat(%1) floatstr(dfile_ReadString(%1))
  118. #define dfile_ReadInt(%1) strval(dfile_ReadString(%1))
  119. #define dfile_ReadBool(%1) boolstr2(dfile_ReadString(%1))
  120. #define dfile_DirectoryExists(%1) dir_exists(%1)
  121. #define dfile_WriteString(%0,%1) dfile_AddToBuffer(%0,%1)
  122.  
  123. #if !defined strcpy
  124.     #define strcpy(%0,%1,%2)                strcat((%0[0] = EOS, %0), %1, %2 + 1)
  125. #endif
  126.  
  127. #define MAX_PARAMETER_SIZE (0x80)
  128. #define MAX_ERTEK_SIZE (0x100)
  129. #define FILE_NAME (0x40)
  130. #define MAX_LINES (0x3E8)
  131.  
  132. static stock  
  133.         fajlnev[FILE_NAME],
  134.         paramtar[MAX_PARAMETER_SIZE],
  135.         formazas[512+3],
  136.         olvasas[512],
  137.         File:fajlmegnyitas,
  138.         File:celfajl,
  139.         eredmeny[256],
  140.         sorokszama = 0;
  141.  
  142. static stock
  143.         parameternek[MAX_LINES],
  144.         param[MAX_LINES][MAX_PARAMETER_SIZE],
  145.         ert[MAX_LINES][MAX_ERTEK_SIZE];
  146.  
  147. stock bool:boolstr2(string[]){
  148.     if (!string[0] || string[0] == '0' || !strcmp(string, "false", true)) return false;
  149.     return true;
  150. }
  151.  
  152. stock dfile_Create(fajl[]){
  153.     #if defined USE_PLUGIN_FUNCTIONS
  154.         format(formazas, sizeof(formazas), "scriptfiles/%s", fajl);
  155.         if(file_exists(formazas)) return false;
  156.         file_create(formazas);
  157.     #else
  158.         if(fexist(fajl)) return false;
  159.         fclose(fopen(fajl, io_write));
  160.     #endif
  161.     return true;
  162. }
  163.  
  164. stock dfile_FileExists(fajl[]){
  165.     #if defined USE_PLUGIN_FUNCTIONS
  166.         format(formazas, sizeof(formazas), "scriptfiles/%s", fajl);
  167.         return file_exists(formazas);
  168.     #else
  169.         return fexist(fajl);
  170.     #endif
  171. }
  172.  
  173. stock dfile_Delete(fajl[]){
  174.     #if defined USE_PLUGIN_FUNCTIONS
  175.         format(formazas, sizeof(formazas), "scriptfiles/%s", fajl);
  176.         if(!file_exists(formazas)) return false;
  177.         file_delete(formazas);
  178.     #else
  179.         if(!fexist(fajl)) return false;
  180.         fremove(fajl);
  181.     #endif
  182.     return true;
  183. }
  184.  
  185. stock dfile_ReadString(parameter[]){
  186.     new
  187.         i = 0x0;
  188.     for(; i < sorokszama; ++i)
  189.     {
  190.         if(strcmp(param[i], parameter, false)) continue;
  191.         return ert[i];
  192.     }
  193.     eredmeny[0] = EOS;
  194.     return eredmeny;
  195. }
  196.  
  197. stock dfile_Open(fajl[])
  198. {
  199.     new
  200.         sorokszama2 = 0x-1,
  201.         talalat;
  202.     olvasas[0] = EOS;
  203.     fajlmegnyitas = fopen(fajl,io_read);
  204.     while(fread(fajlmegnyitas, olvasas))
  205.     {
  206.         talalat = strfind(olvasas, "=", false);
  207.         strmid(param[++sorokszama2], olvasas, 0, talalat);
  208.         strmid(ert[sorokszama2], olvasas, talalat+1, strfind(olvasas, "\r\n", false));
  209.         parameternek[sorokszama2] = dfile_HashString(param[sorokszama2]);
  210.     }
  211.     sorokszama = (sorokszama2 + 1);
  212.     fclose(fajlmegnyitas);
  213.     format(fajlnev,FILE_NAME,"%s",fajl);
  214. }
  215.  
  216. stock dfile_HashString(buffer[])
  217. {
  218.     new totalContado = 0, i = strlen(buffer);
  219.     while(i-- != 0) totalContado += buffer[i];
  220.     return totalContado;
  221. }
  222.  
  223. stock dfile_WriteInt(parameter[], ertek){
  224.     new intvalue[MAX_ERTEK_SIZE];
  225.     format(intvalue, sizeof(intvalue), "%d", ertek);
  226.     return dfile_AddToBuffer(parameter, intvalue);
  227. }
  228.  
  229. stock dfile_WriteBool(parameter[], bool:ertek){
  230.     if(ertek) dfile_AddToBuffer(parameter, "true");
  231.     else dfile_AddToBuffer(parameter, "false");
  232.     return true;
  233. }
  234.  
  235. stock dfile_WriteFloat(parameter[], Float:ertek){
  236.     new floatvalue[MAX_ERTEK_SIZE];
  237.     format(floatvalue, sizeof(floatvalue), "%f", ertek);
  238.     return dfile_AddToBuffer(parameter, floatvalue);
  239. }
  240.  
  241. stock dfile_AddToBuffer(parameter[], ertek[])
  242. {
  243.     new i, valami = dfile_HashString(parameter);
  244.     for( ;  i != sorokszama ; ++i) if(valami == parameternek[i])
  245.     {
  246.         if(strcmp(param[i], parameter, false)) continue;
  247.         return strcpy(ert[i], ertek, MAX_ERTEK_SIZE);
  248.     }
  249.     parameternek[i]=valami;
  250.     return strcpy(param[i], parameter, MAX_PARAMETER_SIZE), strcpy(ert[i], ertek, MAX_ERTEK_SIZE), sorokszama++, true;
  251. }
  252.  
  253. stock dfile_MultiSet(tipusok[],{Float,_}:...)
  254. {
  255.     new
  256.         i = 0x-1;
  257.     while(++i<strlen(tipusok))
  258.     {
  259.         new l = 0x-1,
  260.             iLoop = -1,
  261.             string2[512];
  262.         while(++l<MAX_PARAMETER_SIZE) paramtar[l] = getarg(1 + (i * 2), l);
  263.         switch(tipusok[i])
  264.         {
  265.             case 'b': dfile_WriteBool(paramtar, bool:getarg(2 + (i * 2)));
  266.             case 'd', 'i': dfile_WriteInt(paramtar, getarg(2 + (i * 2)));
  267.             case 'f': dfile_WriteFloat(paramtar, Float:(getarg(2 + (i * 2))));
  268.             case 's':
  269.             {
  270.                 while((++iLoop != MAX_ERTEK_SIZE)) string2[iLoop] = getarg(2 + (i * 2), iLoop);
  271.                 dfile_WriteString(paramtar, string2);
  272.             }
  273.         }
  274.     }
  275.     return false;
  276. }
  277.  
  278. stock dfile_MultiGet(tipusok[],{Float,_}:...)
  279. {
  280.     new
  281.         i = 0x-1;
  282.     while(++i<strlen(tipusok))
  283.     {
  284.         new
  285.             l = 0x-1,
  286.             iLoop = 0x-1;
  287.         while(++l<MAX_PARAMETER_SIZE) paramtar[l] = getarg(1 + (i * 2), l);
  288.         switch(tipusok[i])
  289.         {
  290.             case 'b': setarg(2+(i*2), 0, boolstr2(dfile_ReadString(paramtar)));
  291.             case 'd', 'i': setarg(2+(i*2), 0, strval(dfile_ReadString(paramtar)));
  292.             case 'f': setarg(2+(i*2), 0, _:floatstr(dfile_ReadString(paramtar)));
  293.             case 's':
  294.             {
  295.                 format(formazas,sizeof(formazas),"%s",dfile_ReadString(paramtar));
  296.                 while((strlen(dfile_ReadString(paramtar)) != iLoop++)) setarg(2+(i*2),iLoop,formazas[iLoop]);
  297.             }
  298.             default: return print("dFile Error: Unknown type definition!"), 0;
  299.         }
  300.     }
  301.     return true;
  302. }
  303.  
  304. stock dfile_CloseFile(){
  305.     new
  306.         i = -1;
  307.     for(; ++i != sorokszama ;)
  308.     {
  309.         param[i][0] = EOS;
  310.         ert[i][0] = EOS;
  311.         parameternek[i] = 0;
  312.     }
  313.     return sorokszama = 0;
  314. }
  315.  
  316. stock dfile_SaveFile()
  317. {
  318.     new
  319.         iLoop = -1;
  320.     fajlmegnyitas = fopen(fajlnev, io_write);
  321.     while(++iLoop != sorokszama)
  322.     {
  323.         if(strlen(param[iLoop]) > 0)
  324.         {
  325.             format(formazas, sizeof(formazas), "%s=%s\r\n", param[iLoop], ert[iLoop]);
  326.             fwrite(fajlmegnyitas, formazas);
  327.         }else break;
  328.     }
  329.     return fclose(fajlmegnyitas);
  330. }
  331.  
  332. #if defined USE_PLUGIN_FUNCTIONS
  333.     stock dfile_CreateDirectory(mappa[]){
  334.         format(formazas, sizeof(formazas), "scriptfiles/%s", mappa);
  335.         if(dir_exists(formazas)) return false;
  336.         dir_create(formazas);
  337.         return true;
  338.     }
  339.  
  340.     stock dfile_DeleteDirectory(mappa[]){
  341.         format(formazas, sizeof(formazas), "scriptfiles/%s", mappa);
  342.         if(!dir_exists(formazas)) return false;
  343.         dir_delete(formazas);
  344.         return true;
  345.     }
  346. #endif
  347.  
  348. stock dfile_RenameFile(reginev[], ujnev[]){
  349.     #if defined USE_PLUGIN_FUNCTIONS
  350.         new formazas2[MAX_PARAMETER_SIZE];
  351.         format(formazas, sizeof(formazas), "scriptfiles/%s", reginev);
  352.         if(!file_exists(formazas)) return false;
  353.         format(formazas2, sizeof(formazas2), "scriptfiles/%s", ujnev);
  354.         return file_move(formazas, formazas2);
  355.     #else
  356.         dfile_MoveFile(reginev, ujnev);
  357.     #endif
  358. }
  359.  
  360. stock dfile_MoveFile(fajl[], cel[]){
  361.     #if defined USE_PLUGIN_FUNCTIONS
  362.         format(formazas, sizeof(formazas), "scriptfiles/%s", fajl);
  363.         if(!file_exists(formazas)) return false;
  364.         file_move(formazas, cel);
  365.     #else
  366.         if(!fexist(fajl)) return false;
  367.         dfile_Create(cel);
  368.         fajlmegnyitas = fopen(fajl, io_read);
  369.         celfajl = fopen(cel, io_write);
  370.         while(fread(fajlmegnyitas, olvasas)) fwrite(celfajl, olvasas);
  371.         fclose(fajlmegnyitas);
  372.         fclose(celfajl);
  373.         fremove(fajl);
  374.     #endif
  375.     return true;
  376. }
  377.  
  378. stock dfile_ParseString(parameter[], ertek[]){
  379.     format(formazas, sizeof(formazas), "%s", dfile_ReadString(parameter));
  380.     if(strval(dfile_ReadString(parameter)) == strval(ertek)) return true;
  381.     else return false;
  382. }
  383.  
  384. stock dfile_ParseInt(parameter[], ertek){
  385.     new intvalue[MAX_PARAMETER_SIZE];
  386.     format(intvalue, sizeof(intvalue), "%d", ertek);
  387.     return dfile_ParseString(parameter, intvalue);
  388. }
  389.  
  390. stock dfile_ParseFloat(parameter[], Float:ertek){
  391.     new floatvalue[MAX_PARAMETER_SIZE];
  392.     format(floatvalue, sizeof(floatvalue), "%f", ertek);
  393.     return dfile_ParseString(parameter, floatvalue);
  394. }
  395.  
  396. stock dfile_ParseBool(parameter[], bool:ertek){
  397.     new boolean;
  398.     if(ertek) boolean = dfile_ParseString(parameter, "true");
  399.     else boolean = dfile_ParseString(parameter, "false");
  400.     return boolean;
  401. }
  402.  
  403. stock dfile_IsSet(parameter[]){
  404.     if(!strlen(dfile_ReadString(parameter))) return false;
  405.     else return true;
  406. }
  407.  
  408. stock dfile_UnSet(parameter[]){
  409.     new
  410.         i = 0x-1;
  411.     for( ; ++i != sorokszama ; )
  412.     {
  413.         if(!strcmp(param[i], parameter, false))
  414.         {
  415.             return ert[i][0] = EOS;
  416.         }
  417.     }
  418.     return true;
  419. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement