Esempio n. 1
0
/******************************\
[function] 在给定字符串中查找所有特定子串并删除,如果没有找到相应字串,则不作任何操作
[input] str:输入的被操作字符串
sub_str:需要查找并删除的特定子字符串
[output] result_str:在str字符串中删除所有sub_str子字符串的结果
[return] 删除的子字符串的个数
\******************************/
int DeleteSubStr(const char *str, const char *sub_str, char *result_str)
{
	int n = MyStrLen(str);
	int sn = MyStrLen(sub_str);
	int count(0);
	bool isequal(false);
	const char *s = str;
	int i(0), j(0);
	for (i = 0; i <= n - sn; ++i, ++s){
		isequal = IsEqualSubstr(s, sub_str, sn);
		if (isequal) {
			++count, i += sn - 1, s += sn - 1;
		}
		else
		{
			result_str[j] = str[i];
			++j;
		}
	}
	for (; i<n; ++i, ++j)
	{
		result_str[j] = str[i];
	}
	result_str[j] = '\0';
	return count;
}
Esempio n. 2
0
int GetClientIconByMirVer(pdisplayNameCacheEntry pdnce)
{
	if (pdnce&&pdnce->protoNotExists==FALSE&&(!pdnce->isUnknown)&&pdnce->szProto&&pdnce->MirVer)
	{
		if (MyStrLen(pdnce->szProto)>0&&MyStrLen(pdnce->MirVer)>0)
		{
				if (1|| strstr(pdnce->szProto,"ICQ")!=NULL)
				{
					GetClientWorker(pdnce->MirVer,&pdnce->ci);
				}
		}

	}
return 0;
}
DWORD ModernCalcHash(char * a)
{
    DWORD Val=0;
    BYTE N;
    DWORD k=MyStrLen(a);
    if (k<23) N=(BYTE)k; else N=23;
    while (N>0)
    {
        Val=Val<<1;
        Val^=((DWORD)*a++)-31;
        N--;
    }
    return Val;
}
char * GetParamN(char * string, char * buf, int buflen, BYTE paramN, char Delim, BOOL SkipSpaces)
{
    int i=0;
    DWORD start=0;
    DWORD end=0;
    DWORD CurentCount=0;
    DWORD len;
    while (i<MyStrLen(string))
    {
        if (string[i]==Delim)
        {
            if (CurentCount==paramN) break;
            start=i+1;
            CurentCount++;     
        }
        i++;
    }
    if (CurentCount==paramN)
    {
        len=((int)(i-start)<buflen)?i-start:buflen;
        strncpy(buf,string+start,len);
        buf[len]='\0';
		//remove spaces before and after
		//remove start spaces in Value
		{
			int len3=strlen(buf);
			int j=0;
			while (j<len3 && (buf[j]==' ' || buf[j]=='\t')) j++;
			if (j!=0 && j<len3) 
				memcpy(buf,buf+j,len3-j+1);;
		}
		//remove tail spaces in Value
		{
			DWORD len3=strlen(buf);
			int j=len3-1;
			while (j>0 && (buf[j]==' ' || buf[j]=='\t')) j--;
			if (j>=0) buf[j+1]='\0';
		}
    }
    else buf[0]='\0';

    return buf;
}
int ParseToModernMask(ModernMask * mm, char * szText)
{
    //TODO
    if (!mm || !szText) return -1;
    else
    {
        UINT textLen=MyStrLen(szText);
        BYTE curParam=0;
        ModernParam param={0};
        UINT currentPos=0;
        UINT startPos=0;
        while (currentPos<textLen)
        {
            //find next single ','
            while (currentPos<textLen) 
            {
                if (szText[currentPos]==',')
                    if  (currentPos<textLen-1)
                        if (szText[currentPos+1]==',') currentPos++;
                        else break;
                currentPos++;
            }
            //parse chars between startPos and currentPos
            {   
                //Get param name
                if (startPos!=0) 
                {
                    //search '=' sign or '^'
                    UINT keyPos=startPos;
                    while (keyPos<currentPos-1 && !(szText[keyPos]=='=' ||szText[keyPos]=='^')) keyPos++;
                    if (szText[keyPos]=='=') param.ParamFlag=1;
                    else if (szText[keyPos]=='^') param.ParamFlag=3;
                    //szText[keyPos]='/0';
                    {
                        DWORD k;
                        char v[MAXVALUE];
                        k=keyPos-startPos;
                        if (k>MAXVALUE-1) k=MAXVALUE-1;
                        strncpy(v,szText+startPos,k);
                        v[k]='\0';
                        param.ParamID=ModernCalcHash(v);
                        param.ParamText=mir_strdup(v);
                        startPos=keyPos+1;
                    }
                }
                else //ParamName='Module'
                {
                    param.ParamFlag=1;
                    param.ParamID=ModernCalcHash("Module");
                    param.ParamText=mir_strdup("Module");
                }
                //szText[currentPos]='/0';
                {
                  int k;
				  int m;
                  char v[MAXVALUE]={0};
                  k=currentPos-startPos;
                  if (k>MAXVALUE-1) k=MAXVALUE-1;
				          m=min((UINT)k,MyStrLen(szText)-startPos+1);
                  strncpy(v,&(szText[startPos]),k);
                  param.Value=mir_strdup(v);
                }
                param.ValueHash=ModernCalcHash(param.Value);
                {   // if Value don't contain '*' or '?' count add flag
                    UINT i=0;
                    BOOL f=4;
                    while (param.Value[i]!='\0' && i<(UINT)MyStrLen(param.Value)+1)
                        if (param.Value[i]=='*' || param.Value[i]=='?') {f=0; break;} else i++;
                    param.ParamFlag|=f;
                }
                startPos=currentPos+1;
                currentPos++;
                {//Adding New Parameter;
                  if (curParam>=mm->ParamsCount)
                  {
                    mm->ParamsList=mir_realloc(mm->ParamsList,(mm->ParamsCount+1)*sizeof(ModernParam));
                    mm->ParamsCount++;                    
                  }
                  memcpy(&(mm->ParamsList[curParam]),&param,sizeof(ModernParam));
                  curParam++;
                memset(&param,0,sizeof(param));
            }
        }
    }
    }
    return 0;
};
Esempio n. 6
0
static int OnContactMenuBuild(WPARAM wParam,LPARAM lParam)
{
	
	CLISTMENUITEM mi;
	HANDLE menuid;
	int i,grpid;
	boolean grpexists;
	char *grpname;
	char intname[20];
	
	if (prevmenu!=0){
		CallService(MS_CLIST_REMOVECONTACTMENUITEM,(WPARAM)prevmenu,(LPARAM)0);
	};
	
	
	ZeroMemory(&mi,sizeof(mi));
	
	mi.cbSize=sizeof(mi);
	mi.hIcon=NULL;//LoadIcon(hInst,MAKEINTRESOURCEA(IDI_MIRANDA));
	mi.pszPopupName=(char *)-1;
	mi.position=100000;
	mi.pszName=Translate("&Move to Group");
	mi.flags=CMIF_ROOTPOPUP;
	mi.pszContactOwner=(char *)0;
	menuid=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,wParam,(LPARAM)&mi);
	
	prevmenu=menuid;

	grpexists=TRUE;
	i=0;
