本文整理汇总了C++中common::File类的典型用法代码示例。如果您正苦于以下问题:C++ File类的具体用法?C++ File怎么用?C++ File使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了File类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: findVolume
// AUDIOnnn.MAP contains 10-byte entries:
// Early format:
// w 5 bits resource type and 11 bits resource number
// dw 7 bits volume number and 25 bits offset
// dw size
// Later format:
// w nEntry
// dw offset+volume (as in resource.map)
// dw size
// ending with 10 0xFFs
int ResourceManager::readAudioMapSCI1(ResourceSource *map, bool unload) {
Common::File file;
if (!file.open(map->getLocationName()))
return SCI_ERROR_RESMAP_NOT_FOUND;
bool oldFormat = (file.readUint16LE() >> 11) == kResourceTypeAudio;
file.seek(0);
while (1) {
uint16 n = file.readUint16LE();
uint32 offset = file.readUint32LE();
uint32 size = file.readUint32LE();
if (file.eos() || file.err()) {
warning("Error while reading %s", map->getLocationName().c_str());
return SCI_ERROR_RESMAP_NOT_FOUND;
}
if (n == 0xffff)
break;
byte volume_nr;
if (oldFormat) {
n &= 0x07ff; // Mask out resource type
volume_nr = offset >> 25; // most significant 7 bits
offset &= 0x01ffffff; // least significant 25 bits
} else {
volume_nr = offset >> 28; // most significant 4 bits
offset &= 0x0fffffff; // least significant 28 bits
}
ResourceSource *src = findVolume(map, volume_nr);
if (src) {
if (unload)
removeAudioResource(ResourceId(kResourceTypeAudio, n));
else
addResource(ResourceId(kResourceTypeAudio, n), src, offset, size);
} else {
warning("Failed to find audio volume %i", volume_nr);
}
}
示例2: playMusic
void AGOSEngine::playMusic(uint16 music, uint16 track) {
stopMusic();
if (getPlatform() == Common::kPlatformAmiga) {
playModule(music);
} else if (getPlatform() == Common::kPlatformAtariST) {
// TODO: Add support for music formats used
} else {
_midi.setLoop(true); // Must do this BEFORE loading music.
char filename[15];
Common::File f;
sprintf(filename, "MOD%d.MUS", music);
f.open(filename);
if (f.isOpen() == false)
error("playMusic: Can't load music from '%s'", filename);
_midi.loadS1D(&f);
_midi.startTrack(0);
_midi.startTrack(track);
}
}
示例3: loadBmpArr
void TopMenu::loadBmpArr(Common::File &in) {
arraySize = in.readUint16BE();
delete arrayBmp;
arrayBmp = new Graphics::Surface *[arraySize * 2];
for (int i = 0; i < arraySize; i++) {
uint16 bmpSize = in.readUint16BE();
uint32 filPos = in.pos();
Common::SeekableSubReadStream stream(&in, filPos, filPos + bmpSize);
arrayBmp[i * 2] = Graphics::ImageDecoder::loadFile(stream, g_system->getOverlayFormat());
arrayBmp[i * 2 + 1] = new Graphics::Surface();
arrayBmp[i * 2 + 1]->create(arrayBmp[i * 2]->w * 2, arrayBmp[i * 2]->h * 2, arrayBmp[i * 2]->bytesPerPixel);
byte *src = (byte *)arrayBmp[i * 2]->pixels;
byte *dst = (byte *)arrayBmp[i * 2 + 1]->pixels;
for (int j = 0; j < arrayBmp[i * 2]->h; j++) {
src = (byte *)arrayBmp[i * 2]->getBasePtr(0, j);
dst = (byte *)arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2);
for (int k = arrayBmp[i * 2]->w; k > 0; k--) {
for (int m = arrayBmp[i * 2]->bytesPerPixel; m > 0; m--) {
*dst++ = *src++;
}
src -= arrayBmp[i * 2]->bytesPerPixel;
for (int m = arrayBmp[i * 2]->bytesPerPixel; m > 0; m--) {
*dst++ = *src++;
}
}
src = (byte *)arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2);
dst = (byte *)arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2 + 1);
for (int k = arrayBmp[i * 2 + 1]->pitch; k > 0; k--) {
*dst++ = *src++;
}
}
in.skip(bmpSize);
}
}
示例4: setAGIPal
//Gets AGIPAL Data
void GfxMgr::setAGIPal(int p0) {
//If 0 from savefile, do not use
if (p0 == 0)
return;
char filename[15];
sprintf(filename, "pal.%d", p0);
Common::File agipal;
if (!agipal.open(filename)) {
warning("Couldn't open AGIPAL palette file '%s'. Not changing palette", filename);
return; // Needed at least by Naturette 3 which uses AGIPAL but provides no palette files
}
//Chunk0 holds colors 0-7
agipal.read(&_agipalPalette[0], 24);
//Chunk1 is the same as the chunk0
//Chunk2 chunk holds colors 8-15
agipal.seek(24, SEEK_CUR);
agipal.read(&_agipalPalette[24], 24);
//Chunk3 is the same as the chunk2
//Chunks4-7 are duplicates of chunks0-3
if (agipal.eos() || agipal.err()) {
warning("Couldn't read AGIPAL palette from '%s'. Not changing palette", filename);
return;
}
// Use only the lowest 6 bits of each color component (Red, Green and Blue)
// because VGA used only 6 bits per color component (i.e. VGA had 18-bit colors).
// This should now be identical to the original AGIPAL-hack's behavior.
bool validVgaPalette = true;
for (int i = 0; i < 16 * 3; i++) {
if (_agipalPalette[i] >= (1 << 6)) {
_agipalPalette[i] &= 0x3F; // Leave only the lowest 6 bits of each color component
validVgaPalette = false;
}
}
if (!validVgaPalette)
warning("Invalid AGIPAL palette (Over 6 bits per color component) in '%s'. Using only the lowest 6 bits per color component", filename);
_agipalFileNum = p0;
initPalette(_agipalPalette);
gfxSetPalette();
debug(1, "Using AGIPAL palette from '%s'", filename);
}
示例5: writeStarfieldPoints2
void writeStarfieldPoints2() {
outputFile.seek(dataOffset);
const int OFFSETS[3] = { 0x5A2F28, 0x5A2CC8, 0x5A1CF8 };
for (int rootCtr = 0; rootCtr < 80; ++rootCtr) {
inputFile.seek(OFFSETS[_version] - FILE_DIFF[_version] + rootCtr * 8);
uint offset = inputFile.readUint32LE();
uint count = inputFile.readUint32LE();
outputFile.writeLong(count);
inputFile.seek(offset - FILE_DIFF[_version]);
outputFile.write(inputFile, count * 4 * 4);
}
uint size = outputFile.size() - dataOffset;
outputFile.write(inputFile, size);
writeEntryHeader("STARFIELD/POINTS2", dataOffset, size);
dataOffset += size;
}
示例6: loadExternalSounds
void World::loadExternalSounds(Common::String fname) {
Common::File in;
in.open(fname);
if (!in.isOpen()) {
warning("Cannot load sound file <%s>", fname.c_str());
return;
}
in.close();
Common::MacResManager resMan;
resMan.open(fname);
Common::MacResIDArray resArray;
Common::SeekableReadStream *res;
Common::MacResIDArray::const_iterator iter;
resArray = resMan.getResIDArray(MKTAG('A','S','N','D'));
for (iter = resArray.begin(); iter != resArray.end(); ++iter) {
res = resMan.getResource(MKTAG('A','S','N','D'), *iter);
addSound(new Sound(resMan.getResName(MKTAG('A','S','N','D'), *iter), res));
}
}
示例7: MemoryReadStream
Common::SeekableReadStream *ERFFile::getResource(uint32 index) const {
const IResource &res = getIResource(index);
if (res.unpackedSize == 0)
return new Common::MemoryReadStream(0, 0);
if (_flags & 0xF0)
throw Common::Exception("Unhandled ERF encryption");
Common::File erf;
open(erf);
if (!erf.seek(res.offset))
throw Common::Exception(Common::kSeekError);
byte *compressedData = new byte[res.packedSize];
if (erf.read(compressedData, res.packedSize) != res.packedSize) {
delete[] compressedData;
throw Common::Exception(Common::kReadError);
}
return decompress(compressedData, res.packedSize, res.unpackedSize);
}
示例8: loadVoiceFromVDB
bool FPSfx::loadVoiceFromVDB(Common::File &vdbFP) {
if (!_soundSupported)
return true;
switch (g_vm->_vdbCodec) {
case FPCODEC_ADPCM: {
uint32 size = vdbFP.readUint32LE();
uint32 rate = vdbFP.readUint32LE();
_rewindableStream = Audio::makeADPCMStream(vdbFP.readStream(size), DisposeAfterUse::YES, 0, Audio::kADPCMDVI, rate, 1);
}
break;
case FPCODEC_MP3 : {
#ifdef USE_MAD
uint32 size = vdbFP.readUint32LE();
_rewindableStream = Audio::makeMP3Stream(vdbFP.readStream(size), DisposeAfterUse::YES);
#else
return false;
#endif
}
break;
case FPCODEC_OGG : {
#ifdef USE_VORBIS
uint32 size = vdbFP.readUint32LE();
_rewindableStream = Audio::makeVorbisStream(vdbFP.readStream(size), DisposeAfterUse::YES);
#else
return false;
#endif
}
break;
case FPCODEC_FLAC : {
#ifdef USE_FLAC
uint32 size = vdbFP.readUint32LE();
_rewindableStream = Audio::makeFLACStream(vdbFP.readStream(size), DisposeAfterUse::YES);
#else
return false;
#endif
}
break;
default:
return false;
}
_isVoice = true;
_fileLoaded = true;
setVolume(62);
return true;
}
示例9: createVideoHandle
VideoHandle VideoManager::createVideoHandle(const Common::String &filename, uint16 x, uint16 y, bool loop, byte volume) {
// First, check to see if that video is already playing
for (uint32 i = 0; i < _videoStreams.size(); i++)
if (_videoStreams[i].filename == filename)
return i;
// Otherwise, create a new entry
VideoEntry entry;
entry.clear();
entry.video = new Video::QuickTimeDecoder();
entry.x = x;
entry.y = y;
entry.filename = filename;
entry.loop = loop;
entry.enabled = true;
Common::File *file = new Common::File();
if (!file->open(filename)) {
delete file;
return NULL_VID_HANDLE;
}
entry->loadStream(file);
entry->setVolume(volume);
entry->start();
// Search for any deleted videos so we can take a formerly used slot
for (uint32 i = 0; i < _videoStreams.size(); i++)
if (!_videoStreams[i].video) {
_videoStreams[i] = entry;
return i;
}
// Otherwise, just add it to the list
_videoStreams.push_back(entry);
return _videoStreams.size() - 1;
}
示例10: SeekableSubReadStream
Common::SeekableReadStream *ResMan::open(uint32 fileRef) {
// Get the information about the resource
ResInfo resInfo;
if (!getResInfo(fileRef, resInfo)) {
return NULL;
}
// Do we know the name of the required GJD?
if (resInfo.gjd >= _gjds.size()) {
error("Groovie::Resource: Unknown GJD %d", resInfo.gjd);
return NULL;
}
debugC(1, kGroovieDebugResource | kGroovieDebugAll, "Groovie::Resource: Opening resource 0x%04X (%s, %d, %d)", fileRef, _gjds[resInfo.gjd].c_str(), resInfo.offset, resInfo.size);
// Does it exist?
if (!Common::File::exists(_gjds[resInfo.gjd])) {
error("Groovie::Resource: %s not found", _gjds[resInfo.gjd].c_str());
return NULL;
}
// Open the pack file
Common::File *gjdFile = new Common::File();
if (!gjdFile->open(_gjds[resInfo.gjd].c_str())) {
delete gjdFile;
error("Groovie::Resource: Couldn't open %s", _gjds[resInfo.gjd].c_str());
return NULL;
}
// Save the used gjd file (except xmi and gamwav)
if (resInfo.gjd < 19) {
_lastGjd = resInfo.gjd;
}
// Returning the resource substream
return new Common::SeekableSubReadStream(gjdFile, resInfo.offset, resInfo.offset + resInfo.size, DisposeAfterUse::YES);
}
示例11: o_getcd
void Script::o_getcd() {
debugScript(1, true, "GETCD");
// By default set it to no CD available
int8 cd = -1;
// Try to open one file from each CD
Common::File cdfile;
if (cdfile.open("b.gjd")) {
cdfile.close();
cd = 1;
}
if (cdfile.open("at.gjd")) {
cdfile.close();
if (cd == 1) {
// Both CDs are available
cd = 0;
} else {
cd = 2;
}
}
setVariable(0x106, cd);
}
示例12: setAmiga
// Will try to set amiga palette by using "spal" file. If not found, we return false
bool GfxPalette::setAmiga() {
Common::File file;
if (file.open("spal")) {
for (int curColor = 0; curColor < 32; curColor++) {
byte byte1 = file.readByte();
byte byte2 = file.readByte();
if (file.eos())
error("Amiga palette file ends prematurely");
_sysPalette.colors[curColor].used = 1;
_sysPalette.colors[curColor].r = (byte1 & 0x0F) * 0x11;
_sysPalette.colors[curColor].g = ((byte2 & 0xF0) >> 4) * 0x11;
_sysPalette.colors[curColor].b = (byte2 & 0x0F) * 0x11;
}
// Directly set the palette, because setOnScreen() wont do a thing for amiga
copySysPaletteToScreen();
return true;
}
return false;
}
示例13: extractAndEncodeWAV
void CompressionTool::extractAndEncodeWAV(const char *outName, Common::File &input, AudioFormat compMode) {
unsigned int length;
char fbuf[2048];
size_t size;
input.seek(-4, SEEK_CUR);
length = input.readUint32LE();
length += 8;
input.seek(-8, SEEK_CUR);
/* Copy the WAV data to a temporary file */
Common::File f(outName, "wb");
while (length > 0) {
size = input.read_noThrow(fbuf, length > sizeof(fbuf) ? sizeof(fbuf) : length);
if (size <= 0)
break;
length -= (int)size;
f.write(fbuf, size);
}
f.close();
/* Convert the WAV temp file to OGG/MP3 */
encodeAudio(outName, false, -1, tempEncoded, compMode);
}
示例14: version
bool MD5Check::advanceCheck(int *pos, int *total) {
if (_iterator < 0) {
return false;
}
const MD5Sum &sum = (*_files)[_iterator++];
if (pos) {
*pos = _iterator;
}
if (total) {
*total = _files->size();
}
if ((uint32)_iterator == _files->size()) {
_iterator = -1;
}
Common::File file;
if (file.open(sum.filename)) {
Common::String md5 = Common::computeStreamMD5AsString(file);
if (!checkMD5(sum, md5.c_str())) {
warning("'%s' may be corrupted. MD5: '%s'", sum.filename, md5.c_str());
GUI::displayErrorDialog(Common::String::format("The game data file %s may be corrupted.\nIf you are sure it is "
"not please provide the ResidualVM team the following code, along with the file name, the language and a "
"description of your game version (i.e. dvd-box or jewelcase):\n%s", sum.filename, md5.c_str()).c_str());
return false;
}
} else {
warning("Could not open %s for checking", sum.filename);
GUI::displayErrorDialog(Common::String::format("Could not open the file %s for checking.\nIt may be missing or "
"you may not have the rights to open it.\nGo to http://wiki.residualvm.org/index.php/Datafiles to see a list "
"of the needed files.", sum.filename).c_str());
return false;
}
return true;
}
示例15: draw
/**
* Draw background animation
* @remarks Originally called 'show_one'
*/
void Background::draw(int16 destX, int16 destY, byte sprId) {
assert(sprId < 40);
if (_sprites[sprId]._x > kOnDisk) {
if (destX < 0) {
destX = _sprites[sprId]._x * 8;
destY = _sprites[sprId]._y;
}
drawSprite(destX, destY, _sprites[sprId]);
} else {
Common::File f;
if (!f.open(_filename)) // Filename was set in loadBackgroundSprites().
return; // We skip because some rooms don't have sprites in the background.
f.seek(_offsets[sprId]);
SpriteType sprite;
sprite._type = (PictureType)(f.readByte());
sprite._x = f.readSint16LE();
sprite._y = f.readSint16LE();
sprite._width = f.readSint16LE();
sprite._height = f.readSint16LE();
sprite._size = f.readSint32LE();
f.skip(2); // Natural and Memorize are used in Load()
sprite._picture = _vm->_graphics->loadPictureRaw(f, sprite._width * 8, sprite._height + 1);
if (destX < 0) {
destX = sprite._x * 8;
destY = sprite._y;
}
drawSprite(destX, destY, sprite);
sprite._picture.free();
f.close();
}
}