RaFaeLs

## SA:MP dfile include edited by RaFaeL ##

Jan 27th, 2013
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 15.24 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.  *          RaFaeL          - New functions.
  17.  *          SA:MP Team past, present, future - SA:MP.
  18.  *
  19.  *
  20.  * Functions:
  21.  *          dfile_Create - Create a file.
  22.  *          dfile_Delete - Delete a file.
  23.  *          dfile_Open - Open a file.
  24.  *          dfile_CreateDirectory - Create a directory.
  25.  *          dfile_DeleteDirectory - Delete a directory.
  26.  *          dfile_DirectoryExists - Check if the directory exists.
  27.  *          dfile_WriteString - Write string to the file.
  28.  *          dfile_WriteInt - Write integer to the file.
  29.  *          dfile_WriteBool - Write a bool integer to the file.
  30.  *          dfile_WriteFloat - Write a float integer to the file.
  31.  *          dfile_WriteHex - Write a hexadecimal to the file. -- By RaFaeL
  32.  *          dfile_WriteBin - Write a bin to the file. -- By RaFaeL
  33.  *          dfile_MultiSet - Write multi parameter and value to the file.
  34.  *          dfile_MultiGet - Get multi parameter and value from the file.
  35.  *          dfile_ReadString - Read a string from the file.
  36.  *          dfile_ReadInt - Read an integer from the file.
  37.  *          dfile_ReadFloat - Read a float integer from the file.
  38.  *          dfile_ReadHex - Read a hexadecimal from the file. -- By RaFaeL
  39.  *          dfile_ReadBin - Read a binary from the file. -- By RaFaeL
  40.  *          dfile_MoveFile - Move a file to the destination.
  41.  *          dfile_RenameFile - Rename a file.
  42.  *          dfile_SaveFile - Write the cache to the file.
  43.  *          dfile_FileExists - Check if the file exists.
  44.  *          dfile_ParseString - Check if the parameter and the string is equal.
  45.  *          dfile_ParseInt - Check if the parameter and the integer is equal.
  46.  *          dfile_ParseFloat - Check if the parameter and the float is equal.
  47.  *          dfile_ParseBool - Check if the parameter and the bool is equal.
  48.  *          dfile_ParseHex - Check if the parameter and the hex is equal. -- By RaFaeL
  49.  *          dfile_ParseBin - Check if the parameter and the bin is equal. -- By RaFaeL
  50.  *          dfile_IsSet - Check if the parameter has value.
  51.  *          dfile_UnSet - Delete the parameter's value.
  52.  *
  53.  * Update:
  54.  *      2011/01/28:
  55.  *          New functions:  - dfile_FileExists
  56.  *                          - dfile_DirectoryExists
  57.  *
  58.  *      2011/01/29:
  59.  *          New functions:  - dfile_RenameFile
  60.  *       Functions update:  - dfile_ReadString - don't need the file name.
  61.  *                          - dfile_Open - need when you write or read from a file.
  62.  *
  63.  *      2011/02/01:
  64.  *          New functions:  - dfile_IsSet
  65.  *                          - dfile_UnSet
  66.  *
  67.  *      2011/09/10:
  68.  *          New functions:  - dfile_MultiSet
  69.  *                          - dfile_MultiGet
  70.  *
  71.  *          Other:          - Faster :)
  72.  *
  73.  *      2012/02/04:
  74.  *          Other:          - don't need plugin anymore!
  75.  *
  76.  *      2013/01/27:
  77.  *          New functions:  - dfile_ReadHex
  78.  *                          - dfile_ReadBin
  79.  *                          - dfile_WriteHex
  80.  *                          - dfile_WriteBin
  81.  *                          - dfile_ParseHex
  82.  *                          - dfile_ParseBin
  83.  *
  84.  *          Other:          - By RaFaeL :)
  85.  *
  86. */
  87. #if defined _dfile_included
  88.   #endinput
  89. #endif
  90. #define _dfile_included
  91.  
  92. #if defined USE_PLUGIN_FUNCTIONS
  93.     native file_move(file[],destination[]);
  94.     native file_delete(file[]);
  95.     native file_create(file[]);
  96.     native file_write(file[],text[],mode[] = "a");
  97.     native file_read(file[],storage[], size = sizeof(storage));
  98.     native file_log();
  99.     native file_exists(file[]);
  100.     native dir_create(directory[]);
  101.     native dir_delete(directory[]);
  102.     native dir_exists(directory[]);
  103. #endif
  104.  
  105. /*
  106. native dfile_Create(fajl[]);
  107. native dfile_Delete(fajl[]);
  108. native dfile_Open(fajl[]);
  109. native dfile_CreateDirectory(mappa[]);
  110. native dfile_DeleteDirectory(mappa[]);
  111. native dfile_DirectoryExists(mappa[]);
  112. native dfile_WriteString(parameter[], ertek[]);
  113. native dfile_WriteInt(parameter[], ertek[]);
  114. native dfile_WriteBool(parameter[], bool:ertek);
  115. native dfile_WriteFloat(parameter[], Float.ertek);
  116. native dfile_WriteHex(parameter[], ertek);
  117. native dfile_WriteBin(parameter[], ertek);
  118. native dfile_MultiSet(tipusok[],{Float,_}:...);
  119. native dfile_MultiGet(tipusok[],{Float,_}:...);
  120. native dfile_ReadString(parameter[]);
  121. native dfile_ReadInt(parameter[]);
  122. native dfile_ReadFloat(parameter[]);
  123. native dfile_ReadBool(parameter[]);
  124. native dfile_ReadHex(parameter[]);
  125. native dfile_ReadBin(parameter[]);
  126. native dfile_MoveFile(fajl[], cel[]);
  127. native dfile_RenameFile(reginev[], ujnev[]);
  128. native dfile_SaveFile();
  129. native dfile_FileExists(fajl[]);
  130. native dfile_ParseString(parameter[], ertek[]);
  131. native dfile_ParseInt(parameter[], ertek[]);
  132. native dfile_ParseFloat(parameter[], Float:ertek);
  133. native dfile_ParseBool(parameter[], bool:ertek);
  134. native dfile_ParseHex(parameter[], ertek);
  135. native dfile_ParseBin(parameter[], ertek);
  136. native dfile_IsSet(parameter[]);
  137. native dfile_UnSet(parameter[]);
  138. */
  139.  
  140. #define dfile_ReadFloat(%1) floatstr(dfile_ReadString(%1))
  141. #define dfile_ReadInt(%1) strval(dfile_ReadString(%1))
  142. #define dfile_ReadBool(%1) boolstr2(dfile_ReadString(%1))
  143. #define dfile_ReadHex(%1) strhex(dfile_ReadString(%1))
  144. #define dfile_ReadBin(%1) strbin(dfile_ReadString(%1))
  145. #define dfile_DirectoryExists(%1) dir_exists(%1)
  146. #define dfile_WriteString(%0,%1) dfile_AddToBuffer(%0,%1)
  147.  
  148. #if !defined strcpy
  149.     #define strcpy(%0,%1,%2)                strcat((%0[0] = EOS, %0), %1, %2 + 1)
  150. #endif
  151.  
  152. #define MAX_PARAMETER_SIZE (0x80)
  153. #define MAX_ERTEK_SIZE (0x100)
  154. #define FILE_NAME (0x40)
  155. #define MAX_LINES (0x3E8)
  156.  
  157. static stock  
  158.         fajlnev[FILE_NAME],
  159.         paramtar[MAX_PARAMETER_SIZE],
  160.         formazas[512+3],
  161.         olvasas[512],
  162.         File:fajlmegnyitas,
  163.         eredmeny[256],
  164.         sorokszama = 0;
  165.  
  166. #if !defined USE_PLUGIN_FUNCTIONS
  167.     static stock
  168.         File:celfajl;
  169. #endif
  170.        
  171. static stock
  172.         parameternek[MAX_LINES],
  173.         param[MAX_LINES][MAX_PARAMETER_SIZE],
  174.         ert[MAX_LINES][MAX_ERTEK_SIZE];
  175.  
  176. stock bool:boolstr2(string[]){
  177.     if (!string[0] || string[0] == '0' || !strcmp(string, "false", true)) return false;
  178.     return true;
  179. }
  180.  
  181. stock dfile_Create(fajl[]){
  182.     #if defined USE_PLUGIN_FUNCTIONS
  183.         format(formazas, sizeof(formazas), "scriptfiles/%s", fajl);
  184.         if(file_exists(formazas)) return false;
  185.         file_create(formazas);
  186.     #else
  187.         if(fexist(fajl)) return false;
  188.         fclose(fopen(fajl, io_write));
  189.     #endif
  190.     return true;
  191. }
  192.  
  193. stock dfile_FileExists(fajl[]){
  194.     #if defined USE_PLUGIN_FUNCTIONS
  195.         format(formazas, sizeof(formazas), "scriptfiles/%s", fajl);
  196.         return file_exists(formazas);
  197.     #else
  198.         return fexist(fajl);
  199.     #endif
  200. }
  201.  
  202. stock dfile_Delete(fajl[]){
  203.     #if defined USE_PLUGIN_FUNCTIONS
  204.         format(formazas, sizeof(formazas), "scriptfiles/%s", fajl);
  205.         if(!file_exists(formazas)) return false;
  206.         file_delete(formazas);
  207.     #else
  208.         if(!fexist(fajl)) return false;
  209.         fremove(fajl);
  210.     #endif
  211.     return true;
  212. }
  213.  
  214. stock dfile_ReadString(parameter[]){
  215.     new
  216.         i = 0x0;
  217.     for(; i < sorokszama; ++i)
  218.     {
  219.         if(strcmp(param[i], parameter, false)) continue;
  220.         return ert[i];
  221.     }
  222.     eredmeny[0] = EOS;
  223.     return eredmeny;
  224. }
  225.  
  226. stock dfile_Open(fajl[])
  227. {
  228.     new
  229.         sorokszama2 = 0x-1,
  230.         talalat;
  231.     olvasas[0] = EOS;
  232.     fajlmegnyitas = fopen(fajl,io_read);
  233.     while(fread(fajlmegnyitas, olvasas))
  234.     {
  235.         talalat = strfind(olvasas, "=", false);
  236.         strmid(param[++sorokszama2], olvasas, 0, talalat);
  237.         strmid(ert[sorokszama2], olvasas, talalat+1, strfind(olvasas, "\r\n", false));
  238.         parameternek[sorokszama2] = dfile_HashString(param[sorokszama2]);
  239.     }
  240.     sorokszama = (sorokszama2 + 1);
  241.     fclose(fajlmegnyitas);
  242.     format(fajlnev,FILE_NAME,"%s",fajl);
  243. }
  244.  
  245. stock dfile_HashString(buffer[])
  246. {
  247.     new totalContado = 0, i = strlen(buffer);
  248.     while(i-- != 0) totalContado += buffer[i];
  249.     return totalContado;
  250. }
  251.  
  252. stock dfile_WriteInt(parameter[], ertek){
  253.     new intvalue[MAX_ERTEK_SIZE];
  254.     format(intvalue, sizeof(intvalue), "%d", ertek);
  255.     return dfile_AddToBuffer(parameter, intvalue);
  256. }
  257.  
  258. stock dfile_WriteBool(parameter[], bool:ertek){
  259.     if(ertek) dfile_AddToBuffer(parameter, "true");
  260.     else dfile_AddToBuffer(parameter, "false");
  261.     return true;
  262. }
  263.  
  264. stock dfile_WriteFloat(parameter[], Float:ertek){
  265.     new floatvalue[MAX_ERTEK_SIZE];
  266.     format(floatvalue, sizeof(floatvalue), "%f", ertek);
  267.     return dfile_AddToBuffer(parameter, floatvalue);
  268. }
  269.  
  270. stock dfile_WriteHex(parameter[], ertek){
  271.     new hexvalue[MAX_ERTEK_SIZE];
  272.     format(hexvalue, sizeof(hexvalue), "%06x", ertek);
  273.     return dfile_AddToBuffer(parameter, hexvalue);
  274. }
  275.  
  276. stock dfile_WriteBin(parameter[], ertek){
  277.     new binvalue[MAX_ERTEK_SIZE];
  278.     format (binvalue, sizeof(binvalue), "0b%b", ertek);
  279.     return dfile_AddToBuffer(parameter, binvalue);
  280. }
  281.  
  282. stock dfile_AddToBuffer(parameter[], ertek[])
  283. {
  284.     new i, valami = dfile_HashString(parameter);
  285.     for( ;  i != sorokszama ; ++i) if(valami == parameternek[i])
  286.     {
  287.         if(strcmp(param[i], parameter, false)) continue;
  288.         return strcpy(ert[i], ertek, MAX_ERTEK_SIZE);
  289.     }
  290.     parameternek[i]=valami;
  291.     return strcpy(param[i], parameter, MAX_PARAMETER_SIZE), strcpy(ert[i], ertek, MAX_ERTEK_SIZE), sorokszama++, true;
  292. }
  293.  
  294. stock dfile_MultiSet(tipusok[],{Float,_}:...)
  295. {
  296.     new
  297.         i = 0x-1;
  298.     while(++i<strlen(tipusok))
  299.     {
  300.         new l = 0x-1,
  301.             iLoop = -1,
  302.             string2[512];
  303.         while(++l<MAX_PARAMETER_SIZE) paramtar[l] = getarg(1 + (i * 2), l);
  304.         switch(tipusok[i])
  305.         {
  306.             case 'b': dfile_WriteBool(paramtar, bool:getarg(2 + (i * 2)));
  307.             case 'd', 'i': dfile_WriteInt(paramtar, getarg(2 + (i * 2)));
  308.             case 'f': dfile_WriteFloat(paramtar, Float:(getarg(2 + (i * 2))));
  309.             case 's':
  310.             {
  311.                 while((++iLoop != MAX_ERTEK_SIZE)) string2[iLoop] = getarg(2 + (i * 2), iLoop);
  312.                 dfile_WriteString(paramtar, string2);
  313.             }
  314.             case 'h': dfile_WriteHex(paramtar, getarg(2 + (i * 2)));
  315.             case 'l': dfile_WriteBin(paramtar, getarg(2 + (i * 2)));
  316.         }
  317.     }
  318.     return false;
  319. }
  320.  
  321. stock dfile_MultiGet(tipusok[],{Float,_}:...)
  322. {
  323.     new
  324.         i = 0x-1;
  325.     while(++i<strlen(tipusok))
  326.     {
  327.         new
  328.             l = 0x-1,
  329.             iLoop = 0x-1;
  330.         while(++l<MAX_PARAMETER_SIZE) paramtar[l] = getarg(1 + (i * 2), l);
  331.         switch(tipusok[i])
  332.         {
  333.             case 'b': setarg(2+(i*2), 0, boolstr2(dfile_ReadString(paramtar)));
  334.             case 'd', 'i': setarg(2+(i*2), 0, strval(dfile_ReadString(paramtar)));
  335.             case 'f': setarg(2+(i*2), 0, _:floatstr(dfile_ReadString(paramtar)));
  336.             case 's':
  337.             {
  338.                 format(formazas,sizeof(formazas),"%s",dfile_ReadString(paramtar));
  339.                 while((strlen(dfile_ReadString(paramtar)) != iLoop++)) setarg(2+(i*2),iLoop,formazas[iLoop]);
  340.             }
  341.             case 'h': setarg(2+(i*2), 0, _:strhex(dfile_ReadString(paramtar)));
  342.             case 'l': setarg(2+(i*2), 0, _:strbin(dfile_ReadString(paramtar)));
  343.             default: return print("dFile Error: Unknown type definition!"), 0;
  344.         }
  345.     }
  346.     return true;
  347. }
  348.  
  349. stock dfile_CloseFile(){
  350.     new
  351.         i = -1;
  352.     for(; ++i != sorokszama ;)
  353.     {
  354.         param[i][0] = EOS;
  355.         ert[i][0] = EOS;
  356.         parameternek[i] = 0;
  357.     }
  358.     return sorokszama = 0;
  359. }
  360.  
  361. stock dfile_SaveFile()
  362. {
  363.     new
  364.         iLoop = -1;
  365.     fajlmegnyitas = fopen(fajlnev, io_write);
  366.     while(++iLoop != sorokszama)
  367.     {
  368.         if(strlen(param[iLoop]) > 0)
  369.         {
  370.             format(formazas, sizeof(formazas), "%s=%s\r\n", param[iLoop], ert[iLoop]);
  371.             fwrite(fajlmegnyitas, formazas);
  372.         }else break;
  373.     }
  374.     return fclose(fajlmegnyitas);
  375. }
  376.  
  377. #if defined USE_PLUGIN_FUNCTIONS
  378.     stock dfile_CreateDirectory(mappa[]){
  379.         format(formazas, sizeof(formazas), "scriptfiles/%s", mappa);
  380.         if(dir_exists(formazas)) return false;
  381.         dir_create(formazas);
  382.         return true;
  383.     }
  384.  
  385.     stock dfile_DeleteDirectory(mappa[]){
  386.         format(formazas, sizeof(formazas), "scriptfiles/%s", mappa);
  387.         if(!dir_exists(formazas)) return false;
  388.         dir_delete(formazas);
  389.         return true;
  390.     }
  391. #endif
  392.  
  393. stock dfile_RenameFile(reginev[], ujnev[]){
  394.     #if defined USE_PLUGIN_FUNCTIONS
  395.         new formazas2[MAX_PARAMETER_SIZE];
  396.         format(formazas, sizeof(formazas), "scriptfiles/%s", reginev);
  397.         if(!file_exists(formazas)) return false;
  398.         format(formazas2, sizeof(formazas2), "scriptfiles/%s", ujnev);
  399.         return file_move(formazas, formazas2);
  400.     #else
  401.         dfile_MoveFile(reginev, ujnev);
  402.     #endif
  403. }
  404.  
  405. stock dfile_MoveFile(fajl[], cel[]){
  406.     #if defined USE_PLUGIN_FUNCTIONS
  407.         format(formazas, sizeof(formazas), "scriptfiles/%s", fajl);
  408.         if(!file_exists(formazas)) return false;
  409.         file_move(formazas, cel);
  410.     #else
  411.         if(!fexist(fajl)) return false;
  412.         dfile_Create(cel);
  413.         fajlmegnyitas = fopen(fajl, io_read);
  414.         celfajl = fopen(cel, io_write);
  415.         while(fread(fajlmegnyitas, olvasas)) fwrite(celfajl, olvasas);
  416.         fclose(fajlmegnyitas);
  417.         fclose(celfajl);
  418.         fremove(fajl);
  419.     #endif
  420.     return true;
  421. }
  422.  
  423. stock dfile_ParseString(parameter[], ertek[]){
  424.     format(formazas, sizeof(formazas), "%s", dfile_ReadString(parameter));
  425.     if(strval(dfile_ReadString(parameter)) == strval(ertek)) return true;
  426.     else return false;
  427. }
  428.  
  429. stock dfile_ParseInt(parameter[], ertek){
  430.     new intvalue[MAX_PARAMETER_SIZE];
  431.     format(intvalue, sizeof(intvalue), "%d", ertek);
  432.     return dfile_ParseString(parameter, intvalue);
  433. }
  434.  
  435. stock dfile_ParseFloat(parameter[], Float:ertek){
  436.     new floatvalue[MAX_PARAMETER_SIZE];
  437.     format(floatvalue, sizeof(floatvalue), "%f", ertek);
  438.     return dfile_ParseString(parameter, floatvalue);
  439. }
  440.  
  441. stock dfile_ParseBool(parameter[], bool:ertek){
  442.     new boolean;
  443.     if(ertek) boolean = dfile_ParseString(parameter, "true");
  444.     else boolean = dfile_ParseString(parameter, "false");
  445.     return boolean;
  446. }
  447.  
  448. stock dfile_ParseHex(parameter[], ertek){
  449.     new hexvalue[MAX_PARAMETER_SIZE];
  450.     format(hexvalue, sizeof(hexvalue), "%06x", ertek);
  451.     return dfile_ParseString(parameter, hexvalue);
  452. }
  453.  
  454. stock dfile_ParseBin(parameter[], ertek){
  455.     new binvalue[MAX_PARAMETER_SIZE];
  456.     format(binvalue, sizeof(binvalue), "0b%b", ertek);
  457.     return dfile_ParseString(parameter, binvalue);
  458. }
  459.  
  460. stock dfile_IsSet(parameter[]){
  461.     if(!strlen(dfile_ReadString(parameter))) return false;
  462.     else return true;
  463. }
  464.  
  465. stock dfile_UnSet(parameter[]){
  466.     new
  467.         i = 0x-1;
  468.     for( ; ++i != sorokszama ; )
  469.     {
  470.         if(!strcmp(param[i], parameter, false))
  471.         {
  472.             return ert[i][0] = EOS;
  473.         }
  474.     }
  475.     return true;
  476. }
  477.  
  478. // Custom functions
  479. stock strhex (string []) {
  480.     new
  481.         i,
  482.         value;
  483.            
  484.     if (string [0] == '0' && (string [1] == 'x' || string [1] == 'X'))
  485.         i = 2;
  486.  
  487.     while (string [i])
  488.     {
  489.         value <<= 4;
  490.         switch (string [i])
  491.         {
  492.             case '0' .. '9':
  493.                 value |= string [i] - '0';
  494.  
  495.             case 'A' .. 'F':
  496.                 value |= string [i] - 'A' + 10;
  497.  
  498.             case 'a' .. 'f':
  499.                 value |= string [i] - 'a' + 10;
  500.  
  501.             default:
  502.                 return 0;
  503.         }
  504.         ++i;
  505.     }
  506.     return value;
  507. }
  508.  
  509. stock strbin (string []) {
  510.         new
  511.             i,
  512.             value;
  513.  
  514.         if (string [0] == '0' && (string [1] == 'b' || string [1] == 'B'))
  515.             i = 2;
  516.  
  517.         while (string [i])
  518.         {
  519.             if (string [i] != '1' && string [i] != '0')
  520.                 return 0;
  521.  
  522.             value <<= 1;
  523.             value |= (string [i] - '0');
  524.             ++i;
  525.         }
  526.         return value;
  527. }
Advertisement
Add Comment
Please, Sign In to add comment