Advertisement
EnzoMetlc

[Include] file_system [save memory - faster than y_ini!]

Nov 25th, 2016
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.17 KB | None | 0 0
  1. /*
  2. @file_system.inc - v25/11/16.
  3.  
  4. - natives
  5.         native File_Open(File:file, location[], open_mode);
  6.         native File_Close(File:file);
  7.  
  8.         native File_WriteStr(File:file, name[], value[]);
  9.         native File_WriteInt(File:file, name[], value);
  10.         native File_WriteFloat(File:file, name[], Float:value);
  11.         native File_WriteBool(File:file, name[], bool:value);
  12.  
  13.         native File_ReadStr(File:file, name[], store[]);
  14.         native File_ReadInt(File:file, name[], &store);
  15.         native File_ReadFloat(File:file, name[], &Float:store);
  16.         native File_ReadBool(File:file, name[], &bool:store);
  17.        
  18.         native File_WriteEx(File:file, const params[], {Float, _}:...);
  19.         native File_ReadEx(File:file, const params[], {Float, _}:...);
  20. */
  21.  
  22.  
  23. #if !defined FILE_MAX_STRING
  24. #define FILE_MAX_STRING 128
  25. #endif
  26.  
  27.  
  28. new gFileStr[FILE_MAX_STRING];
  29.  
  30.  
  31.  
  32. /* Main */
  33. #define File_Open(%1,%2,%3)     if((%1 = fopen(%2, %3)))
  34. #define File_Close(%1)          fclose(%1)
  35.  
  36.  
  37.  
  38. /* Write */
  39. stock File_WriteStr(File:file, name[], value[])
  40. {
  41.     format(gFileStr, sizeof(gFileStr), "%s = %s\r\n", name, value);
  42.     fwrite(file, gFileStr);
  43. }
  44.  
  45. stock File_WriteInt(File:file, name[], value)
  46. {
  47.     format(gFileStr, sizeof(gFileStr), "%s = %i\r\n", name, value);
  48.     fwrite(file, gFileStr);
  49. }
  50.  
  51. stock File_WriteFloat(File:file, name[], Float:value)
  52. {
  53.     format(gFileStr, sizeof(gFileStr), "%s = %f\r\n", name, value);
  54.     fwrite(file, gFileStr);
  55. }
  56.  
  57. stock File_WriteBool(File:file, name[], bool:value)
  58. {
  59.     File_WriteStr(file, name, (value == true) ? ("true") : ("false"));
  60. }
  61.  
  62.  
  63.  
  64. /* Read */
  65. stock File_ReadStr(File:file, name[], store[])
  66. {
  67.     fseek(file, strlen(name) + 3, seek_current);
  68.     fread(file, gFileStr);
  69.     format(store, strlen(gFileStr) - 1, "%s", gFileStr);
  70. }
  71.  
  72. stock File_ReadInt(File:file, name[], &store)
  73. {
  74.     fseek(file, strlen(name) + 3, seek_current);
  75.     fread(file, gFileStr);
  76.     store = strval(gFileStr);
  77. }
  78.  
  79. stock File_ReadFloat(File:file, name[], &Float:store)
  80. {
  81.     fseek(file, strlen(name) + 3, seek_current);
  82.     fread(file, gFileStr);
  83.     store = floatstr(gFileStr);
  84. }
  85.  
  86. stock File_ReadBool(File:file, name[], &bool:store)
  87. {
  88.     fseek(file, strlen(name) + 3, seek_current);
  89.     fread(file, gFileStr, 2);
  90.     store = bool:(gFileStr[0] == 't');
  91. }
  92.  
  93.  
  94.  
  95. /* using sscanf */
  96. #define File_ReadEx(%1,%2,%3) fread(%1, gFileStr); gFileStr[strlen(gFileStr) - 2] = '\0'; sscanf(gFileStr, %2, %3)
  97.  
  98. stock File_WriteEx(File:file, const params[], {Float, _}:...)
  99. {
  100.     new i, num = numargs(), j, tmp[sizeof(gFileStr)], arg, idx;
  101.     gFileStr = "";
  102.  
  103.     for(i = 2; i < num; i++)
  104.     {
  105.         switch(params[i - 2])
  106.         {
  107.             case 'i', 'd': format(tmp, 13, "%i ", getarg(i));
  108.             case 'f': format(tmp, 20, "%f ", getarg(i));
  109.             case 'c': format(tmp, 3, "%c ", getarg(i));
  110.             case 'b': format(tmp, 20, "%b ", getarg(i));
  111.             case 'x': format(tmp, 20, "%x ", getarg(i));
  112.             case 's':
  113.             {
  114.                 tmp = "", j = 0;
  115.                  while((arg = getarg(i, j)) != '\0') tmp[j++] = arg;
  116.                 tmp[j++] = ' ';
  117.                 tmp[j] = '\0';
  118.             }
  119.         }
  120.         strcat(gFileStr, tmp);
  121.     }
  122.  
  123.     idx = strlen(gFileStr);
  124.     gFileStr[idx - 1] = '\r';
  125.     gFileStr[idx] = '\n';
  126.     gFileStr[idx + 1] = '\0';
  127.     fwrite(file, gFileStr);
  128.     return 1;
  129. }
  130.  
  131.  
  132.  
  133. /*
  134. *   @EOF
  135. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement