亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? faxfile.cpp

?? fax engine 傳真引擎 relay fax 的開源項目 商業軟件使用 高質量 高可靠
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

		for( j = 0; j < 8; j++, b >>= 1 )
		{
			bit = (b & 0x01);

			if( bit )
			{
				//char szMsg[80];
				//wsprintf( szMsg, "Resending Seq=%d\n", nSeqNum );
				//OutputDebugString( szMsg );

				unsigned int nOffset = (256 * m_nBlockCount + nSeqNum) * m_nECMFrameSize;

				memcpy( m_ECMBuffer.GetData(), m_MemFile.GetData( nOffset ), m_nECMFrameSize ); ;

				nZeroBitDeleteCntr = 0;

				m_ECMBuffer.InitFrame();
				m_ECMBuffer.SetLastSeq( nSeqNum );

				AddFCDHeader();

				for( k = 0; k < m_nECMFrameSize; k++ )
				{
					AddByte( s_FlipTable[m_ECMBuffer.GetData()[k]], true );
				}

				unsigned short wFCS = m_ECMBuffer.GetFCS();
				AddByte( wFCS & 0xff, false );
				AddByte( (wFCS >> 8) & 0xff, false );

				AddFlag(); // FLAG
			}

			nSeqNum++;

			// Ignore any sequence numbers which we didn't transmit
			if( nSeqNum > m_ECMBuffer.GetHighestSeq() )
			{
				break;
			}
		}
		if( nSeqNum > m_ECMBuffer.GetHighestSeq() )
		{
			break;
		}
	}

	AddRCPFrames();

	*m_PagePtr++ = DLE;
	*m_PagePtr++ = ETX;

	m_PageBufferSize = m_PagePtr - m_PageBuffer;

	return true;
}


//////////////////////////////////////////////////////////////////////
// AddRCPFrames
//////////////////////////////////////////////////////////////////////
void CFaxFile::AddRCPFrames(void)
{
	int i;

	for( i = 0; i < 3; i++ )
	{
		m_ECMBuffer.InitFrame();
		AddByte( 0xff, true );
		AddByte( 0x03, true );
		AddByte( RCP, true );

		unsigned short wFCS = m_ECMBuffer.GetFCS();
		AddByte( wFCS & 0xff, false );
		AddByte( (wFCS >> 8) & 0xff, false );

		AddFlag(); // FLAG
	}

	// output the last byte
	while( nBitCntr > 0 )
	{
		AddBit( 0 );
	}
}


//////////////////////////////////////////////////////////////////////
// AddFCDHeader
//////////////////////////////////////////////////////////////////////
void CFaxFile::AddFCDHeader(void)
{
	AddByte( 0xff, true );
	AddByte( 0x03, true );
	AddByte( FCD, true );
	AddByte( (unsigned char) m_ECMBuffer.GetLastSeq(), true );
	m_ECMBuffer.IncrementLastSeq();
}


//////////////////////////////////////////////////////////////////////
// AddByte
//////////////////////////////////////////////////////////////////////
void CFaxFile::AddByte( unsigned char b, bool bCalcFCS )
{
	int i;
	BYTE bit;

	if( bCalcFCS )
	{
		m_ECMBuffer.CalcFCS( b );
	}

	for( i = 0; i < 8; i++, b >>= 1 )
	{
		bit = (b & 0x01);

		AddBit( bit );

		nZeroBitDeleteCntr = (bit == 1) ? (nZeroBitDeleteCntr + 1) : 0;

		if( nZeroBitDeleteCntr == 5 )
		{
			nZeroBitDeleteCntr = 0;

			AddBit( 0 );
		}
	}
}


//////////////////////////////////////////////////////////////////////
// AddFlag
//////////////////////////////////////////////////////////////////////
void CFaxFile::AddFlag( void )
{
	BYTE b = HDLC_FLAG;
	BYTE bit;
	int i;

	nZeroBitDeleteCntr = 0;

	for( i = 0; i < 8; i++, b >>= 1 )
	{
		bit = (b & 0x01);
		AddBit( bit );
	}
}