//	intname=(char *)malloc(20);
	grpid=1000;
	AddGroupItem((int)menuid,Translate("Root Group"),grpid++,-1,wParam);
	grpid+=100000;
	//AddGroupItem(menuid,"---------------------------------------------",grpid++,0);
while (TRUE) 
{
	itoa(i,intname,10);
	grpname=DBGetStringA(0,"CListGroups",intname);

	if (grpname==NULL ){break;};
	if (MyStrLen(grpname)==0)
	{
        
		break;
	};
	if (grpname[0]==0)
	{
        
		break;
	};
	AddGroupItem((int)menuid,&(grpname[1]),grpid++,i+1,wParam);
	/*
	mi.cbSize=sizeof(mi);
	mi.hIcon=NULL;//LoadIcon(hInst,MAKEINTRESOURCEA(IDI_MIRANDA));
	mi.pszPopupName=(char *)menuid;
	mi.popupPosition=i+1;
	mi.position=grpid++;
	mi.pszName=&(grpname[1]);
	mi.flags=CMIF_CHILDPOPUP;
	mi.pszContactOwner=(char *)0;
	mi.pszService=MTG_MOVE;
	CallService(MS_CLIST_ADDCONTACTMENUITEM,wParam,(LPARAM)&mi);
	*/
	i++;
	mir_free(grpname);
};
return 0;
};