bool eFileTypeZIP::Open(const char* name) const
{
	char contain_path[xIo::MAX_PATH_LEN];
	char contain_name[xIo::MAX_PATH_LEN];
	if(Contain(name, contain_path, contain_name))
	{
		unzFile h = unzOpen64(contain_path);
		if(!h)
			return false;
		bool ok = false;
		if(unzLocateFile(h, contain_name, 0) == UNZ_OK)
		{
			ok = OpenCurrent(h);
		}
		unzClose(h);
		return ok;
	}
	char opened_name[xIo::MAX_PATH_LEN];
	bool ok = Open(unzOpen64(name), opened_name);
	if(ok)
	{
		char full_name[xIo::MAX_PATH_LEN];
		strcpy(full_name, name);
		strcat(full_name, "/");
		strcat(full_name, opened_name);
		OpLastFile(full_name);
	}
	return ok;
}
static void Init(const char* path)
{
	const char* res = "/";
	OpLastFile(res);
//	xIo::SetResourcePath(res);
	char buf[xIo::MAX_PATH_LEN];
	strcpy(buf, path);
	strcat(buf, "/");
	xIo::SetProfilePath(buf);
	Handler()->OnInit();
	InitSound();
}
bool Init(const char* path)
{
	OpLastFile("A:\\GAME\\");
//	xIo::SetResourcePath(OpLastFolder());
	xIo::SetProfilePath(OpLastFolder());
//	xLog::SetLogPath(OpLastFolder());
	Handler()->OnInit();
#ifdef SIM_VERSION
	Handler()->OnOpenFile(path);
#endif//SIM_VERSION
	return true;
}
bool eSpeccyHandler::OnSaveFile(const char* name)
{
	OpLastFile(name);
	const eFileType* t = eFileType::FindByName(name);
	if(!t)
		return false;

	char path[xIo::MAX_PATH_LEN];
	strcpy(path, name);
	int l = strlen(path);
	char* e = path + l;
	while(e > path && *e != '\\' && *e != '/')
		--e;
	*e = 0;
	if(xIo::PathCreate(path))
		return t->Store(name);
	return false;
}
bool eSpeccyHandler::OnOpenFile(const char* name, const void* data, size_t data_size)
{
	OpLastFile(name);
	return OpenFile(name, data, data_size);
}