//////////////////////////////////////////////////////////////////////
// AddBit
//////////////////////////////////////////////////////////////////////
void CFaxFile::AddBit( unsigned char bit )
{
	nOctet = (nOctet << 1) + bit;
	nBitCntr++;
	
	if( nBitCntr >= 8 )
	{
		nOctet = s_FlipTable[nOctet];

		*m_PagePtr++ = nOctet;
		
		if( nOctet == DLE )
		{
			*m_PagePtr++ = nOctet;
		}
		nOctet = 0;
		nBitCntr = 0;
	}
}

//////////////////////////////////////////////////////////////////////
// ReadNextHeader
//////////////////////////////////////////////////////////////////////
bool CFaxFile::ReadNextHeader(void)
{
	m_PageCount++;
	m_nBlockCount = 0;

	if( TIFFReadDirectory( m_tiff ) == 0 )
		return false;

	ReadIfd();

	return true;
}


//////////////////////////////////////////////////////////////////////
// Close
//////////////////////////////////////////////////////////////////////
void CFaxFile::Close(void)
{
	if( m_bGotData )
	{
		WriteIFD();
	}

	m_PageCount = 0;

	if( m_PageBuffer != NULL )
	{
		delete[] m_PageBuffer;
		m_PageBuffer = NULL;
	}

	if( m_tiff )
	{
		TIFFClose( m_tiff );
		m_tiff = NULL;
	}

	if( m_bFileHasData == false )
	{
		remove( m_sFaxFile.c_str() );
	}
}


//////////////////////////////////////////////////////////////////////
// SetImageRes
//////////////////////////////////////////////////////////////////////
void CFaxFile::SetImageRes( bool bHiRes )
{
	yres = (bHiRes) ? 196.0f : 98.0f;
}

//////////////////////////////////////////////////////////////////////
// SetImageWidth
//////////////////////////////////////////////////////////////////////
void CFaxFile::SetImageWidth( int nWidth )
{
	width = nWidth;
}

//////////////////////////////////////////////////////////////////////
// SetImageLength
//////////////////////////////////////////////////////////////////////
void CFaxFile::SetImageLength( int nLength )
{
	length = nLength;
}


//////////////////////////////////////////////////////////////////////
// IncrementImageLength
//////////////////////////////////////////////////////////////////////
void CFaxFile::IncrementImageLength( int n )
{
	length += n;
}


//////////////////////////////////////////////////////////////////////
// SetImageCompression
//////////////////////////////////////////////////////////////////////
void CFaxFile::SetImageCompression( int nCompression )
{
	compression = nCompression;

}

//////////////////////////////////////////////////////////////////////
// SetT4Options
//////////////////////////////////////////////////////////////////////
void CFaxFile::SetT4Options( int nOptions )
{
	g3opts = nOptions;
}



//////////////////////////////////////////////////////////////////////
// WriteFileHeader
//////////////////////////////////////////////////////////////////////
bool CFaxFile::WriteFileHeader(void)
{
	if( m_tiff == NULL )
	{
		m_tiff = TIFFOpen( m_sFaxFile.c_str(), "w" );

		if( m_tiff == NULL )
		{
			return false;
		}
	}

	m_bFileHasData = false;
	m_bGotData = false;
	m_bFoundStartOfPage = false;
	m_bFoundEndOfPage = false;
	m_bFoundStartOfFrame = false;
	nZcnt = 0;
	nRTCCnt = 0;
	nBitCntr = 0;
	nZeroBitDeleteCntr = 0;
	m_PageCount = 0;

	return true;
}


