353 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			353 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
/*
 | 
						|
 * ARCENTRY.H
 | 
						|
 *
 | 
						|
 *  Header file for ArchiveLib 1.0
 | 
						|
 *
 | 
						|
 *  Copyright (c) 1994 Greenleaf Software, Inc.
 | 
						|
 *  All Rights Reserved
 | 
						|
 *
 | 
						|
 * DESCRIPTION
 | 
						|
 *
 | 
						|
 * This header file contains the definitions for two closely related
 | 
						|
 * classes, ALEntry and ALEntryList.  An ALEntry
 | 
						|
 * object describes a storage object found in an archive.  These
 | 
						|
 * objects are always carried around in a list.  These lists are
 | 
						|
 * what get passed to archive member functions such as Create,
 | 
						|
 * Delete,  and Append.  They are also what comes back
 | 
						|
 * from ReadDirectory.
 | 
						|
 *
 | 
						|
 * In addition to the information about a file that is either in an
 | 
						|
 * archive or is going to go into an archive, the job entry also
 | 
						|
 * has a special mark.  Each job entry is created in the marked state.
 | 
						|
 * All of the archive functions that accept a list as an argument only
 | 
						|
 * work on marked files, they ignore items in the list that aren't marked.
 | 
						|
 * Various member functions can be used to clear or set marks on files.
 | 
						|
 * There are several criteria you might use to clear or set marks,
 | 
						|
 * such as matching a wild card specification, being older than a
 | 
						|
 * certain date, or being a certain size.
 | 
						|
 * 
 | 
						|
 * CLASS DEFINITIONS:
 | 
						|
 *
 | 
						|
 *  ALEntry             : A description of an entry in an Archive.
 | 
						|
 *
 | 
						|
 *  ALEntryList         : A list of ALEntry objects.
 | 
						|
 *
 | 
						|
 * FUNCTIONS
 | 
						|
 *
 | 
						|
 *   ALEntryList::SetMarks()    
 | 
						|
 *   ALEntryList::ClearMarks()  
 | 
						|
 * 
 | 
						|
 * REVISION HISTORY
 | 
						|
 *
 | 
						|
 *  May 26, 1994  1.0A  : First release
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _ARCENTRY_H
 | 
						|
#define _ARCENTRY_H
 | 
						|
 | 
						|
#if defined( __cplusplus )
 | 
						|
 | 
						|
/*
 | 
						|
 * Forward declarations.
 | 
						|
 */
 | 
						|
 | 
						|
class AL_CLASS_TYPE ALEntryList;
 | 
						|
class AL_CLASS_TYPE ALArchiveBase;
 | 
						|
class AL_CLASS_TYPE ALMonitor;
 | 
						|
 | 
						|
