335 lines
13 KiB
C
335 lines
13 KiB
C
|
/*
|
||
|
* ARC.H
|
||
|
*
|
||
|
* Header file for ArchiveLib 2.0
|
||
|
*
|
||
|
* Copyright (c) 1994-1996 Greenleaf Software, Inc.
|
||
|
* All Rights Reserved
|
||
|
*
|
||
|
* DESCRIPTION
|
||
|
*
|
||
|
* This header file contains the definitions for the base class
|
||
|
* ALArchive.
|
||
|
*
|
||
|
* CLASS DEFINITIONS:
|
||
|
*
|
||
|
* ALArchive : The base class definition for an Archive.
|
||
|
* Both PK format and Greenleaf format archives
|
||
|
* are derived from ALArchive.
|
||
|
*
|
||
|
* REVISION HISTORY
|
||
|
*
|
||
|
* May 26, 1994 1.0A : First release
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef _ARC_H
|
||
|
#define _ARC_H
|
||
|
|
||
|
#if defined( __cplusplus )
|
||
|
|
||
|
/*
|
||
|
* class ALArchive
|
||
|
*
|
||
|
* DESCRIPTION
|
||
|
*
|
||
|
* This is the base class for both types of Archives supported
|
||
|
* by ArchiveLib. As much functionality as possible is kept in
|
||
|
* the base class. Ideally, this should mean that you can switch
|
||
|
* archive types with just a single line of code in your program.
|
||
|
*
|
||
|
*
|
||
|
* DATA MEMBERS
|
||
|
*
|
||
|
* mpArchiveStorageObject : A pointer to the storage object that the
|
||
|
* archive resides in.
|
||
|
*
|
||
|
* mComment : The commetn associated with the archive.
|
||
|
*
|
||
|
* mlDirectoryOffset : The offset of the archive directory in the
|
||
|
* storage object. Not valid until some operation
|
||
|
* that reads or writes the directory takes place.
|
||
|
*
|
||
|
* miVersion : The archive version. Read or written to the file.
|
||
|
*
|
||
|
* miCount : The count of objects in the directory. Once
|
||
|
* again, only valid after some operation that
|
||
|
* reads or writes the directory.
|
||
|
*
|
||
|
* mfDeleteStorageObject : If this flag is true, the C++ destructor for
|
||
|
* the storage object is called from the archive's
|
||
|
* destructor.
|
||
|
*
|
||
|
* mfStripPathOnInsert : If this member is set, the path names of the
|
||
|
* input objects will be stripped as they are
|
||
|
* written to the directory.
|
||
|
*
|
||
|
* mfStripPathOnExtract : If this member is set, the path names of the
|
||
|
* internal objects will be stripped as they are
|
||
|
* extracted from the archive.
|
||
|
*
|
||
|
* mStatus : The status object that most objects in this
|
||
|
* library have.
|
||
|
*
|
||
|
* MEMBER FUNCTIONS
|
||
|
*
|
||
|
* ALArchive() : The constructor, which requires a storage
|
||
|
* obect as an argument.
|
||
|
*
|
||
|
* CalculateJobSize() : This function is called before major archive
|
||
|
* operations. Knowing the total job size lets
|
||
|
* the monitor functions update progress bars
|
||
|
* with real numbers.
|
||
|
*
|
||
|
* CalculateCompressedJobSize() : Ditto
|
||
|
*
|
||
|
* ScanStatus : This protected function is used to check on
|
||
|
* operation status after public operations/
|
||
|
*
|
||
|
* PreCreate() : The base class calls this virtual function before
|
||
|
* creating a new archive.
|
||
|
*
|
||
|
* PostCreate() : The base class calls this virtual function after
|
||
|
* creating a new archive.
|
||
|
*
|
||
|
* PreCompress() : The base class calls this virtual function before
|
||
|
* compressing an object and placing it into the
|
||
|
* archive.
|
||
|
*
|
||
|
* PostCompress() : The base class calls this virtual function after
|
||
|
* compressing an object and placing it into the
|
||
|
* archive.
|
||
|
*
|
||
|
* PreDecompress() : The base class calls this virtual function before
|
||
|
* decompressing an object and extracting it from the
|
||
|
* archive.
|
||
|
*
|
||
|
* PostDecompress() : The base class calls this virtual function after
|
||
|
* decompressing an object and extracting it from the
|
||
|
* archive.
|
||
|
*
|
||
|
* PreWriteDir() : The base class calls this virtual function just
|
||
|
* before writing the directory.
|
||
|
*
|
||
|
* WriteDirEntry() : This virtual function writes out a single directory
|
||
|
* entry.
|
||
|
*
|
||
|
* PostWriteDir() : The base class calls this virtual function just
|
||
|
* after writing the directory.
|
||
|
*
|
||
|
* PreCopyInput() : The base class calls this virtual function before
|
||
|
* copying a compressed object from one archive to another.
|
||
|
*
|
||
|
* PostCopyInput() : The base class calls this virtual function after
|
||
|
* copying a compressed object from one archive to another.
|
||
|
*
|
||
|
* CompressJobs() : This base class function is called to compress a
|
||
|
* batch of files. The base class tries to do the
|
||
|
* work with the help of a few virtual functions.
|
||
|
*
|
||
|
* CopyJobs() : This base class function is called to copy a
|
||
|
* batch of files from one archive to another. The
|
||
|
* base class tries to do most of the work with
|
||
|
* the help of a few virtual functions.
|
||
|
*
|
||
|
* WriteArchiveData() : Derived classes can override this function in order
|
||
|
* to write class specific data out to an archive.
|
||
|
* Not a PKZIP archive, thought.
|
||
|
*
|
||
|
* ReadArchiveData() : Ditto.
|
||
|
*
|
||
|
* Create() : The two versions of this function are part of the
|
||
|
* public interface. They create a new archive given
|
||
|
* a list of input objects.
|
||
|
*
|
||
|
* Append() : Two versions of this, just like Create(). They are
|
||
|
* the public functions used to add new objects to
|
||
|
* an existing archive.
|
||
|
*
|
||
|
* Extract() : The public API function used to extract objects from
|
||
|
* an archive.
|
||
|
*
|
||
|
* Delete() : The public API function used to delete objects
|
||
|
* from an archive.
|
||
|
*
|
||
|
* SetComment() : The base class function that sets the comment for
|
||
|
* an archive. Doesn't write it out to the file,
|
||
|
* however.
|
||
|
*
|
||
|
* ReadDirectory() : This virtual function reads the directory from an
|
||
|
* archive into an ALEntryList.
|
||
|
*
|
||
|
* WriteDirectory() : This function writes the directory back out to an
|
||
|
* archive, using a couple of virtual functions.
|
||
|
*
|
||
|
* GetVersion() : Returns a copy of the version.
|
||
|
*
|
||
|
* GetStorageObject() : Returns a copy of the storage object where the
|
||
|
* archive resides.
|
||
|
*
|
||
|
* FillListBox() : This user interface function is used to dumpp the
|
||
|
* contents of an archive out to a list box, using
|
||
|
* either OS/2 or Windows functions.
|
||
|
*
|
||
|
* ClearError() : Clears the error from the mStatus member.
|
||
|
*
|
||
|
*
|
||
|
* REVISION HISTORY
|
||
|
*
|
||
|
* February 14, 1996 2.0A : New release
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
class AL_CLASS_TYPE ALArchive { /* Tag public class */
|
||
|
/*
|
||
|
* Constructors, destructors, declarations, and friends
|
||
|
*/
|
||
|
protected :
|
||
|
public :
|
||
|
AL_PROTO ALArchive( ALStorage AL_DLL_FAR *, short int delete_in_dtor );
|
||
|
virtual AL_PROTO ~ALArchive();
|
||
|
#if defined( AL_USING_DLL ) || defined( AL_BUILDING_DLL )
|
||
|
void AL_DLL_FAR * AL_PROTO operator new( size_t size );
|
||
|
#endif
|
||
|
|
||
|
/* The copy constructor and assignment operator do not exist. */
|
||
|
protected :
|
||
|
AL_PROTO ALArchive( const ALArchive AL_DLL_FAR & );
|
||
|
ALArchive AL_DLL_FAR & AL_PROTO operator=( ALArchive AL_DLL_FAR &rhs );
|
||
|
/*
|
||
|
* Member functions
|
||
|
*/
|
||
|
protected :
|
||
|
long AL_PROTO CalculateJobSize( ALEntryList AL_DLL_FAR &list );
|
||
|
long AL_PROTO CalculateCompressedJobSize( ALEntryList AL_DLL_FAR &list );
|
||
|
void AL_PROTO ScanStatus( ALEntryList AL_DLL_FAR &list );
|
||
|
/*
|
||
|
* The virtual functions used by the base class to implement
|
||
|
* the high level functions
|
||
|
*/
|
||
|
virtual void AL_INLINE_PROTO PreCreate(){;}
|
||
|
virtual void AL_INLINE_PROTO PostCreate(){;}
|
||
|
|
||
|
virtual void AL_INLINE_PROTO PreCompress( ALEntry AL_DLL_FAR & /* entry */ ){;}
|
||
|
virtual void AL_INLINE_PROTO PostCompress( ALEntry AL_DLL_FAR & /* entry */ ){;}
|
||
|
|
||
|
virtual void AL_INLINE_PROTO PreDecompress( ALEntry AL_DLL_FAR & /* entry */ ){;}
|
||
|
virtual void AL_INLINE_PROTO PostDecompress( ALEntry AL_DLL_FAR & /* entry */ ){;}
|
||
|
|
||
|
virtual void AL_INLINE_PROTO PreWriteDir(){;}
|
||
|
virtual void AL_INLINE_PROTO WriteDirEntry( ALEntry AL_DLL_FAR &entry ) = 0;
|
||
|
virtual void AL_INLINE_PROTO PostWriteDir(){;}
|
||
|
|
||
|
virtual void AL_INLINE_PROTO PreCopyInput( ALEntry AL_DLL_FAR & /* entry */ ){;}
|
||
|
virtual void AL_INLINE_PROTO PostCopyInput( ALEntry AL_DLL_FAR & /* entry */ ){;}
|
||
|
|
||
|
int AL_PROTO CompressJobs( ALEntryList AL_DLL_FAR &list );
|
||
|
int AL_PROTO CopyJobs( ALArchive AL_DLL_FAR &source_archive,
|
||
|
ALEntryList AL_DLL_FAR &source_list );
|
||
|
protected :
|
||
|
virtual int AL_PROTO WriteArchiveData();
|
||
|
virtual int AL_PROTO ReadArchiveData();
|
||
|
/*
|
||
|
* These functions provide the public API to an archive
|
||
|
*/
|
||
|
public :
|
||
|
int AL_PROTO Create( ALEntryList AL_DLL_FAR &list );
|
||
|
int AL_PROTO Create( ALArchive AL_DLL_FAR &source_archive,
|
||
|
ALEntryList AL_DLL_FAR &source_list );
|
||
|
/*
|
||
|
* This used to be a virtual function, but I'm moving it
|
||
|
* to the base class
|
||
|
*/
|
||
|
int AL_PROTO Append( ALEntryList AL_DLL_FAR &list );
|
||
|
int AL_PROTO Append( ALArchive AL_DLL_FAR &source_archive,
|
||
|
ALEntryList AL_DLL_FAR &source_list );
|
||
|
int AL_PROTO Extract( ALEntryList AL_DLL_FAR &list );
|
||
|
int AL_PROTO Delete( ALEntryList AL_DLL_FAR &list,
|
||
|
ALArchive AL_DLL_FAR &output_archive );
|
||
|
const char AL_DLL_FAR * AL_PROTO GetComment();
|
||
|
int AL_PROTO SetComment( char AL_DLL_FAR *comment );
|
||
|
virtual int AL_PROTO ReadDirectory( ALEntryList AL_DLL_FAR &list ) = 0;
|
||
|
int AL_PROTO WriteDirectory( ALEntryList AL_DLL_FAR &list );
|
||
|
short AL_PROTO GetVersion();
|
||
|
ALStorage AL_DLL_FAR * AL_PROTO GetStorageObject();
|
||
|
#if defined( AL_WINDOWS ) || defined( AL_OS2 )
|
||
|
int AL_PROTO FillListBox( HWND hWnd, int list_box_id = -1 );
|
||
|
#endif
|
||
|
void AL_PROTO ClearError();
|
||
|
/*
|
||
|
* Data members
|
||
|
*/
|
||
|
protected :
|
||
|
ALStorage AL_DLL_FAR *mpArchiveStorageObject;
|
||
|
ALName mComment;
|
||
|
long mlDirectoryOffset;
|
||
|
short miVersion;
|
||
|
int miCount;
|
||
|
const int mfDeleteStorageObject : 1;
|
||
|
|
||
|
public :
|
||
|
int mfStripPathOnInsert : 1;
|
||
|
int mfStripPathOnExtract : 1;
|
||
|
ALStatus mStatus;
|
||
|
AL_CLASS_TAG( _ALArchiveTag );
|
||
|
};
|
||
|
|
||
|
#include "arc.inl"
|
||
|
|
||
|
#else /* #if defined( __cplusplus ) */
|
||
|
|
||
|
AL_LINKAGE void AL_FUNCTION ALArchiveClearError( hALArchive this_object );
|
||
|
AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION ALArchiveGetComment( hALArchive this_object );
|
||
|
AL_LINKAGE int AL_FUNCTION ALArchiveGetVersion( hALArchive this_object );
|
||
|
AL_LINKAGE hALStorage AL_FUNCTION ALArchiveGetStorage( hALArchive this_object );
|
||
|
AL_LINKAGE void AL_FUNCTION deleteALArchive( hALArchive this_object );
|
||
|
AL_LINKAGE int AL_FUNCTION ALArchiveAppend( hALArchive this_object, hALEntryList list );
|
||
|
AL_LINKAGE int AL_FUNCTION
|
||
|
ALArchiveAppendFromArchive( hALArchive this_object,
|
||
|
hALArchive input_archive,
|
||
|
hALEntryList list );
|
||
|
AL_LINKAGE int AL_FUNCTION ALArchiveCreate( hALArchive this_object,
|
||
|
hALEntryList list );
|
||
|
AL_LINKAGE int AL_FUNCTION
|
||
|
ALArchiveCreateFromArchive( hALArchive this_object,
|
||
|
hALArchive input_archive,
|
||
|
hALEntryList list );
|
||
|
AL_LINKAGE int AL_FUNCTION ALArchiveDelete( hALArchive this_object,
|
||
|
hALEntryList list,
|
||
|
hALArchive output_archive );
|
||
|
AL_LINKAGE int AL_FUNCTION
|
||
|
ALArchiveExtract( hALArchive this_object, hALEntryList list );
|
||
|
AL_LINKAGE int AL_FUNCTION ALArchiveSetComment( hALArchive this_object,
|
||
|
char AL_DLL_FAR *comment );
|
||
|
AL_LINKAGE int AL_FUNCTION ALArchiveWriteDirectory( hALArchive this_object,
|
||
|
hALEntryList list );
|
||
|
AL_LINKAGE int AL_FUNCTION
|
||
|
ALArchiveReadDirectory( hALArchive this_object, hALEntryList list );
|
||
|
AL_LINKAGE int AL_FUNCTION
|
||
|
ALArchiveSetError( hALArchive this_object,
|
||
|
int error,
|
||
|
char AL_DLL_FAR *text );
|
||
|
AL_LINKAGE int AL_FUNCTION
|
||
|
ALArchiveGetStatusCode( hALArchive this_object );
|
||
|
AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
|
||
|
ALArchiveGetStatusString( hALArchive this_object );
|
||
|
AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
|
||
|
ALArchiveGetStatusDetail( hALArchive this_object );
|
||
|
|
||
|
#if defined( AL_OS2 ) || defined( AL_WINDOWS )
|
||
|
|
||
|
AL_LINKAGE int AL_FUNCTION
|
||
|
ALArchiveFillListBox( hALArchive this_object,
|
||
|
HWND hWnd,
|
||
|
int list_box_id );
|
||
|
AL_LINKAGE void AL_FUNCTION
|
||
|
ALArchiveSetStripOnInsert( hALArchive this_object, int flag );
|
||
|
AL_LINKAGE void AL_FUNCTION
|
||
|
ALArchiveSetStripOnExtract( hALArchive this_object, int flag );
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#endif /* #if defined( __cplusplus ) */
|
||
|
|
||
|
#endif /* #ifndef _ARC_H */
|