📄 parse.c
字号:
#include "vacation.h"
//////////////////////////////////////////////////////////////////////////
/*
*
*/
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
/*
* function:获得菜单项unicode数据
* 得到:pApp->pMainMenuItem->"****"->"****"->"****"->"****"
*/
void GetMainMenuItem(CTheApp* pApp)
{
uint16 l,l1;
char* p;
char* q;
char chV[50];
char chIdView[5];
char chIdMenuItem[10];
MenuItem* pTemp,*pTail;
CleanMainMenuItemList(pApp);
p=MEMSTR(pApp->pszReceiveData,"<u>",STRLEN(pApp->pszReceiveData));
while(p)
{
p+=3;
q=MEMSTR(p,"</u>",STRLEN(p));
l=q-p;
l1=l; //用于保持这个值
MEMSET(chV,0,50);
MEMCPY(chV,p,l);
p=MEMSTR(q,"<idView>",STRLEN(q));
p+=8;
q=MEMSTR(p,"</idView>",STRLEN(p));
l=q-p;
MEMSET(chIdView,0,5);
MEMCPY(chIdView,p,l);
p=MEMSTR(q,"<idMenuItem>",STRLEN(q));
p+=12;
q=MEMSTR(p,"</idMenuItem>",STRLEN(p));
l=q-p;
MEMSET(chIdMenuItem,0,10);
MEMCPY(chIdMenuItem,p,l);
//链表末尾插入
if((pTemp=(MenuItem*)MALLOC(sizeof(MenuItem)))==NULL)
{
if(pApp->pMainMenuItem)
{
CleanMainMenuItemList(pApp);
pApp->pMainMenuItem=NULL;
}
if(pApp->pszReceiveData)
{
FREE(pApp->pszReceiveData);
pApp->pszReceiveData=NULL;
}
ISHELL_SendEvent(pApp->a.m_pIShell,AEECLSID_VACATION,EVT_USER,USEREVT_MEMORY_FAILED,0);
return;
}
pTemp->link=NULL;
if((pTemp->content=(AECHAR*)MALLOC(l1/2+2))==NULL)
{
if(pApp->pMainMenuItem)
{
CleanMainMenuItemList(pApp);
pApp->pMainMenuItem=NULL;
}
if(pApp->pszReceiveData)
{
FREE(pApp->pszReceiveData);
pApp->pszReceiveData=NULL;
}
ISHELL_SendEvent(pApp->a.m_pIShell,AEECLSID_VACATION,EVT_USER,USEREVT_MEMORY_FAILED,0);
return;
}
MEMSET(pTemp->content,0,l1/2+2);
ConvertAECHAR(chV,l1,pTemp->content);
MEMSET(pTemp->idView,0,5);
MEMCPY(pTemp->idView,chIdView,5);
MEMSET(pTemp->idMenuItem,0,10);
MEMCPY(pTemp->idMenuItem,chIdMenuItem,10);
if(pApp->pMainMenuItem==NULL)
pApp->pMainMenuItem=pTemp;
else
{
pTail=pApp->pMainMenuItem;
while(pTail->link)
pTail=pTail->link;
pTail->link=pTemp;
}
p=MEMSTR(q,"<u>",STRLEN(q));
}
if(pApp->pszReceiveData)//释放接收到的数据,这些数据是用于主菜单,已没用
{
FREE(pApp->pszReceiveData);
pApp->pszReceiveData=NULL;
}
return;
}
//////////////////////////////////////////////////////////////////////////
void GetSubMenuItem(CTheApp* pApp)
{
uint16 l,l1;
char* p;
char* q;
char chV[100];
char chIdView[5];
char chIdMenuItem[10];
MenuItem* pTemp,*pTail;
CleanSubMenuItemList(pApp);
//log(pApp,pApp->pszReceiveData);
p=MEMSTR(pApp->pszReceiveData,"<u>",STRLEN(pApp->pszReceiveData));
while(p)
{
p+=3;
q=MEMSTR(p,"</u>",STRLEN(p));
l=q-p;
l1=l; //用于保持这个值
MEMSET(chV,0,100);
MEMCPY(chV,p,l);
p=MEMSTR(q,"<idView>",STRLEN(q));
p+=8;
q=MEMSTR(p,"</idView>",STRLEN(p));
l=q-p;
MEMSET(chIdView,0,5);
MEMCPY(chIdView,p,l);
p=MEMSTR(q,"<idContext>",STRLEN(q));
p+=11;
q=MEMSTR(p,"</idContext>",STRLEN(p));
l=q-p;
MEMSET(chIdMenuItem,0,10);
MEMCPY(chIdMenuItem,p,l);
if((pTemp=(MenuItem*)MALLOC(sizeof(MenuItem)))==NULL)
{//memory allocate error
if(pApp->pSubMenuItem)
{
CleanSubMenuItemList(pApp);
pApp->pSubMenuItem=NULL;
}
if(pApp->pszReceiveData)
{
FREE(pApp->pszReceiveData);
pApp->pszReceiveData=NULL;
}
if(pApp->pIMenuCtl)
{
IMENUCTL_Release(pApp->pIMenuCtl);
pApp->pIMenuCtl=NULL;
}
if(pApp->pMainMenuItem)
{
CleanMainMenuItemList(pApp);
pApp->pSubMenuItem=NULL;
}
ISHELL_SendEvent(pApp->a.m_pIShell,AEECLSID_VACATION,EVT_USER,USEREVT_MEMORY_FAILED,0);
return;
}
pTemp->link=NULL;
if((pTemp->content=MALLOC(l1/2+2))==NULL)
{
if(pApp->pSubMenuItem)
{
CleanSubMenuItemList(pApp);
pApp->pSubMenuItem=NULL;
}
if(pApp->pszReceiveData)
{
FREE(pApp->pszReceiveData);
pApp->pszReceiveData=NULL;
}
if(pApp->pIMenuCtl)
{
IMENUCTL_Release(pApp->pIMenuCtl);
pApp->pIMenuCtl=NULL;
}
if(pApp->pMainMenuItem)
{
CleanMainMenuItemList(pApp);
pApp->pSubMenuItem=NULL;
}
ISHELL_SendEvent(pApp->a.m_pIShell,AEECLSID_VACATION,EVT_USER,USEREVT_MEMORY_FAILED,0);
return;
}
MEMSET(pTemp->content,0,l1/2+2);
ConvertAECHAR(chV,l1,pTemp->content);
MEMSET(pTemp->idView,0,5);
MEMCPY(pTemp->idView,chIdView,5);
MEMSET(pTemp->idMenuItem,0,10);
MEMCPY(pTemp->idMenuItem,chIdMenuItem,10);
if(pApp->pSubMenuItem==NULL)
pApp->pSubMenuItem=pTemp;
else
{
pTail=pApp->pSubMenuItem;
while(pTail->link)
pTail=pTail->link;
pTail->link=pTemp;
}
p=MEMSTR(q,"<u>",STRLEN(q));
}
if(pApp->pszReceiveData)//释放接收到的数据,这些数据是用于子菜单,已没用
{
FREE(pApp->pszReceiveData);
pApp->pszReceiveData=NULL;
}
return;
}
//////////////////////////////////////////////////////////////////////////
/*
void GetMainMenuItem(CTheApp* pApp)
{
uint16 l;
char* p;
char* q;
char* pV=NULL;
MenuItem* pTemp,*pTail;
CleanMainMenuItemList(pApp);
p=MEMSTR(pApp->pszReceiveData,"<u>",STRLEN(pApp->pszReceiveData));
while(p)
{
p+=3;
q=MEMSTR(p,"</u>",STRLEN(p));
l=q-p;
pV=MALLOC(l+2);
MEMSET(pV,0,l+2);
MEMCPY(pV,p,l);
pTemp=(MenuItem*)MALLOC(sizeof(MenuItem));//list末尾插入
pTemp->link=NULL;
pTemp->content=MALLOC(l/2+2);
MEMSET(pTemp->content,0,l/2+2);
//MEMCPY(pTemp->content,p,l);
ConvertAECHAR(pV,l,pTemp);
FREE(pV);
if(pApp->pMainMenuItem==NULL)
pApp->pMainMenuItem=pTemp;
else
{
pTail=pApp->pMainMenuItem;
while(pTail->link)
pTail=pTail->link;
pTail->link=pTemp;
}
p=MEMSTR(q,"<u>",STRLEN(q));
}
return;
}
*/
//////////////////////////////////////////////////////////////////////////
/*
* function:清除菜单项内存
* 清除:pApp->pMainMenuItem->"****"->"****"->"****"->"****".
*/
void CleanMainMenuItemList(CTheApp* pApp)
{
MenuItem* pTemp;
while(pApp->pMainMenuItem)
{
pTemp=pApp->pMainMenuItem;
pApp->pMainMenuItem=pTemp->link;
if(pTemp->content)
{
FREE(pTemp->content);
pTemp->content=NULL;
}
FREE(pTemp);
pTemp=NULL;
}
return;
}
//////////////////////////////////////////////////////////////////////////
void CleanSubMenuItemList(CTheApp* pApp)
{
MenuItem* pTemp;
while(pApp->pSubMenuItem)
{
pTemp=pApp->pSubMenuItem;
pApp->pSubMenuItem=pTemp->link;
if(pTemp->content)
{
FREE(pTemp->content);
pTemp->content=NULL;
}
FREE(pTemp);
pTemp=NULL;
}
return;
}
//////////////////////////////////////////////////////////////////////////
/*
* function:将ascii码表示的unicode转换成真正的16位unicode.
* import:pV-指向ascii码字符串,l-字符串长度
* export:pMI->content-菜单项unicode值
* use example:
*/
void ConvertAECHAR(char* pV,uint16 l,AECHAR* pMI)
{
uint16 i,j;
uint16 a;
char c;
j=0;
while(j<l)
{
a=0;
//此处最好过滤掉回车换行
//if(pMI[j]==0x0d||pMI[j]==0x0d)
// j+=2;
//if(pMI)
//------------------
for(i=0;i<=3;i++)
{
c=pV[j+i];
if((c>=0x30)&&(c<=0x39))
c^=0x30;
if((c>=0x41)&&(c<=0x46))
c-=0x37;
//此处没有考虑小写字母的情形
a<<=4;
a|=c;
}
pMI[j/4]|=a;
j+=4;
}
}
/*
void ConvertAECHAR(char* pV,uint16 l,MenuItem* pMI)
{
uint16 i,j;
uint16 a;
char c;
j=0;
while(j<l)
{
a=0;
for(i=0;i<=3;i++)
{
c=pV[j+i];
if((c>=0x30)&&(c<=0x39))
c^=0x30;
if((c>=0x41)&&(c<=0x46))
c-=0x37;
//此处没有考虑小写字母的情形
a<<=4;
a|=c;
}
pMI->content[j/4]|=a;
j+=4;
}
}
*/
//////////////////////////////////////////////////////////////////////////
int Str2Int(char* pCh)
{
int Result=0;
char* p;
p=pCh;
while(*p)
{
Result=10*Result+(*p-0x30);
p++;
}
return Result;
}
///////////////////////////////////////////////////////////////////////////
//限制数字不超过7位
///////////////////////////////////////////
void Int2Str(char a[],uint16 x)
{
int i,j;
uint16 b;
char c;
char r[7]={0};
b=x;
for(i=0;i<=6;i++)
{
c=(char)(b%10)+0x30;
r[i]=c;
b=b/10;
}
i=6;
while(1)
{
if((i<0)||(r[i]^0x30))
break;
i--;
}
if(i>=0)
{
j=0;
for(i;i>=0;i--)
{
a[j]=r[i];
j++;
}
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -