335 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			335 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
/*
 | 
						|
 * 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         */
 |