Romanius

Untitled

Apr 14th, 2011
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.46 KB | None | 0 0
  1. /**
  2. --------------------------------------------------------------------------
  3. |           |==============================================|             |
  4. |           |          Binary Read/Write funtions          |             |
  5. |           |============================ v0.3 ============|             |
  6. |                                                                        |
  7. |           |=== Authors: =================================|             |
  8. |           |=> Aleks10           ([email protected]) |             |
  9. |           |=> Romanius               ([email protected]) |             |
  10. |           |==============================================|             |
  11. |                                                                        |
  12. |  This script is free software: you can redistribute it and/or modify   |
  13. |  it under the terms of the GNU General Public License as published by  |
  14. |  the Free Software Foundation, either version 3 of the License, or     |
  15. |  (at your option) any later version.                                   |
  16. |                                                                        |
  17. |  This script is distributed in the hope that it will be useful,        |
  18. |  but WITHOUT ANY WARRANTY; without even the implied warranty of        |
  19. |  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
  20. |  GNU General Public License for more details.                          |
  21. |                                                                        |
  22. |  You should have received a copy of the GNU General Public License     |
  23. |  along with this script.  If not, see <http://www.gnu.org/licenses/>.  |
  24. |                                                                        |
  25. --------------------------------------------------------------------------
  26. **/
  27.  
  28. #if defined _r_io_included
  29.     #endinput
  30. #endif
  31. #define _r_io_included
  32.  
  33. #include <file>
  34.  
  35. enum
  36. {
  37.     BIG_EDIAN,
  38.     LITTLE_EDIAN,
  39. }
  40.  
  41. // Считывает 1 байт из файла
  42. stock readByte(File:f)
  43. {
  44.     new b;
  45.    
  46.     b = fgetchar(f, b, false);
  47.    
  48.     return b;
  49. }
  50.  
  51. // Считывает 2 байта из файла
  52. stock readInt16(File:f, e = LITTLE_EDIAN)
  53. {
  54.     new b[2];
  55.    
  56.     if(e == LITTLE_EDIAN)
  57.         for(new i; i < 2; i++)
  58.             b[i] = fgetchar(f, b[i], false);
  59.     else
  60.         for(new i = 1; i >= 0; --i)
  61.             b[i] = fgetchar(f, b[i], false);
  62.    
  63.     return (b[1] << 8) | b[0];
  64. }
  65.  
  66. // Считывает 4 байта из файла
  67. stock readInt32(File:f, e = LITTLE_EDIAN)
  68. {
  69.     new b[4];
  70.    
  71.     if(e == LITTLE_EDIAN)
  72.         for(new i; i < 4; i++)
  73.             b[i] = fgetchar(f, b[i], false);
  74.     else
  75.         for(new i = 3; i >= 0; --i)
  76.             b[i] = fgetchar(f, b[i], false);
  77.    
  78.     return (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | b[0];
  79. }
  80.  
  81. // Записывает 1 байт в фаил
  82. stock writeByte(File:f, data)
  83. {
  84.     fputchar(f, data, false);
  85. }
  86.  
  87. // Записывает 2 байта в фаил
  88. stock writeInt16(File:f, data, e = LITTLE_EDIAN)
  89. {
  90.     new b[2];
  91.    
  92.     b[0] = (data & 0xFF00) >> 8;
  93.     b[1] = data & 0xFF;
  94.    
  95.     if(e == LITTLE_EDIAN)
  96.         for(new i = 1; i >= 0; --i)
  97.             fputchar(f, b[i], false);
  98.     else
  99.         for(new i; i < 2; i++)
  100.             fputchar(f, b[i], false);
  101. }
  102.  
  103. // Записывает 4 байта в фаил
  104. stock writeInt32(File:f, data, e = LITTLE_EDIAN)
  105. {
  106.     new b[4];
  107.    
  108.     b[0] = (data & 0xFF000000) >> 24;
  109.     b[1] = (data & 0x00FF0000) >> 16;
  110.     b[2] = (data & 0x0000FF00) >> 8;
  111.     b[3] = data & 0x000000FF;
  112.    
  113.     if(e == LITTLE_EDIAN)
  114.         for(new i = 3; i >= 0; --i)
  115.             fputchar(f, b[i], false);
  116.     else
  117.         for(new i; i < 4; i++)
  118.             fputchar(f, b[i], false);
  119. }
Advertisement
Add Comment
Please, Sign In to add comment