summaryrefslogtreecommitdiff
path: root/storage.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage.h')
-rw-r--r--storage.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/storage.h b/storage.h
new file mode 100644
index 0000000..29ae022
--- /dev/null
+++ b/storage.h
@@ -0,0 +1,65 @@
+/*************************************************************** -*- c++ -*-
+ * Copyright (c) 2003,2004 by Marcel Wiesweg *
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __STORAGE_H
+#define __STORAGE_H
+
+#include "rootdir.h"
+#include "pageid.h"
+
+#define TELETEXT_PAGESIZE 972
+
+struct StorageHandle {
+public:
+ StorageHandle() { handle=-1; }
+ StorageHandle(const StorageHandle &s) { handle=s.handle; }
+ StorageHandle(int h) { handle=h; }
+ StorageHandle &operator=(int h) { handle=h; return *this; }
+ StorageHandle &operator=(const StorageHandle &s) { handle=s.handle; return *this; }
+ operator bool() const { return handle!=-1; }
+ operator int() const { return handle; }
+private:
+ int handle;
+};
+
+enum StorageSystem { StorageSystemLegacy, StorageSystemPacked };
+
+class Storage : public RootDir {
+public:
+ virtual ~Storage();
+ enum StorageSystem { StorageSystemLegacy, StorageSystemPacked };
+ //must be called before the first call to instance()
+
+ //must be called before operation starts. Set all options (RootDir, maxStorage) before.
+ virtual void cleanUp() = 0;
+
+ virtual void getFilename(char *buffer, int bufLength, PageID page);
+ virtual void prepareDirectory(tChannelID chan);
+
+ virtual StorageHandle openForWriting(PageID page) = 0;
+ virtual StorageHandle openForReading(PageID page, bool countAsAccess) = 0;
+ virtual ssize_t write(const void *ptr, size_t size, StorageHandle stream) = 0;
+ virtual ssize_t read(void *ptr, size_t size, StorageHandle stream) = 0;
+ virtual void close(StorageHandle stream) = 0;
+protected:
+ Storage();
+ int cleanSubDir(const char *dir);
+ int doCleanUp();
+ virtual int actualFileSize(int netFileSize) { return netFileSize; }
+ void freeSpace();
+ bool exists(const char* file);
+
+ long byteCount;
+ cString currentDir;
+private:
+ bool failedFreeSpace;
+};
+
+#endif