- static char findstr[81];
- char tmp[81];
-
-#ifdef DEBUG
- fprintf(stderr, "find(): findstr = |%s|\n", findstr);
-#endif
-
- if(next) {
- if( !*findstr )
- return;
- } else {
- clear_statusline();
- statusline_addstr("/");
- statusline_getnstr(findstr, 67, 0);
- strupper(findstr);
- clear_statusline();
- }
-
- if(items < 1)
- return;
-
- for( i = (curitem < LAST_ITEM) && next ? curitem+1 : curitem;
- i < items; i++ ) {
- strcpy(tmp, database[i][NAME]);
- if( strstr(strupper(tmp), findstr) != NULL ) {
- curitem = i;
- refresh_list();
- break;
+ char *findstr = NULL;
+ char *tmp = NULL;
+ int ret = -1; /* not found */
+ struct db_enumerator e = init_db_enumerator(ENUM_ALL);
+
+ if(list_is_empty() || !is_valid_item(start))
+ return -2; /* error */
+
+ findstr = strdup(str);
+ findstr = strlower(findstr);
+
+ e.item = start - 1; /* must be "real start" - 1 */
+ db_enumerate_items(e) {
+ for( i = 0; search_fields[i] >= 0; i++ ) {
+ tmp = safe_strdup(database[e.item][search_fields[i]]);
+ if( tmp && strstr(strlower(tmp), findstr) ) {
+ ret = e.item;
+ goto out;
+ }
+ my_free(tmp);