void ResourceManager::dumpResourcesList(const Common::UString &fileName) const { Common::DumpFile file; if (!file.open(fileName)) throw Common::Exception(Common::kOpenError); file.writeString(" Name | Size \n"); file.writeString("-------------------------------------|-------------\n"); for (ResourceMap::const_iterator itName = _resources.begin(); itName != _resources.end(); ++itName) { for (ResourceTypeMap::const_iterator itType = itName->second.begin(); itType != itName->second.end(); ++itType) { if (itType->second.empty()) continue; const Resource &resource = itType->second.back(); const Common::UString &name = itName->first; const Common::UString ext = setFileType("", resource.type); const uint32 size = getResourceSize(resource); const Common::UString line = Common::UString::sprintf("%32s%4s | %12d\n", name.c_str(), ext.c_str(), size); file.writeString(line); } } file.flush(); if (file.err()) throw Common::Exception("Write error"); file.close(); }
void ResourceManager::dumpResourcesList(const Common::UString &fileName) const { Common::DumpFile file; if (!file.open(fileName)) throw Common::Exception(Common::kOpenError); file.writeString(" Name | Hash | Size \n"); file.writeString("-------------------------------------|--------------------|-------------\n"); for (ResourceMap::const_iterator r = _resources.begin(); r != _resources.end(); ++r) { if (r->second.empty()) continue; const Resource &res = r->second.back(); const Common::UString &name = res.name; const Common::UString ext = TypeMan.setFileType("", res.type); const uint64 hash = r->first; const uint32 size = getResourceSize(res); const Common::UString line = Common::UString::sprintf("%32s%4s | 0x%016llX | %12d\n", name.c_str(), ext.c_str(), (unsigned long long) hash, size); file.writeString(line); } file.flush(); if (file.err()) throw Common::Exception("Write error"); file.close(); }
static bool writeBMP(const Common::UString &filename, const byte *data, int width, int height) { if ((width <= 0) || (height <= 0) || !data) return false; Common::DumpFile file; if (!file.open(filename)) return false; // The pitch of the output has to be divisible by 4, so // we output zeroes to make the pitch that far. int extraDataSize = width & 3; int imageSize = height * (width + extraDataSize) * 3; // Main bitmap header file.writeByte('B'); file.writeByte('M'); file.writeUint32LE(14 + 40 + imageSize); // Size file.writeUint32LE(0); // reserved file.writeUint32LE(14 + 40); // Image offset after both headers // v3 header file.writeUint32LE(40); file.writeUint32LE(width); file.writeUint32LE(height); file.writeUint16LE(1); file.writeUint16LE(24); file.writeUint32LE(0); file.writeUint32LE(imageSize); file.writeUint32LE(72); file.writeUint32LE(72); file.writeUint32LE(0); file.writeUint32LE(0); if (extraDataSize != 0) { // Dump, making sure the pitch is correct while (height--) { file.write(data, width * 3); // Ensure we're on a 4-byte boundary for (int i = 0; i < extraDataSize; i++) file.writeByte(0); data += width * 3; } } else { // Dump directly (can do all at once here because the data // is already good for BMP output) file.write(data, width * height * 3); } if (!file.flush() || file.err()) return false; file.close(); return true; }
bool BdfFont::cacheFontData(const BdfFont &font, const Common::String &filename) { Common::DumpFile cacheFile; if (!cacheFile.open(filename)) { warning("BdfFont::cacheFontData: Couldn't open file '%s' for writing", filename.c_str()); return false; } const BdfFontData &data = font._data; cacheFile.writeUint32BE(BDF_FONTCACHE_TAG); cacheFile.writeUint32BE(BDF_FONTCACHE_VERSION); cacheFile.writeUint16BE(data.maxAdvance); cacheFile.writeByte(data.height); cacheFile.writeByte(data.defaultBox.width); cacheFile.writeByte(data.defaultBox.height); cacheFile.writeSByte(data.defaultBox.xOffset); cacheFile.writeSByte(data.defaultBox.yOffset); cacheFile.writeByte(data.ascent); cacheFile.writeUint16BE(data.firstCharacter); cacheFile.writeSint16BE(data.defaultCharacter); cacheFile.writeUint16BE(data.numCharacters); for (int i = 0; i < data.numCharacters; ++i) { const BdfBoundingBox &box = data.boxes ? data.boxes[i] : data.defaultBox; if (data.bitmaps[i]) { const int bytes = ((box.width + 7) / 8) * box.height; cacheFile.writeUint32BE(bytes); cacheFile.write(data.bitmaps[i], bytes); } else { cacheFile.writeUint32BE(0); } } if (data.advances) { cacheFile.writeByte(0xFF); cacheFile.write(data.advances, data.numCharacters); } else { cacheFile.writeByte(0x00); } if (data.boxes) { cacheFile.writeByte(0xFF); for (int i = 0; i < data.numCharacters; ++i) { const BdfBoundingBox &box = data.boxes[i]; cacheFile.writeByte(box.width); cacheFile.writeByte(box.height); cacheFile.writeSByte(box.xOffset); cacheFile.writeSByte(box.yOffset); } } else { cacheFile.writeByte(0x00); } return !cacheFile.err(); }
bool NewFont::cacheFontData(const NewFont &font, const Common::String &filename) { Common::DumpFile cacheFile; if (!cacheFile.open(filename)) { warning("Couldn't open file '%s' for writing", filename.c_str()); return false; } cacheFile.writeUint16BE(font.desc.maxwidth); cacheFile.writeUint16BE(font.desc.height); cacheFile.writeUint16BE(font.desc.fbbw); cacheFile.writeUint16BE(font.desc.fbbh); cacheFile.writeSint16BE(font.desc.fbbx); cacheFile.writeSint16BE(font.desc.fbby); cacheFile.writeUint16BE(font.desc.ascent); cacheFile.writeUint16BE(font.desc.firstchar); cacheFile.writeUint16BE(font.desc.size); cacheFile.writeUint16BE(font.desc.defaultchar); cacheFile.writeUint32BE(font.desc.bits_size); for (long i = 0; i < font.desc.bits_size; ++i) { cacheFile.writeUint16BE(font.desc.bits[i]); } if (font.desc.offset) { cacheFile.writeByte(1); for (int i = 0; i < font.desc.size; ++i) { cacheFile.writeUint32BE(font.desc.offset[i]); } } else { cacheFile.writeByte(0); } if (font.desc.width) { cacheFile.writeByte(1); for (int i = 0; i < font.desc.size; ++i) { cacheFile.writeByte(font.desc.width[i]); } } else { cacheFile.writeByte(0); } if (font.desc.bbx) { cacheFile.writeByte(1); for (int i = 0; i < font.desc.size; ++i) { cacheFile.writeByte(font.desc.bbx[i].w); cacheFile.writeByte(font.desc.bbx[i].h); cacheFile.writeByte(font.desc.bbx[i].x); cacheFile.writeByte(font.desc.bbx[i].y); } } else { cacheFile.writeByte(0); } return !cacheFile.err(); }
void dumpStream(Common::SeekableReadStream &stream, const Common::UString &fileName) { Common::DumpFile file; if (!file.open(fileName)) throw Common::Exception(Common::kOpenError); file.writeStream(stream); file.flush(); if (file.err()) throw Common::Exception(Common::kWriteError); file.close(); }
bool dumpStream(Common::SeekableReadStream &stream, const Common::UString &fileName) { Common::DumpFile file; if (!file.open(fileName)) return false; uint32 pos = stream.pos(); stream.seek(0); file.writeStream(stream); file.flush(); bool error = file.err(); stream.seek(pos); file.close(); return !error; }
bool writeBit8u(MT32Emu::Bit8u out) { _out.writeByte(out); return !_out.err(); }