/*++



// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved 

Module Name:

    CRC32.H

Abstract:

    Standard CRC-32 implementation

History:

	raymcc      07-Jul-97       Createada

--*/

#ifndef _CRC_H_
#define _CRC_H_

#define STARTING_CRC32_VALUE    0xFFFFFFFF

DWORD UpdateCRC32(
    LPBYTE  pSrc,               // Points to buffer
    int     nBytes,             // Number of bytes to compute
    DWORD   dwOldCrc            // Must be STARTING_CRC_VALUE (0xFFFFFFFF) 
                                // if no previous CRC, otherwise this is the
                                // CRC of the previous cycle.
    );

#define FINALIZE_CRC32(x)    (x=~x)

/*
The CRC holding value must be preinitialized to STARTING_CRC32_VALUE
UpdateCRC32() may be called as many times as necessary on a single buffer.  
When computing the CRC32

The final value must be post-processed using the FINALIZE_CRC32() macro.

Example:

void main()
{
    BYTE Data[] = { 1, 2, 3 };

    DWORD dwCRC = STARTING_CRC32_VALUE;

    dwCRC = UpdateCRC32(Data, 3, dwCRC);

    FINALIZE_CRC32(dwCRC);

    printf("CRC32 = 0x%X\n", dwCRC);
}

*/


#endif