aboutsummaryrefslogtreecommitdiff
path: root/engines/gargoyle/streams.h
diff options
context:
space:
mode:
authorPaul Gilbert2018-11-03 16:55:49 -0700
committerPaul Gilbert2018-12-08 19:05:59 -0800
commit60146c383d4b69920c6ba326611f9de66a513529 (patch)
treeb7a249b88cc53e4736a069605fc0c310e7077a19 /engines/gargoyle/streams.h
parentf91cdb19bf2f96ffcb50de7d796bc32fcda38f34 (diff)
downloadscummvm-rg350-60146c383d4b69920c6ba326611f9de66a513529.tar.gz
scummvm-rg350-60146c383d4b69920c6ba326611f9de66a513529.tar.bz2
scummvm-rg350-60146c383d4b69920c6ba326611f9de66a513529.zip
GLK: Merge Files class into existing Streams class
Diffstat (limited to 'engines/gargoyle/streams.h')
-rw-r--r--engines/gargoyle/streams.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/engines/gargoyle/streams.h b/engines/gargoyle/streams.h
index 08d97cb402..264190cc76 100644
--- a/engines/gargoyle/streams.h
+++ b/engines/gargoyle/streams.h
@@ -33,12 +33,74 @@ namespace Gargoyle {
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;
+
+/**
+ * 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) {}
+
+ /**
+ * 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
*/
@@ -342,6 +404,7 @@ class Streams {
private:
Stream *_streamList;
Stream *_currentStream;
+ FileRefArray _fileReferences;
private:
/**
* Adds a created stream to the list
@@ -397,6 +460,42 @@ public:
* 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