📄 loadchannels.c
字号:
if(screenstate == SCREEN_EPG_STATE)
iArrayCount = MAX_NO_OF_MENU_ELEMENTS_IN_BIG_SCREEN;
else
iArrayCount = MAX_EPG_ITEM;
#endif
/*1.clear the list*/
memset ( astAvailableChannels, 0, ( sizeof ( MENU_DATA_STRUCT ) * iNoOfItemsInScreen ) );
pstAvailableMenuDataHead = pstAvailableMenuDataTail= &astAvailableChannels[ 0 ];
pstAvailableMenuDataHead ->Prev = ( MENU_DATA_STRUCT * ) NULL;
pstAvailableMenuDataTail ->Next = ( MENU_DATA_STRUCT * ) NULL;
#if 0
if(PositionProgInfoTop ()==INVALID_LINK)
return (int)INVALID_LINK;
#endif
if(sProgIndex2bRetrieved == INVALID_LINK)
{
if((sProgIndex2bRetrieved = ProgramList->HeadProgIndex) == INVALID_LINK)
return (int)INVALID_LINK;
iProgNumberBeingRetrieved = 1;
}
iProgNumber = iProgNumberBeingRetrieved;
sProgIndex = sProgIndex2bRetrieved;
sttbx_Print("\n\nProgNo = %d;ProgIndex = %d\n\n",iProgNumber,sProgIndex);
pstProgInfoTemp = CurProgInfo ( &iProgNo);
iCurrentProgNo = iProgNo;
if(pstProgInfoTemp == NULL)
return (int)INVALID_LINK;
if(iProgNo <= iNoOfItemsInScreen)
{
PositionProgInfoTop ();
}
else
{
PositionProgInfoNeg(iNoOfItemsInScreen-1);
}
pstProgInfoTemp = CurProgInfo ( &iProgNo);
/*AL05 Start*/
#if 0
sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s ",
iProgNo,
pstProgInfoTemp ->cServiceName,
pstProgInfoTemp ->cServiceProviderName
);
#else
memset(networkName, 0, sizeof(networkName));
sprintf(networkName,"%s",
pastTransponderInfoTable[pstProgInfoTemp->stProgNo.unShort.sHi16].Xpdr.Terrestrial.acNetworkName);
//sttbx_Print("program name %s,->network index %d name %s\n",pstProgInfoTemp->cServiceName,pstProgInfoTemp->stProgNo.unShort.sHi16,networkName);
sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s %-1d %-1d %-20s",
iProgNo,
pstProgInfoTemp->cServiceName,
pstProgInfoTemp->cServiceProviderName,
(pstProgInfoTemp->bFavoriteStatus?1:0),
(pstProgInfoTemp->bLockedStatus?1:0),
networkName
);
#endif
/*AL05 End*/
if(iProgNo == iCurrentProgNo)
{
pstCurAvailableChannel = pstAvailableMenuDataTail;
iCurrentProgOffset = 0;
}
iNoOfAvailableMenuElements = 1;
while ( iNoOfAvailableMenuElements < iNoOfItemsInScreen )
{
if ( ( pstProgInfoTemp = NextProgInfo ( &iProgNo) ) == NULL )
break;
/*
* add the new element to the menu list
*/
pstMenuDataTemp = &astAvailableChannels [ iNoOfAvailableMenuElements ];
pstAvailableMenuDataTail ->Next = pstMenuDataTemp;
pstMenuDataTemp ->Prev = pstAvailableMenuDataTail;
pstAvailableMenuDataTail = pstMenuDataTemp;
pstAvailableMenuDataTail ->Next = ( MENU_DATA_STRUCT * ) NULL;
++iNoOfAvailableMenuElements;
/*AL05 Start*/
#if 0
sprintf ( ( char * ) pstAvailableMenuDataTail ->aucData, "%-16d %-15s %-16s ",
iProgNo,
pstProgInfoTemp ->cServiceName,
pstProgInfoTemp ->cServiceProviderName);
#else
memset(networkName, 0, sizeof(networkName));
sprintf(networkName,"%s",
pastTransponderInfoTable[pstProgInfoTemp->stProgNo.unShort.sHi16].Xpdr.Terrestrial.acNetworkName);
sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s %-1d %-1d %-20s",
iProgNo,
pstProgInfoTemp->cServiceName,
pstProgInfoTemp->cServiceProviderName,
(pstProgInfoTemp->bFavoriteStatus?1:0),
(pstProgInfoTemp->bLockedStatus?1:0),
networkName
);
//sttbx_Print("%s\n", pstAvailableMenuDataTail -> aucData);
#endif
/*AL05 End*/
if(iProgNo == iCurrentProgNo)
{
pstCurAvailableChannel = pstAvailableMenuDataTail;
iCurrentProgOffset = iNoOfAvailableMenuElements -1;
}
}
available_menu_page_last_sel = NEXT_PAGE;
//return iNoOfAvailableMenuElements;
return iCurrentProgOffset;
}
#if 0
/*AL05 Start*/
int getChannelsInChManageDialog(int iNoOfItemsInScreen)
{
int iProgNo;
MENU_DATA_STRUCT *pstMenuDataTemp;
PROG_INFO_STRUCT *pstProgInfoTemp;
int iCurrentProgNo;
int iCurrentProgOffset = 0;
/*1.clear the list*/
memset ( astAvailableChannels, 0, ( sizeof ( MENU_DATA_STRUCT ) * iNoOfItemsInScreen ) );
pstAvailableMenuDataHead = pstAvailableMenuDataTail= &astAvailableChannels[ 0 ];
pstAvailableMenuDataHead ->Prev = ( MENU_DATA_STRUCT * ) NULL;
pstAvailableMenuDataTail ->Next = ( MENU_DATA_STRUCT * ) NULL;
if(sProgIndex2bRetrieved == INVALID_LINK)
{
if((sProgIndex2bRetrieved = ProgramList->HeadProgIndex) == INVALID_LINK)
return (int)INVALID_LINK;
iProgNumberBeingRetrieved = 1;
}
iProgNumber = iProgNumberBeingRetrieved;
sProgIndex = sProgIndex2bRetrieved;
sttbx_Print("\n\nProgNo = %d;ProgIndex = %d\n\n",iProgNumber,sProgIndex);
pstProgInfoTemp = CurProgInfo ( &iProgNo);
iCurrentProgNo = iProgNo;
if(pstProgInfoTemp == NULL)
return (int)INVALID_LINK;
if(iProgNo <= iNoOfItemsInScreen)
{
PositionProgInfoTop ();
}
else
{
PositionProgInfoNeg(iNoOfItemsInScreen-1);
}
pstProgInfoTemp = CurProgInfo ( &iProgNo);
sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s %d %d",
iProgNo,
pstProgInfoTemp->cServiceName,
pstProgInfoTemp->cServiceProviderName,
(pstProgInfoTemp->bFavoriteStatus?1:0),
(pstProgInfoTemp->bLockedStatus?1:0)
);
if(iProgNo == iCurrentProgNo)
{
pstCurAvailableChannel = pstAvailableMenuDataTail;
iCurrentProgOffset = 0;
}
iNoOfAvailableMenuElements = 1;
while ( iNoOfAvailableMenuElements < iNoOfItemsInScreen )
{
if ( ( pstProgInfoTemp = NextProgInfo ( &iProgNo) ) == NULL )
break;
/*add the new element to the menu list*/
pstMenuDataTemp = &astAvailableChannels [ iNoOfAvailableMenuElements ];
pstAvailableMenuDataTail ->Next = pstMenuDataTemp;
pstMenuDataTemp ->Prev = pstAvailableMenuDataTail;
pstAvailableMenuDataTail = pstMenuDataTemp;
pstAvailableMenuDataTail ->Next = ( MENU_DATA_STRUCT * ) NULL;
++iNoOfAvailableMenuElements;
sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s %d %d",
iProgNo,
pstProgInfoTemp->cServiceName,
pstProgInfoTemp->cServiceProviderName,
(pstProgInfoTemp->bFavoriteStatus?1:0),
(pstProgInfoTemp->bLockedStatus?1:0)
);
if(iProgNo == iCurrentProgNo)
{
pstCurAvailableChannel = pstAvailableMenuDataTail;
iCurrentProgOffset = iNoOfAvailableMenuElements -1;
}
}
available_menu_page_last_sel = NEXT_PAGE;
return iCurrentProgOffset;
}
/*AL05 End*/
#endif
int channelPrevKeyFunc(int iNoOfValidItems,int iNoOfItemsInScreen)
{
int iOffset;
int iProgNo;
MENU_DATA_STRUCT *pstMenuDataTemp;
PROG_INFO_STRUCT *pstProgInfoTemp;
char networkName[MAX_NETWORK_NAME_LENGTH+1];
if(iNoOfValidItems < iNoOfItemsInScreen)
return (int)INVALID_LINK;
iOffset = iNoOfValidItems;/*number of valid elements in the menu data linked list*/
if ( available_menu_page_last_sel == PREV_PAGE )
iOffset = 1;
if ( PositionProgInfoNeg ( iOffset ) == INVALID_LINK )
return (int)INVALID_LINK;
available_menu_page_last_sel = PREV_PAGE;
if ( ( pstProgInfoTemp = CurProgInfo ( &iProgNo) ) == NULL )
{
return (int)INVALID_LINK;
}
pstMenuDataTemp = pstAvailableMenuDataTail;
pstAvailableMenuDataTail ->Prev ->Next = ( MENU_DATA_STRUCT * ) NULL;
pstAvailableMenuDataTail = pstAvailableMenuDataTail ->Prev;
pstMenuDataTemp ->Next = pstAvailableMenuDataHead;
pstAvailableMenuDataHead ->Prev = pstMenuDataTemp;
pstAvailableMenuDataHead = pstMenuDataTemp;
pstAvailableMenuDataHead ->Prev = ( MENU_DATA_STRUCT * ) NULL;
memset ( pstAvailableMenuDataHead ->aucData, 0, sizeof ( pstAvailableMenuDataHead ->aucData ) );
memset(networkName, 0, sizeof(networkName));
sprintf(networkName,"%s",
pastTransponderInfoTable[pstProgInfoTemp->stProgNo.unShort.sHi16].Xpdr.Terrestrial.acNetworkName);
sprintf ( ( char * ) pstAvailableMenuDataHead ->aucData, "%-16d %-15s %-16s %-1d %-1d %-20s",
iProgNo,
pstProgInfoTemp->cServiceName,
pstProgInfoTemp->cServiceProviderName,
(pstProgInfoTemp->bFavoriteStatus?1:0),
(pstProgInfoTemp->bLockedStatus?1:0),
networkName
);
return iNoOfValidItems;
}
int channelNextKeyFunc(int iNoOfValidItems)
{
int iOffset;
int iProgNo;
//int CurProgramStatus;
MENU_DATA_STRUCT *pstMenuDataTemp;
PROG_INFO_STRUCT *pstProgInfoTemp;
char networkName[MAX_NETWORK_NAME_LENGTH+1];
iOffset = iNoOfValidItems;
if ( available_menu_page_last_sel == NEXT_PAGE )
iOffset = 1;
if ( PositionProgInfoPos ( iOffset ) == INVALID_LINK )
return (int)INVALID_LINK;
available_menu_page_last_sel = NEXT_PAGE;
if ( ( pstProgInfoTemp = CurProgInfo ( &iProgNo) ) == NULL )
{
return (int)INVALID_LINK;
}
/*
* cut the head and add it as a new tail
*/
pstMenuDataTemp = pstAvailableMenuDataHead;
pstAvailableMenuDataHead ->Next ->Prev = ( MENU_DATA_STRUCT * ) NULL;
pstAvailableMenuDataHead = pstAvailableMenuDataHead ->Next;
pstMenuDataTemp ->Prev = pstAvailableMenuDataTail;
pstAvailableMenuDataTail ->Next = pstMenuDataTemp;
pstAvailableMenuDataTail = pstMenuDataTemp;
pstAvailableMenuDataTail ->Next = ( MENU_DATA_STRUCT * ) NULL;
/*
* fill the data now, after cleraing the existing data
*/
memset ( pstAvailableMenuDataTail ->aucData, 0, sizeof ( pstAvailableMenuDataTail ->aucData ) );
#if 0
strcpy(pstAvailableMenuDataTail->aucData,pstProgInfoTemp -> cServiceName);
#else
memset(networkName, 0, sizeof(networkName));
sprintf(networkName,"%s",
pastTransponderInfoTable[pstProgInfoTemp->stProgNo.unShort.sHi16].Xpdr.Terrestrial.acNetworkName);
sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s %-1d %-1d %-20s",
iProgNo,
pstProgInfoTemp->cServiceName,
pstProgInfoTemp->cServiceProviderName,
(pstProgInfoTemp->bFavoriteStatus?1:0),
(pstProgInfoTemp->bLockedStatus?1:0),
networkName
);
#endif
return iNoOfValidItems;
}
void channelSelectKeyFunc(int iItemOffPassed, int iNoOfValidItems )
{
//int iProgNo;
//PROG_INFO_STRUCT *pstProgInfoTemp;
if ( available_menu_page_last_sel == PREV_PAGE )
{
PositionProgInfoPos ( iItemOffPassed);
}
else
{
PositionProgInfoNeg ( iNoOfValidItems - iItemOffPassed - 1 );
}
sttbx_Print("\n\nCurent Program No = %d\nCurent Prog Index = %d\n",iProgNumber,sProgIndex);
/*AL05 Start*/
#if 0
sProgIndex2bRetrieved = sProgIndex;
iProgNumberBeingRetrieved = iProgNumber;
iCurrentProgramNo = iProgNumber;
#endif
/*AL05 End*/
}
/*extend funcs,added by WuLun,2005-5-14*/
int PositionFavoriteProgInfoTop(void)
{
//int i;
int iValidProgNum;
int iFavoriteProgNum_temp = 1;
short int sFavoriteProgIndex_temp= ProgramList->HeadProgIndex;
if((iValidProgNum = ProgramList->NoOfValidPgms)<=0)
{
iFavProgNumber = 0;
sFavProgIndex = INVALID_LINK;
return (int)INVALID_LINK;
}
for(;sFavoriteProgIndex_temp !=INVALID_LINK && astProgInfoTable [sFavoriteProgIndex_temp] .status != ELEMENT_FREE;)
{
if(astProgInfoTable[sFavoriteProgIndex_temp].bFavoriteStatus == true)
{
iFavProgNumber = iFavoriteProgNum_temp;
sFavProgIndex = sFavoriteProgIndex_temp;
return iValidProgNum;
}
iFavoriteProgNum_temp++;
sFavoriteProgIndex_temp = astProgInfoTable[sFavoriteProgIndex_temp].sNextProgIndex;
}
iFavProgNumber = 0;
sFavProgIndex = INVALID_LINK;
return ( int ) INVALID_LINK;
}
static PROG_INFO_STRUCT *CurFavoriteProgInfo ( int *piProgramNo )
{
PROG_INFO_STRUCT *pstProgramRecord;
pstProgramRecord = ( PROG_INFO_STRUCT * ) NULL;
*piProgramNo = INVALID_LINK;
if ( sFavProgIndex != INVALID_LINK && \
astProgInfoTable [ sFavProgIndex ] .status != ELEMENT_FREE )
{
pstProgramRecord = &astProgInfoTable [ sFavProgIndex ];
*piProgramNo = iFavProgNumber;
}
return pstProgramRecord;
}
static PROG_INFO_STRUCT *NextFavoriteProgInfo(int *piProgramNo)
{
SHORT sLocalProgIndex;
PROG_INFO_STRUCT *pstProgramRecord;
int iFavoriteProgNum_temp = iFavProgNumber;
short int sFavoriteProgIndex_temp= sFavProgIndex;
pstProgramRecord = ( PROG_INFO_STRUCT * ) NULL;
*piProgramNo = INVALID_LINK;
sLocalProgIndex = astProgInfoTable [ sFavoriteProgIndex_temp ].sNextProgIndex;
for(;;)
{
if ( sFavoriteProgIndex_temp != INVALID_LINK && \
sLocalProgIndex != INVALID_LINK && \
astProgInfoTable [ sLocalProgIndex ] .status != ELEMENT_FREE )
{
if(astProgInfoTable [ sLocalProgIndex ].bFavoriteStatus== true )
{
sFavProgIndex = sLocalProgIndex;
++iFavoriteProgNum_temp;
iFavProgNumber = iFavoriteProgNum_temp;
pstProgramRecord = &astProgInfoTable [ sFavProgIndex ];
*piProgramNo = iFavProgNumber;
return pstProgramRecord;
}
sFavoriteProgIndex_temp = sLocalProgIndex;
sLocalProgIndex = astProgInfoTable [ sFavoriteProgIndex_temp ] .sNextProgIndex;
++iFavoriteProgNum_temp;
}
else return pstProgramRecord;
}
}
static PROG_INFO_STRUCT *PrevFavoriteProgInfo ( int *piProgramNo )
{
SHORT sLocalProgIndex;
PROG_INFO_STRUCT *pstProgramRecord;
int iFavoriteProgNum_temp = iFavProgNumber;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -