char *bmha_search(const char *string, const int stringlen) { int i; __boundcheck_metadata_store((void *)(&i),(void *)((size_t)(&i)+sizeof(i)*8-1)); int j; __boundcheck_metadata_store((void *)(&j),(void *)((size_t)(&j)+sizeof(j)*8-1)); char *s; __boundcheck_metadata_store((void *)(&s),(void *)((size_t)(&s)+sizeof(s)*8-1)); i = patlen - 1 - stringlen; if (i >= 0) return NULL; string += stringlen; for ( ;; ) { while ((i += skip[((uchar *)string)[i]]) < 0) ; /* mighty fast inner loop */ if (i < (LARGE - stringlen)) return NULL; i -= LARGE; j = patlen - 1; s = (char *)string + (i - j); while (--j >= 0 && lowerc(s[j]) == lowerc(pat[j])) ; if ( j < 0 ) /* rdg 10/93 */ return s; /* rdg 10/93 */ if ( (i += skip2) >= 0 ) /* rdg 10/93 */ return NULL; /* rdg 10/93 */ } }
void bmha_init(const char *pattern) { int i; __boundcheck_metadata_store((void *)(&i),(void *)((size_t)(&i)+sizeof(i)*8-1)); int j; __boundcheck_metadata_store((void *)(&j),(void *)((size_t)(&j)+sizeof(j)*8-1)); pat = (uchar *)pattern; __boundcheck_metadata_trans_check((void *)(pat),(void *)(pattern),(void *)((uchar *)pattern)); patlen = strlen(pattern); for (i = 0; i <= UCHAR_MAX; ++i) /* rdg 10/93 */ { skip[i] = patlen; for (j = patlen - 1; j >= 0; --j) { if (lowerc(i) == lowerc(pat[j])) break; } if (j >= 0) skip[i] = patlen - j - 1; if (j == patlen - 1) skip[i] = LARGE; } skip2 = patlen; for (i = 0; i < patlen - 1; ++i) { if ( lowerc(pat[i]) == lowerc(pat[patlen - 1]) ) skip2 = patlen - i - 1; } }
char *bmha_search(const char *string, const int stringlen) { int i, j; char *s; i = patlen - 1 - stringlen; if (i >= 0) return NULL; string += stringlen; for ( ;; ) { while ((i += skip[((uchar *)string)[i]]) < 0) ; /* mighty fast inner loop */ if (i < (LARGE - stringlen)) return NULL; i -= LARGE; j = patlen - 1; s = (char *)string + (i - j); while (--j >= 0 && lowerc(s[j]) == lowerc(pat[j])) ; if ( j < 0 ) /* rdg 10/93 */ return s; /* rdg 10/93 */ if ( (i += skip2) >= 0 ) /* rdg 10/93 */ return NULL; /* rdg 10/93 */ } }
void bmha_init(const char *pattern) { int i, j; pat = (uchar *)pattern; patlen = strlen(pattern); for (i = 0; i <= UCHAR_MAX; ++i) /* rdg 10/93 */ { skip[i] = patlen; for (j = patlen - 1; j >= 0; --j) { if (lowerc(i) == lowerc(pat[j])) break; } if (j >= 0) skip[i] = patlen - j - 1; if (j == patlen - 1) skip[i] = LARGE; } skip2 = patlen; for (i = 0; i < patlen - 1; ++i) { if ( lowerc(pat[i]) == lowerc(pat[patlen - 1]) ) skip2 = patlen - i - 1; } }
static void PASCAL UpdateSample (HWND hDlg, HFONT hFont, TEXTMETRIC *m, char *FaceName) { #define FONTSAMPLESIZE LF_FACESIZE+40+(26*3) char SampleText[FONTSAMPLESIZE]; int i; char c; strcpy (SampleText, FaceName); i = strlen (SampleText); strcpy (&SampleText[i], " (Height="); i += strlen (&SampleText[i]); itoa (m->tmHeight, &SampleText[i], 10); i += strlen (&SampleText[i]); strcpy (&SampleText[i], ", Width="); i += strlen (&SampleText[i]); itoa (m->tmAveCharWidth, &SampleText[i], 10); i += strlen (&SampleText[i]); strcpy (&SampleText[i], ") sample:"); i += strlen (&SampleText[i]); for (c = 'A'; c <= 'Z'; c++) { SampleText[i++] = ' '; SampleText[i++] = c; SampleText[i++] = lowerc (c); } SampleText[i] = '\0'; SendDlgItemMessage (hDlg, ID_SAMPLE, WM_SETFONT, (UINT)hFont, (long)FALSE); SetDlgItemText (hDlg, ID_SAMPLE, SampleText); } /* UpdateSample */
char *bmha_search(const char *string, const int stringlen,const char *pattern) { int patlen; int skip[UCHAR_MAX+1]; int skip2; int i, j; char *s; uchar *pat; /* BMHA Initialization */ pat = (uchar *)pattern; patlen = strlen(pattern); for (i = 0; i <= UCHAR_MAX; ++i) { skip[i] = patlen; for (j = patlen - 1; j >= 0; --j) { if (lowerc(i) == lowerc(pat[j])) break; } if (j >= 0) skip[i] = patlen - j - 1; if (j == patlen - 1) skip[i] = LARGE; } skip2 = patlen; for (i = 0; i < patlen - 1; ++i) { if ( lowerc(pat[i]) == lowerc(pat[patlen - 1]) ) skip2 = patlen - i - 1; } /*----------------------------------*/ i = patlen - 1 - stringlen; if (i >= 0) return NULL; string += stringlen; for ( ;; ) { while ((i += skip[((uchar *)string)[i]]) < 0) ; /* mighty fast inner loop */ if (i < (LARGE - stringlen)) return NULL; i -= LARGE; j = patlen - 1; s = (char *)string + (i - j); while (--j >= 0 && lowerc(s[j]) == lowerc(pat[j])) ; if ( j < 0 ) return s; if ( (i += skip2) >= 0 ) return NULL; } }//end-method