/*
 | 
						|
 * class ALEntry 
 | 
						|
 *
 | 
						|
 * DESCRIPTION
 | 
						|
 *
 | 
						|
 *  ALEntry objects describe an entry in an archive.  When you read in
 | 
						|
 *  the directory from an archive, it consists of a list of ALEntry
 | 
						|
 *  objects.  The description can also refer to objects that you
 | 
						|
 *  want to put in an archive.
 | 
						|
 *
 | 
						|
 *  An ALEntry object has pointers to both a compression engine and
 | 
						|
 *  a storage object.  It also has the position of an object in an archive,
 | 
						|
 *  its CRC-32, and more.  Some of this data will not be filled in when
 | 
						|
 *  you pass a list of these objects as an argument to an Archive command
 | 
						|
 *  like Create().
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * DATA MEMBERS
 | 
						|
 *
 | 
						|
 *  mszComment             : The comment stored with the archive.
 | 
						|
 *
 | 
						|
 *  mpNextItem             : A pointer to the next ALEntry object in 
 | 
						|
 *                           the list.  (Note that ALEntry items are
 | 
						|
 *                           always in a list.)
 | 
						|
 *
 | 
						|
 *  mpPreviousItem         : A pointer to the previous item in the list.
 | 
						|
 *
 | 
						|
 *  mrList                 : A reference to the list that the ALEntry
 | 
						|
 *                           guy is a member of.
 | 
						|
 *
 | 
						|
 *  mlCompressedSize       : How big the object is after it is compressed.
 | 
						|
 *                           If you are inserting an object for the first
 | 
						|
 *                           time, you will have to wait for the ALArchiveBase
 | 
						|
 *                           member function to fill this guy in after
 | 
						|
 *                           the insertion takes place.
 | 
						|
 *
 | 
						|
 *  mlCompressedObjectPosition : Where the object is found in the archive.
 | 
						|
 *                               Another field that gets filled in during
 | 
						|
 *                               insertion.
 | 
						|
 *
 | 
						|
 *  mlCrc32                 : The CRC-32 of the uncompressed object.  This
 | 
						|
 *                            gets filled in during compression.
 | 
						|
 *
 | 
						|
 *  miMark                  : The object's mark.  If the mark is not set,
 | 
						|
 *                            most of the archive commands will ignore
 | 
						|
 *                            this entry.
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * mpStorageObject          : A pointer to the storage object associated
 | 
						|
 *                            with this entry.  This is a public member,
 | 
						|
 *                            so you can dink with it.  It will be destroyed
 | 
						|
 *                            by the ALEntry destructor!
 | 
						|
 *
 | 
						|
 * mpCompressionEngine      : A pointer to the compression engine associated
 | 
						|
 *                            with this archive entry.
 | 
						|
 *
 | 
						|
 * MEMBER FUNCTIONS
 | 
						|
 *
 | 
						|
 * ALEntry()             : The constructor.
 | 
						|
 * ~ALEntry()            : The destructor.
 | 
						|
 * operator new()        : Memory allocation operator, only used when the
 | 
						|
 *                         constructor is inside the DLL.
 | 
						|
 * InsertBefore()        : A private function used when updating an
 | 
						|
 *                         ALEntrylist
 | 
						|
 * GetNextEntry()        : A routine used when interating an ALEntrylist.
 | 
						|
 * GetCompressedSize()   : An access routine to get a protected member.
 | 
						|
 * GetCrc32()            : An access routine to get a protected member.
 | 
						|
 * GetComment()          : An access routine to get a protected member.
 | 
						|
 * SetMark()             : Set the mark for an ALEntry, the default state is set.
 | 
						|
 * ClearMark()           : Clear the mark for an ALEntry.
 | 
						|
 * SetMarkState()        : Private function to set or clear the mark.
 | 
						|
 * SetComment()          : Set the comment for an entry.
 | 
						|
 * GetMark()             : Get the current state of the mark.
 | 
						|
 * CompressionRatio()    : Calculate the compression ratio for an object.
 | 
						|
 * Duplicate()           : Test to see if an entry is found in a list.
 | 
						|
 *
 | 
						|
 * REVISION HISTORY
 | 
						|
 *
 | 
						|
 *  May 26, 1994  1.0A  : First release
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
class AL_CLASS_TYPE ALEntry {
 | 
						|
/*
 | 
						|
 * Constructors, destructors, friends
 | 
						|
 */
 | 
						|
    friend class AL_CLASS_TYPE ALArchiveBase;
 | 
						|
 | 
						|
    public :
 | 
						|
        AL_PROTO ALEntry( ALEntryList AL_DLL_FAR &,
 | 
						|
                          ALStorage AL_DLL_FAR *,
 | 
						|
                          ALCompressionEngine AL_DLL_FAR * );
 | 
						|
        AL_PROTO ~ALEntry();
 | 
						|
#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 are not supported.  I
 | 
						|
 * declare them here because I don't want the compiler to generate
 | 
						|
 * default versions for me.
 | 
						|
 */
 | 
						|
    protected :
 | 
						|
        AL_PROTO operator=( ALEntry AL_DLL_FAR & );
 | 
						|
        AL_PROTO ALEntry( ALEntry AL_DLL_FAR & );
 | 
						|
/*
 | 
						|
 * Member functions
 | 
						|
 */
 | 
						|
    protected :
 | 
						|
        void AL_PROTO InsertBefore( ALEntry AL_DLL_FAR & );
 | 
						|
 | 
						|
    public :
 | 
						|
        ALEntry AL_DLL_FAR * AL_PROTO GetNextEntry();
 | 
						|
        long AL_PROTO GetCompressedSize() const { return mlCompressedSize; }
 | 
						|
        long AL_PROTO GetCrc32() const { return mlCrc32; }
 | 
						|
        const char AL_DLL_FAR * AL_PROTO GetComment(){ return mszComment; }
 | 
						|
        void AL_PROTO SetMark(){ miMark = 1; }
 | 
						|
        void AL_PROTO ClearMark(){ miMark = 0; }
 | 
						|
        void AL_PROTO SetMarkState( short int new_state ){ miMark = new_state; }
 | 
						|
        int AL_PROTO SetComment( const char AL_DLL_FAR *comment );
 | 
						|
        int AL_PROTO GetMark(){ return miMark; }
 | 
						|
        int AL_PROTO CompressionRatio();
 | 
						|
        int AL_PROTO Duplicate( ALEntryList AL_DLL_FAR &list );
 | 
						|
