/******************************\ [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; }
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]),¶m,sizeof(ModernParam)); curParam++; memset(¶m,0,sizeof(param)); } } } } return 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; };