campo-sirio/arch/arcentry.h

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 */