⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 magneticread.c

📁 磁条卡读取代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		nReadTrack1Len = READ_NODATA;
		return;
	}

	nReadTrack1Len = i+1;

	// [ LRC ] + [ End Code ] + [ Data ] + [ Start Code ]
	if( !fTrack1Direction )
	{
		for(i=0;i<8;i++)
		{
			nTemp = nTemp << 1;
			if( ( chTrack1Buffer[0] >> i ) & 0x01 )
				nTemp++;
		}
		chTrack1Buffer[0] = nTemp >> 1;

		for(i=2;i<nReadTrack1Len;i++)
		{
			chTrack1Buffer[i] = chTrack1Buffer[i] >> 1;
		}

		j = nReadTrack1Len>>1;
		k = nReadTrack1Len-1;
		for(i=0;i<j;i++)
		{
			nTemp = chTrack1Buffer[i];
			chTrack1Buffer[i] = chTrack1Buffer[k];
			chTrack1Buffer[k] = nTemp;
			k--;
		}
	}

	// Check Start Code ( Error Code = 0xF4 )
	if( chTrack1Buffer[0] != READ_TRACK1_STARTCODE )
	{
		nReadTrack1Len = READ_NOSTARTCODE;
		return;
	}

	// Check End Code ( Error Code = 0xF3 )
	if( chTrack1Buffer[nReadTrack1Len-2] != 0x1F )
	{
		nReadTrack1Len = READ_NOENDCODE;
		return;
	}

	// Check Parity ( Error Code = 0xF2 )
	for(i=0;i<nReadTrack1Len;i++)
	{
		nTemp = chTrack1Buffer[i];
		ACC = nTemp;
		if( !P ) 
		{
			nReadTrack1Len = READ_PARITYERROR;
			return;
		}
	}

	// Check LRC ( Error Code = 0xF1 )
	nTemp = chTrack1Buffer[0];
	for(i=1;i<nReadTrack1Len-1;i++)
	{
		nTemp = nTemp ^ chTrack1Buffer[i];
	}
	nTemp = nTemp & 0x3F;
	if( nTemp != ( chTrack1Buffer[nReadTrack1Len-1] & 0x3F ) ) 
	{
		nReadTrack1Len = READ_LRCERROR;
		return;
	}

	// Data Process
	for(i=0;i<nReadTrack1Len-1;i++)
	{
		chTrack1Buffer[i] = ( chTrack1Buffer[i] & 0x3F ) + 0x20;
	}

	nReadTrack1Len--;
}

