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

📄 routelink_src.c

📁 本程序的功能是对导航数据中的道路情况数据进行整理
💻 C
📖 第 1 页 / 共 3 页
字号:
		printf( "\nSearch NG! No matched route link is found!\n" );
	}

	/* Memory block free		*/
	if( NULL != pbMemBlock )
	{
		free( pbMemBlock );
		pbMemBlock = NULL;
	}


	return RET_SUCCESS;

}

/***************************************************************************/
/*	routelink_src_branch()												   */
/*	-----------------------------------------------------------------------*/
/*	Input:																   */
/*		FILE*				:	Data file handle[IN]					   */
/*																		   */
/*	-----------------------------------------------------------------------*/
/*	Output:																   */
/*		RETURN				:	乮Normal乯RET_SUCCESS					   */
/*								乮Error乯 RET_FAILED					   */
/*																		   */
/*	-----------------------------------------------------------------------*/
/*	Outline:															   */
/*		Search by branch number.										   */
/*																		   */
/*	-----------------------------------------------------------------------*/
/*	Others:																   */
/*																		   */
/***************************************************************************/
int routelink_src_branch(
	FILE*			pOrgFile			/* I/ Route link info data file    */
	)
{
	BYTE			bBaseBrchNum= 0;	/* Branch number input by user	   */
	BYTE			bBrchNum	= 0;	/* Branch number by searching	   */
	UWORD			uwRecSize	= 0;	/* Current Record size			   */
	UDWORD			udwNodeInf	= 0;	/* Node information				   */
	int				iRetReadFile= 0;	/* Return of read file			   */
	int				iGetChrNum	= 0;	/* Number of char from key buf	   */
	int				iSrcRsltNum	= 0;	/* Search result number			   */
	int				iMovSize	= 0;	/* Size of memory move			   */
	int				iSrcCnt		= 0;	/* Search times counter			   */
	BYTE*			pbMemBlock	= NULL;	/* Memory Block for read from file */
	BYTE*			pbCurBlock	= NULL;	/* Current pointer to Memory Block */
	BYTE*			pbCatPos	= NULL;

	S_LNKTBL_SRC*	pstSLinkNode= NULL;	/* Sing link table				   */
	S_LNKTBL_SRC*	pstSLinkHead= NULL;	/* Sing link table				   */


	/* Exception prevention				*/
	if( NULL == pOrgFile )
	{
		return RET_FAILED;
	}

	while( iGetChrNum <= 0 )
	{
		/* Prompt user to specify the Link ID for searching	*/
		printf( 
			"\nPlease input the Branch Num you want to compare with!>>>>>>>>\n" );
		printf( 
			"(All the route link whose branch number bigger than it will be searched)\n" );
		
		/* Read from key buffer		*/
		iGetChrNum = scanf( "%8d", &bBaseBrchNum );
		if( iGetChrNum <= 0 )
		{
			printf( "\nInvalid input!\n" );
		}

		/* Buffer clear				*/
		while( 10 != getchar() )
		{
			continue;
		}
	}

	/* Memory block allocation				*/
	pbMemBlock = malloc( FILEREAD_BLOCKSIZE );
	if( NULL == pbMemBlock )
	{
		return RET_FAILED;
	}
	else
	{
		memset( pbMemBlock, 0, FILEREAD_BLOCKSIZE );
		pbCatPos = pbMemBlock;
	}


	printf( "\nRoute link searching. Please be waitting..." );
	while( 0 == feof( pOrgFile ) )
	{
		printf( "." );
		memset( pbCatPos, 0, (FILEREAD_BLOCKSIZE - iMovSize) );
		iRetReadFile = fread( pbCatPos, 
							(FILEREAD_BLOCKSIZE - iMovSize), 1, pOrgFile );
		pbCurBlock   = pbMemBlock;
		if( iRetReadFile > 0 )
		{
			while( (pbCurBlock + RL_SIZE_RECSIZE) < 
										(pbMemBlock + FILEREAD_BLOCKSIZE) )
			{
				/* Get Record size and Link ID				*/
				uwRecSize = MC_GET_SHORT( pbCurBlock );
				if( (pbCurBlock + uwRecSize) > 
										(pbMemBlock + FILEREAD_BLOCKSIZE) )
				{
					break;
				}

				/* Get start node info						*/
				udwNodeInf = MC_GET_LONG( (pbCurBlock + RL_OFFSET_NODEINF) );

				/* Get branch number.						*/
				bBrchNum = MC_GET_BRCH( udwNodeInf );
				if( bBrchNum > bBaseBrchNum )
				{
					iSrcRsltNum++;
					routelink_src_slinknode( 
								pbCurBlock, &pstSLinkHead, &pstSLinkNode );
				}

				/* Next Record header address get				*/
				pbCurBlock += uwRecSize;

			}

			iMovSize = (pbMemBlock + (FILEREAD_BLOCKSIZE) - pbCurBlock);
			memcpy( pbMemBlock, pbCurBlock, iMovSize );
			pbCatPos = pbMemBlock + iMovSize;

			/* Current search result saved(into file)			*/
			routelink_src_blocksave( pstSLinkHead );

			/* Single Link table Free							*/
			routelink_src_slinkfree( &pstSLinkHead );

		}
		else
		{
			break;
		}
	}

	printf( "\n" );

	/* Search result prompt				*/
	if( iSrcRsltNum > 0 )
	{
		/* Search Ok, search times counter update	*/
		iSrcCnt = routelink_file_updsrccnt();
		printf( "\nSearch Ok! %d route link is matched!\n", iSrcRsltNum );
		printf( 
			"Search result has been output into file searchresult%03d.txt\n", 
																iSrcCnt );
	}
	else
	{
		printf( "\nSearch NG! No matched route link is found!\n" );
	}

	/* Memory block free		*/
	if( NULL != pbMemBlock )
	{
		free( pbMemBlock );
		pbMemBlock = NULL;
	}


	return RET_SUCCESS;

}

