Advertisement
BigETI

crc32.inc

Jan 3rd, 2014
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 4.70 KB | None | 0 0
  1. /*
  2.     CRC32 in PAWN include made by BigETI
  3.    
  4.     See http://www.wilbaden.com/neil_bawd/crc32.txt
  5.     Thanks to W. Wesley Peterson for inventing CRC and many others inventing CRC32 during the 70s
  6. */
  7.  
  8. #if defined _CRC32_INCLUDED_
  9.     #endinput
  10. #endif
  11. #define _CRC32_INCLUDED_
  12.  
  13. static const crc32_table[] = {
  14.     0x0,
  15.     0x77073096,
  16.     0xee0e612c,
  17.     0x990951ba,
  18.     0x76dc419,
  19.     0x706af48f,
  20.     0xe963a535,
  21.     0x9e6495a3,
  22.     0xedb8832,
  23.     0x79dcb8a4,
  24.     0xe0d5e91e,
  25.     0x97d2d988,
  26.     0x9b64c2b,
  27.     0x7eb17cbd,
  28.     0xe7b82d07,
  29.     0x90bf1d91,
  30.     0x1db71064,
  31.     0x6ab020f2,
  32.     0xf3b97148,
  33.     0x84be41de,
  34.     0x1adad47d,
  35.     0x6ddde4eb,
  36.     0xf4d4b551,
  37.     0x83d385c7,
  38.     0x136c9856,
  39.     0x646ba8c0,
  40.     0xfd62f97a,
  41.     0x8a65c9ec,
  42.     0x14015c4f,
  43.     0x63066cd9,
  44.     0xfa0f3d63,
  45.     0x8d080df5,
  46.     0x3b6e20c8,
  47.     0x4c69105e,
  48.     0xd56041e4,
  49.     0xa2677172,
  50.     0x3c03e4d1,
  51.     0x4b04d447,
  52.     0xd20d85fd,
  53.     0xa50ab56b,
  54.     0x35b5a8fa,
  55.     0x42b2986c,
  56.     0xdbbbc9d6,
  57.     0xacbcf940,
  58.     0x32d86ce3,
  59.     0x45df5c75,
  60.     0xdcd60dcf,
  61.     0xabd13d59,
  62.     0x26d930ac,
  63.     0x51de003a,
  64.     0xc8d75180,
  65.     0xbfd06116,
  66.     0x21b4f4b5,
  67.     0x56b3c423,
  68.     0xcfba9599,
  69.     0xb8bda50f,
  70.     0x2802b89e,
  71.     0x5f058808,
  72.     0xc60cd9b2,
  73.     0xb10be924,
  74.     0x2f6f7c87,
  75.     0x58684c11,
  76.     0xc1611dab,
  77.     0xb6662d3d,
  78.     0x76dc4190,
  79.     0x1db7106,
  80.     0x98d220bc,
  81.     0xefd5102a,
  82.     0x71b18589,
  83.     0x6b6b51f,
  84.     0x9fbfe4a5,
  85.     0xe8b8d433,
  86.     0x7807c9a2,
  87.     0xf00f934,
  88.     0x9609a88e,
  89.     0xe10e9818,
  90.     0x7f6a0dbb,
  91.     0x86d3d2d,
  92.     0x91646c97,
  93.     0xe6635c01,
  94.     0x6b6b51f4,
  95.     0x1c6c6162,
  96.     0x856530d8,
  97.     0xf262004e,
  98.     0x6c0695ed,
  99.     0x1b01a57b,
  100.     0x8208f4c1,
  101.     0xf50fc457,
  102.     0x65b0d9c6,
  103.     0x12b7e950,
  104.     0x8bbeb8ea,
  105.     0xfcb9887c,
  106.     0x62dd1ddf,
  107.     0x15da2d49,
  108.     0x8cd37cf3,
  109.     0xfbd44c65,
  110.     0x4db26158,
  111.     0x3ab551ce,
  112.     0xa3bc0074,
  113.     0xd4bb30e2,
  114.     0x4adfa541,
  115.     0x3dd895d7,
  116.     0xa4d1c46d,
  117.     0xd3d6f4fb,
  118.     0x4369e96a,
  119.     0x346ed9fc,
  120.     0xad678846,
  121.     0xda60b8d0,
  122.     0x44042d73,
  123.     0x33031de5,
  124.     0xaa0a4c5f,
  125.     0xdd0d7cc9,
  126.     0x5005713c,
  127.     0x270241aa,
  128.     0xbe0b1010,
  129.     0xc90c2086,
  130.     0x5768b525,
  131.     0x206f85b3,
  132.     0xb966d409,
  133.     0xce61e49f,
  134.     0x5edef90e,
  135.     0x29d9c998,
  136.     0xb0d09822,
  137.     0xc7d7a8b4,
  138.     0x59b33d17,
  139.     0x2eb40d81,
  140.     0xb7bd5c3b,
  141.     0xc0ba6cad,
  142.     0xedb88320,
  143.     0x9abfb3b6,
  144.     0x3b6e20c,
  145.     0x74b1d29a,
  146.     0xead54739,
  147.     0x9dd277af,
  148.     0x4db2615,
  149.     0x73dc1683,
  150.     0xe3630b12,
  151.     0x94643b84,
  152.     0xd6d6a3e,
  153.     0x7a6a5aa8,
  154.     0xe40ecf0b,
  155.     0x9309ff9d,
  156.     0xa00ae27,
  157.     0x7d079eb1,
  158.     0xf00f9344,
  159.     0x8708a3d2,
  160.     0x1e01f268,
  161.     0x6906c2fe,
  162.     0xf762575d,
  163.     0x806567cb,
  164.     0x196c3671,
  165.     0x6e6b06e7,
  166.     0xfed41b76,
  167.     0x89d32be0,
  168.     0x10da7a5a,
  169.     0x67dd4acc,
  170.     0xf9b9df6f,
  171.     0x8ebeeff9,
  172.     0x17b7be43,
  173.     0x60b08ed5,
  174.     0xd6d6a3e8,
  175.     0xa1d1937e,
  176.     0x38d8c2c4,
  177.     0x4fdff252,
  178.     0xd1bb67f1,
  179.     0xa6bc5767,
  180.     0x3fb506dd,
  181.     0x48b2364b,
  182.     0xd80d2bda,
  183.     0xaf0a1b4c,
  184.     0x36034af6,
  185.     0x41047a60,
  186.     0xdf60efc3,
  187.     0xa867df55,
  188.     0x316e8eef,
  189.     0x4669be79,
  190.     0xcb61b38c,
  191.     0xbc66831a,
  192.     0x256fd2a0,
  193.     0x5268e236,
  194.     0xcc0c7795,
  195.     0xbb0b4703,
  196.     0x220216b9,
  197.     0x5505262f,
  198.     0xc5ba3bbe,
  199.     0xb2bd0b28,
  200.     0x2bb45a92,
  201.     0x5cb36a04,
  202.     0xc2d7ffa7,
  203.     0xb5d0cf31,
  204.     0x2cd99e8b,
  205.     0x5bdeae1d,
  206.     0x9b64c2b0,
  207.     0xec63f226,
  208.     0x756aa39c,
  209.     0x26d930a,
  210.     0x9c0906a9,
  211.     0xeb0e363f,
  212.     0x72076785,
  213.     0x5005713,
  214.     0x95bf4a82,
  215.     0xe2b87a14,
  216.     0x7bb12bae,
  217.     0xcb61b38,
  218.     0x92d28e9b,
  219.     0xe5d5be0d,
  220.     0x7cdcefb7,
  221.     0xbdbdf21,
  222.     0x86d3d2d4,
  223.     0xf1d4e242,
  224.     0x68ddb3f8,
  225.     0x1fda836e,
  226.     0x81be16cd,
  227.     0xf6b9265b,
  228.     0x6fb077e1,
  229.     0x18b74777,
  230.     0x88085ae6,
  231.     0xff0f6a70,
  232.     0x66063bca,
  233.     0x11010b5c,
  234.     0x8f659eff,
  235.     0xf862ae69,
  236.     0x616bffd3,
  237.     0x166ccf45,
  238.     0xa00ae278,
  239.     0xd70dd2ee,
  240.     0x4e048354,
  241.     0x3903b3c2,
  242.     0xa7672661,
  243.     0xd06016f7,
  244.     0x4969474d,
  245.     0x3e6e77db,
  246.     0xaed16a4a,
  247.     0xd9d65adc,
  248.     0x40df0b66,
  249.     0x37d83bf0,
  250.     0xa9bcae53,
  251.     0xdebb9ec5,
  252.     0x47b2cf7f,
  253.     0x30b5ffe9,
  254.     0xbdbdf21c,
  255.     0xcabac28a,
  256.     0x53b39330,
  257.     0x24b4a3a6,
  258.     0xbad03605,
  259.     0xcdd70693,
  260.     0x54de5729,
  261.     0x23d967bf,
  262.     0xb3667a2e,
  263.     0xc4614ab8,
  264.     0x5d681b02,
  265.     0x2a6f2b94,
  266.     0xb40bbe37,
  267.     0xc30c8ea1,
  268.     0x5a05df1b,
  269.     0x2d02ef8d};
  270.  
  271. static current_crc32 = 0xFFFFFFFF;
  272.  
  273. stock crc32(const data, bool:packed = true, bool:reset_crc = true)
  274. {
  275.     static i;
  276.     if(reset_crc) current_crc32 = 0xFFFFFFFF;
  277.     if(packed)
  278.     {
  279.         for(i = 0; i < 4; i++) current_crc32 = crc32_table[(current_crc32^(data>>>(i*8)))&0xFF]^(current_crc32>>>8);
  280.         return ~current_crc32;
  281.     }
  282.     return ~(current_crc32 = crc32_table[(current_crc32^data)&0xFF]^(current_crc32>>>8));
  283. }
  284.  
  285. stock crc32_arr(const data[], bool:packed = true, data_len = sizeof data, bool:reset_crc = true)
  286. {
  287.     static i, j;
  288.     if(reset_crc) current_crc32 = 0xFFFFFFFF;
  289.     if(packed) {for(i = 0; i != data_len; i++) for(j = 0; j < 4; j++) current_crc32 = crc32_table[(current_crc32^data{(i*4)+j})&0xFF]^(current_crc32>>>8);}
  290.     else {for(i = 0; i != data_len; i++) current_crc32 = crc32_table[(current_crc32^data[i])&0xFF]^(current_crc32>>>8);}
  291.     return ~current_crc32;
  292. }
  293. #pragma unused  crc32_table
  294. #pragma unused  current_crc32
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement