4e9a311da00e0a500f56a711d057ed21a7014096
[sdk] / ecere / src / sys / Archive.ec
1 namespace sys;
2
3 import "System"
4
5 #if !defined(ECERE_NOARCHIVE) && !defined(ECERE_VANILLA)
6 public enum ArchiveAddMode { replace, refresh, update, readOnlyDir };
7
8 public class ArchiveOpenFlags : uint
9 {
10 public:
11    bool writeAccess:1;
12    bool buffered:1;
13    bool exclusive:1;
14 };
15
16 public class Archive
17 {
18    FileSize totalSize;
19
20 public:
21    virtual ArchiveDir OpenDirectory(char * name, FileStats stats, ArchiveAddMode addMode);
22    virtual bool Clear(void);
23
24    virtual File FileOpen(char * fileName);
25    virtual FileAttribs FileExists(char * fileName);
26    virtual File FileOpenAtPosition(uint position);
27    virtual void SetBufferSize(uint bufferSize);
28    virtual void SetBufferRead(uint bufferRead);
29
30    property FileSize totalSize { set { totalSize = value; } get { return totalSize; } }
31    property uint bufferSize { set { SetBufferSize(value); } }
32    property uint bufferRead { set { SetBufferRead(value); } }
33 };
34
35 public class ArchiveDir
36 {
37 public:
38    virtual ArchiveDir OpenDirectory(char * name, FileStats stats, ArchiveAddMode addMode);
39    virtual bool AddFromFile(char * name, File input, FileStats stats, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition);
40    virtual bool AddFromFileAtPosition(uint position, char * name, File input, FileStats stats, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition);
41    virtual bool Delete(char * fileName);
42    virtual bool Move(char * name, ArchiveDir to);
43    virtual bool Rename(char * name, char * newName);
44    virtual File FileOpen(char * fileName);
45    virtual FileAttribs FileExists(char * fileName);
46
47    bool Add(char * name, char * path, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition)
48    {
49       bool result = false;
50       File file = ::FileOpen(path, read);
51       if(file)
52       {
53          FileStats stats;
54          FileGetStats(path, stats);
55          result = AddFromFile(name, file, stats, addMode, compression, ratio, newPosition);
56          delete file;
57       }
58       return result;
59    }
60 }
61
62 public Archive ArchiveOpen(char * fileName, ArchiveOpenFlags flags)
63 {
64    return EARFileSystem::OpenArchive(fileName, flags);
65 }
66 #endif
67
68 public bool ArchiveQuerySize(char * fileName, FileSize * size)
69 {
70    return EARFileSystem::QuerySize(fileName, size);
71 }