00001
00023 #ifndef _LIBCOMPREX_ARCHIVE_H_
00024 #define _LIBCOMPREX_ARCHIVE_H_
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00030 typedef struct _CxArchive CxArchive;
00032 #include <libcomprex/directory.h>
00033 #include <libcomprex/file.h>
00034 #include <libcomprex/fp.h>
00035 #include <libcomprex/module.h>
00036 #include <libcomprex/types.h>
00037
00043 struct _CxArchive
00044 {
00045 CxModule *module;
00046 CxArchiveType type;
00047 CxAccessMode accessMode;
00049 CxArchive *parent;
00050 CxFP *fp;
00052 char *name;
00058 char *path;
00059
00064 char *physPath;
00065
00067 char isLocal;
00068
00069 unsigned int fileSize;
00070 unsigned int archiveSize;
00072 size_t fileCount;
00074 CxDirectory *root;
00076 void *moduleData;
00078 unsigned int refCount;
00084 void (*ex_callback) (CxArchive *, CxFile *, size_t onFile, size_t fileCount);
00085 };
00086
00087
00088
00090
00100 CxArchive *cxNewArchive(void);
00101
00109 void cxDestroyArchive(CxArchive *archive);
00110
00113
00115
00128 void cxSetArchiveModule(CxArchive *archive, CxModule *module);
00129
00138 void cxSetArchiveType(CxArchive *archive, CxArchiveType type);
00139
00148 void cxSetArchiveAccessMode(CxArchive *archive, CxAccessMode mode);
00149
00158 void cxSetArchiveFileName(CxArchive *archive, const char *filename);
00159
00173 void cxSetArchivePath(CxArchive *archive, const char *path);
00174
00187 void cxSetArchivePhysicalPath(CxArchive *archive, const char *path);
00188
00197 void cxSetArchiveFileSize(CxArchive *archive, unsigned int fileSize);
00198
00207 void cxSetArchiveSize(CxArchive *archive, unsigned int archiveSize);
00208
00220 void cxSetArchiveLocal(CxArchive *archive, char isLocal);
00221
00228 void cxSetArchiveExtractCallback(CxArchive *archive,
00229 void (*callback)(CxArchive *, CxFile *,
00230 size_t, size_t));
00231
00235
00237
00249 CxModule *cxGetArchiveModule(CxArchive *archive);
00250
00260 CxArchiveType cxGetArchiveType(CxArchive *archive);
00261
00271 CxAccessMode cxGetArchiveAccessMode(CxArchive *archive);
00272
00282 const char *cxGetArchiveFileName(CxArchive *archive);
00283
00298 const char *cxGetArchivePath(CxArchive *archive);
00299
00313 const char *cxGetArchivePhysicalPath(CxArchive *archive);
00314
00322 size_t cxGetArchiveFileCount(CxArchive *archive);
00323
00333 unsigned int cxGetArchiveFileSize(CxArchive *archive);
00334
00344 unsigned int cxGetArchiveSize(CxArchive *archive);
00345
00358 char cxIsArchiveLocal(CxArchive *archive);
00359
00367 CxDirectory *cxGetArchiveRoot(CxArchive *archive);
00368
00371 #ifdef __cplusplus
00372 }
00373 #endif
00374
00375 #endif
00376