コード例 #1
0
ファイル: swimage.cpp プロジェクト: AdamRi/scummvm-pink
SWImage::SWImage(const Common::String &filename, bool &result) :
	_imageDataPtr(0),
	_width(0),
	_height(0) {
	result = false;

	PackageManager *pPackage = Kernel::getInstance()->getPackage();
	assert(pPackage);

	// Load file
	byte *pFileData;
	uint fileSize;
	pFileData = pPackage->getFile(filename, &fileSize);
	if (!pFileData) {
		error("File \"%s\" could not be loaded.", filename.c_str());
		return;
	}

	// Uncompress the image
	int pitch;
	byte *pUncompressedData;
	if (!ImgLoader::decodePNGImage(pFileData, fileSize, pUncompressedData, _width, _height, pitch)) {
		error("Could not decode image.");
		return;
	}

	// Cleanup FileData
	delete[] pFileData;

	_imageDataPtr = (uint *)pUncompressedData;

	result = true;
	return;
}
コード例 #2
0
ファイル: artistlib.cpp プロジェクト: sunxfancy/artist
static int LoadPackage(lua_State *L) {
	const char* str = lua_tostring(L,-1);
	PackageManager* p = App::getPackageManager();
	p->LoadPackage(str);
	lua_pop(L,1);
	return 0;
}
コード例 #3
0
FontResource::FontResource(Kernel *pKernel, const Common::String &fileName) :
	_pKernel(pKernel),
	_valid(false),
	Resource(fileName, Resource::TYPE_FONT),
	Common::XMLParser() {

	// Get a pointer to the package manager
	assert(_pKernel);
	PackageManager *pPackage = _pKernel->getPackage();
	assert(pPackage);

	// Load the contents of the file
	uint fileSize;
	char *xmlData = pPackage->getXmlFile(getFileName(), &fileSize);
	if (!xmlData) {
		error("Could not read \"%s\".", getFileName().c_str());
		return;
	}

	// Parse the contents
	if (!loadBuffer((const byte *)xmlData, fileSize))
		return;

	_valid = parse();
	close();
	free(xmlData);
}
コード例 #4
0
bool FontResource::parserCallback_font(ParserNode *node) {
	// Get the attributes of the font
	Common::String bitmapFilename = node->values["bitmap"];

	if (!parseIntegerKey(node->values["lineheight"], 1, &_lineHeight)) {
		warning("Illegal or missing lineheight attribute in <font> tag in \"%s\". Assuming default (\"%d\").",
		                 getFileName().c_str(), DEFAULT_LINEHEIGHT);
		_lineHeight = DEFAULT_LINEHEIGHT;
	}

	if (!parseIntegerKey(node->values["gap"], 1, &_gapWidth)) {
		warning("Illegal or missing gap attribute in <font> tag in \"%s\". Assuming default (\"%d\").",
		                 getFileName().c_str(), DEFAULT_GAPWIDTH);
		_gapWidth = DEFAULT_GAPWIDTH;
	}
	
	// Get a reference to the package manager
	assert(_pKernel);
	PackageManager *pPackage = _pKernel->getPackage();
	assert(pPackage);

	// Get the full path and filename for the bitmap resource
	_bitmapFileName = pPackage->getAbsolutePath(bitmapFilename);
	if (_bitmapFileName == "") {
		error("Image file \"%s\" was specified in <font> tag of \"%s\" but could not be found.",
		               _bitmapFileName.c_str(), getFileName().c_str());
	}

	// Pre-cache the resource
	if (!_pKernel->getResourceManager()->precacheResource(_bitmapFileName)) {
		error("Could not precache \"%s\".", _bitmapFileName.c_str());
	}

	return true;
}
コード例 #5
0
ファイル: artistlib.cpp プロジェクト: sunxfancy/artist
static int AddSearchPath(lua_State *L) {
	const char* str = lua_tostring(L,-1);
	PackageManager* p = App::getPackageManager();
	p->addSearchPath(str);
	lua_pop(L,1);
	return 0;
}
コード例 #6
0
ファイル: Project.cpp プロジェクト: nbtdev/teardrop
PackageManager* Project::createPackage()
{
	PackageManager* pkgMgr = new PackageManager();
	pkgMgr->metadata()->setName("Untitled Package");
	mPackageManagers.push_back(pkgMgr);
	return pkgMgr;
}
コード例 #7
0
int
main(void)
{
	PackageManager app;
	app.Run();

	return 0;
}
コード例 #8
0
ファイル: resource.cpp プロジェクト: AReim1982/scummvm
Resource::Resource(const Common::String &fileName, RESOURCE_TYPES type) :
	_type(type),
	_refCount(0) {
	PackageManager *pPM = Kernel::getInstance()->getPackage();
	assert(pPM);

	_fileName = pPM->getAbsolutePath(fileName);
}
コード例 #9
0
ファイル: renderedimage.cpp プロジェクト: andrew889/scummvm
RenderedImage::RenderedImage(const Common::String &filename, bool &result) :
	_data(0),
	_width(0),
	_height(0),
	_isTransparent(true) {
	result = false;

	PackageManager *pPackage = Kernel::getInstance()->getPackage();
	assert(pPackage);

	_backSurface = Kernel::getInstance()->getGfx()->getSurface();

	// Load file
	byte *pFileData;
	uint fileSize;

	bool isPNG = true;

	if (filename.hasPrefix("/saves")) {
		pFileData = readSavegameThumbnail(filename, fileSize, isPNG);
	} else {
		pFileData = pPackage->getFile(filename, &fileSize);
	}

	if (!pFileData) {
		error("File \"%s\" could not be loaded.", filename.c_str());
		return;
	}

	// Uncompress the image
	int pitch;
	if (isPNG)
		result = ImgLoader::decodePNGImage(pFileData, fileSize, _data, _width, _height, pitch);
	else
		result = ImgLoader::decodeThumbnailImage(pFileData, fileSize, _data, _width, _height, pitch);

	if (!result) {
		error("Could not decode image.");
		delete[] pFileData;
		return;
	}

	// Cleanup FileData
	delete[] pFileData;

	_doCleanup = true;

#if defined(SCUMM_LITTLE_ENDIAN)
	// Makes sense for LE only at the moment
	checkForTransparency();
#endif

	return;
}
コード例 #10
0
ファイル: main.cpp プロジェクト: zukoo/MScProject
int              main(int ac, char **av) {
  PackageManager pkgMan;
  JsonParser     parser;
  std::string    cmd, topic, type;
  int            cpt;
  int            size = parser.getSize();;

  while (parser.parseNextPackage(cmd, topic, type, cpt)) {
    std::cout << "launch package:" << cmd << "   " << topic << "   " << type <<std::endl;
    pkgMan.launchPackage(cmd, topic, type);
    std::cout << "Package " << cpt << "/" << size << " launched..." << std::endl;
    sleep(2);
  }
  std::cout << std::endl << "<<< MscProject launched >>>" << std::endl << std::endl;
  return 0;
}
コード例 #11
0
ファイル: packagemanager.cpp プロジェクト: aldebaran/qilang
//throw on error
static ResolutionResult checkImport(const PackageManager& pm, const ParseResultPtr& pr, const std::string& pkgName, const CustomTypeExprNode* tnode, const std::string& type)
{
    PackagePtr pkg = pm.package(pkgName);
    NodePtr node = pkg->getExport(type);
    TypeKind kind;
    if (node) {
        switch (node->type()) {
        case NodeType_InterfaceDecl:
            kind = TypeKind_Interface;
            break;
        case NodeType_EnumDecl:
            kind = TypeKind_Enum;
            break;
        case NodeType_StructDecl:
            kind = TypeKind_Struct;
            break;
        default:
            pr->addDiag(Diagnostic(DiagnosticType_Error, "'" + type + "' in package '" + pkgName + "' is not a type", tnode->loc()));
            throw std::runtime_error("Not a type");
            break;
        }
        return ResolutionResult(pkgName, type, kind);
    }
    pr->addDiag(Diagnostic(DiagnosticType_Error, "Can't find '" + type + "' in package '" + pkgName + "'", tnode->loc()));
    throw std::runtime_error("Can't find import");
}
コード例 #12
0
ファイル: Project.cpp プロジェクト: nbtdev/teardrop
bool Project::write(ProgressFeedback* feedback)
{
	String pathname(mPath);
	pathname += PATHSEP;
	pathname += mName;
	pathname += ".project";

	TiXmlDocument doc;
	TiXmlDeclaration decl("1.0", "", "");
	doc.InsertEndChild(decl);

	TiXmlElement project("project");
	std::stringstream ss;
	ss << mVersion;
	std::string str(ss.str());
	project.SetAttribute("version", str.c_str());

	ss.str("");
	ss << mPackageManagers.size();
	str.assign(ss.str());
	project.SetAttribute("package_count", str.c_str());

	String packagePath(mPath);
	packagePath += "/packages/";

	for (PackageManagers::iterator it = mPackageManagers.begin(); it != mPackageManagers.end(); ++it) {
		PackageManager* pkgMgr = *it;

		TiXmlElement package("package");
		String name(pkgMgr->metadata()->getName());
		package.SetAttribute("name", name);

		name = pkgMgr->packageFilename();
		package.SetAttribute("filename", name);

		project.InsertEndChild(package);

		// write out the actual package file
		pkgMgr->save(packagePath);
	}

	doc.InsertEndChild(project);

	doc.SaveFile(pathname);

	return true;
}
コード例 #13
0
ファイル: PackageManager.cpp プロジェクト: artcom/asl
void
PackageManager::add(const PackageManager & theOther) {
    AC_TRACE << "add from package '" << theOther.getSearchPath() << "'";
    PackageList::const_iterator it = theOther._myPackages.begin();
    for (; it != theOther._myPackages.end(); ++it) {
        add(*it);
    }
}
コード例 #14
0
ファイル: sword25.cpp プロジェクト: AdamRi/scummvm-pink
bool Sword25Engine::loadPackages() {
	PackageManager *packageManagerPtr = Kernel::getInstance()->getPackage();
	assert(packageManagerPtr);

	// Load the main package
	if (!packageManagerPtr->loadPackage("data.b25c", "/"))
		return false;

	// Get the contents of the main program directory and sort them alphabetically
	Common::FSNode dir(ConfMan.get("path"));
	Common::FSList files;
	if (!dir.isDirectory() || !dir.getChildren(files, Common::FSNode::kListAll)) {
		warning("Game data path does not exist or is not a directory");
		return false;
	}

	Common::sort(files.begin(), files.end());

	// Identify all patch packages
	// The filename of patch packages must have the form patch??.b25c, with the question marks
	// are placeholders for numbers.
	// Since the filenames have been sorted, patches are mounted with low numbers first, through
	// to ones with high numbers. This is important, because newly mount packages overwrite
	// existing files in the virtual file system, if they include files with the same name.
	for (Common::FSList::const_iterator it = files.begin(); it != files.end(); ++it) {
		if (it->getName().matchString("patch???.b25c", true))
			if (!packageManagerPtr->loadPackage(it->getName(), "/"))
				return false;
	}

	// Identify and mount all language packages
	// The filename of the packages have the form lang_*.b25c (eg. lang_de.b25c)
	for (Common::FSList::const_iterator it = files.begin(); it != files.end(); ++it) {
		if (it->getName().matchString("lang_*.b25c", true))
			if (!packageManagerPtr->loadPackage(it->getName(), "/"))
				return false;
	}

	return true;
}
コード例 #15
0
ファイル: swimage.cpp プロジェクト: Templier/scummvm-test
SWImage::SWImage(const Common::String &filename, bool &result) :
	_imageDataPtr(0),
	_width(0),
	_height(0) {
	result = false;

	PackageManager *pPackage = Kernel::getInstance()->getPackage();
	assert(pPackage);

	// Datei laden
	byte *pFileData;
	uint fileSize;
	pFileData = pPackage->getFile(filename, &fileSize);
	if (!pFileData) {
		error("File \"%s\" could not be loaded.", filename.c_str());
		return;
	}

	// Bildeigenschaften bestimmen
	int pitch;
	if (!PNGLoader::imageProperties(pFileData, fileSize, _width, _height)) {
		error("Could not read image properties.");
		return;
	}

	// Das Bild dekomprimieren
	byte *pUncompressedData;
	if (!PNGLoader::decodeImage(pFileData, fileSize, pUncompressedData, _width, _height, pitch)) {
		error("Could not decode image.");
		return;
	}

	// Dateidaten freigeben
	delete[] pFileData;

	_imageDataPtr = (uint *)pUncompressedData;

	result = true;
	return;
}
コード例 #16
0
ファイル: luascript.cpp プロジェクト: AdamRi/scummvm-pink
bool LuaScriptEngine::executeFile(const Common::String &fileName) {
#ifdef DEBUG
	int __startStackDepth = lua_gettop(_state);
#endif
	debug(2, "LuaScriptEngine::executeFile(%s)", fileName.c_str());

	// Get a pointer to the package manager
	PackageManager *pPackage = Kernel::getInstance()->getPackage();
	assert(pPackage);

	// File read
	uint fileSize;
	byte *fileData = pPackage->getFile(fileName, &fileSize);
	if (!fileData) {
		error("Couldn't read \"%s\".", fileName.c_str());
#ifdef DEBUG
		assert(__startStackDepth == lua_gettop(_state));
#endif
		return false;
	}

	// Run the file content
	if (!executeBuffer(fileData, fileSize, "@" + pPackage->getAbsolutePath(fileName))) {
		// Release file buffer
		delete[] fileData;
#ifdef DEBUG
		assert(__startStackDepth == lua_gettop(_state));
#endif
		return false;
	}

	// Release file buffer
	delete[] fileData;

#ifdef DEBUG
	assert(__startStackDepth == lua_gettop(_state));
#endif

	return true;
}
コード例 #17
0
ファイル: sword25.cpp プロジェクト: AdamRi/scummvm-pink
Common::Error Sword25Engine::appStart() {
	// Initialize the graphics mode to ARGB8888
	Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24);
	initGraphics(800, 600, true, &format);
	if (format != g_system->getScreenFormat())
		return Common::kUnsupportedColorMode;

	// Kernel initialization
	if (!Kernel::getInstance()->getInitSuccess()) {
		error("Kernel initialization failed.");
		return Common::kUnknownError;
	}

	// Load packages
	PackageManager *packageManagerPtr = Kernel::getInstance()->getPackage();
	if (getGameFlags() & GF_EXTRACTED) {
		if (!packageManagerPtr->loadDirectoryAsPackage(ConfMan.get("path"), "/"))
			return Common::kUnknownError;
	} else {
		if (!loadPackages())
			return Common::kUnknownError;
	}

	// Pass the command line to the script engine.
	ScriptEngine *scriptPtr = Kernel::getInstance()->getScript();
	if (!scriptPtr) {
		error("Script intialization failed.");
		return Common::kUnknownError;
	}

	// Set the game target for use in savegames
	setGameTarget(_targetName.c_str());

	Common::StringArray commandParameters;
	scriptPtr->setCommandLine(commandParameters);

	return Common::kNoError;
}
コード例 #18
0
AutoPtr<IDrawable> AppSecurityPermissions::MyPermissionGroupInfo::LoadGroupIcon(
    /* [in] */ PackageManager pm)
{
    if (icon != 0) {
        return loadIcon(pm);
    } else {
        ApplicationInfo appInfo;
        try {
            appInfo = pm.getApplicationInfo(packageName, 0);
            return appInfo.loadIcon(pm);
        } catch (NameNotFoundException e) {
        }
    }
    return NULL;
}
コード例 #19
0
ファイル: artistlib.cpp プロジェクト: sunxfancy/artist
static int RemoveAllPath(lua_State *L) {
	PackageManager* p = App::getPackageManager();
	p->removeAllPath();
	return 0;
}
コード例 #20
0
ファイル: artistlib.cpp プロジェクト: sunxfancy/artist
static int SearchPackages(lua_State *L) {
	PackageManager* p = App::getPackageManager();
	p->Search();
	return 0;
}
コード例 #21
0
ファイル: Project.cpp プロジェクト: nbtdev/teardrop
bool Project::read(ProgressFeedback* feedback)
{
	String pathname(mPath);
	pathname += PATHSEP;
	pathname += mName;
	pathname += ".project";

	TiXmlDocument doc;
	doc.LoadFile(pathname);

	updateFeedback(feedback);

	if (doc.Error()) {
		return false;
	}

	// otherwise, read project file
	TiXmlElement* root = doc.RootElement();

	// TODO: check version compatibility
	const char* nPackageAttr = root->Attribute("package_count");
	int nPkg = -1;
	if (nPackageAttr)
		nPkg = atoi(nPackageAttr);

	TiXmlElement* package = root->FirstChildElement("package");

	// for deferred object-reference resolution
	DeferredObjectResolves deferred;
	ObjectIdToObject lut;

	// for metadata thumbnail loading
	std::list<Metadata*> metaList;

	int p = 0;
	while (package) {
		const char* name = package->Attribute("name");
		const char* filename = package->Attribute("filename");

		std::string pkgInfoText("Loading Package: ");
		updateFeedback(feedback, pkgInfoText.c_str());

		if (name && filename) {
			pkgInfoText.append(name);

			PackageManager* pkgMgr = new PackageManager();
			pkgMgr->metadata()->setName(name);

			String path(mPath);
			path += "/packages/";
			pkgMgr->load(path, deferred, lut);

			// add package metadata to list to post-process
			pkgMgr->getAllMetadata(metaList);

			mPackageManagers.push_back(pkgMgr);
			updateFeedback(feedback, int(float(++p)/float(nPkg)*100.f), pkgInfoText.c_str());
		}

		package = package->NextSiblingElement("package");
	}

	// then do Phase 2 load (object reference resolution)
	for (DeferredObjectResolves::iterator it = deferred.begin(); it != deferred.end(); ++it) {
		DeferredResolution& d = *it;
		ObjectIdToObject::iterator o = lut.find(d.mUUID);
		if (o != lut.end()) {
			d.mProp->setData(d.mObject, o->second);
		}
	}

	// Phase 3 -- initialize all objects in the project
	for (PackageManagers::iterator it = mPackageManagers.begin(); it != mPackageManagers.end(); ++it) {
		(*it)->initializeAllObjects();
	}

	// load all thumbnails in parallel
	tbb::task* dummy = new(tbb::task::allocate_root()) DummyTask;
	dummy->set_ref_count(metaList.size() + 1);
	for (std::list<Metadata*>::iterator it = metaList.begin(); it != metaList.end(); ++it) {
		tbb::task* t = new(dummy->allocate_child()) ThumbnailTask(*it);
		dummy->spawn(*t);
	}

	dummy->wait_for_all();
	return true;
}
コード例 #22
0
ファイル: Project.cpp プロジェクト: nbtdev/teardrop
PackageManager* Project::addPackage(const char* packagePath)
{
	// verify that the package's path is our package directory; if not, copy the 
	// package file to our packages dir first and change the path
	String packagesDir(mPath);
	packagesDir += "/packages/";

	String baseName;
	FileSystem::baseName(baseName, packagePath);

	String packageDir;
	FileSystem::directoryName(packageDir, packagePath);
	
	if (!FileSystem::isSamePath(packagesDir, packageDir)) {
		String fileName;
		FileSystem::fileName(fileName, packagePath);
		
		String newPackagePath(packagesDir);
		newPackagePath.append("/");
		newPackagePath.append(fileName);
		
		if (!FileSystem::copyFile(packagePath, newPackagePath)) {
			// then what?
			return 0;
		}
	}

	PackageManager* pkgMgr = new PackageManager;
	pkgMgr->metadata()->setName(baseName);

	DeferredObjectResolves deferred;
	ObjectIdToObject lut;

	if (!pkgMgr->load(packagesDir, deferred, lut)) {
		delete pkgMgr;
		return 0;
	}

	mPackageManagers.push_back(pkgMgr);

	// then do Phase 2 load (object reference resolution)
	for (DeferredObjectResolves::iterator it = deferred.begin(); it != deferred.end(); ++it) {
		DeferredResolution& d = *it;
		ObjectIdToObject::iterator o = lut.find(d.mUUID);
		if (o != lut.end()) {
			d.mProp->setData(d.mObject, o->second);
		}
	}

	std::list<Metadata*> metaList;
	pkgMgr->getAllMetadata(metaList);

	// load all thumbnails in parallel
	tbb::task* dummy = new(tbb::task::allocate_root()) DummyTask;
	dummy->set_ref_count(metaList.size() + 1);

	for (std::list<Metadata*>::iterator it = metaList.begin(); it != metaList.end(); ++it) {
		tbb::task* t = new(dummy->allocate_child()) ThumbnailTask(*it);
		dummy->spawn(*t);
	}
	dummy->wait_for_all();

	return pkgMgr;
}