a = tolower (*++needle); if (tolower (*rhaystack) != a)
a = _tolower (*++needle); if (_tolower (*rhaystack) != a)
__strcasestr (phaystack, pneedle)     const char *phaystack;     const char *pneedle;{  register const unsigned char *haystack, *needle;  register chartype b, c;  haystack = (const unsigned char *) phaystack;  needle = (const unsigned char *) pneedle;  b = tolower (*needle);  if (b != '\0')    {      haystack--;				/* possible ANSI violation */      do	{	  c = *++haystack;	  if (c == '\0')	    goto ret0;	}      while (tolower (c) != b);      c = tolower (*++needle);      if (c == '\0')	goto foundneedle;      ++needle;      goto jin;      for (;;)        {          register chartype a;	  register const unsigned char *rhaystack, *rneedle;	  do	    {	      a = *++haystack;	      if (a == '\0')		goto ret0;	      if (tolower (a) == b)		break;	      a = *++haystack;	      if (a == '\0')		goto ret0;shloop:	    }          while (tolower (a) != b);jin:	  a = *++haystack;	  if (a == '\0')	    goto ret0;	  if (tolower (a) != c)	    goto shloop;	  rhaystack = haystack-- + 1;	  rneedle = needle;	  a = tolower (*rneedle);	  if (tolower (*rhaystack) == a)	    do	      {		if (a == '\0')		  goto foundneedle;		++rhaystack;		a = tolower (*++needle);		if (tolower (*rhaystack) != a)		  break;		if (a == '\0')		  goto foundneedle;		++rhaystack;		a = tolower (*++needle);	      }	    while (tolower (*rhaystack) == a);	  needle = rneedle;		/* took the register-poor approach */	  if (a == '\0')	    break;        }    }foundneedle:  return (char*) haystack;ret0:  return 0;}