From e33e19d0587146859d48a134ec9fd94e7b7ba5cd Mon Sep 17 00:00:00 2001 From: "FWoltermann@gmail.com" Date: Thu, 8 Dec 2011 14:53:40 +0000 Subject: Initial upload --- nGenEx/Archive.h | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 nGenEx/Archive.h (limited to 'nGenEx/Archive.h') diff --git a/nGenEx/Archive.h b/nGenEx/Archive.h new file mode 100644 index 0000000..ad4bd5e --- /dev/null +++ b/nGenEx/Archive.h @@ -0,0 +1,90 @@ +/* Project nGenEx + Destroyer Studios LLC + Copyright © 1997-2004. All Rights Reserved. + + SUBSYSTEM: nGenEx.lib + FILE: Archive.h + AUTHOR: John DiCamillo + +*/ + +#ifndef Archive_h +#define Archive_h + +// +------------------------------------------------------------------+ + +#define VERSION 0x0010 +#define BLOCK_SIZE 1024 +#define FILE_BLOCK 1024 +#define NAMELEN 64 + +// +------------------------------------------------------------------+ + +struct DataHeader +{ + static const char* TYPENAME() { return "DataHeader"; } + + DWORD version; + DWORD nfiles; + DWORD dir_blocks; + DWORD dir_size_comp; + DWORD dir_offset; +}; + +struct DataEntry +{ + static const char* TYPENAME() { return "DataEntry"; } + + char name[NAMELEN]; + DWORD size_orig; + DWORD size_comp; + DWORD offset; +}; + +class DataArchive +{ +public: + static const char* TYPENAME() { return "DataArchive"; } + + // ctor: + DataArchive(const char* name = 0); + ~DataArchive(); + + // operations: + void LoadDatafile(const char* name); + void Insert(const char* name); + void Extract(const char* name); + void Remove(const char* name); + void List(); + + void WriteEntry(int index, BYTE* buf); + int FindEntry(const char* req_name); + int ExpandEntry(int index, BYTE*& buf, bool null_terminate=false); + BYTE* CompressEntry(int index); + int InsertEntry(const char* name); + void RemoveEntry(int index); + DWORD Blocks(DWORD raw_size); + DWORD DirBlocks(); + DWORD FileBlocks(int index); + int FindDataBlocks(int blocks_needed); + void CreateBlockMap(); + + DWORD NumFiles() { return header.nfiles; } + DataEntry* GetFile(int i) { if (i>=0 && i<(int)header.nfiles) return &directory[i]; return 0; } + + const char* Name() const { return datafile; } + +private: + // persistent data members: + DataHeader header; + DataEntry* directory; + BYTE* dirbuf; + + // transient members: + char datafile[NAMELEN]; + + DWORD* block_map; + DWORD nblocks; +}; + +#endif Archive_h -- cgit v1.1