📄 xmlgeneratedlg.cpp
字号:
/************************** DIGITAL_PGROGRAM **********************/
for( int i = 0; i < DigChanSum; i++ )
{
pDigitalProgram[i].ProgramId = rand();
pDigitalProgram[i].PrgLogicNum = rand();
pDigitalProgram[i].stProgNo = unsigned short int( 1 + i );
pDigitalProgram[i].iPhyAddress =
( i >= ( DigChanSum / 2 ) ) ? 0x0002 : 0x0001;
pDigitalProgram[i].iPrevProgramIndex =
( i > 0 ) ? unsigned short int( i ) : 1;
pDigitalProgram[i].iNextProgramIndex =
( i == DigChanSum - 1 ) ? 1 : unsigned short int( 2 + i );
if( i < atoi( (LPCTSTR)m_strBroadcastNumber ) )
{
char broadcastname[15] = "BroadCast";
char temp[2];
_itoa( i + 1, temp, 10 );
strcat( broadcastname, temp );
strcpy( pDigitalProgram[i].cServiceName, broadcastname );
}
else
{
char videoname[15] = "CCTV";
char temp[2];
_itoa( i - atoi( (LPCTSTR)m_strBroadcastNumber ) + 1, temp, 10 );
strcat( videoname, temp);
strcpy( pDigitalProgram[i].cServiceName, videoname );
}
pDigitalProgram[i].flag = 0x31 + i;
pDigitalProgram[i].ucSpecialFlag = '0' + rand() % 3 ;
pDigitalProgram[i].ucSoundValue = '0' + rand() % 64;
pDigitalProgram[i].ucServiceType =
( i < atoi( (LPCTSTR)m_strBroadcastNumber ) )
? ( '0' + Broadcast_Type ) : ( '0' + Video_Type );
pDigitalProgram[i].vid_pid = unsigned short ( 0x0024 + i );
pDigitalProgram[i].aud_pid = unsigned short ( 0x0025 + i );
pDigitalProgram[i].pcr_pid = unsigned short ( 0x0026 + i );
pDigitalProgram[i].pmt_pid = unsigned short ( 0x0027 + i );
}
/***************************** EPGPROGRAM *************************/
for( int j = 0; j < ProgramSum; j++ )
{
pEPGProgram[j].wProgID = unsigned short int ( j + 1 );
int dindex = j % DigChanSum;
int pindex = pDigitalProgram[dindex].iPhyAddress - 1;
pEPGProgram[j].TSID = pPhysicalChannel[pindex].iTsId;
pEPGProgram[j].ServiceID = pDigitalProgram[dindex].stProgNo;
pEPGProgram[j].duration = SECOND_PER_DAY / atoi( (LPCTSTR)m_strProgramNumber );
pEPGProgram[j].dwStart = ( j < DigChanSum ) ? GetStartTime()
: pEPGProgram[j - DigChanSum].dwStart + pEPGProgram[j - DigChanSum].duration;
pEPGProgram[j].cType = '0' + rand() % 4;
pEPGProgram[j].cAge = '0' + rand() % 2;
char temp[5];
char name[10] = "News";
_itoa( ( j + 1 ), temp, 10 );
strcat( name, temp);
strcpy( pEPGProgram[j].szProgName, name );
pEPGProgram[j].strContent = "KudoFaye";
}
/*************************** FASTLIST *****************************/
prgInd[0].pType = 0;
prgInd[0].totalNum = atoi( (LPCTSTR)m_strBroadcastNumber );
prgInd[0].dgtAddr = ( unsigned short int* )
malloc( prgInd[0].totalNum * sizeof( unsigned short int ) );
for( int k = 0; k < prgInd[0].totalNum; k++ )
{
prgInd[0].dgtAddr[k] = pDigitalProgram[k].stProgNo;
}
prgInd[1].pType = 1;
prgInd[1].totalNum = atoi( (LPCTSTR)m_strVideoNumber );
prgInd[1].dgtAddr = ( unsigned short int* )
malloc( prgInd[1].totalNum * sizeof( unsigned short int ) );
for( int p = 0; p < prgInd[1].totalNum; p++ )
{
prgInd[1].dgtAddr[p] = pDigitalProgram[p + atoi( (LPCTSTR)m_strBroadcastNumber )].stProgNo;
}
/************************** Cur_Prg_Info **************************/
CurPrg.ProgramType = Video_Type;
CurPrg.prePrgType = Broadcast_Type;
CurPrg.iPreChl[0] = 1;
CurPrg.iCurChl[0] = 2;
CurPrg.iPreChl[1] = 1;
CurPrg.iCurChl[1] = 2;
CurPrg.curPrg[0].iProgramAddress = prgInd[0].dgtAddr[CurPrg.iCurChl[0] - 1];
CurPrg.curPrg[1].iProgramAddress = prgInd[1].dgtAddr[CurPrg.iCurChl[1] - 1];
char flag;
flag = pDigitalProgram[CurPrg.curPrg[0].iProgramAddress - 1].flag;
CurPrg.curPrg[0].muteFlag = ( ( flag | 0xFB ) == 0xFF ) ? TRUE : FALSE;
flag = pDigitalProgram[CurPrg.curPrg[1].iProgramAddress - 1].flag;
CurPrg.curPrg[1].muteFlag = ( ( flag | 0xFB ) == 0xFF ) ? TRUE : FALSE;
/**************************** BOOKED ******************************/
for( int m = 0; m < BookedSum; m++ )
{
bookedEvt[m].dt = pEPGProgram[m + ( ProgramSum / 7 + DigChanSum )].dwStart;
bookedEvt[m].duration = pEPGProgram[m + ( ProgramSum / 7 + DigChanSum )].duration;
bookedEvt[m].evtId = pEPGProgram[m + ( ProgramSum / 7 + DigChanSum )].wProgID;
bookedEvt[m].srvId = pEPGProgram[m + ( ProgramSum / 7 + DigChanSum )].ServiceID;
bookedEvt[m].tsId = pEPGProgram[m + ( ProgramSum / 7 + DigChanSum )].TSID;
bookedEvt[m].type = 0;
bookedEvt[m].nvodRefSrvId = 0;
strcpy( bookedEvt[m].Name, pEPGProgram[m + ( ProgramSum / 7 + DigChanSum )].szProgName );
}
}
void CXMLGENERATEDlg::XmlInit()
{
b = CLASSInit( EpgFileName );
XmlDocInit(b);
XmlADD_CURPRG_INFO( b, CurPrg, "CUR_PRG_INFO" );
XmlADD_FASTLIST( b, prgInd[0], "FASTLIST" );
XmlADD_FASTLIST( b, prgInd[1], "FASTLIST" );
XmlADD_NET_INFO( b, pNetwork[0], "NET", "EPG" );
XmlADD_PHYSICAL_INFO( b, pPhysicalChannel[0], PhyName[0], pNetwork[0].acNetworkName );
XmlADD_PHYSICAL_INFO( b, pPhysicalChannel[1], PhyName[1], pNetwork[0].acNetworkName );
for( int i = 0; i < DigChanSum; i++ )
{
XmlADD_DIGITAL_INFO( b, pDigitalProgram[i], DigNameTag[i],
PhyName[pDigitalProgram[i].iPhyAddress - 1] );
}
for( int j = 0; j < ProgramSum; j++ )
{
XmlADD_EPG_PROGRAM( b, pEPGProgram[j], ProNameTag[j], DigNameTag[j % DigChanSum] );
}
for( int k = 0; k < BookedSum; k++ )
{
XmlADD_BOOKED_EVENT( b, bookedEvt[k], BookedTag[k], "BOOKED" );
}
XmlWriteFile( b, EpgFileName );
}
void CXMLGENERATEDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData( TRUE );
if( m_strBroadcastNumber == "" )
{
MessageBox( "请输入广播台数" );
return ;
}
else if( m_strVideoNumber == "" )
{
MessageBox( "请输入电视台数" );
return ;
}
else if( m_strProgramNumber == "" )
{
MessageBox( "请输入每天的节目数" );
return ;
}
if( TagInit() == FALSE )
{
return ;
}
StructInit();
//打开另存对话框
LPCTSTR FileName = "EPG.xml";
CFileDialog dlg(FALSE, "xml", FileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"(*.xml)|*.xml||");
int nStructSize = 0;
DWORD dwVersion, dwWindowsMajorVersion, dwWindwosMinorVersion;
dwVersion = GetVersion();
dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
dwWindwosMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
if (dwVersion < 0x80000000)
{
nStructSize = 88; //2k,xp下显示新的版本
}
else
{
nStructSize = 76; //98下显示老版本
}
dlg.m_ofn.lStructSize = nStructSize; //------用来检测目前的操作系统的版本信息
if (dlg.DoModal() == IDCANCEL)
{
return ;
}
CString path = dlg.GetPathName();
EpgFileName = ( LPCTSTR )path;
XmlInit();
MessageBox( "成功生成数据源" );
// Get and show the current channel type
UpdateData(TRUE);
int type;
XmlGETi( b, "CUR_PRG_INFO", "ProgramType", &type );
m_strCurtype = ( type == Video_Type ) ? "电视频道" : "广播频道";
UpdateData(FALSE);
m_bntChannel.EnableWindow( TRUE );
m_bntTansfer.EnableWindow( TRUE );
}
void CXMLGENERATEDlg::OnBUTTONChannel()
{
// TODO: Add your control notification handler code here
CChannelDlg Channel;
if( -1 == Channel.DoModal() )
{
return ;
}
}
void CXMLGENERATEDlg::OnButtonLoad()
{
// TODO: Add your control notification handler code here
//打开Open对话框
LPCTSTR FileName = "EPG.xml";
CFileDialog dlg(TRUE, "xml", FileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"(*.xml)|*.xml||");
int nStructSize = 0;
DWORD dwVersion, dwWindowsMajorVersion, dwWindwosMinorVersion;
dwVersion = GetVersion();
dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
dwWindwosMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
if (dwVersion < 0x80000000)
{
nStructSize = 88; //2k,xp下显示新的版本
}
else
{
nStructSize = 76; //98下显示老版本
}
dlg.m_ofn.lStructSize = nStructSize; //------用来检测目前的操作系统的版本信息
if (dlg.DoModal() == IDCANCEL)
{
return ;
}
CString path = dlg.GetPathName();
EpgFileName = ( LPCTSTR )path;
int bsum;
int vsum;
b = CLASSInit( EpgFileName );
if( XmlLoad( b, EpgFileName ) == XML_ERROR_COMM )
{
MessageBox( "数据源加载失败,请生成数据源" );
return ;
}
else
{
MessageBox( "数据源加载成功" );
}
XmlGETi( b, "F_Broadcast_Type", "totalNum", &bsum );
XmlGETi( b, "F_Video_Type", "totalNum", &vsum );
for( int i = 1; i <= ( bsum + vsum ); i++ )
{
char temp1[5];
char temp[20] = "Dig";
_itoa( i, temp1, 10 );
strcat( temp, temp1 );
strcpy( DigNameTag[i - 1], temp );
}
// Get and show the current channel type
UpdateData(TRUE);
int type;
XmlGETi( b, "CUR_PRG_INFO", "ProgramType", &type );
m_strCurtype = ( type == Video_Type ) ? "电视频道" : "广播频道";
// Get the average program number per day
int num;
const char** ProTag = ( const char** )malloc( MAX_PROGRAM_PER_DIGCHAN * sizeof( char ) * 10 );
XmlCOUNT( b, DigNameTag[0], &num, ProTag );
CString BroadcastSum, VideoSum, ProgramNum;
BroadcastSum.Format( "%d", bsum );
VideoSum.Format( "%d",vsum );
ProgramNum.Format( "%d", ( num / 7 ) );
m_strBroadcastNumber = BroadcastSum;
m_strVideoNumber = VideoSum;
m_strProgramNumber = ProgramNum;
UpdateData(FALSE);
m_bntChannel.EnableWindow( TRUE );
m_bntTansfer.EnableWindow( TRUE );
}
void CXMLGENERATEDlg::OnBUTTONTransfer()
{
// TODO: Add your control notification handler code here
int type;
XmlGETi( b, "CUR_PRG_INFO", "ProgramType", &type );
if( type == Video_Type )
{
if( ( XmlMODi( b, "CUR_PRG_INFO", "ProgramType", Broadcast_Type ) == XML_SUCCESS )
&& ( XmlMODi( b, "CUR_PRG_INFO", "prePrgType", Video_Type ) == XML_SUCCESS ) )
{
m_strCurtype = "广播频道";
MessageBox( "当前播放频道类型转换成功" );
}
else
{
MessageBox( "当前播放频道类型转换失败" );
}
}
else
{
if( ( XmlMODi( b, "CUR_PRG_INFO", "ProgramType", Video_Type ) == XML_SUCCESS )
&& ( XmlMODi( b, "CUR_PRG_INFO", "prePrgType", Broadcast_Type ) == XML_SUCCESS ) )
{
m_strCurtype = "电视频道";
MessageBox( "当前播放频道类型转换成功" );
}
else
{
MessageBox( "当前播放频道类型转换失败" );
}
}
XmlWriteFile( b );
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -