📄 dbparser.cpp
字号:
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 + -