/***************************************************************************/
/*	routelink_src_roadname()											   */
/*	-----------------------------------------------------------------------*/
/*	Input:																   */
/*		FILE*				:	Data file handle[IN]					   */
/*																		   */
/*	-----------------------------------------------------------------------*/
/*	Output:																   */
/*		RETURN				:	乮Normal乯RET_SUCCESS					   */
/*								乮Error乯 RET_FAILED					   */
/*																		   */
/*	-----------------------------------------------------------------------*/
/*	Outline:															   */
/*		Search by road name.											   */
/*																		   */
/*	-----------------------------------------------------------------------*/
/*	Others:																   */
/*																		   */
/***************************************************************************/
int routelink_src_roadname(
	FILE*			pOrgFile			/* I/ Route link info data file    */
	)
{
	UWORD			uwRecSize	= 0;	/* Current Record size			   */
	int				iRetReadFile= 0;	/* Return of read file			   */
	int				iGetChr		= 0;	/* Char from key buf			   */
	int				iGetChrNum	= 0;	/* Number of char from key buff	   */
	int				iSrcRsltNum	= 0;	/* Search result number			   */
	int				iMovSize	= 0;	/* Size of memory move			   */
	int				iSrcCnt		= 0;	/* Search times counter			   */
	BYTE*			pbMemBlock	= NULL;	/* Memory Block for read from file */
	BYTE*			pbCurBlock	= NULL;	/* Current pointer to Memory Block */
	BYTE*			pbCatPos	= NULL;

	S_LNKTBL_SRC*	pstSLinkNode= NULL;	/* Sing link table				   */
	S_LNKTBL_SRC*	pstSLinkHead= NULL;	/* Sing link table				   */

	BYTE			abRoadName[RL_DSPSTR_MAXLEN];
										/* Road name input by user		   */
	BYTE			abGetName[RL_DSPSTR_MAXLEN];
										/* Road name by searching		   */


	/* Exception prevention				*/
	if( NULL == pOrgFile )
	{
		return RET_FAILED;
	}

	/* Initialization					*/
	memset( abRoadName, 0, sizeof(abRoadName) );
	memset( abGetName, 0, sizeof(abGetName) );

	while( iGetChrNum <= 0 )
	{
		/* Prompt user to specify the Link ID for searching	*/
		printf( "\nPlease input the road name you want to search!>>>>>>>>\n" );
		
		/* Read from key buffer								*/
		iGetChr = getchar();
		while( 10 != iGetChr )
		{
			if( strlen(abRoadName) <= (sizeof(abRoadName) - 1) )
			{
				abRoadName[strlen(abRoadName)] = (char)iGetChr;
				iGetChrNum++;
			}
			iGetChr = getchar();
		}
	}

	/* Memory block allocation				*/
	pbMemBlock = malloc( FILEREAD_BLOCKSIZE );
	if( NULL == pbMemBlock )
	{
		return RET_FAILED;
	}
	else
	{
		memset( pbMemBlock, 0, FILEREAD_BLOCKSIZE );
		pbCatPos = pbMemBlock;
	}


	printf( "\nRoute link searching. Please be waitting..." );
	while( 0 == feof( pOrgFile ) )
	{
		printf( "." );
		memset( pbCatPos, 0, (FILEREAD_BLOCKSIZE - iMovSize) );
		iRetReadFile = fread( pbCatPos, 
							(FILEREAD_BLOCKSIZE - iMovSize), 1, pOrgFile );
		pbCurBlock   = pbMemBlock;
		if( iRetReadFile > 0 )
		{
			while( (pbCurBlock + RL_SIZE_RECSIZE) < 
										(pbMemBlock + FILEREAD_BLOCKSIZE) )
			{
				/* Get Record size and Link ID				*/
				uwRecSize = MC_GET_SHORT( pbCurBlock );
				if( (pbCurBlock + uwRecSize) > 
										(pbMemBlock + FILEREAD_BLOCKSIZE) )
				{
					break;
				}

				/* Get start node info						*/
				routelink_readrec( pbCurBlock, RL_GET_ROADNAME, abGetName );
				if( 0 == strcmp( abGetName, abRoadName ) )
				{
					iSrcRsltNum++;
					routelink_src_slinknode( 
								pbCurBlock, &pstSLinkHead, &pstSLinkNode );
				}

				/* Reset name buffer						*/
				memset( abGetName, 0, sizeof(abGetName) );

				/* Next Record header address get				*/
				pbCurBlock += uwRecSize;

			}

			iMovSize = (pbMemBlock + (FILEREAD_BLOCKSIZE) - pbCurBlock);
			memcpy( pbMemBlock, pbCurBlock, iMovSize );
			pbCatPos = pbMemBlock + iMovSize;

			/* Current search result saved(into file)			*/
			routelink_src_blocksave( pstSLinkHead );

			/* Single Link table Free							*/
			routelink_src_slinkfree( &pstSLinkHead );
		}
		else
		{
			break;
		}
	}

	printf( "\n" );

	/* Search result prompt				*/
	if( iSrcRsltNum > 0 )
	{
		/* Search Ok, search times counter update	*/
		iSrcCnt = routelink_file_updsrccnt();
		printf( "\nSearch Ok! %d route link is matched!\n", iSrcRsltNum );
		printf( 
			"Search result has been output into file searchresult%03d.txt\n", 
																iSrcCnt );
	}
	else
	{
		printf( "\nSearch NG! No matched route link is found!\n" );
	}

	/* Memory block free		*/
	if( NULL != pbMemBlock )
	{
		free( pbMemBlock );
		pbMemBlock = NULL;
	}


	return RET_SUCCESS;

}

/***************************************************************************/
/*	routelink_src_getrsltdata()											   */
/*	-----------------------------------------------------------------------*/
/*	Input:																   */
/*		FILE*				:	Data file handle[IN]					   */
/*		BYTE*				:	Buffer for read from file[IN]			   */
/*																		   */
/*	-----------------------------------------------------------------------*/
/*	Output:																   */
/*		RETURN				:	乮Normal乯result data area address		   */
/*								乮Error乯 NULL							   */
/*																		   */
/*	-----------------------------------------------------------------------*/

⌨️ 快捷键说明

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