forked from KolibriOS/kolibrios
Addition new function for crc32 checksum!
git-svn-id: svn://kolibrios.org@7740 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
0cee7aa77a
commit
eed7aee495
58
programs/cmm/lib/crc32.h
Executable file
58
programs/cmm/lib/crc32.h
Executable file
@ -0,0 +1,58 @@
|
||||
/* CRC32 function; Author PaulCodeman */
|
||||
:dword crc32Table = 0;
|
||||
:dword makeCRCTable(void)
|
||||
{
|
||||
dword i = 0;
|
||||
dword c = 0;
|
||||
dword ii = 0;
|
||||
dword crcTable = 0;
|
||||
IF (crc32Table) RETURN 0;
|
||||
crc32Table = malloc(4*256);
|
||||
crcTable = crc32Table;
|
||||
WHILE (i < 256)
|
||||
{
|
||||
c = i;
|
||||
ii = 0;
|
||||
WHILE (ii < 8)
|
||||
{
|
||||
IF (c&1)
|
||||
{
|
||||
c >>= 1;
|
||||
c ^= 0xEDB88320;
|
||||
}
|
||||
ELSE c >>= 1;
|
||||
ii++;
|
||||
}
|
||||
DSDWORD[crcTable] = c;
|
||||
crcTable += 4;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
:dword crc32(dword bytes, length)
|
||||
{
|
||||
dword crc = 0;
|
||||
dword i = 0;
|
||||
byte b = 0;
|
||||
IF (!crc32Table) makeCRCTable();
|
||||
crc = 0xFFFFFFFF;
|
||||
WHILE (i < length)
|
||||
{
|
||||
b = DSBYTE[bytes];
|
||||
bytes++;
|
||||
EDX = crc^b;
|
||||
EDX &= 0xFF;
|
||||
EDX <<= 2;
|
||||
EDX += crc32Table;
|
||||
crc >>= 8;
|
||||
crc ^= DSDWORD[EDX];
|
||||
i++;
|
||||
}
|
||||
RETURN crc ^ 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
/* EXAMPLE
|
||||
dword str = 0;
|
||||
str = "Kevin van Zonneveld";
|
||||
crc32(str, strlen(str));
|
||||
IF (EAX == 1249991249) ExitProcess();
|
||||
*/
|
Loading…
Reference in New Issue
Block a user