ear;ecere/EARArchive: Fix for reporting errors when adding to archive; Fix for re...
[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    bool waitLock:1;
15 };
16
17 public class Archive
18 {
19    FileSize totalSize;
20
21 public:
22    virtual ArchiveDir OpenDirectory(char * name, FileStats stats, ArchiveAddMode addMode);
23    virtual bool Clear(void);
24
25    virtual File FileOpen(char * fileName);
26    virtual FileAttribs FileExists(char * fileName);
27    virtual File FileOpenAtPosition(uint position);
28    virtual void SetBufferSize(uint bufferSize);
29    virtual void SetBufferRead(uint bufferRead);
30
31    property FileSize totalSize { set { totalSize = value; } get { return totalSize; } }
32    property uint bufferSize { set { SetBufferSize(value); } }
33    property uint bufferRead { set { SetBufferRead(value); } }
34 };
35
36 public class ArchiveDir
37 {
38 public:
39    virtual ArchiveDir OpenDirectory(char * name, FileStats stats, ArchiveAddMode addMode);
40    virtual bool AddFromFile(char * name, File input, FileStats stats, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition);
41    virtual bool AddFromFileAtPosition(uint position, char * name, File input, FileStats stats, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition);
42    virtual bool Delete(char * fileName);
43    virtual bool Move(char * name, ArchiveDir to);
44    virtual bool Rename(char * name, char * newName);
45    virtual File FileOpen(char * fileName);
46    virtual FileAttribs FileExists(char * fileName);
47
48    bool Add(char * name, char * path, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition)
49    {
50       bool result = false;
51       File file = ::FileOpen(path, read);
52       if(file)
53       {
54          FileStats stats;
55          FileGetStats(path, stats);
56          result = AddFromFile(name, file, stats, addMode, compression, ratio, newPosition);
57          delete file;
58       }
59       return result;
60    }
61 }
62
63 public Archive ArchiveOpen(char * fileName, ArchiveOpenFlags flags)
64 {
65    return EARFileSystem::OpenArchive(fileName, flags);
66 }
67 #endif
68
69 public bool ArchiveQuerySize(char * fileName, FileSize * size)
70 {
71    return EARFileSystem::QuerySize(fileName, size);
72 }