1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef ACCESS_FILES_H
#define ACCESS_FILES_H
#include "common/scummsys.h"
#include "common/array.h"
#include "common/file.h"
#include "graphics/managed_surface.h"
#include "access/decompress.h"
namespace Access {
class AccessEngine;
struct FileIdent {
int _fileNum;
int _subfile;
FileIdent();
FileIdent(int fileNum, int subfile) { _fileNum = fileNum; _subfile = subfile; }
void load(Common::SeekableReadStream &s);
};
struct CellIdent : FileIdent {
byte _cell;
CellIdent();
CellIdent(int cell, int fileNum, int subfile);
};
class FileManager;
class Resource {
friend class FileManager;
private:
Common::File _file;
byte *_data;
public:
Common::SeekableReadStream *_stream;
int _size;
Resource();
Resource(byte *data, int size);
~Resource();
byte *data();
};
class FileManager {
private:
AccessEngine *_vm;
void openFile(Resource *res, const Common::String &filename);
/**
* Handles setting up the resource with a stream for the located resource
*/
void handleFile(Resource *res);
/**
* Handles loading a screen surface and palette with decoded resource
*/
void handleScreen(Graphics::ManagedSurface *dest, Resource *res);
/**
* Open up a sub-file container file
*/
void setAppended(Resource *file, int fileNum);
/**
* Open up a sub-file resource within an alrady opened container file.
*/
void gotoAppended(Resource *file, int subfile);
public:
int _fileNumber;
Common::Array<uint32> _fileIndex;
bool _setPaletteFlag;
public:
FileManager(AccessEngine *vm);
~FileManager();
/**
* Check the existence of a given file
*/
bool existFile(const Common::String &filename);
/**
* Load a given subfile from a container file
*/
Resource *loadFile(int fileNum, int subfile);
/**
* Loads a resource specified by a file identifier
*/
Resource *loadFile(const FileIdent &fileIdent);
/**
* Load a given file by name
*/
Resource *loadFile(const Common::String &filename);
/**
* Load a given scren from a container file
*/
void loadScreen(int fileNum, int subfile);
/**
* Load a given screen by name
*/
void loadScreen(const Common::String &filename);
/**
* Load a screen resource onto a designated surface
*/
void loadScreen(Graphics::ManagedSurface *dest, int fileNum, int subfile);
};
} // End of namespace Access
#endif /* ACCESS_FILES_H */
|