// Program name: cffolder.h // Programmed by: Anthony Barbachan // Programmed in: C++ (Turbo C++ 3.0 Compatable) // Purpose: Header file for a cabinet file folder object. // Version: 1.00 // Last modified on: 11/5/1998 // Version: 1.00a // Last modified on: 11/29/1998 // Changes: Fixed use of memset. Added functions for new use. Conbined delete. // Version: 2.00 // Last modification date: 10/18/1999 // Changes: Replaced code with new classes' code. #ifndef __CFFOLDER_H__ #define __CFFOLDER_H__ #include #include #include "cftypes.h" #include "cfheader.h" //////////////////////////////////////////////////////////////////////////////// class cabinet_folder_fixed_header { public: enum { NO_COMPRESSION = 0x0000, MSZIP_COMPRESSION = 0x0001 }; protected: dword data_offset; // offset of the first CFDATA block in this folder word ndatablocks; // number of CFDATA blocks in this folder word compression_type; // compression type indicator private: void clear_variables() { memset(this, 0, sizeof(*this)); } public: cabinet_folder_fixed_header() { clear_variables(); } ~cabinet_folder_fixed_header() {} void clear() { clear_variables(); } Error read(istream& in); Error write(ostream& out); dword get_data_offset() { return data_offset; } void set_data_offset(dword offset) { data_offset = offset; } word get_ndatablocks() { return ndatablocks; } void set_ndatablocks(word nblocks) { ndatablocks = nblocks; } word get_compression_type() { return compression_type; } void set_compression_type(word type) { compression_type = type; } }; //////////////////////////////////////////////////////////////////////////////// class cabinet_folder_header : public cabinet_folder_fixed_header { protected: byte* reserved_area; // (optional) per-folder reserved area byte ra_size; // (optional) size of per-folder reserved area private: void clear_variables() { reserved_area = NULL; ra_size = (byte) 0u; } void free_buffers() { if(reserved_area != NULL) delete[] reserved_area; } public: cabinet_folder_header() { clear_variables(); } ~cabinet_folder_header() { free_buffers(); } void clear() { free_buffers(); clear_variables(); cabinet_folder_fixed_header::clear(); } void init(cabinet_header& cab_header); Error read(istream& in, cabinet_header& cab_header); Error write(ostream& out); const byte* get_reserved_area() { return reserved_area; } void set_reserved_area(const byte* newra) { memcpy(reserved_area, newra, ra_size); } byte get_ra_size() { return ra_size; } int has_reserved_area() { return reserved_area != NULL; } }; //////////////////////////////////////////////////////////////////////////////// #endif