/*
 | 
						|
 * Data members
 | 
						|
 */
 | 
						|
    protected :
 | 
						|
        char AL_DLL_FAR *mszComment;
 | 
						|
        ALEntry AL_DLL_FAR *mpNextItem;
 | 
						|
        ALEntry AL_DLL_FAR *mpPreviousItem;
 | 
						|
        ALEntryList AL_DLL_FAR &mrList;
 | 
						|
        long mlCompressedSize;
 | 
						|
        long mlCompressedObjectPosition;
 | 
						|
        long mlCrc32;
 | 
						|
        short int miMark;
 | 
						|
 | 
						|
    public :
 | 
						|
        ALStorage AL_DLL_FAR *mpStorageObject;
 | 
						|
        ALCompressionEngine AL_DLL_FAR *mpCompressionEngine;
 | 
						|
        AL_CLASS_TAG( _ALEntryTag );
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
 * class ALEntryList
 | 
						|
 *
 | 
						|
 * DESCRIPTION
 | 
						|
 *
 | 
						|
 *  This class is simply a list of ALEntry objects.  There are
 | 
						|
 *  quite a few member functions that operate on this list.  
 | 
						|
 *  ALEntryList objects are passed as arguments to many of the
 | 
						|
 *  archive functions, such as ReadDirectory(), Create(), Extract(),
 | 
						|
 *  and more.
 | 
						|
 *
 | 
						|
 * DATA MEMBERS
 | 
						|
 *
 | 
						|
 *  mpListHead   : The head of the list is a dummy entry that is a 
 | 
						|
 *                 placeholder.  
 | 
						|
 *
 | 
						|
 *  &mrMonitor   : A reference to the monitor associated with this list.
 | 
						|
 *                 The monitor will take care of generating all the
 | 
						|
 *                 user interface activity to go with this list.
 | 
						|
 *
 | 
						|
 *  mStatus      : A standard status member, the status of the whole list.
 | 
						|
 *
 | 
						|
 * MEMBER FUNCTIONS
 | 
						|
 *
 | 
						|
 *  ALEntryList()         : The constructor
 | 
						|
 *  ~ALEntryList()        : The destructor.
 | 
						|
 *  operator new()        : Memory allocation for the class, only used
 | 
						|
 *                          when the ctor is in a DLL.
 | 
						|
 *  SetMarkState()        : Set the marks of items in the list to 1 or 0
 | 
						|
 *  GetFirstEntry()       : A list iterator function, starts the iteration
 | 
						|
 *  SetMarks()            : Set some of the marks in the list
 | 
						|
 *  ClearMarks(           : Clear some of the marks in the list
 | 
						|
 *  DeleteUnmarked()      : Delete list entries that aren't marked
 | 
						|
 *  ToggleMarks()         : Toggle every mark in the list
 | 
						|
 *  UnmarkDuplicates()    : Use this to avoid processing duplicates
 | 
						|
 *  FillListBox()         : Fill a list box up with a list
 | 
						|
 *  SetMarksFromListBox() : Use list feedback to set marks
 | 
						|
 *
 | 
						|
 * REVISION HISTORY
 | 
						|
 *
 | 
						|
 *  May 26, 1994  1.0A  : First release
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
class AL_CLASS_TYPE ALEntryList {
 | 
						|
/*
 | 
						|
 * Constructors, destructors, friends
 | 
						|
 */
 | 
						|
    friend class AL_CLASS_TYPE ALEntry;
 | 
						|
 | 
						|
    public :
 | 
						|
        AL_PROTO ALEntryList( ALMonitor AL_DLL_FAR * = 0 );
 | 
						|
        AL_PROTO ~ALEntryList();
 | 
						|
#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 are not supported.  I
 | 
						|
 * declare them here because I don't want the compiler to generate
 | 
						|
 * default versions for me.
 | 
						|
 */
 | 
						|
    protected :
 | 
						|
        AL_PROTO operator=( ALEntryList AL_DLL_FAR & );
 | 
						|
        AL_PROTO ALEntryList( ALEntryList AL_DLL_FAR & );
 | 
						|
/*
 | 
						|
 * Member Functions
 | 
						|
 */
 | 
						|
    protected :
 | 
						|
        int AL_PROTO SetMarkState( const char AL_DLL_FAR *name, short int state );
 | 
						|
 | 
						|
    public :
 | 
						|
        ALEntry AL_DLL_FAR * AL_PROTO GetFirstEntry();
 | 
						|
        int AL_PROTO SetMarks( const char AL_DLL_FAR *pattern = 0 );
 | 
						|
        int AL_PROTO ClearMarks( const char AL_DLL_FAR *pattern = 0 );
 | 
						|
        int AL_PROTO DeleteUnmarked();
 | 
						|
        int AL_PROTO ToggleMarks();
 | 
						|
        void AL_PROTO UnmarkDuplicates( ALEntryList AL_DLL_FAR &list,
 | 
						|
                                           const char AL_DLL_FAR *error_message = 0 );
 | 
						|
/*
 | 
						|
 * A windows utility function
 | 
						|
 */
 | 
						|
#if defined( AL_WINDOWS_GUI )
 | 
						|
        int AL_PROTO FillListBox( HWND hDlg, int list_box = -1 );
 | 
						|
        int AL_PROTO SetMarksFromListBox( HWND hDlg, int list_box = -1 );
 | 
						|
#endif
 | 
						|
 | 
						|
/*
 | 
						|
 * Data members
 | 
						|
 */
 | 
						|
    protected :
 | 
						|
        ALEntry *mpListHead; /* The head is never used */
 | 
						|
 | 
						|
    public :
 | 
						|
        ALMonitor AL_DLL_FAR &mrMonitor;
 | 
						|
        ALStatus mStatus;
 | 
						|
        AL_CLASS_TAG( _ALEntryListTag );
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
 * inline int ALEntryList::SetMarks( const char *name )
 | 
						|
 *
 | 
						|
 * ARGUMENTS:
 | 
						|
 *
 | 
						|
 *  name  : A wild care file spec.
 | 
						|
 *
 | 
						|
 * RETURNS
 | 
						|
 *
 | 
						|
 *  The number of entries that matched the wild card.
 | 
						|
 *
 | 
						|
 * DESCRIPTION
 | 
						|
 *
 | 
						|
 *  This function sets the mark for every entry in the list object
 | 
						|
 *  that matches the wild card specification.
 | 
						|
 *
 | 
						|
 * REVISION HISTORY
 | 
						|
 *
 | 
						|
 *   May 26, 1994  1.0A  : First release
 | 
						|
 */
 | 
						|
 | 
						|
inline int AL_PROTO ALEntryList::SetMarks( const char AL_DLL_FAR *name )
 | 
						|
{
 | 
						|
    return SetMarkState( name, 1 );
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
 * inline int ALEntryList::ClearMarks( const char *name )
 | 
						|
 *
 | 
						|
 * ARGUMENTS:
 | 
						|
 *
 | 
						|
 *  name  : A wild care file spec.
 | 
						|
 *
 | 
						|
 * RETURNS
 | 
						|
 *
 | 
						|
 *  The number of entries that matched the wild card.
 | 
						|
 *
 | 
						|
 * DESCRIPTION
 | 
						|
 *
 | 
						|
 *  This function clears the mark for every entry in the list object
 | 
						|
 *  that matches the wild card specification.
 | 
						|
 *
 | 
						|
 * REVISION HISTORY
 | 
						|
 *
 | 
						|
 *   May 26, 1994  1.0A  : First release
 | 
						|
 */
 | 
						|
 | 
						|
inline int AL_PROTO ALEntryList::ClearMarks( const char AL_DLL_FAR *name )
 | 
						|
{
 | 
						|
    return SetMarkState( name, 0 );
 | 
						|
}
 | 
						|
 | 
						|
#endif /* #if defined( __cplusplus ) */
 | 
						|
#endif /* #ifdef _ARCENTRY_H         */
 | 
						|
 |