Advertisement
Hauke

HSA 2.2.0 - crypt

Aug 11th, 2013
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.97 KB | None | 0 0
  1. // HSA 2.2.0 (crypt) include by Hauke Marquardt alias |-|auke - 12.08.2013
  2. /*
  3. License:
  4.         This code is free: you can redistribute it and/or modify
  5.         it under the terms of the GNU General Public License as published by
  6.         the Free Software Foundation, either version 3 of the License, or
  7.         (at your option) any later version.
  8.  
  9.         This code is distributed in the hope that it will be useful,
  10.         but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.         GNU General Public License for more details.
  13.  
  14.         You should have received a copy of the GNU General Public License
  15.         along with this program.  If not, see <http://www.gnu.org/licenses/>.
  16.         You´re not allowed to copy any code from this, into your code without
  17.         naming authors name in credits!
  18. */
  19.  
  20. #if defined _hsa_included
  21.     #endinput
  22. #endif
  23.  
  24. #define _hsa_included
  25.  
  26. #if !defined _hsa_max_file_name_offset
  27.     #define _hsa_max_file_name_offset       0
  28. #endif
  29.  
  30. #if !defined _hsa_max_files_cache_offset
  31.     #define _hsa_max_files_cache_offset     0
  32. #endif
  33.  
  34. #if !defined _hsa_entries_per_file_offset
  35.     #define _hsa_entries_per_file_offset    0
  36. #endif
  37.  
  38. #if !defined _hsa_max_key_lenght_offset
  39.     #define _hsa_max_key_lenght_offset      0
  40. #endif
  41.  
  42. #if !defined _hsa_max_value_lenght_offset
  43.     #define _hsa_max_value_lenght_offset    0
  44. #endif
  45.  
  46. #define _MAX_FILE_NAME_LENGHT               96 + _hsa_max_file_name_offset
  47. #define _MAX_FILES                          20 + _hsa_max_files_cache_offset
  48. #define _MAX_ENTRIES                        50 + _hsa_entries_per_file_offset
  49. #define _MAX_KEY_LENGHT                     24 + _hsa_max_key_lenght_offset
  50. #define _MAX_VALUE_LENGHT                   128 + _hsa_max_value_lenght_offset
  51. #define _MAX_LINE_CACHE                     _MAX_KEY_LENGHT + _MAX_VALUE_LENGHT + 3
  52. #define _STRING_KEY                         72635
  53. #define _STRING_KEY_OFFSET                  28364
  54. #define _ENCRYPT                            0
  55. #define _DECRYPT                            1
  56.  
  57. #if !defined _h_library_norm_included
  58.     #define PAWN_TYPE_INT                   1
  59.     #define PAWN_TYPE_FLOAT                 2
  60.     #define PAWN_TYPE_ARRAY                 3
  61.     #define _h_library_norm_included
  62. #endif
  63.  
  64. #define getInt:%1(%2)                       _GetInt(%1,%2)
  65. #define getFloat:%1(%2)                     _GetFloat(%1,%2)
  66. #define getString:%1(%2)                    _GetArray(%1,%2)
  67. #define setInt:%1(%2,%3)                    _SetInt(%1,%2,%3)
  68. #define setFloat:%1(%2,%3)                  _SetFloat(%1,%2,%3)
  69. #define setString:%1(%2,%3)                 _SetArray(%1,%2,%3)
  70. #define Save(%1)                            _WriteFile(%1)
  71. #define SaveAll(%1)                         _WriteAll(%1)
  72.  
  73. new _CachedFiles[ _MAX_FILES ][ _MAX_FILE_NAME_LENGHT ];
  74. enum _LineCache
  75. {
  76.     _Key[ _MAX_KEY_LENGHT ],
  77.     _Value[ _MAX_VALUE_LENGHT ]
  78. }
  79. new _FileCache[ _MAX_FILES ][ _MAX_ENTRIES ][ _LineCache ];
  80.  
  81. stock _GetInt ( File[ ] , Key[ ] ) {
  82.     new Result[ _MAX_VALUE_LENGHT ];
  83.     _GetData ( File , Key , Result , PAWN_TYPE_INT );
  84.     return strval ( Result );
  85. }
  86.  
  87. stock Float:_GetFloat ( File[ ] , Key[ ] ) {
  88.     new Result[ _MAX_VALUE_LENGHT ];
  89.     _GetData ( File , Key , Result , PAWN_TYPE_FLOAT );
  90.     return floatstr ( Result );
  91. }
  92.  
  93. stock _GetArray ( File[ ] , Key[ ] ) {
  94.     new Result[ _MAX_VALUE_LENGHT ];
  95.     _GetData ( File , Key , Result , PAWN_TYPE_ARRAY );
  96.     return Result;
  97. }
  98.  
  99. stock _SetInt ( File[ ] , Key[ ] , Value ) {
  100.     new uValue[ _MAX_LINE_CACHE ];
  101.     format ( uValue , _MAX_LINE_CACHE , "%d" , Value );
  102.     _SetData ( File , Key , uValue );
  103. }
  104.  
  105. stock _SetFloat ( File[ ] , Key[ ] , Float:Value ) {
  106.     new uValue[ _MAX_LINE_CACHE ];
  107.     format ( uValue , _MAX_LINE_CACHE , "%f" , Value );
  108.     _SetData ( File , Key , uValue );
  109. }
  110.  
  111. stock _SetArray ( File[ ] , Key[ ] , Value[ ] ) {
  112.     _SetData ( File , Key , Value );
  113. }
  114.  
  115. stock _GetData ( File[ ] , Key[ ] , Result[ ] , Type ) {
  116.     new FileName[ _MAX_FILE_NAME_LENGHT ] , File:file;
  117.     format ( FileName , _MAX_FILE_NAME_LENGHT , "%s.hsa" , File );
  118.     if ( _GetFileCacheIndex ( File ) == -1 ) {
  119.         new CacheSlot = _GetFreeCacheSlot ( ) , Line[ _MAX_LINE_CACHE  ] , readLine , rIdx = -1;
  120.         format ( _CachedFiles[ CacheSlot ] , _MAX_FILE_NAME_LENGHT , File );
  121.         file = fopen ( FileName , io_readwrite );
  122.         while ( fread ( file , Line ) ) {
  123.             Line[ strlen ( Line ) -2 ] = '\0';
  124.             strmid ( _FileCache[ CacheSlot ][ readLine ][ _Key ] , Line , 0 , strfind ( Line , "=" , false ) , _MAX_KEY_LENGHT );
  125.             strmid ( _FileCache[ CacheSlot ][ readLine ][ _Value ] , Line , strfind ( Line , "=" , false ) + 1 , strlen ( Line ) , _MAX_VALUE_LENGHT );
  126.             format ( _FileCache[ CacheSlot ][ readLine ][ _Key ] , _MAX_KEY_LENGHT , _StringModificator ( _DECRYPT , _FileCache[ CacheSlot ][ readLine ][ _Key ] ) );
  127.             format ( _FileCache[ CacheSlot ][ readLine ][ _Value ] , _MAX_VALUE_LENGHT , _StringModificator ( _DECRYPT , _FileCache[ CacheSlot ][ readLine ][ _Value ] ) );
  128.             if ( !strcmp ( _FileCache[ CacheSlot ][ readLine ][ _Key ] , Key ) && strlen ( _FileCache[ CacheSlot ][ readLine ][ _Key ] ) )
  129.                 rIdx = readLine;
  130.             readLine++;
  131.         }
  132.         fclose ( file );
  133.         if ( rIdx != -1 )
  134.             return format ( Result , _MAX_VALUE_LENGHT , _FileCache[ CacheSlot ][ rIdx ][ _Value ] );
  135.         else {
  136.             format ( _FileCache[ CacheSlot ][ readLine ][ _Key ] , _MAX_KEY_LENGHT , Key );
  137.             switch ( Type ) {
  138.                 case PAWN_TYPE_INT:
  139.                     format ( _FileCache[ CacheSlot ][ readLine ][ _Value ] , _MAX_VALUE_LENGHT , "0" );
  140.                 case PAWN_TYPE_FLOAT:
  141.                     format ( _FileCache[ CacheSlot ][ readLine ][ _Value ] , _MAX_VALUE_LENGHT , "0.0" );
  142.                 case PAWN_TYPE_ARRAY:
  143.                     format ( _FileCache[ CacheSlot ][ readLine ][ _Value ] , _MAX_VALUE_LENGHT , "" );
  144.             }
  145.         }
  146.         return _FileCache[ CacheSlot ][ readLine ][ _Value ];
  147.     }
  148.     else {
  149.         new CacheSlot = _GetFileCacheIndex ( File ) , Idx;
  150.         for ( ; Idx < _MAX_ENTRIES; Idx++ )
  151.             if ( !strcmp ( _FileCache[ CacheSlot ][ Idx ][ _Key ] , Key ) && strlen ( _FileCache[ CacheSlot ][ Idx ][ _Key ] ) )
  152.                 return format ( Result , _MAX_VALUE_LENGHT , _FileCache[ CacheSlot ][ Idx ][ _Value ] );
  153.         new AppendEntry = _GetFreeEntry ( CacheSlot );
  154.         if ( AppendEntry == -1 )
  155.             return print ( "HSA ERROR: Entries set too low!" );
  156.         format ( _FileCache[ CacheSlot ][ AppendEntry ][ _Key ] , _MAX_KEY_LENGHT , Key );
  157.         switch ( Type ) {
  158.             case PAWN_TYPE_INT:
  159.                 format ( _FileCache[ CacheSlot ][ AppendEntry ][ _Value ] , _MAX_VALUE_LENGHT , "0" );
  160.             case PAWN_TYPE_FLOAT:
  161.                 format ( _FileCache[ CacheSlot ][ AppendEntry ][ _Value ] , _MAX_VALUE_LENGHT , "0.0" );
  162.             case PAWN_TYPE_ARRAY:
  163.                 format ( _FileCache[ CacheSlot ][ AppendEntry ][ _Value ] , _MAX_VALUE_LENGHT , "" );
  164.         }
  165.         return format ( Result , _MAX_VALUE_LENGHT , _FileCache[ CacheSlot ][ AppendEntry ][ _Value ] );
  166.     }
  167. }
  168.  
  169. stock _SetData ( File[ ] , Key[ ] , Value[ ] )
  170. {
  171.     new FileName[ _MAX_FILE_NAME_LENGHT ] , File:file;
  172.     format ( FileName , _MAX_FILE_NAME_LENGHT , "%s.hsa" , File );
  173.     if ( _GetFileCacheIndex ( File ) == -1 ) {
  174.         new CacheSlot = _GetFreeCacheSlot ( ) , Line[ _MAX_LINE_CACHE  ] , readLine , rIdx = -1;
  175.         format ( _CachedFiles[ CacheSlot ] , _MAX_FILE_NAME_LENGHT , File );
  176.         file = fopen ( FileName , io_readwrite );
  177.         while ( fread ( file , Line ) ) {
  178.             Line[ strlen ( Line ) -2 ] = '\0';
  179.             strmid ( _FileCache[ CacheSlot ][ readLine ][ _Key ] , Line , 0 , strfind ( Line , "=" , false ) , _MAX_KEY_LENGHT );
  180.             strmid ( _FileCache[ CacheSlot ][ readLine ][ _Value ] , Line , strfind ( Line , "=" , false ) + 1 , strlen ( Line ) , _MAX_VALUE_LENGHT );
  181.             format ( _FileCache[ CacheSlot ][ readLine ][ _Key ] , _MAX_KEY_LENGHT , _StringModificator ( _DECRYPT , _FileCache[ CacheSlot ][ readLine ][ _Key ] ) );
  182.             format ( _FileCache[ CacheSlot ][ readLine ][ _Value ] , _MAX_VALUE_LENGHT , _StringModificator ( _DECRYPT , _FileCache[ CacheSlot ][ readLine ][ _Value ] ) );
  183.             if ( !strcmp ( _FileCache[ CacheSlot ][ readLine ][ _Key ] , Key ) && strlen ( _FileCache[ CacheSlot ][ readLine ][ _Key ] ) )
  184.                 rIdx = readLine;
  185.             readLine++;
  186.         }
  187.         fclose ( file );
  188.         if ( rIdx != -1 )
  189.             return format ( _FileCache[ CacheSlot ][ rIdx ][ _Value ] , _MAX_VALUE_LENGHT , Value );
  190.         else {
  191.             format ( _FileCache[ CacheSlot ][ readLine ][ _Key ] , _MAX_KEY_LENGHT , Key );
  192.             return format ( _FileCache[ CacheSlot ][ readLine ][ _Value ] , _MAX_VALUE_LENGHT , Value );
  193.         }
  194.     }
  195.     else {
  196.         new CacheSlot = _GetFileCacheIndex ( File ) , Idx;
  197.         for ( ; Idx < _MAX_ENTRIES; Idx++ )
  198.             if ( !strcmp ( _FileCache[ CacheSlot ][ Idx ][ _Key ] , Key ) && strlen ( _FileCache[ CacheSlot ][ Idx ][ _Key ] ) )
  199.                 return format ( _FileCache[ CacheSlot ][ Idx ][ _Value ] , _MAX_VALUE_LENGHT , Value );
  200.         new AppendEntry = _GetFreeEntry ( CacheSlot );
  201.         if ( AppendEntry == -1 )
  202.             return print ( "HSA ERROR: Entries set too low!" );
  203.         format ( _FileCache[ CacheSlot ][ AppendEntry ][ _Key ] , _MAX_KEY_LENGHT , Key );
  204.         return format ( _FileCache[ CacheSlot ][ AppendEntry ][ _Value ] , _MAX_VALUE_LENGHT , Value );
  205.     }
  206. }
  207.  
  208. stock _WriteFile ( File[ ] ) {
  209.     new FileName[ _MAX_FILE_NAME_LENGHT ] , File:file , Line[ _MAX_LINE_CACHE ] , CacheSlot = _GetFileCacheIndex ( File );
  210.     format ( FileName , _MAX_FILE_NAME_LENGHT , "%s.hsa" , File );
  211.     if ( _GetFileCacheIndex ( File ) == -1 )
  212.         return -1;
  213.     fremove ( FileName );
  214.     file = fopen ( FileName , io_append );
  215.     for ( new Idx; Idx < _MAX_ENTRIES; Idx++ ) {
  216.         if ( strlen ( _FileCache[ CacheSlot ][ Idx ][ _Key ] ) < 1 )
  217.             break;
  218.         format ( Line , _MAX_LINE_CACHE , "%s=%s\r\n" , _StringModificator ( _ENCRYPT , _FileCache[ CacheSlot ][ Idx ][ _Key ] ) , _StringModificator ( _ENCRYPT , _FileCache[ CacheSlot ][ Idx ][ _Value ] ) );
  219.         fwrite ( file , Line );
  220.     }
  221.     return fclose ( file );
  222. }
  223.  
  224. stock _WriteAll ( ) {
  225.     for ( new Slot; Slot < _MAX_FILES; Slot++ )
  226.     {
  227.         if ( strlen ( _CachedFiles[ Slot ] ) < 1 )
  228.             continue;
  229.         new FileName[ _MAX_FILE_NAME_LENGHT ] , File:file , Line[ _MAX_LINE_CACHE ];
  230.         format ( FileName , _MAX_FILE_NAME_LENGHT , "%s.hsa" , _CachedFiles[ Slot ] );
  231.         fremove ( FileName );
  232.         file = fopen ( FileName , io_append );
  233.         for ( new Idx; Idx < _MAX_ENTRIES; Idx++ ) {
  234.             if ( strlen ( _FileCache[ Slot ][ Idx ][ _Key ] ) < 1 )
  235.                 break;
  236.             format ( Line , _MAX_LINE_CACHE , "%s=%s\r\n" , _StringModificator ( _ENCRYPT , _FileCache[ CacheSlot ][ Idx ][ _Key ] ) , _StringModificator ( _ENCRYPT , _FileCache[ CacheSlot ][ Idx ][ _Value ] ) );
  237.             fwrite ( file , Line );
  238.         }
  239.         fclose ( file );
  240.     }
  241. }
  242.  
  243. stock _FreeCache ( ) {
  244.     for ( new Slot; Slot < _MAX_FILES; Slot++ )
  245.         _FreeSlot ( Slot );
  246. }
  247.  
  248. stock _FreeSlot ( Slot ) {
  249.     for ( new Idx; Idx < _MAX_ENTRIES; Idx++ ) {
  250.         _FileCache[ Slot ][ Idx ][ _Key ][ 0 ] = '\0';
  251.         _FileCache[ Slot ][ Idx ][ _Value ][ 0 ] = '\0';
  252.     }
  253. }
  254.  
  255. stock _GetFreeEntry ( Slot )
  256. {
  257.     for ( new Idx; Idx < _MAX_ENTRIES; Idx++ )
  258.         if ( strlen ( _FileCache[ Slot ][ Idx ][ _Key ] ) < 1 )
  259.             return Idx;
  260.     return -1;
  261. }
  262.  
  263. stock _GetFileCacheIndex ( File[ ] ) {
  264.     for ( new Idx; Idx < _MAX_FILES; Idx++ )
  265.         if ( !strcmp ( _CachedFiles[ Idx ] , File ) && strlen ( _CachedFiles[ Idx ] ) )
  266.             return Idx;
  267.     return -1;
  268. }
  269.  
  270. stock _GetFreeCacheSlot ( )
  271. {
  272.     for ( new index; index < _MAX_FILES; index++ )
  273.         if ( strlen ( _CachedFiles[ index ] ) == 0 )
  274.             return index;
  275.     return -1;
  276. }
  277.  
  278. stock _StringModificator ( Method , String[ ] ) {
  279.     new Converted[ _MAX_LINE_CACHE ];
  280.     for ( new i = 0; i < strlen ( String ); i++ )
  281.     Converted[ i ] = Method == _ENCRYPT ? ( String[ i ] - _STRING_KEY ) + _STRING_KEY_OFFSET : ( String[ i ] + _STRING_KEY ) - _STRING_KEY_OFFSET;
  282.     return Converted;
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement