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

📄 dbparser.cpp

📁 AliEditor_Source code
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		
		tmpbuf[i] = REVERT_16(tmpbuf[i]);
	}

	size_t wLen = wcslen(tmpbuf) + 1;
	
	int size = WideCharToMultiByte(CP_ACP, 0, tmpbuf, wLen, to, 64, NULL, NULL);
	
	if(!size) return FALSE;

	return TRUE;
}

BOOL CDbParser::IsExistedSatellite(CTreeCtrl *pTree, HTREEITEM hFather, CString SatName)
{
	if(!pTree->ItemHasChildren(hFather)) 
		return FALSE;
	
	HTREEITEM hSatItem = pTree->GetChildItem(hFather);
	SatTPMod *pSatTpMod = NULL;
	while(hSatItem)
	{
		pSatTpMod = (SatTPMod *)pTree->GetItemData(hSatItem);
		ASSERT(pSatTpMod);
		if(!pSatTpMod->pNameStr->Compare(SatName)) 
			return TRUE;
		hSatItem = pTree->GetNextSiblingItem(hSatItem);
	};
	return FALSE;
}
HTREEITEM CDbParser::GetSameSatNode(CTreeCtrl *pTree, HTREEITEM hFather, int offset)
{
	if(!pTree || !hFather)
		return NULL;

	if(!pTree->ItemHasChildren(hFather)) 
		return NULL;

	HTREEITEM hSatItem = pTree->GetChildItem(hFather);

	while(hSatItem)
	{
		SatTPMod *pSatTpMod = (SatTPMod *)pTree->GetItemData(hSatItem);

		if(CheckSatNodeField(pSatTpMod->offset, offset))
		{
			return hSatItem;
		}

		hSatItem = pTree->GetNextSiblingItem(hSatItem);
	};
	return NULL;
}
BOOL CDbParser::CheckSatNodeField(int offset0, int offset1)
{
	BOOL bRet = FALSE;

	bRet = CheckNodeField(SAT_NODE, /*SKEYZ_SAT_ORBIT*/SKEYZ_SAT_NAME, offset0, offset1);
	if(!bRet) return FALSE;

	return TRUE;
}
BOOL CDbParser::CheckNodeField(enum NodeType type, const char *keysz, int offset0, int offset1)
{
	BOOL bRet;
	char bufsz0[128], bufsz1[128];

	CStringLines *pScripter = &((CMainFrame*)AfxGetMainWnd())->GetEditorView()->m_strlines;
	NodeField **pNodeField = pScripter->GetNodeFieldInfo(type, TRUE);

	int index = GetIndexOfNodeInfo(pNodeField, keysz);

	bRet = GetNodeData(type, offset0, index, bufsz0, 0, TRUE);
	ASSERT(bRet);

	bRet = GetNodeData(type, offset1, index, bufsz1, 0, TRUE);
	ASSERT(bRet);

	if(!strcmp(bufsz0, bufsz1)) return TRUE;

	return FALSE;
}

BOOL CDbParser::CheckSameTp(CTreeCtrl *pTree, CString tpname, HTREEITEM hSatItem)
{
	int pos;
	CString strText;
	CStringLines *pScripter = &((CMainFrame*)AfxGetMainWnd())->GetEditorView()->m_strlines;

	if(pTree->ItemHasChildren(hSatItem))
	{
		HTREEITEM hNextItem;
		HTREEITEM hChildItem = pTree->GetChildItem(hSatItem);

		while (hChildItem != NULL)
		{
			hNextItem = pTree->GetNextItem(hChildItem, TVGN_NEXT);
			
			strText = pTree->GetItemText(hChildItem);

			pos = strText.Find("TP", 0);
			
			if(pos > 0) strText.Delete(0, pos);
			
			strText = pScripter->FilterFrontChar(strText, ' ');

			if(!strText.Compare(tpname)) 
				return TRUE;

			hChildItem = hNextItem;
		}
	}

	return FALSE;
}
BOOL CDbParser::CheckTpNodeField(int offset0, int offset1)
{
	BOOL bRet = FALSE;

	bRet = CheckNodeField(TP_NODE, SKEYZ_POL, offset0, offset1);
	if(!bRet) return FALSE;

	bRet = CheckNodeField(TP_NODE, TKEYZ_FREQ, offset0, offset1);
	if(!bRet) return FALSE;

	bRet = CheckNodeField(TP_NODE, TKEYZ_SYMBOL, offset0, offset1);
	if(!bRet) return FALSE;

	return TRUE;
}
HTREEITEM CDbParser::GetSameTpNode(CTreeCtrl *pTree, HTREEITEM hSatItem, int offset)
{

	if(!pTree->ItemHasChildren(hSatItem)) return NULL;

	HTREEITEM hTpItem = pTree->GetChildItem(hSatItem);

	while(hTpItem)
	{
		SatTPMod *pSatTpMod = (SatTPMod *)pTree->GetItemData(hTpItem);

		if(CheckTpNodeField(pSatTpMod->offset, offset))
		{
			return hTpItem;
		}
		
		hTpItem = pTree->GetNextSiblingItem(hTpItem);
	}

	return NULL;
}

long CDbParser::GetTpFreq1(char *buf)
{
	int index; 
	char bufsz[64];	

	for(int i = 0; i < sizeof(SDX_TP_Table) / sizeof(SDX_Map_Table); i++)
	{
		if(strcmp(SDX_TP_Table[i].keysz, TKEYZ_FREQ)) continue;

		index = GetTpNodeIndex(SDX_TP_Table[i].keysz);
		if(-1 == index) continue;

		memcpy(bufsz, buf + SDX_TP_Table[i].bytes_offset1, SDX_TP_Table[i].bytes_count1);
		if(SDX_TP_Table[i].bytes_count2)
		{
			memcpy(bufsz + SDX_TP_Table[i].bytes_count1, buf + SDX_TP_Table[i].bytes_offset2, 
				SDX_TP_Table[i].bytes_count2);
		}

		bufsz[SDX_TP_Table[i].bytes_count1 + SDX_TP_Table[i].bytes_count2] = 0;

		return GetDataValue(bufsz);
	}

	return -1;
}
long CDbParser::GetTpPolar1(char *buf)
{
	int index; 
	char bufsz[64];	

	for(int i = 0; i < sizeof(SDX_TP_Table) / sizeof(SDX_Map_Table); i++)
	{
		if(strcmp(SDX_TP_Table[i].keysz, SKEYZ_POL)) continue;
		
		index = GetTpNodeIndex(SDX_TP_Table[i].keysz);
		if(-1 == index) continue;

		memcpy(bufsz, buf + SDX_TP_Table[i].bytes_offset1, SDX_TP_Table[i].bytes_count1);
		if(SDX_TP_Table[i].bytes_count2)
		{
			memcpy(bufsz + SDX_TP_Table[i].bytes_count1, buf + SDX_TP_Table[i].bytes_offset2, 
				SDX_TP_Table[i].bytes_count2);
		}

		bufsz[SDX_TP_Table[i].bytes_count1 + SDX_TP_Table[i].bytes_count2] = 0;

		return GetDataValue(bufsz);
	}

	return -1;
}

long CDbParser::GetTpSym1(char *buf)
{	
	int index; 
	char bufsz[64];

	for(int i = 0; i < sizeof(SDX_TP_Table) / sizeof(SDX_Map_Table); i++)
	{
		if(strcmp(SDX_TP_Table[i].keysz, TKEYZ_SYMBOL)) continue;
		
		index = GetTpNodeIndex(SDX_TP_Table[i].keysz);
		if(-1 == index) continue;

		memcpy(bufsz, buf + SDX_TP_Table[i].bytes_offset1, SDX_TP_Table[i].bytes_count1);
		if(SDX_TP_Table[i].bytes_count2)
		{
			memcpy(bufsz + SDX_TP_Table[i].bytes_count1, buf + SDX_TP_Table[i].bytes_offset2, 
				SDX_TP_Table[i].bytes_count2);
		}

		bufsz[SDX_TP_Table[i].bytes_count1 + SDX_TP_Table[i].bytes_count2] = 0;

		return GetDataValue(bufsz);
	}

	return -1;
}
HTREEITEM CDbParser::AddSatNodeFromSDX(char *buf)
{
	CMainFrame *pFrm = (CMainFrame *)AfxGetMainWnd();
	CAliEditorView *pEditView = pFrm->GetEditorView();
	CNavigator *pNavigator = pFrm->GetNavigator();	

	HTREEITEM hItem = pNavigator->m_hItemAllSatInfo;
	CTreeCtrl& tree = pNavigator->GetTreeCtrl();
	SatTPMod *pSatTpMod = (SatTPMod *)tree.GetItemData(hItem);
	if(!pSatTpMod) return NULL;

	long lnb_low, lnb_high,lnb_type;

	char bufsz[64];	
	memcpy(bufsz, buf + 10, 18);
	bufsz[18] = 0;

	
	CString SatName(bufsz);
	SatName = pEditView->m_strlines.FilterBackChar(SatName, ' ');


	
//	if(IsExistedSatellite(&tree, hItem, SatName)) 
//		return NULL;
	if( !g_strLastSatName.IsEmpty() && !g_strLastSatName.Compare(SatName) )
		return NULL;

	int offset;
	AllocNode(SAT_NODE, &offset);
	if( offset == -1 )
	{
		return NULL;
	}

	SatTPMod *pNewSatTpMod = NULL;
	pNewSatTpMod = new SatTPMod;
	if(!pNewSatTpMod) return NULL;
	memset(pNewSatTpMod, 0, sizeof(SatTPMod));

	pNewSatTpMod->sat_id = g_Cur_Sat_Id;//AllocPID(SAT_NODE);
	g_Cur_Sat_Id++;
	pNewSatTpMod->type = SAT_INFO_TYPE;
	pNewSatTpMod->nItemFather = hItem;

	pNewSatTpMod->offset = offset;

	int index;
	index = GetSatNodeIndex(SKEYZ_SAT_ID);
	if(index != -1)
	{
		sprintf(bufsz, "%d", pNewSatTpMod->sat_id);
		
		BOOL bRet = SetNodeData(SAT_NODE, pNewSatTpMod->offset, index, bufsz);
	}

	sprintf(bufsz, "%s", SatName);
	pNewSatTpMod->pNameStr = new CString(bufsz);

	CString str;

	for(int i = 0; i < sizeof(SDX_Sat_Table) / sizeof(SDX_Map_Table); i++)
	{
		index = GetSatNodeIndex(SDX_Sat_Table[i].keysz);
		if(-1 == index) continue;

		memcpy(bufsz, buf + SDX_Sat_Table[i].bytes_offset1, SDX_Sat_Table[i].bytes_count1);
		if(SDX_Sat_Table[i].bytes_count2)
		{
			memcpy(bufsz + SDX_Sat_Table[i].bytes_count1, buf + SDX_Sat_Table[i].bytes_offset2, SDX_Sat_Table[i].bytes_count2);
		}

		bufsz[SDX_Sat_Table[i].bytes_count1 + SDX_Sat_Table[i].bytes_count2] = 0;

		str.Format("%s", bufsz);
		str = pEditView->m_strlines.FilterBackChar(str, ' ');
		sprintf(bufsz, "%s", str);

		BOOL bRet = SetNodeData(SAT_NODE, pNewSatTpMod->offset, index, bufsz);
		if( strcmp(SDX_Sat_Table[i].keysz, SKEYZ_SAT_NAME) ==0 )
		{
			index = GetSatNodeIndex(SKEYZ_NAME_LEN, TRUE);
			int name_len = strlen(bufsz) * 2;
			sprintf(bufsz, "%d", name_len);
			bRet = SetNodeData(SAT_NODE, pNewSatTpMod->offset, index, bufsz, TRUE);
		}
	}


	long frq = GetTpFreq1(buf);

	if(frq <10000 )
	{
		lnb_type=0;
		lnb_low = lnb_high = 5150;
	}
	else
	{
		lnb_type=32;
		lnb_low=9750;
		lnb_high=10600;
	}


	index=GetSatNodeIndex(SKEYZ_LNB_TYPE);
	if(index != -1)
	{
		sprintf(bufsz, "%d", lnb_type);
		
		BOOL bRet = SetNodeData(SAT_NODE, pNewSatTpMod->offset, index, bufsz);
	}



	index = GetSatNodeIndex(SKEYZ_LNB_LOW);
	if(index != -1)
	{
		sprintf(bufsz, "%d", lnb_low);
		
		BOOL bRet = SetNodeData(SAT_NODE, pNewSatTpMod->offset, index, bufsz);
	}

	index = GetSatNodeIndex(SKEYZ_LNB_HIGH);
	if(index != -1)
	{
		sprintf(bufsz, "%d", lnb_high);
		
		BOOL bRet = SetNodeData(SAT_NODE, pNewSatTpMod->offset, index, bufsz);
	}

	//测试一次打开100个卫星,没有发现到这里出现重复的情况,为了保证打开速度,可以关闭此处代码
	HTREEITEM hSatItem = GetSameSatNode(&tree, hItem, offset);
	if(hSatItem)
	{
		SatTPMod *pSatTpMod = (SatTPMod *)tree.GetItemData(hSatItem);
		ASSERT(pSatTpMod);
		FreeNode(SAT_NODE, offset);
		g_Cur_Sat_Id--;
		return hSatItem;
	}



	HTREEITEM subItem = NULL;
	if(pNewSatTpMod->pNameStr)
	{
		subItem = tree.InsertItem(*pNewSatTpMod->pNameStr, hItem);
		tree.SetItemData(subItem, (DWORD)pNewSatTpMod);
		g_Cur_Tp_Id = 1;
		g_strLastSatName = *pNewSatTpMod->pNameStr;
		g_strLastTpName.Empty();
	}

	return subItem;
}

HTREEITEM CDbParser::AddTpNodeFromSDX(HTREEITEM hItem, char *buf)
{
	if(!hItem) return NULL;

	CMainFrame *pFrm = (CMainFrame *)AfxGetMainWnd();
	CAliEditorView *pEditView = pFrm->GetEditorView();
	CNavigator *pNavigator = pFrm->GetNavigator();

	CTreeCtrl& tree = pNavigator->GetTreeCtrl();

	int index;
	char bufsz[64];

	HTREEITEM hSatItem = hItem;	

	CString tpname;

	if(GetTpPolar1(buf) == 0)
	{
		tpname.Format("TP_%d_H_%d", GetTpFreq1(buf), GetTpSym1(buf));
	}
	else
	{
		tpname.Format("TP_%d_V_%d", GetTpFreq1(buf), GetTpSym1(buf));
	}

//	if(CheckSameTp(&tree, tpname, hItem))
//	{
//		return NULL;
//	}	
	if( !g_strLastTpName.IsEmpty() )
	{
		CString strTextTp = g_strLastTpName;
		CStringLines *pScripter = &((CMainFrame*)AfxGetMainWnd())->GetEditorView()->m_strlines;
		int pos = strTextTp.Find("TP", 0);			
		if(pos > 0)
			strTextTp.Delete(0, pos);
		strTextTp = pScripter->FilterFrontChar(strTextTp, ' ');
		if( !strTextTp.Compare(tpname) )
			return NULL;
	}

	SatTPMod *pSatTpMod = (SatTPMod *)tree.GetItemData(hItem);
	if(!pSatTpMod) return NULL;

	SatTPMod *pNewSatTpMod = NULL;
	pNewSatTpMod = new SatTPMod;
	if(!pNewSatTpMod) return NULL;
	memset(pNewSatTpMod, 0, sizeof(SatTPMod));

	int offset;
	AllocNode(TP_NODE, &offset);
	if( offset == -1 )
	{
		return NULL;
	}
	
	pNewSatTpMod->offset = offset;
	pNewSatTpMod->pFatherMod = pSatTpMod;
	pNewSatTpMod->type = TP_INFO_TYPE;
	pNewSatTpMod->sat_id = pSatTpMod->sat_id;
	pNewSatTpMod->tp_id = g_Cur_Tp_Id;//AllocPID(TP_NODE, pSatTpMod);
	g_Cur_Tp_Id++;
	pNewSatTpMod->sat_id = pSatTpMod->sat_id;
	pNewSatTpMod->nItemFather = hItem;

	CString seqstr;
	seqstr.Format("[ %d ]  ", pNewSatTpMod->tp_id);

	pNewSatTpMod->pNameStr = new CString(seqstr + tpname);

	index = GetTpNodeIndex(SKEYZ_SAT_ID);
	if(index != -1)
	{
		sprintf(bufsz, "%d", pNewSatTpMod->sat_id);
		BOOL bRet = SetNodeData(TP_NODE, pNewSatTpMod->offset, index, bufsz);
	}

	index = GetTpNodeIndex(TKEYZ_TP_ID);
	if(index != -1)
	{
		sprintf(bufsz, "%d", pNewSatTpMod->tp_id);
		BOOL bRet = SetNodeData(TP_NODE, pNewSatTpMod->offset, index, bufsz);
	}

	CString str;

	for(int i = 0; i < sizeof(SDX_TP_Table) / sizeof(SDX_Map_Table); i++)
	{
		index = GetTpNodeIndex(SDX_TP_Table[i].keysz, TRUE);
		if(-1 == index) continue;

		memcpy(bufsz, buf + SDX_TP_Table[i].bytes_offset1, SDX_TP_Table[i].bytes_count1);
		if(SDX_TP_Table[i].bytes_count2)
		{
			memcpy(bufsz + SDX_TP_Table[i].bytes_count1, buf + SDX_TP_Table[i].bytes_offset2, 
				SDX_TP_Table[i].bytes_count2);
		}

		bufsz[SDX_TP_Table[i].bytes_count1 + SDX_TP_Table[i].bytes_count2] = 0;

		str.Format("%s", bufsz);
		str = pEditView->m_strlines.FilterBackChar(str, ' ');
		sprintf(bufsz, "%s", str);

		BOOL bRet = SetNodeData(TP_NODE, pNewSatTpMod->offset, index, bufsz, TRUE);
	}

	//测试一次打开100个卫星,没有发现到这里出现重复的情况,为了保证打开速度,可以关闭此处代码
	HTREEITEM hTpItem = GetSameTpNode(&tree, hSatItem, offset);
	if(hTpItem)
	{
		SatTPMod *pSatTpMod = (SatTPMod *)tree.GetItemData(hTpItem);
		ASSERT(pSatTpMod);

		FreeNode(TP_NODE, offset);

		g_Cur_Tp_Id--;
			

⌨️ 快捷键说明

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