//
// MODULE: CRCCOMPUTE.CPP
//
// PURPOSE: CRC Calculator
//
// PROJECT: Generic Troubleshooter DLL for Microsoft AnswerPoint
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 support@saltmine.com
//
// AUTHOR: Roman Mach (based on existing CRC designs)
// 
// ORIGINAL DATE: 8/7/97
//
// NOTES: 
// 1. 
//
// Version	Date		By		Comments
//--------------------------------------------------------------------
// V0.2		8/7/97		RM		Local Version for Memphis
// V0.3		04/09/98	JM/OK+	Local Version for NT5
//

#include "stdafx.h"
#include "crc.h"

void CCRC::BuildCrcTable()
{
	DWORD dwX;
	int y;
	DWORD dwAccum;
	for (dwX = 0; dwX < 256; dwX++)
	{
		dwAccum = dwX << 24;
		for (y = 0; y < 8; y++)
		{
			if (dwAccum & 0x80000000)
				dwAccum = (dwAccum << 1) ^ POLYNOMIAL;
			else
				dwAccum <<= 1;
		}
		dwCrcTable[dwX] = dwAccum;
	}
	return;
}

DWORD CCRC::ComputeCRC(LPCSTR sznBuffer, DWORD dwBufSize, DWORD dwAccum)
{
	DWORD dwX;
	DWORD dwY;
	// DWORD dwAccum = 0xFFFFFFFF;
	for (dwX = 0; dwX < dwBufSize; dwX++)
	{
		dwY = ((dwAccum >> 24) ^ *sznBuffer++) & 0xFF;
		dwAccum = (dwAccum << 8) ^ dwCrcTable[dwY];
	}
	return dwAccum;
}