void Track2Check()
{
	int i=0,j=0,k=0,nTemp=0;

	for(i=chTrack2Index;i>1;i--)
	{
		if(	chTrack2Buffer[i] != 0x00 )
			break;
	}

	if( i < 2 )
	{
		nReadTrack2Len = READ_NODATA;
		return;
	}

	nReadTrack2Len = i+1;

	// [ Start Code ] + [ End Code ] + [ LRC ]
	// or [ LRC ] = [ Start Code ]
	if( fTrack2StartEnd && ( nReadTrack2Len > 3 ) )
	{
		// LRC
		for(i=0;i<5;i++)
		{
			nTemp = nTemp << 1;
			if( ( chTrack2Buffer[0] >> i ) & 0x01 )
				nTemp++;
		}	
		chTrack2Buffer[0] = nTemp;

		for(i=2;i<nReadTrack2Len;i++)
		{
			nTemp = 0;
			for(j=0;j<5;j++)
			{
				nTemp = nTemp << 1;
				if( ( chTrack2Buffer[i] >> j ) & 0x01 )
					nTemp++;
			}	
			chTrack2Buffer[i] = nTemp;
		}

		j = nReadTrack2Len>>1;
		k = nReadTrack2Len-1;
		for(i=0;i<j;i++)
		{
			nTemp = chTrack2Buffer[i];
			chTrack2Buffer[i] = chTrack2Buffer[k];
			chTrack2Buffer[k] = nTemp;
			k--;
		}
	}

	// Reverse
	// [ LRC ] + [ End Code ] + [ Data ] + [ Start Code ]
	if( !fTrack2Direction )
	{
		// LRC Process
		for(i=0;i<5;i++)
		{
			nTemp = nTemp << 1;
			if( ( chTrack2Buffer[0] >> i ) & 0x01 )
				nTemp++;
		}
		chTrack2Buffer[0] = nTemp;

		// Data Process
		for(i=2;i<nReadTrack2Len;i++)
		{
			chTrack2Buffer[i] = chTrack2Buffer[i] >> 1;
		}

		j = nReadTrack2Len>>1;
		k = nReadTrack2Len-1;
		for(i=0;i<j;i++)
		{
			nTemp = chTrack2Buffer[i];
			chTrack2Buffer[i] = chTrack2Buffer[k];
			chTrack2Buffer[k] = nTemp;
			k--;
		}

		for(j=0;j<2;j++)
		{
			// Check Start Code ( Error Code = 0xF4 )
			if( chTrack2Buffer[0] != READ_TRACK23_STARTCODE )
			{
				for(i=nReadTrack2Len-1;i>0;i--)
				{
					nTemp = ( chTrack2Buffer[i-1] >> 3 ) & 0x03;
					chTrack2Buffer[i] = ( ( chTrack2Buffer[i] << 2 ) + nTemp ) & 0x1F;
				}
				chTrack2Buffer[0] = ( chTrack2Buffer[0] << 2 ) & 0x1F;

				if( chTrack2Buffer[0] == 0x00 )
				{
					for(i=0;i<nReadTrack2Len;i++)
						chTrack2Buffer[i] = chTrack2Buffer[i+1];
					nReadTrack2Len--;
				}
			}
		}
	}

	// Check Start Code ( Error Code = 0xF4 )
	if( chTrack2Buffer[0] != READ_TRACK23_STARTCODE )
	{
		nReadTrack2Len = READ_NOSTARTCODE;
		return;
	}

	// Check End Code ( Error Code = 0xF3 )
	if( chTrack2Buffer[nReadTrack2Len-2] != READ_TRACK23_ENDCODE )
	{
		nReadTrack2Len = READ_NOENDCODE;
		return;
	}

	// Check Parity ( Error Code = 0xF2 )
	for(i=0;i<nReadTrack2Len;i++)
	{
		nTemp = chTrack2Buffer[i];
		ACC = nTemp;
		if( !P ) 
		{
			nReadTrack2Len = READ_PARITYERROR;
			return;
		}
	}

	// Check LRC ( Error Code = 0xF1 )
	nTemp = chTrack2Buffer[0];
	for(i=1;i<nReadTrack2Len-1;i++)
	{
		nTemp = nTemp ^ chTrack2Buffer[i];
	}
	nTemp = nTemp & 0x0F;
	if( nTemp != ( chTrack2Buffer[nReadTrack2Len-1] & 0x0F ) ) 
	{
		nReadTrack2Len = READ_LRCERROR;
		return;
	}

	// Data Process
	for(i=0;i<nReadTrack2Len-1;i++)
	{
		chTrack2Buffer[i] = ( chTrack2Buffer[i] & 0x0F ) + 0x30;
	}

	nReadTrack2Len--;
}


