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

📄 xmlgeneratedlg.cpp

📁 生成关于EPG的XML文档工具
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/************************** 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 + -