Added Boyer-Moore text search.
This commit is contained in:
parent
e562453dae
commit
ebe76b73a9
|
@ -1,3 +1,7 @@
|
||||||
|
Fri Mar 5 22:14:13 1999 Marcel Baur <mbaur@g26.ethz.ch>
|
||||||
|
* NEW [search.c]
|
||||||
|
- Added Boyer-Moore text search
|
||||||
|
|
||||||
Sat Feb 6 20:25:25 1999 Marcel Baur <mbaur@g26.ethz.ch>
|
Sat Feb 6 20:25:25 1999 Marcel Baur <mbaur@g26.ethz.ch>
|
||||||
- Added new IDS_NOTSAVED ressource (needs translation in *.rc)
|
- Added new IDS_NOTSAVED ressource (needs translation in *.rc)
|
||||||
- Improved printing support (not yet complete)
|
- Improved printing support (not yet complete)
|
||||||
|
@ -6,8 +10,8 @@ Sat Feb 6 20:25:25 1999 Marcel Baur <mbaur@g26.ethz.ch>
|
||||||
|
|
||||||
Thu Jan 28 18:17:08 1999 Jukka Iivonen <iivonen@iki.fi>
|
Thu Jan 28 18:17:08 1999 Jukka Iivonen <iivonen@iki.fi>
|
||||||
|
|
||||||
* [Fi.rc] [main.c] [Makefile.in]
|
* [Fi.rc] [main.c] [Makefile.in]
|
||||||
Added Finnish language support.
|
- Added Finnish language support.
|
||||||
|
|
||||||
Sun Oct 18 14:11:42 1998 Marcel Baur <mbaur@g26.ethz.ch>
|
Sun Oct 18 14:11:42 1998 Marcel Baur <mbaur@g26.ethz.ch>
|
||||||
|
|
||||||
|
@ -15,11 +19,11 @@ Sun Oct 18 14:11:42 1998 Marcel Baur <mbaur@g26.ethz.ch>
|
||||||
[language.h], [license.c], [license.h], [main.c], [main.h],
|
[language.h], [license.c], [license.h], [main.c], [main.h],
|
||||||
[notepad.rc]:
|
[notepad.rc]:
|
||||||
|
|
||||||
- Fixed GetOpenFileName and GetSaveFileName dialogs.
|
- Fixed GetOpenFileName and GetSaveFileName dialogs.
|
||||||
- Fixed Print dialog and introduced PrinterSetup dialog.
|
- Fixed Print dialog and introduced PrinterSetup dialog.
|
||||||
- Fixed PageSetup dialog: values are now correctly initialized
|
- Fixed PageSetup dialog: values are now correctly initialized
|
||||||
(had to change all *.rc files)
|
(had to change all *.rc files)
|
||||||
- Preliminary file drag and drop support.
|
- Preliminary file drag and drop support.
|
||||||
|
|
||||||
Fri Jun 12 23:29:44 1998 Marcel Baur <mbaur@g26.ethz.ch>
|
Fri Jun 12 23:29:44 1998 Marcel Baur <mbaur@g26.ethz.ch>
|
||||||
- Fixed GetDateFormat()->GetTimeFormat() for locale time.
|
- Fixed GetDateFormat()->GetTimeFormat() for locale time.
|
||||||
|
@ -73,3 +77,4 @@ Fri Dec 05 20:51:55 1997 Marcel Baur <mbaur@g26.ethz.ch>
|
||||||
[README] [TODO] [ChangeLog]
|
[README] [TODO] [ChangeLog]
|
||||||
- Originals by Marcel Baur
|
- Originals by Marcel Baur
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,8 @@ MOSTSRCS = \
|
||||||
license.c \
|
license.c \
|
||||||
main.c \
|
main.c \
|
||||||
dialog.c \
|
dialog.c \
|
||||||
language.c
|
language.c \
|
||||||
|
search.c
|
||||||
|
|
||||||
# Some strings need addresses >= 0x10000
|
# Some strings need addresses >= 0x10000
|
||||||
STRINGSRCS = \
|
STRINGSRCS = \
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* Notepad (search.c)
|
||||||
|
* Copyright (C) 1999 by Marcel Baur
|
||||||
|
* To be distributed under the Wine license
|
||||||
|
*
|
||||||
|
* This file features Heuristic Boyer-Moore Text Search
|
||||||
|
*
|
||||||
|
* Always: - Buf is the Buffer containing the whole text
|
||||||
|
* ======= - SP is the Search Pattern, which has to be found in Buf.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <win.h>
|
||||||
|
|
||||||
|
#define CHARSETSIZE 255
|
||||||
|
|
||||||
|
int delta[CHARSETSIZE];
|
||||||
|
|
||||||
|
/* rightmostpos: return rightmost position of ch in szSP (or -1) */
|
||||||
|
int rightmostpos(char ch, LPSTR szSP, int nSPLen) {
|
||||||
|
int i = nSPLen;
|
||||||
|
while ((i>0) & (szSP[i]!=ch)) i--;
|
||||||
|
return(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* setup_delta: setup delta1 cache */
|
||||||
|
void setup_delta(LPSTR szSP, int nSPLen) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i=0; i<CHARSETSIZE; i++) {
|
||||||
|
delta[i] = nSPLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0; i<nSPLen; i++) {
|
||||||
|
delta[szSP[i]] = (nSPLen - rightmostpos(szSP[i], szSP, nSPLen));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int bm_search(LPSTR szBuf, int nBufLen, LPSTR szSP, int nSPLen) {
|
||||||
|
int i = nSPLen;
|
||||||
|
int j = nSPLen;
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (szBuf[i] = szSP[j]) {
|
||||||
|
i--; j--;
|
||||||
|
} else {
|
||||||
|
if ((nSPLen-j+1) > delta[szBuf[i]]) {
|
||||||
|
i+= (nSPLen-j+1);
|
||||||
|
} else {
|
||||||
|
i+= delta[szBuf[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (j>0 && i<=nBufLen);
|
||||||
|
return(i+1);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue