git repos / blockattack-game

source/code/listFiles.cpp

browsing at commit = 021de090b3cd9c28d0e15a0cac41620e1b079628

raw · blame · history

/*
===========================================================================
blockattack - Block Attack - Rise of the Blocks
Copyright (C) 2005-2012 Poul Sander

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see http://www.gnu.org/licenses/

Source information and contacts persons can be found at
http://blockattack.net
===========================================================================
*/

/*
listFiles.cpp
*/

#include "listFiles.h"

using namespace std;


void ListFiles::setDirectory(const string& directory) {
	filenames.clear();
#if defined(_WIN32)
	DWORD dwError;
	string directory2 = directory+"/*";
	hFind = FindFirstFile(directory2.c_str(), &FindFileData);
	if (hFind == INVALID_HANDLE_VALUE) {
		cout << "Invalid file handle. Error is " << GetLastError() << endl;
	}
	else {
		filenames.push_back(FindFileData.cFileName);
		cout << "File: " << FindFileData.cFileName << endl;
		while ((FindNextFile(hFind, &FindFileData) != 0) && FindFileData.cFileName[0]!='.') {
			filenames.push_back(FindFileData.cFileName);
			cout << "File: " << FindFileData.cFileName << endl;
		}

		dwError = GetLastError();
		FindClose(hFind);
		if (dwError != ERROR_NO_MORE_FILES) {
			cout << "FindNextFile error. Error is " << dwError << endl;
		}
	}
#elif defined(__unix__)
	DIR* DirectoryPointer;
	struct dirent* dp;
	//cout << "Will look in: " << directory << endl;
	DirectoryPointer = opendir(directory.c_str());
	if (!DirectoryPointer) {
		return;
	}
	while (dp=readdir(DirectoryPointer)) {
		string name = (string)(char*)dp->d_name;
		if (!isInList(name) && name[0]!='.' ) {
			filenames.push_back(name);
		}
	}
	closedir(DirectoryPointer);


#endif
	startFileNr=FIRST_FILE;
	//Put code here
}

bool ListFiles::isInList(const string& name) {
	for (int i=0; i< filenames.size(); i++) {
		if (name == filenames.at(i) ) {
			return true;
		}
	}
	return false;
}

void ListFiles::setDirectory2(const string& dic) {
#if defined(__unix__)
	DIR* DirectoryPointer;
	struct dirent* dp;
	//cout << "Will look in: " << dic << endl;
	DirectoryPointer = opendir(dic.c_str());
	if (!DirectoryPointer) {
		return;
	}
	while (dp=readdir(DirectoryPointer)) {
		string name = (string)(char*)dp->d_name;
		if (!isInList(name) && name != "." && name != "..") {
			filenames.push_back(name);
		}
	}
	closedir(DirectoryPointer);

	startFileNr=FIRST_FILE;
#endif
}

string ListFiles::getFileName(int nr) {
	if (startFileNr+nr<filenames.size()) {
		return filenames[startFileNr+nr];
	}
	else {
		return "";
	}
}

bool ListFiles::fileExists(int nr) {
	string emptyString="";
	if (startFileNr+nr<filenames.size()) {
		if (filenames[startFileNr+nr]==emptyString) {
			return false;
		}
		else {
			return true;
		}
	}
	else {
		return false;
	}
}

void ListFiles::back() {
	if (startFileNr>FIRST_FILE) {
		startFileNr = startFileNr-10;
	}
	if (startFileNr<FIRST_FILE) {
		startFileNr = FIRST_FILE;
	}
}

void ListFiles::forward() {
	if (startFileNr<filenames.size()-FIRST_FILE) {
		startFileNr = startFileNr+10;
	}
}

string ListFiles::getRandom() {
	int numberOfFiles = filenames.size()-FIRST_FILE+1;
	if (numberOfFiles<1) {
		return "";
	}
	int select = rand()%numberOfFiles;
	return filenames[FIRST_FILE+select];
}