//////////////////////////////////////////////////////////////////////
// WriteBuffer
//////////////////////////////////////////////////////////////////////
bool CFaxFile::WriteBuffer( unsigned char* szBuffer, unsigned int nBytes, bool bFlipBytes )
{
	int nNewBytes =0 ;
	int i;
	BYTE lastByte;

	if( nBytes > 0 ) 
	{
		m_bGotData = true;
	}

	for (i = 0; i < nBytes; i++ )
	{
		BYTE b = (bFlipBytes) ? s_FlipTable[szBuffer[i]] : szBuffer[i];

		if( compression == 4 )
		{
			m_MemFile.AddDataByte( b );
		}
		else
		{
			if( !m_bFoundEndOfPage )
			{
				if (nZcnt) 
				{
					nZcnt += s_LeadZero[b];
					if (b && (nZcnt < 11)) 
					{
						nRTCCnt = 0;
						nZcnt = s_TrailZero[b];
					}
				}
				else 
				{
					nZcnt = s_TrailZero[b];
					if (!nZcnt) nRTCCnt = 0;
				}

				if( (nNewBytes > 0) && (lastByte == 0) && (nZcnt > 18) )
				{
					nNewBytes--; // skip last byte
					nZcnt -= 8;
				}

				if( (nZcnt > 10) && (b != 0) )
				{
					if( !m_bFoundStartOfPage )
					{
						m_bFoundStartOfPage = true;
						m_MemFile.AddDataByte( 0 );
						m_MemFile.AddDataByte( 0 );
						IncrementImageLength();
					}
					else
					{
						nRTCCnt++;
						if (nRTCCnt > 5) 
						{
							//OutputDebugString( "Found RTC!\n" );
							IncrementImageLength( -5 );
							m_bFoundEndOfPage = true;
							m_MemFile.AddDataByte( b );  // stuff in the last byte
						}
						else
						{
							IncrementImageLength();
						}
					}	
					nZcnt = s_TrailZero[b];
				}
			}

			if( m_bFoundStartOfPage && !m_bFoundEndOfPage )
			{
				m_MemFile.AddDataByte( b );
				lastByte = b;
			}
		}
	}		

//	char szMsg[100];
//	wsprintf( szMsg, "Writing Fax Data, nBytes=%d, nNewBytes=%d\n", nBytes, nNewBytes );
//	OutputDebugString( szMsg );

	return true;
}