void Track3Check()
{
	int i=0,j=0,k=0,nTemp=0;

	for(i=chTrack3Index;i>1;i--)
	{
		if(	chTrack3Buffer[i] != 0x00 )
			break;
	}

	if( i < 2 )
	{
		nReadTrack3Len = READ_NODATA;
		return;
	}

	nReadTrack3Len = i+1;

	// [ Start Code ] + [ End Code ] + [ LRC ]
	// or [ LRC ] = [ Start Code ]
	if( fTrack3StartEnd && ( nReadTrack3Len > 3 ) )
	{
		// LRC
		for(i=0;i<5;i++)
		{
			nTemp = nTemp << 1;
			if( ( chTrack3Buffer[0] >> i ) & 0x01 )
				nTemp++;
		}	
		chTrack3Buffer[0] = nTemp;

		for(i=2;i<nReadTrack3Len;i++)
		{
			nTemp = 0;
			for(j=0;j<5;j++)
			{
				nTemp = nTemp << 1;
				if( ( chTrack3Buffer[i] >> j ) & 0x01 )
					nTemp++;
			}	
			chTrack3Buffer[i] = nTemp;
		}

		j = nReadTrack3Len>>1;
		k = nReadTrack3Len-1;
		for(i=0;i<j;i++)
		{
			nTemp = chTrack3Buffer[i];
			chTrack3Buffer[i] = chTrack3Buffer[k];
			chTrack3Buffer[k] = nTemp;
			k--;
		}
	}

	// Reverse
	// [ LRC ] + [ End Code ] + [ Data ] + [ Start Code ]
	if( !fTrack3Direction )
	{
		// LRC
		for(i=0;i<5;i++)
		{
			nTemp = nTemp << 1;
			if( ( chTrack3Buffer[0] >> i ) & 0x01 )
				nTemp++;
		}	
		chTrack3Buffer[0] = nTemp;

		for(i=2;i<nReadTrack3Len;i++)
		{
			chTrack3Buffer[i] = chTrack3Buffer[i] >> 1;
		}

		j = nReadTrack3Len>>1;
		k = nReadTrack3Len-1;
		for(i=0;i<j;i++)
		{
			nTemp = chTrack3Buffer[i];
			chTrack3Buffer[i] = chTrack3Buffer[k];
			chTrack3Buffer[k] = nTemp;
			k--;
		}

		for(j=0;j<2;j++)
		{
			// Check Start Code ( Error Code = 0xF4 )
			if( chTrack3Buffer[0] != READ_TRACK23_STARTCODE )
			{
				for(i=nReadTrack3Len-1;i>0;i--)
				{
					nTemp = ( chTrack3Buffer[i-1] >> 3 ) & 0x03;
					chTrack3Buffer[i] = ( ( chTrack3Buffer[i] << 2 ) + nTemp ) & 0x1F;
				}
				chTrack3Buffer[0] = ( chTrack3Buffer[0] << 2 ) & 0x1F;

				if( chTrack3Buffer[0] == 0x00 )
				{
					for(i=0;i<nReadTrack3Len;i++)
						chTrack3Buffer[i] = chTrack3Buffer[i+1];
					nReadTrack3Len--;
				}	
			}
		}
	}

	// Check Start Code ( Error Code = 0xF4 )
	if( chTrack3Buffer[0] != READ_TRACK23_STARTCODE )
	{
		nReadTrack3Len = READ_NOSTARTCODE;
		return;
	}

	// Check End Code ( Error Code = 0xF3 )
	if( chTrack3Buffer[nReadTrack3Len-2] != READ_TRACK23_ENDCODE )
	{
		nReadTrack3Len = READ_NOENDCODE;
		return;
	}

	// Check Parity ( Error Code = 0xF2 )
	for(i=0;i<nReadTrack3Len;i++)
	{
		nTemp = chTrack3Buffer[i];
		ACC = nTemp;
		if( !P ) 
		{
			nReadTrack3Len = READ_PARITYERROR;
			return;
		}
	}

	// Check LRC ( Error Code = 0xF1 )
	nTemp = chTrack3Buffer[0];
	for(i=1;i<nReadTrack3Len-1;i++)
	{
		nTemp = nTemp ^ chTrack3Buffer[i];
	}
	nTemp = nTemp & 0x0F;
	if( nTemp != ( chTrack3Buffer[nReadTrack3Len-1] & 0x0F ) ) 
	{
		nReadTrack3Len = READ_LRCERROR;
		return;
	}

	// Data Process
	for(i=0;i<nReadTrack3Len-1;i++)
	{
		chTrack3Buffer[i] = ( chTrack3Buffer[i] & 0x0F ) + 0x30;
	}

	nReadTrack3Len--;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -