// Common, group Files
// Copyright Alexander Liss

#include <string.h>
#include "findfile.h"


	// FindFile

FindFile::FindFile(char * mask):search_handle(-1),first(true)
{
	search_handle=_findfirst(mask,&find_data);
}

FindFile::~FindFile()
{
	if(search_handle==-1) return;
	_findclose(search_handle);
}


int FindFile::name(StrBuffer& z)
{
	if(!first) return -1;

	if(search_handle==-1) return 1;

	z.set(find_data.name);

	first=false;

	return 0;
}


int FindFile::next_name(StrBuffer& z)
{
	if(first || search_handle==-1) return -1;

	int g=_findnext(search_handle,&find_data);

	if(g==-1) return 1;

	z.set(find_data.name);

	return 0;
}

	// FUNCTIONS

int find_file(StrBuffer& found_name, const char *name_mask,const char *directory)
{
	StrBuffer file_mask(strlen(directory)+strlen(name_mask) + 10);
	file_mask.set(directory);
	file_mask.append("\\");
	file_mask.append(name_mask);

	_finddata_t find_data;

	long search_handle=-1;

	search_handle=_findfirst(file_mask.data,&find_data);

	if(search_handle==-1) return 1;

	found_name.set(find_data.name);

	int g=_findclose(search_handle);

	if(g) return 2;

	return 0;
}

int count_files(long& number, long limit, const char *name_mask,const char *directory)
{
	StrBuffer file_mask(strlen(directory)+strlen(name_mask) + 10);
	file_mask.set(directory);
	file_mask.append("\\");
	file_mask.append(name_mask);

	_finddata_t find_data;

	long search_handle=-1;

	number=0;

	search_handle=_findfirst(file_mask.data,&find_data);

	if(search_handle==-1) return 1;

	number=1;

	for(;number<limit+2;++number)
	{
		int g=_findnext(search_handle,&find_data);

		if(g==-1) break;
	}

	int g=_findclose(search_handle);

	if(g) return 2;

	return 0;
}

int remove_files(long limit,const char *name_mask,const char *directory)
{
	StrBuffer file_mask(strlen(directory)+strlen(name_mask) + 10);
	file_mask.set(directory);
	file_mask.append("\\");
	file_mask.append(name_mask);

	_finddata_t find_data;

	long search_handle=-1;

	search_handle=_findfirst(file_mask.data,&find_data);

	if(search_handle==-1) return 1;

	for(long number=0;number<limit+1;++number)
	{
		int g=_findnext(search_handle,&find_data);

		if(g==-1) break;

		// DELETE FILE
		StrBuffer path(strlen(directory)+strlen(find_data.name) + 10);
		path.set(directory);
		path.append("\\");
		path.append(find_data.name);
		remove(path.data);
	}

	int g=_findclose(search_handle);

	if(g) return 2;

	return 0;

}