static int check_match(char *haystack, char *needle){

	wchar_t *l_haystack;
	wchar_t *l_needle;
	char *rp;
	gint len;

	len = strlen(needle);

	rp = haystack;
	while(*rp != '\0'){
		if(strncasecmp(rp, needle, len) == 0)
			return(0);

		if(isascii(*rp))
			rp += 1;
		else 
			rp += 2;
	}

	return(1);

/*
	l_haystack = any_to_utf8(haystack);
	l_needle = any_to_utf8(needle);

	rp = wcsstr(l_haystack, l_needle);
	free(l_haystack);
	free(l_needle);

	if(rp == NULL)
		return(1);
	else
		return(0);
*/
	
}

static gint ebook_full_search(BOOK_INFO *binfo, char *word, gint method)
{

	EB_Error_Code error_code=EB_SUCCESS;
	EB_Position text_position;
	EB_Position current_position;
	EB_Position next_position;
	int i, len;
	char heading[MAXLEN_TEXT + 1];
	char text[MAXLEN_TEXT + 1];
	char *keywords[EBOOK_MAX_KEYWORDS + 1];
	SEARCH_RESULT *rp;
	char *p;


//	g_print("ebook_full_text_search : %s\n", word);

	if((error_code = ebook_set_subbook(binfo)) != EB_SUCCESS)
		return(error_code);

	error_code = eb_text(binfo->book, &text_position);
	if (error_code != EB_SUCCESS) {
		fprintf(stderr, "failed to get text information, %s\n",
			eb_error_message(error_code));
		return(error_code);
	}


	error_code = eb_seek_text(binfo->book, &text_position);
	if (error_code != EB_SUCCESS) {
		fprintf(stderr, "failed to seek text, %s\n",
			eb_error_message(error_code));
		return(error_code);
	}

	current_position = text_position;

	for(i=0;;i++){
		error_code = eb_read_text(binfo->book, binfo->appendix, &heading_hookset, 
					  NULL, MAXLEN_TEXT, heading, &len);
		if (error_code != EB_SUCCESS) {
			fprintf(stderr, "failed to read text : %s\n",
				eb_error_message(error_code));
			return(error_code);
		}
/*
		error_code = eb_read_heading(binfo->book, 
					     binfo->appendix, 
					     &heading_hookset, 
					     NULL, 
					     MAXLEN_HEADING, 
					     heading, 
					     &len);
		if (error_code != EB_SUCCESS) {
			fprintf(stderr, "failed to read the heading, %s\n",
				eb_error_message(error_code));
			return(error_code);
		}
*/	
		heading[len] = '\0';

		p = strchr(heading, '\n');
		if(p != NULL)
			*p = '\0';

		// HOOKSETなしで読む
		error_code = eb_seek_text(binfo->book, &current_position);
		if (error_code != EB_SUCCESS) {
			fprintf(stderr, "failed to seek text, %s\n",
				eb_error_message(error_code));
			return(error_code);
		}

		error_code = eb_read_text(binfo->book, binfo->appendix, NULL, 
					  NULL, MAXLEN_TEXT, text, &len);
		if (error_code != EB_SUCCESS) {
			fprintf(stderr, "failed to read text : %s\n",
				eb_error_message(error_code));
			return(error_code);
		}
		text[len] = '\0';

/*
		g_print("page = 0x%0x, offset = 0x%0x\n", current_position.page,
			current_position.offset);
*/
//		g_print("heading = %s\n\ntext = %s\n\n", heading, text);

		// 全文検索する

		if(check_match(text, word) == 0){

			hit_count ++;


/*
			error_code = eb_seek_text(binfo->book, &current_position);
			if (error_code != EB_SUCCESS) {
				fprintf(stderr, "failed to seek text, %s\n",
					eb_error_message(error_code));
				return(error_code);
			}

			error_code = eb_read_text(binfo->book, binfo->appendix, &text_hookset, 
						  NULL, MAXLEN_TEXT, text, &len);
			if (error_code != EB_SUCCESS) {
				fprintf(stderr, "failed to read text : %s\n",
					eb_error_message(error_code));
				return(error_code);
			}
			text[len] = '\0';
*/

			rp = (SEARCH_RESULT *)calloc(sizeof(SEARCH_RESULT),1);
			if(rp == NULL){
				fprintf(stderr, "No memory\n");
				exit(1);
			}

			rp->heading = strdup(heading);
			rp->book_info = binfo;
			rp->search_method = method;
		
			rp->pos_heading = current_position;
			rp->pos_text = current_position;
			
			search_result = g_list_append(search_result, rp);

//			g_print("heading = %s\n\ntext = %s\n\n", heading, text);
		
		}

		error_code = eb_forward_text(binfo->book, NULL);
		if (error_code == EB_ERR_END_OF_CONTENT) {
//			g_print("EB_ERR_END_OF_CONTENT\n");
			break;
		}
		else if (error_code != EB_SUCCESS) {
			fprintf(stderr, "failed to forward text, %s\n",
				eb_error_message(error_code));
			return(error_code);
		}

		error_code = eb_tell_text(binfo->book, &next_position);
		if(error_code != EB_SUCCESS){
			fprintf(stderr, "failed to tell text : %s\n",
				eb_error_message(error_code));
			return(error_code);
		}

		if((current_position.page == next_position.page) &&
		   (current_position.offset == next_position.offset)){
/*
			if(next_position.offset == 2047){
				next_position.page = next_position.page + 1;
				next_position.offset = 0;
			} else {
				next_position.offset ++;
			}
*/
			break;
		}

		current_position = next_position;

	}

//	g_print("total %d searched, %d hits\n", i+1, hit_count);

	return(error_code);
}

static gint ebook_full_heading_search(binfo, word){
}



syntax highlighted by Code2HTML, v. 0.9.1