int proceedchild(char *title)
{
    
    HTTP f,g;
	char c[5000],tt[5000];
	char buffer[5000],temp[5000];
	char articlebuffer[3000];
	char article[3000];
	char section[3000];
	char name[3000];
	char ch,cht;
	const char *match="http";
	const int length=strlen(match);
	const char *hostmatch="://zh.wikipedia.org";
	const int hostmatchlength=strlen(hostmatch);
	int matchpos=0;
	int hostmatchpos=0;
	int bufferlen=0;
	int pathpos=0;
	int articlepos=0;
	int sectionpos=0;
	int namepos=0;
	struct neditargv point;
	int todo=0,flag=0,status=0;
	strcpy(c,"https://zh.wikipedia.org/w/index.php?action=raw&redirect=no&&title=");
		URLEncode(title,strlen(title),tt,500);
		strcat(c,tt);
		f=hopen();
	if(get(c,0,f))
	{
	   hclose(f);
	   EnterCriticalSection(&tcs);
	   threadnumber--;
	   LeaveCriticalSection(&tcs);
	   return -1;
	 }
		flag=0;
		while(!heof(f))
    {
  	  ch=hgetc(f);
  
  	  if(ch=='\r')
  	  {
  	  	if(flag==0) flag=1;
  	  	 else if(flag==2) flag=3;
  	  	
		  }
		  
		  if(ch=='\n')
			{
				if(flag==1) flag=2;
				else if(flag==3)
				{
					flag=4;
					break;
				}
			} 
		  if(ch!='\n'&&ch!='\r') flag=0;
	  }
	  if(flag!=4) 
	  {
	 
	EnterCriticalSection(&tcs);
	threadnumber--;
	LeaveCriticalSection(&tcs);
	hclose(f);
	return -2;
	}
  g=hopen();
  hputs("&text=",strlen("&text="),g);
  cht=ch;
  ch=hgetc(f);
  while(!heof(f))
  {
      switch(status)
	  {
	  case 1:
		  buffer[bufferlen]=ch;
		  bufferlen++;
		  if(ch!=match[matchpos]&&matchpos<length)
		  {
			      URLEncode(buffer,bufferlen,temp,4990);
		    	  hputs(temp,strlen(temp),g);
			      status=0;
		    	  buffer[0]=0;
		    	  bufferlen=0;
		    	  temp[0]=0;
		    	  matchpos=0;
			  
		  }
		  else 
		  {
			  
			  if(matchpos<length)
			  {
				  matchpos++;
			  }
			  else
			  {
				  if(ch=='s')  hostmatchpos=0;
				  else hostmatchpos=1;
				  matchpos=0;
				  status=2;
			  }
		  }
		  break;
	  case 2:
		  buffer[bufferlen]=ch;
		  bufferlen++;
			  if(ch!=hostmatch[hostmatchpos]&&hostmatchpos<hostmatchlength)
			  {
				  URLEncode(buffer,bufferlen,temp,4990);
			      hputs(temp,strlen(temp),g);
			      status=0;
				  buffer[0]=0;
			      bufferlen=0;
			      temp[0]=0;
				  hostmatchpos=0;
			  }
			  else
			  {
				  if(hostmatchpos<hostmatchlength)
				  {
					  hostmatchpos++;
				  }
				  else
				  {
					  hostmatchpos=0;
					  pathpos=0;
					  status=3;
				  }
			  }
		  

		  break;
	  case 3:
           buffer[bufferlen]=ch;
		   bufferlen++;
		   if(ch=='/')
		   {
			   if(pathpos<4)
			   {
				   URLEncode(buffer,bufferlen,temp,4990);
			       hputs(temp,strlen(temp),g);
			       status=0;
				   buffer[0]=0;
			       bufferlen=0;
			       temp[0]=0;
				   pathpos=0;
			   }
			   else
			   {
				   pathpos=0;
				   status=4;
				   articlepos=0;
				   articlebuffer[articlepos]=0;
			   }
		   }
		   else if(ch=='?'||ch==' '||ch=='&'||ch==']')
		   {
			   URLEncode(buffer,bufferlen,temp,4990);
			   hputs(temp,strlen(temp),g);
			   status=0;
			   buffer[0]=0;
			   bufferlen=0;
			   temp[0]=0;
			   pathpos=0;
		   }
		   else pathpos++;
		   break;
	  case 4:
		  buffer[bufferlen]=ch;
		   bufferlen++;
		   switch(ch)
		   {
		   case ' ':
			   status=6;
			   namepos=0;
			   break;
		   case '#':
			   status=5;
			   sectionpos=0;
			   break;
		   case ']':
			   status=7;
			   break;
		   case '?':
			   status=8;
			   break;

		   default:
		   articlebuffer[articlepos]=ch;
		   articlepos++;
		   articlebuffer[articlepos]=0;
		   }
		   break;
	 case 5:
          buffer[bufferlen]=ch;
		   bufferlen++;
		   switch(ch)
		   {
		   case '?':
			   status=8;
			   break;
		   case ']':
			   status=7;
			   break;
		   case ' ':
			   status=6;
			   namepos=0;
			   break;
		   default:
			   section[sectionpos]=ch;
			   sectionpos++;
			   section[sectionpos]=0;
		   }
		 break;
	   case 6:
		   buffer[bufferlen]=ch;
		   bufferlen++;
		   switch(ch)
		   {
		   case ' ':
			   if(namepos)
			   {
				   name[namepos]=ch;
				   namepos++;
				   name[namepos]=0;
			   }
			   break;
		   case ']':
			   status=7;
			   break;
		   default:
			   name[namepos]=ch;
			   namepos++;
			   name[namepos]=0;
		   }
		   break;
		case 7:
			if(!articlepos||URLDecode(articlebuffer,articlepos,article,2990)==-1)
			{
			   /*
			   do something
			   */
			}
			else
			{
				todo=1;
				if(!namepos)
				{
			       if(!sectionpos)	bufferlen=sprintf(buffer,"[[:%s]]",article);
				   else bufferlen=sprintf(buffer,"[[:%s#%s|%s]]",article,section,article);
				}
			    else if(!sectionpos)
				{
				  if(strcmp(article,name)) bufferlen=sprintf(buffer,"[[:%s|%s]]",article,name);
				  else bufferlen=sprintf(buffer,"[[:%s]]",name);
				 }
			    else bufferlen=sprintf(buffer,"[[:%s#%s|%s]]",article,section,name);
			 }
			URLEncode(buffer,bufferlen,temp,4990);
			hputs(temp,strlen(temp),g);
			status=0;
		    buffer[0]=0;
			bufferlen=0;
			temp[0]=0;
		    articlepos=0;
		    namepos=0;
		    sectionpos=0;
			smartURLEncode(ch,g);
			break;
		case 8:
			switch(ch)
			{
			case ']':
				status=7;
				break;
			case ' ':
				status=6;
				namepos=0;
				break;
			}
			break;
		default:
		 if(ch!='['||cht=='[')	smartURLEncode(ch,g);
		 else
		 { 
			 status=1;
			 buffer[0]='[';
			 bufferlen=1;
		 }	  
	  }
	  cht=ch;
	  ch=hgetc(f);
  }
	
	if(todo&&!status) 
	{
		point.newtext=g;
          point.title=tt;
		  point.count=0;
	      smartedit(&point);
	}
	
	hclose(f);
	hclose(g);
	EnterCriticalSection(&tcs);
	threadnumber--;
	LeaveCriticalSection(&tcs);
    return 0;
}