diff options
author | Paul Gilbert | 2018-11-13 19:47:07 -0800 |
---|---|---|
committer | Paul Gilbert | 2018-12-08 19:05:59 -0800 |
commit | 1fb931fbd950324754536ee0b33ed0b91f68c9a2 (patch) | |
tree | a00c388b39ece9d327f9ddff4109f8795f8aa3a8 /engines/gargoyle/streams.h | |
parent | 7d670ff157fbc3df45f70f9e7a5b537b3d13152b (diff) | |
download | scummvm-rg350-1fb931fbd950324754536ee0b33ed0b91f68c9a2.tar.gz scummvm-rg350-1fb931fbd950324754536ee0b33ed0b91f68c9a2.tar.bz2 scummvm-rg350-1fb931fbd950324754536ee0b33ed0b91f68c9a2.zip |
GLK: Changing gargoyle folder to glk
Diffstat (limited to 'engines/gargoyle/streams.h')
-rw-r--r-- | engines/gargoyle/streams.h | 639 |
1 files changed, 0 insertions, 639 deletions
diff --git a/engines/gargoyle/streams.h b/engines/gargoyle/streams.h deleted file mode 100644 index ea9c651e45..0000000000 --- a/engines/gargoyle/streams.h +++ /dev/null @@ -1,639 +0,0 @@ -/* 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 GARGOYLE_STREAMS_H -#define GARGOYLE_STREAMS_H - -#include "common/scummsys.h" -#include "common/file.h" -#include "common/savefile.h" -#include "common/str.h" -#include "gargoyle/glk_types.h" - -namespace Gargoyle { - -#define SAVEGAME_VERSION 1 - -class Window; -class Streams; - -enum FileUsage { - fileusage_Data = 0x00, - fileusage_SavedGame = 0x01, - fileusage_Transcript = 0x02, - fileusage_InputRecord = 0x03, - fileusage_TypeMask = 0x0f, - - fileusage_TextMode = 0x100, - fileusage_BinaryMode = 0x000 -}; - -enum FileMode { - filemode_Write = 0x01, - filemode_Read = 0x02, - filemode_ReadWrite = 0x03, - filemode_WriteAppend = 0x05 -}; - -enum SeekMode { - seekmode_Start = 0, - seekmode_Current = 1, - seekmode_End = 2 -}; - -struct StreamResult { - uint32 _readCount; - uint32 _writeCount; -}; -typedef StreamResult stream_result_t; - -struct SavegameHeader { - uint8 _version; - byte _interpType; - byte _language; - Common::String _md5; - Common::String _saveName; - int _year, _month, _day; - int _hour, _minute; - int _totalFrames; - - /** - * Constructor - */ - SavegameHeader() : _version(0), _interpType(0), _language(0), _year(0), _month(0), _day(0), - _hour(0), _minute(0), _totalFrames(0) {} -}; - -/** - * File details - */ -struct FileReference { - glui32 _rock; - int _slotNumber; - Common::String _description; - Common::String _filename; - FileUsage _fileType; - bool _textMode; - gidispatch_rock_t _dispRock; - - /** - * Constructor - */ - FileReference() : _rock(0), _slotNumber(-1), _fileType(fileusage_Data), _textMode(false) {} - - /** - * Constructor - */ - FileReference(int slot, const Common::String &desc, glui32 usage, glui32 rock = 0) : - _rock(rock), _slotNumber(slot), _description(desc), - _fileType((FileUsage)(usage & fileusage_TypeMask)), _textMode(usage & fileusage_TextMode) {} - - /** - * Get savegame filename - */ - const Common::String getSaveName() const; - - /** - * Returns true if the given file exists - */ - bool exists() const; - - /** - * Delete the given file - */ - void deleteFile(); -}; - -typedef FileReference *frefid_t; -typedef Common::Array< Common::SharedPtr<FileReference> > FileRefArray; - - -/** - * Base class for streams - */ -class Stream { -public: - Streams *_streams; - Stream *_prev; - Stream *_next; - uint32 _rock; - bool _unicode; - uint32 _readCount; - uint32 _writeCount; - bool _readable, _writable; -public: - /** - * Constructor - */ - Stream(Streams *streams, bool readable, bool writable, uint32 rock, bool unicode); - - /** - * Destructor - */ - virtual ~Stream(); - - /** - * Get the next stream - */ - Stream *getNext(uint32 *rock) const; - - /** - * Get the rock value for the stream - */ - uint32 getRock() const { - return _rock; - } - - /** - * Fill out the total amount read and/or written - */ - void fillResult(StreamResult *result); - - /** - * Close and delete the stream - */ - void close(StreamResult *result = nullptr); - - /** - * Write a character - */ - virtual void putChar(unsigned char ch) = 0; - - /** - * Write a unicode character - */ - virtual void putCharUni(uint32 ch) = 0; - - /** - * Write a buffer - */ - virtual void putBuffer(const char *buf, size_t len) = 0; - - /** - * Write a unicode character - */ - virtual void putBufferUni(const uint32 *buf, size_t len) = 0; - - /** - * Remove a string from the end of the stream, if indeed it is at the end - */ - virtual void unputBuffer(const char *buf, size_t len) {} - - /** - * Remove a string from the end of the stream, if indeed it is at the end - */ - virtual void unputBufferUni(const glui32 *buf, size_t len) {} - - /** - * Send a line to the stream with a trailing newline - */ - void echoLine(char *buf, glui32 len) { - putBuffer(buf, len); - putChar('\n'); - }; - - /** - * Send a line to the stream with a trailing newline - */ - void echoLineUni(glui32 *buf, glui32 len) { - putBufferUni(buf, len); - putCharUni('\n'); - } - - virtual glui32 getPosition() const { - return 0; - } - - virtual void setPosition(glsi32 pos, glui32 seekMode) {} - - virtual void setStyle(glui32 val) {} - - /** - * Get a character from the stream - */ - virtual glsi32 getChar() { - return -1; - } - - /** - * Get a unicode character from the stream - */ - virtual glsi32 getCharUni() { - return -1; - } - - /** - * Get a buffer - */ - virtual glui32 getBuffer(char *buf, glui32 len) { - return 0; - } - - /** - * Get a unicode buffer - */ - virtual glui32 getBufferUni(glui32 *buf, glui32 len) { - return 0; - } - - /** - * Get a line - */ - virtual glui32 getLine(char *buf, glui32 len) { - return 0; - } - - /** - * Get a unicode line - */ - virtual glui32 getLineUni(glui32 *ubuf, glui32 len) { - return 0; - } - - /** - * Set a hyperlink - */ - virtual void setHyperlink(glui32 linkVal) {} - - /** - * Set the style colors - */ - virtual void setZColors(glui32 fg, glui32 bg); - - /** - * Set the reverse video style - */ - virtual void setReverseVideo(bool reverse); -}; -typedef Stream *strid_t; - -/** - * Implements the stream for writing text to a window - */ -class WindowStream : public Stream { -private: - Window *_window; -public: - /** - * Constructor - */ - WindowStream(Streams *streams, Window *window, uint32 rock = 0, bool unicode = true) : - Stream(streams, false, true, rock, unicode), _window(window) {} - - /** - * Close the stream - */ - virtual void close(StreamResult *result = nullptr); - - /** - * Write a character - */ - virtual void putChar(unsigned char ch) override; - - /** - * Write a unicode character - */ - virtual void putCharUni(uint32 ch) override; - - /** - * Write a buffer - */ - virtual void putBuffer(const char *buf, size_t len) override; - - /** - * Write a unicode character - */ - virtual void putBufferUni(const uint32 *buf, size_t len) override; - - /** - * Remove a string from the end of the stream, if indeed it is at the end - */ - virtual void unputBuffer(const char *buf, size_t len) override; - - /** - * Remove a string from the end of the stream, if indeed it is at the end - */ - virtual void unputBufferUni(const glui32 *buf, size_t len) override; - - virtual void setStyle(glui32 val) override; - - /** - * Set a hyperlink - */ - virtual void setHyperlink(glui32 linkVal) override; - - /** - * Set the style colors - */ - virtual void setZColors(glui32 fg, glui32 bg) override; - - /** - * Set the reverse video style - */ - virtual void setReverseVideo(bool reverse) override; -}; - -/** - * Implements an in-memory stream - */ -class MemoryStream : public Stream { -private: - void *_buf; ///< unsigned char* for latin1, glui32* for unicode - void *_bufPtr; - void *_bufEnd; - void *_bufEof; - size_t _bufLen; ///< # of bytes for latin1, # of 4-byte words for unicode -public: - /** - * Constructor - */ - MemoryStream(Streams *streams, void *buf, size_t buflen, FileMode mode, uint32 rock = 0, bool unicode = true); - - /** - * Write a character - */ - virtual void putChar(unsigned char ch) override; - - /** - * Write a unicode character - */ - virtual void putCharUni(uint32 ch) override; - - /** - * Write a buffer - */ - virtual void putBuffer(const char *buf, size_t len) override; - - /** - * Write a unicode character - */ - virtual void putBufferUni(const uint32 *buf, size_t len) override; - - virtual glui32 getPosition() const override; - - virtual void setPosition(glsi32 pos, glui32 seekMode) override; - - /** - * Get a character from the stream - */ - virtual glsi32 getChar() override; - - /** - * Get a unicode character from the stream - */ - virtual glsi32 getCharUni() override; - - /** - * Get a buffer - */ - virtual glui32 getBuffer(char *buf, glui32 len) override; - - /** - * Get a unicode buffer - */ - virtual glui32 getBufferUni(glui32 *buf, glui32 len) override; - - /** - * Get a line - */ - virtual glui32 getLine(char *buf, glui32 len) override; - - /** - * Get a unicode line - */ - virtual glui32 getLineUni(glui32 *ubuf, glui32 len) override; -}; - -/** - * Implements a file stream - */ -class FileStream : public Stream { -private: - Common::File _file; - Common::OutSaveFile *_outFile; - Common::InSaveFile *_inFile; - Common::SeekableReadStream *_inStream; - uint32 _lastOp; ///< 0, filemode_Write, or filemode_Read - bool _textFile; -private: - /** - * Ensure the stream is ready for the given operation - */ - void ensureOp(FileMode mode); - - /** - * Put a UTF8 character - */ - void putCharUtf8(glui32 val); - - /** - * Get a UTF8 character - */ - glsi32 getCharUtf8(); -public: - /** - * Read a savegame header from a stream - */ - static bool readSavegameHeader(Common::SeekableReadStream *stream, SavegameHeader &header); - - /** - * Write out a savegame header - */ - static void writeSavegameHeader(Common::WriteStream *stream, const Common::String &saveName); -public: - /** - * Constructor - */ - FileStream(Streams *streams, frefid_t fref, glui32 fmode, glui32 rock, bool unicode); - - /** - * Destructor - */ - virtual ~FileStream(); - - /** - * Write a character - */ - virtual void putChar(unsigned char ch) override; - - /** - * Write a unicode character - */ - virtual void putCharUni(uint32 ch) override; - - /** - * Write a buffer - */ - virtual void putBuffer(const char *buf, size_t len) override; - - /** - * Write a unicode character - */ - virtual void putBufferUni(const uint32 *buf, size_t len) override; - - virtual glui32 getPosition() const override; - - virtual void setPosition(glsi32 pos, glui32 seekMode) override; - - /** - * Get a character from the stream - */ - virtual glsi32 getChar() override; - - /** - * Get a unicode character from the stream - */ - virtual glsi32 getCharUni() override; - - /** - * Get a buffer - */ - virtual glui32 getBuffer(char *buf, glui32 len) override; - - /** - * Get a unicode buffer - */ - virtual glui32 getBufferUni(glui32 *buf, glui32 len) override; - - /** - * Get a line - */ - virtual glui32 getLine(char *buf, glui32 len) override; - - /** - * Get a unicode line - */ - virtual glui32 getLineUni(glui32 *ubuf, glui32 len) override; -}; - -/** - * Streams manager - */ -class Streams { - friend class Stream; -private: - Stream *_streamList; - Stream *_currentStream; - FileRefArray _fileReferences; -private: - /** - * Adds a created stream to the list - */ - void addStream(Stream *stream); - - /** - * Remove a stream - */ - void removeStream(Stream *stream); -public: - /** - * Constructor - */ - Streams(); - - /** - * Destructor - */ - ~Streams(); - - /** - * Open a file stream - */ - FileStream *openFileStream(frefid_t fref, glui32 fmode, glui32 rock, bool unicode); - - /** - * Open a window stream - */ - WindowStream *openWindowStream(Window *window); - - /** - * Open a memory stream - */ - MemoryStream *openMemoryStream(void *buf, size_t buflen, FileMode mode, uint32 rock = 0, bool unicode = true); - - /** - * Delete a stream - */ - void deleteStream(Stream *stream) { - delete stream; - } - - /** - * Start an Iteration through streams - */ - Stream *getFirst(uint32 *rock); - - /** - * Set the current output stream - */ - void setCurrent(Stream *stream) { - assert(stream->_writable); - _currentStream = stream; - } - - /** - * Gets the current output stream - */ - Stream *getCurrent() const { - return _currentStream; - } - - /** - * Prompt for a savegame to load or save, and populate a file reference from the result - */ - frefid_t createByPrompt(glui32 usage, FileMode fmode, glui32 rock); - - /** - * Create a new file reference - */ - frefid_t createRef(int slot, const Common::String &desc, glui32 usage, glui32 rock); - - /** - * Create a new file reference - */ - frefid_t createRef(const Common::String &filename, glui32 usage, glui32 rock); - - /** - * Create a new temporary file reference - */ - frefid_t createTemp(glui32 usage, glui32 rock); - - /** - * Create a new file reference from an old one - */ - frefid_t createFromRef(frefid_t fref, glui32 usage, glui32 rock); - - /** - * Delete a file reference - */ - void deleteRef(frefid_t fref); - - /** - * Iterates to the next file reference following the specified one, - * or the first if null is passed - */ - frefid_t iterate(frefid_t fref, glui32 *rock); -}; - -} // End of namespace Gargoyle - -#endif |