//////////////////////////////////////////////////////////////////////
// WriteECMBuffer
//////////////////////////////////////////////////////////////////////
bool CFaxFile::WriteECMBuffer( unsigned char* szBuffer, unsigned int nBytes )
{
	int i,j;
	BYTE bit;

	//char szMsg[180];
	//wsprintf( szMsg, "Writing ECM Fax Data, nBytes=%d\n", nBytes );
	//OutputDebugString( szMsg );

	if( nBytes > 0 ) 
	{
		m_bGotData = true;
	}

	for (i = 0; i < nBytes; i++ )
	{
		//BYTE b = fliptable[szBuffer[i]];
		BYTE b = szBuffer[i];

		//char szMsg1[80];
		//wsprintf( szMsg1, "%04d: {%02X}\n", i, b );
		//OutputDebugString( szMsg1 );

		for( j = 0; j < 8; j++, b >>= 1 )
		{
			bit = (b & 0x01);

			// look for flags
			if( !m_bFoundStartOfPage )
			{
				if( (nBitCntr == 0) || (nBitCntr == 7) )
				{
					nBitCntr = (bit == 0) ? (nBitCntr + 1) : 0;
				}
				else
				{
					nBitCntr = (bit == 1) ? (nBitCntr + 1) : 0;
				}

				if (nBitCntr == 8 )
				{
					//wsprintf( szMsg, "Found a flag %d\n", i );
					//OutputDebugString( szMsg );
					nBitCntr = 0;
					nOctet = 0;
					nZeroBitDeleteCntr = 0;
					m_ECMBuffer.InitFrame();
					m_bFoundStartOfPage = true;
				}
			}
			else if( !m_bFoundStartOfFrame )
			{
				if( nZeroBitDeleteCntr == 5 )
				{
					nZeroBitDeleteCntr = 0;

					if( bit == 1 )
					{
						// must be another flag
						nOctet = (nOctet << 1) + bit;
						nBitCntr++;
					}
				}
				else
				{
					nOctet = (nOctet << 1) + bit;
					nBitCntr++;
					nZeroBitDeleteCntr = (bit == 1) ? (nZeroBitDeleteCntr + 1) : 0;

					if( nBitCntr == 8 )
					{
						if( nOctet == 255 )
						{
							m_bFoundStartOfFrame = true;
							//wsprintf( szMsg, "Found start of frame %d\n", i );
							//OutputDebugString( szMsg );
							m_bFlagFound = false;
							m_ECMBuffer.AddByte( nOctet );
						}
						else
						{
							if( nOctet != HDLC_FLAG )
							{
								//wsprintf( szMsg, "Unexpected octet [%02X], re-syncing %d\n", nOctet, i );
								//OutputDebugString( szMsg );
								m_bFoundStartOfPage = false;
							}

							nZeroBitDeleteCntr = 0;
						}

						nBitCntr = 0;
						nOctet = 0;
					}
					else if( nBitCntr > 8 )
					{
						//OutputDebugString( "Whoops!\n" );
						m_bFoundStartOfPage = false;
					}
				}
			}
			else // found start of frame
			{
				if( nZeroBitDeleteCntr == 5 )
				{
					nZeroBitDeleteCntr = 0;

					if( bit == 1 )
					{
						// must be another flag
						nOctet = (nOctet << 1) + bit;
						nBitCntr++;
						//wsprintf( szMsg, "Found potential flag %d\n", i );
						//OutputDebugString( szMsg );
						m_bFlagFound = true;
					}
				}
				else
				{
					nOctet = (nOctet << 1) + bit;
					nBitCntr++;
					nZeroBitDeleteCntr = (bit == 1) ? (nZeroBitDeleteCntr + 1) : 0;

					if( nBitCntr == 8 )
					{
						if( (m_bFlagFound && nOctet == HDLC_FLAG) ||
							(m_ECMBuffer.GetSize() == m_nECMFrameSize + ECM_DATA_HDR + 2) )
						{
							m_bFoundStartOfFrame = false;
							nZeroBitDeleteCntr = 0;
							//wsprintf( szMsg, "Found end of frame %d\n", i );
							//OutputDebugString( szMsg );
							if( ProcessECMFrame() == false )
							{
								// bad frame - resync
								m_bFoundStartOfPage = false;
							}
						}
						else
						{
							m_ECMBuffer.AddByte( nOctet );
						}

						nBitCntr = 0;
						nOctet = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日产卡一卡二卡麻豆| 亚洲天堂网中文字| 99精品欧美一区二区三区综合在线| 亚洲午夜电影网| 成人欧美一区二区三区1314| 国产欧美日韩视频在线观看| 精品剧情在线观看| 亚洲尤物在线视频观看| 亚洲视频一区二区在线| 久久av资源站| 久草这里只有精品视频| 免费在线观看一区| 麻豆精品在线观看| 国产超碰在线一区| av电影天堂一区二区在线| av亚洲精华国产精华| 精品国产91乱码一区二区三区| 日韩精品一区二区在线| 精品欧美一区二区久久| 日韩中文字幕av电影| 免费成人在线视频观看| 欧美日韩午夜精品| 91精品国产黑色紧身裤美女| 日韩免费福利电影在线观看| 日韩精品一二三区| 欧美日韩中字一区| 亚洲成人av电影| 激情另类小说区图片区视频区| 国产一区999| 色综合久久综合网欧美综合网| 欧美三日本三级三级在线播放| 亚洲另类春色校园小说| 天堂va蜜桃一区二区三区漫画版| 色婷婷国产精品| 亚洲午夜在线观看视频在线| 欧美最新大片在线看| 精品免费日韩av| 九色综合狠狠综合久久| 日韩一区二区三区电影| 亚洲欧洲一区二区三区| 成人av中文字幕| 91精品国产综合久久精品图片| 精品国产免费一区二区三区四区 | 在线观看国产一区二区| 亚洲婷婷国产精品电影人久久| 91首页免费视频| 久久久精品天堂| 视频一区二区中文字幕| 欧美一区二区三区色| 久久超碰97中文字幕| 久久网站热最新地址| 亚洲成人中文在线| 日韩视频免费观看高清在线视频| 蜜桃av一区二区| 久久精品夜夜夜夜久久| 日产国产高清一区二区三区| 91在线精品一区二区| 亚洲一区在线视频观看| 欧美一区二区黄| 处破女av一区二区| 国产亚洲欧美色| 色88888久久久久久影院按摩| 亚洲国产精品国自产拍av| 老司机免费视频一区二区| 中文字幕第一区综合| 欧美视频一区二区三区在线观看| 日韩一区在线看| 欧美一区二区久久| 成人中文字幕在线| 亚洲一卡二卡三卡四卡无卡久久 | 日本欧美一区二区在线观看| 久久久影视传媒| 在线观看精品一区| 国产黄色精品网站| 久久久噜噜噜久久人人看| 色婷婷精品久久二区二区蜜臀av| 裸体健美xxxx欧美裸体表演| 中文字幕一区二区三| 日韩一区二区在线看片| 99免费精品在线| 狠狠色丁香婷婷综合| 亚洲狠狠爱一区二区三区| 欧美激情一区二区三区在线| 91精品蜜臀在线一区尤物| 99在线精品免费| 精品亚洲porn| 午夜精品久久久久久久 | 日韩综合一区二区| 国产精品久久久久影院亚瑟| fc2成人免费人成在线观看播放| 午夜婷婷国产麻豆精品| 中文字幕在线观看一区二区| 日韩一区二区三| 欧美日韩一区二区三区在线看| 国产91精品精华液一区二区三区 | 美国十次了思思久久精品导航| 亚洲视频香蕉人妖| 国产精品女人毛片| 91国产精品成人| 99国产麻豆精品| 成人蜜臀av电影| 国产精品一二二区| 亚洲欧美福利一区二区| 欧美日韩成人综合| 国产精品一区不卡| 美女视频黄免费的久久| 午夜精品免费在线观看| 亚洲第一二三四区| 亚洲一区二区在线播放相泽| 亚洲视频在线观看一区| 亚洲欧洲精品一区二区三区 | 91玉足脚交白嫩脚丫在线播放| 国内精品在线播放| 韩日欧美一区二区三区| 激情图片小说一区| 国产在线国偷精品免费看| 黄网站免费久久| 国产一区二区三区四区五区入口| 精品亚洲porn| 国产福利精品一区二区| 国产91精品一区二区| 成人美女在线视频| 91美女在线看| 欧美三片在线视频观看| 制服丝袜亚洲精品中文字幕| 日韩欧美国产麻豆| 久久先锋影音av鲁色资源网| 国产欧美一区视频| 国产精品色哟哟网站| 亚洲日本在线天堂| 亚洲自拍偷拍图区| 日本强好片久久久久久aaa| 蜜桃一区二区三区四区| 国产盗摄一区二区| a4yy欧美一区二区三区| 91成人国产精品| 日韩一区二区影院| 久久日韩粉嫩一区二区三区 | 免费一级欧美片在线观看| 经典三级一区二区| 成人亚洲一区二区一| 91福利视频在线| 精品国产乱码久久久久久图片 | 亚洲国产精品久久艾草纯爱| 日本美女视频一区二区| 国产精品一区二区久激情瑜伽| 北岛玲一区二区三区四区| 欧美日韩亚洲综合一区二区三区| 日韩欧美美女一区二区三区| 国产精品国产成人国产三级 | 欧美久久一二区| 欧美性色欧美a在线播放| 日韩一区二区三区电影在线观看| 欧美国产日产图区| 亚洲成在线观看| 岛国av在线一区| 在线成人av影院| 成人欧美一区二区三区小说| 日韩在线a电影| 99国产精品国产精品毛片| 91精品国产综合久久精品图片| 国产精品―色哟哟| 蜜桃传媒麻豆第一区在线观看| 99久久精品国产观看| 欧美大片顶级少妇| 亚洲第一精品在线| www.在线成人| 欧美精品一区二区久久久| 一区二区三区资源| 亚洲成人免费影院| 成人18精品视频| 精品国产免费一区二区三区香蕉| 亚洲免费av高清| 国产高清一区日本| 欧美一级免费观看| 亚洲精品视频免费观看| 国产成人综合网| 日韩一级片网址| 亚洲bt欧美bt精品| 91电影在线观看| 1024成人网| 国产成人在线免费| 精品国产精品一区二区夜夜嗨| 亚洲一二三四区| 色综合天天天天做夜夜夜夜做| jlzzjlzz欧美大全| 久久久久97国产精华液好用吗| 日韩 欧美一区二区三区| 在线免费观看日本欧美| **欧美大码日韩| 成人aa视频在线观看| 国产精品美女久久久久aⅴ | 欧美区在线观看| 一级日本不卡的影视| 91免费观看在线| 亚洲欧美乱综合| 91成人国产精品| 亚洲一区二区三区激情| 在线中文字幕一区| 亚洲自拍偷拍欧美|