📄 routelink_src.c
字号:
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 + -