diff options
author | Walter van Niftrik | 2016-03-23 11:11:37 +0100 |
---|---|---|
committer | Walter van Niftrik | 2016-06-06 20:35:49 +0200 |
commit | 4af9f32d3f12badb0573db203c2949ec5173aae6 (patch) | |
tree | 9a58eedc8924c8e7ea99f9879883fef501d9683c /engines/adl/disk.h | |
parent | ffbc4da0b0b2f26f88ad94f75d84fe6facbcfd52 (diff) | |
download | scummvm-rg350-4af9f32d3f12badb0573db203c2949ec5173aae6.tar.gz scummvm-rg350-4af9f32d3f12badb0573db203c2949ec5173aae6.tar.bz2 scummvm-rg350-4af9f32d3f12badb0573db203c2949ec5173aae6.zip |
ADL: Add disk format abstraction
Diffstat (limited to 'engines/adl/disk.h')
-rw-r--r-- | engines/adl/disk.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/engines/adl/disk.h b/engines/adl/disk.h new file mode 100644 index 0000000000..0bf57c7661 --- /dev/null +++ b/engines/adl/disk.h @@ -0,0 +1,81 @@ +/* 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. + * + */ + +#include "common/ptr.h" +#include "common/file.h" + +#ifndef ADL_DISK_H +#define ADL_DISK_H + +namespace Common { +class SeekableReadStream; +class String; +} + +namespace Adl { + +class DataBlock { +public: + virtual ~DataBlock() { } + + virtual bool isValid() const = 0; + virtual Common::SeekableReadStream *createReadStream() const = 0; +}; + +typedef Common::SharedPtr<DataBlock> DataBlockPtr; + +class DiskImage { +public: + DiskImage(); + virtual ~DiskImage(); + + virtual bool open(const Common::String &filename) = 0; + virtual const DataBlockPtr getDataBlock(uint track, uint sector, uint offset, uint size) const = 0; + virtual Common::SeekableReadStream *createReadStream(uint track, uint sector, uint offset, uint size) const = 0; + +protected: + Common::File *_f; + uint _tracks, _sectorsPerTrack, _bytesPerSector; +}; + +class DiskImageDataBlock : public DataBlock { +public: + DiskImageDataBlock(const DiskImage *disk, uint track, uint sector, uint offset, uint size); + + bool isValid() const; + Common::SeekableReadStream *createReadStream() const; + +private: + uint _track, _sector, _offset, _size; + const DiskImage *_disk; +}; + +class DiskImage_DSK : public DiskImage { +public: + bool open(const Common::String &filename); + const DataBlockPtr getDataBlock(uint track, uint sector, uint offset, uint size) const; + Common::SeekableReadStream *createReadStream(uint track, uint sector, uint offset = 0, uint size = 0) const; +}; + +} // End of namespace Adl + +#endif |