1844 lines
		
	
	
		
			48 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1844 lines
		
	
	
		
			48 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
//
 | 
						|
// TOOLKIT.CPP
 | 
						|
//
 | 
						|
//  Source file for ArchiveLib 2.0
 | 
						|
//
 | 
						|
//  Copyright (c) Greenleaf Software, Inc. 1994-1996
 | 
						|
//  All Rights Reserved
 | 
						|
//
 | 
						|
// CONTENTS
 | 
						|
//
 | 
						|
//  ALToolKit::operator new()
 | 
						|
//  ALToolKit::ALToolKit()
 | 
						|
//  ALToolKit::ALToolKit( const ALToolKit& )
 | 
						|
//  ALToolKit::ALToolKit( const ALCompressor & )
 | 
						|
//  ALToolKit::ALToolKit( const ALDecompressor & )
 | 
						|
//  ALToolKit::ALToolKit( const ALStorage & )
 | 
						|
//  ALToolKit::~ALToolKit()
 | 
						|
//  deleteALToolKit()
 | 
						|
//  ALToolKit::operator+( const ALCompressor & )
 | 
						|
//  ALToolKit::operator+( const ALDecompressor & )
 | 
						|
//  ALToolKit::operator+( const ALStorage & )
 | 
						|
//  operator+( ALCompressor &, ALCompressor & )
 | 
						|
//  operator+( ALCompressor &, ALDecompressor & )
 | 
						|
//  operator+( ALCompressor &, ALStorage & )
 | 
						|
//  operator+( ALDecompressor &, ALCompressor & )
 | 
						|
//  operator+( ALDecompressor &, ALDecompressor & )
 | 
						|
//  operator+( ALDecompressor &, ALStorage & )
 | 
						|
//  operator+( ALStorage &, ALCompressor & )
 | 
						|
//  operator+( ALStorage &, ALDecompressor & )
 | 
						|
//  operator+( ALStorage &, ALStorage & )
 | 
						|
//  ALToolKit::CreateCompressor()
 | 
						|
//  ALToolKit::CreateDecompressor()
 | 
						|
//  ALToolKit::CreateStorageObject()
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  A toolkit is simply a collection of compressors, decompressors,
 | 
						|
//  and storage objects.  The exciting part of a toolkit is that
 | 
						|
//  I let you add any one of these objects to the kit at any time
 | 
						|
//  using operator+().  I also let you construct a toolkit
 | 
						|
//  using any of these objects.
 | 
						|
//
 | 
						|
//  This file contains all the toolkit source code to keep all this
 | 
						|
//  working.
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
#include "arclib.h"
 | 
						|
#if !defined( AL_IBM )
 | 
						|
#pragma hdrstop
 | 
						|
#endif
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::operator new()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Memory allocator used when ArchiveLib resides in a 16 bit DLL.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  void * ALToolKit::operator new( size_t size )
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  size  :  The number of bytes that the compiler has decided will be
 | 
						|
//           necessary to construct a new ALToolKit object.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  When using a DLL, it is easy to get into a dangerous situation when
 | 
						|
//  creating objects whose ctor and dtor are both in the DLL.  The problem
 | 
						|
//  arises because when you create an object using new, the memory for
 | 
						|
//  the object will be allocated from the EXE.  However, when you destroy
 | 
						|
//  the object using delete, the memory is freed inside the DLL.  Since
 | 
						|
//  the DLL doesn't really own that memory, bad things can happen.
 | 
						|
//
 | 
						|
//  But, you say, won't the space just go back to the Windows heap regardless
 | 
						|
//  of who tries to free it?  Maybe, but maybe not.  If the DLL is using
 | 
						|
//  a subsegment allocation scheme, it might do some sort of local free
 | 
						|
//  before returning the space to the windows heap.  That is the point where
 | 
						|
//  you could conceivably cook your heap.
 | 
						|
//
 | 
						|
//  By providing our own version of operator new inside this class, we
 | 
						|
//  ensure that all memory allocation for the class will be done from
 | 
						|
//  inside the DLL, not the EXE calling the DLL.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A pointer to some memory that should have been pulled out of the
 | 
						|
//  heap for the DLL.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
#if defined( AL_BUILDING_DLL )
 | 
						|
 | 
						|
void AL_DLL_FAR * AL_PROTO
 | 
						|
ALToolKit::operator new( size_t size )  /* Tag protected function */
 | 
						|
{
 | 
						|
    return ::new char[ size ];
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::ALToolKit()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  The default toolkit constructor.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit::ALToolKit();
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  None.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  An ALToolKit object contains three arrays: a list of compressors,
 | 
						|
//  decompressors, and storage objects.  When the default constructor is
 | 
						|
//  invoked, the toolkit starts off completely empty, so all of the
 | 
						|
//  arrays are set to 0, which is a special case, meaning the list is empty.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Nothing.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_PROTO
 | 
						|
ALToolKit::ALToolKit()  /* Tag public function */
 | 
						|
{
 | 
						|
    mpCompressors = 0;
 | 
						|
    mpDecompressors = 0;
 | 
						|
    mpStorages = 0;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::ALToolKit(const ALToolKit &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  The ALToolKit copy constructor.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit::ALToolKit( const ALToolKit &rhs );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  rhs  :  A reference to another toolkit.  This toolkit will be
 | 
						|
//          copied during the creation of the new toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  In order to provide easy manipulation of ALToolKit objects, a copy
 | 
						|
//  constructor is a necessity.  The copy constructor requires that
 | 
						|
//  we create a new toolkit that is just like the rhs argument.
 | 
						|
//
 | 
						|
//  The easiest way to make these toolkits the same would be to have
 | 
						|
//  them both point to the same lists of compressors, decompressors,
 | 
						|
//  and storage objects.  But having two containers that are free to jack
 | 
						|
//  with the list at the same time would be a real monster.
 | 
						|
//
 | 
						|
//  So, isntead, the copy constructor creates new lists.  The
 | 
						|
//  elements in the list are populated using the Clone() functions,
 | 
						|
//  which should produce identical copies of the storage objects,
 | 
						|
//  compressors, and decompressors.  When each item in the rsh has been
 | 
						|
//  cloned, we have a new ALToolKit that isn't a binary copy of the
 | 
						|
//  rhs, but will behave in an identical fashion.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Nothing.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_PROTO
 | 
						|
ALToolKit::ALToolKit( const ALToolKit AL_DLL_FAR &rhs )  /* Tag public function */
 | 
						|
{
 | 
						|
    int i;
 | 
						|
//
 | 
						|
// If the rhs has a list of compressors, clone a copy.  Else set the
 | 
						|
// list pointer to 0, indicating no compressors on hand.
 | 
						|
//
 | 
						|
    if ( rhs.mpCompressors ) {
 | 
						|
        for ( i = 0 ; rhs.mpCompressors[ i ] ; i++ )
 | 
						|
            ;
 | 
						|
        mpCompressors = new ALCompressor AL_DLL_FAR *[ i + 1 ];
 | 
						|
        if ( mpCompressors ) {
 | 
						|
            for ( i = 0 ; rhs.mpCompressors[ i ] ; i++ )
 | 
						|
                mpCompressors[ i ] = rhs.mpCompressors[ i ]->Clone( AL_COMPRESSION_DEFAULT );
 | 
						|
            mpCompressors[ i ] = 0;
 | 
						|
        }
 | 
						|
    } else
 | 
						|
        mpCompressors = 0;
 | 
						|
//
 | 
						|
// If the rhs has a list of decompressors, clone a copy.  Else set the
 | 
						|
// list pointer to 0, indicating no decompressors on hand.
 | 
						|
//
 | 
						|
    if ( rhs.mpDecompressors ) {
 | 
						|
        for ( i = 0 ; rhs.mpDecompressors[ i ] ; i++ )
 | 
						|
            ;
 | 
						|
        mpDecompressors = new ALDecompressor AL_DLL_FAR *[ i + 1 ];
 | 
						|
        if ( mpDecompressors ) {
 | 
						|
            for ( i = 0 ; rhs.mpDecompressors[ i ] ; i++ )
 | 
						|
                mpDecompressors[ i ] = rhs.mpDecompressors[ i ]->Clone( AL_COMPRESSION_DEFAULT );
 | 
						|
            mpDecompressors[ i ] = 0;
 | 
						|
        }
 | 
						|
    } else
 | 
						|
        mpDecompressors = 0;
 | 
						|
//
 | 
						|
// If the rhs has a list of storage objects, clone a copy.  Else set the
 | 
						|
// list pointer to 0, indicating no storage objects on hand.
 | 
						|
//
 | 
						|
    if ( rhs.mpStorages ) {
 | 
						|
        for ( i = 0 ; rhs.mpStorages[ i ] ; i++ )
 | 
						|
            ;
 | 
						|
        mpStorages = new ALStorage AL_DLL_FAR *[ i + 1 ];
 | 
						|
        if ( mpStorages ) {
 | 
						|
            for ( i = 0 ; rhs.mpStorages[ i ] ; i++ )
 | 
						|
                mpStorages[ i ] = rhs.mpStorages[ i ]->Clone( "", AL_STORAGE_DEFAULT );
 | 
						|
            mpStorages[ i ] = 0;
 | 
						|
        }
 | 
						|
    } else
 | 
						|
        mpStorages = 0;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::ALToolKit(const ALCompressor &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Construct a new ALToolKit that contains a copy of the compressor argument.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit::ALToolKit( const ALCompressor &c );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  c    :  A reference to a compressors.  When the toolkit is constructed,
 | 
						|
//          it will contain a clone of this compressor.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  ALToolKit contains lists of compressors, decompressors, and
 | 
						|
//  storage objects.  In order to make toolkit manipulation as simple
 | 
						|
//  as possible, constructors are provided that accept each of these
 | 
						|
//  types of objects as arguments.  In this case, the argument is a
 | 
						|
//  reference to a compressor.
 | 
						|
//
 | 
						|
//  The three lists are initialized in the constructor.  The
 | 
						|
//  decompressor and storage object lists are initialized to be empty,
 | 
						|
//  and the compressor list has a single clone of the compressor
 | 
						|
//  specified as the rhs argument.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Nothing.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_PROTO
 | 
						|
ALToolKit::ALToolKit( const ALCompressor AL_DLL_FAR &c )  /* Tag public function */
 | 
						|
{
 | 
						|
    mpCompressors = new ALCompressor AL_DLL_FAR *[ 2 ];
 | 
						|
    if ( mpCompressors ) {
 | 
						|
        mpCompressors[ 0 ] = c.Clone( AL_COMPRESSION_DEFAULT );
 | 
						|
        mpCompressors[ 1 ] = 0;
 | 
						|
    }
 | 
						|
    mpDecompressors = 0;
 | 
						|
    mpStorages = 0;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::ALToolKit(const ALDecompressor &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Construct an ALToolKit that contains a copy of the decompressor argument.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit::ALToolKit( const ALDecompressor &d );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  d    :  A reference to a decompressor.  When the toolkit is constructed,
 | 
						|
//          it will contain a clone of this decompressor.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  ALToolKit contains lists of compressors, decompressors, and
 | 
						|
//  storage objects.  In order to make toolkit manipulation as simple
 | 
						|
//  as possible, constructors are provided that accept each of these
 | 
						|
//  types of objects as arguments.  In this case, the argument is a
 | 
						|
//  reference to a decompressor.
 | 
						|
//
 | 
						|
//  The three lists are initialized in the constructor.  The
 | 
						|
//  compressor and storage object lists are initialized to be empty,
 | 
						|
//  and the decompressor list has a single clone of the decompressor
 | 
						|
//  specified as the rhs argument.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Nothing.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_PROTO
 | 
						|
ALToolKit::ALToolKit( const ALDecompressor AL_DLL_FAR &d )  /* Tag public function */
 | 
						|
{
 | 
						|
    mpCompressors = 0;
 | 
						|
    mpDecompressors = new ALDecompressor AL_DLL_FAR *[ 2 ];
 | 
						|
    if ( mpDecompressors ) {
 | 
						|
        mpDecompressors[ 0 ] = d.Clone( AL_COMPRESSION_DEFAULT );
 | 
						|
        mpDecompressors[ 1 ] = 0;
 | 
						|
    }
 | 
						|
    mpStorages = 0;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::ALToolKit(const ALStorage &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Construct an ALToolKit that contains a copy of the storage object argument.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit::ALToolKit( const ALStorage &s );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  s    :  A reference to a storage object.  When the toolkit is constructed,
 | 
						|
//          it will contain a clone of this object.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  ALToolKit contains lists of compressors, decompressors, and
 | 
						|
//  storage objects.  In order to make toolkit manipulation as simple
 | 
						|
//  as possible, constructors are provided that accept each of these
 | 
						|
//  types of objects as arguments.  In this case, the argument is a
 | 
						|
//  reference to a storage object.
 | 
						|
//
 | 
						|
//  The three lists are initialized in the constructor.  The
 | 
						|
//  compressor and decompressor object lists are initialized to be empty,
 | 
						|
//  and the storage object list has a single clone of the storage object
 | 
						|
//  specified as the rhs argument.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Nothing.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_PROTO
 | 
						|
ALToolKit::ALToolKit( const ALStorage AL_DLL_FAR &s )  /* Tag public function */
 | 
						|
{
 | 
						|
    mpCompressors = 0;
 | 
						|
    mpDecompressors = 0;
 | 
						|
    mpStorages = new ALStorage AL_DLL_FAR *[ 2 ];
 | 
						|
    if ( mpStorages ) {
 | 
						|
        mpStorages[ 0 ] = s.Clone( "", AL_STORAGE_DEFAULT );
 | 
						|
        mpStorages[ 1 ] = 0;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::~ALToolKit()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  The ALToolKit destructor.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit::~ALToolKit();
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  void deleteALToolKit( hALToolKit this_object );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Sub deleteALToolKit Lib "AL20LW" (ByVal this_object&)
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  procedure deleteALToolKit( this_object : hALArchive );
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object : A reference or pointer to the ALToolKit object that
 | 
						|
//                is going to be destroyed.  Note that the C++ member
 | 
						|
//                function doesn't have this_object as an argument, because
 | 
						|
//                it has implicit access to it via 'this'.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  To destroy a toolkit, you need to work through each of the three lists,
 | 
						|
//  destroying every object in the list.  After destroying all the objects
 | 
						|
//  in the list, you then destroy the list itself.  Note that the list may
 | 
						|
//  be empty when the destructor is called, in which case it doesn't need
 | 
						|
//  to be deleted.  This is flagged by it having a 0 value.
 | 
						|
//
 | 
						|
//  This is the only member function of ALToolKit that has a C/VB/Delphi
 | 
						|
//  translation function.  These languages will get working pointers to
 | 
						|
//  constructed toolkits via the toolkit creation functions.  These toolkits
 | 
						|
//  must be deleted in order to prevent memory leaks, so we have to have
 | 
						|
//  a translation function.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Nothing.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_PROTO
 | 
						|
ALToolKit::~ALToolKit()  /* Tag public function */
 | 
						|
{
 | 
						|
    int i;
 | 
						|
 | 
						|
    if ( mpCompressors ) {
 | 
						|
        for ( i = 0 ; mpCompressors[ i ] ; i++ )
 | 
						|
            delete mpCompressors[ i ];
 | 
						|
        delete[] mpCompressors;
 | 
						|
    }
 | 
						|
    if ( mpDecompressors ) {
 | 
						|
        for ( i = 0 ; mpDecompressors[ i ] ; i++ )
 | 
						|
            delete mpDecompressors[ i ];
 | 
						|
        delete[] mpDecompressors;
 | 
						|
    }
 | 
						|
    if ( mpStorages ) {
 | 
						|
        for ( i = 0 ; mpStorages[ i ] ; i++ )
 | 
						|
            delete mpStorages[ i ];
 | 
						|
        delete[] mpStorages;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#if !defined( AL_NO_C )
 | 
						|
 | 
						|
extern "C" AL_LINKAGE void AL_FUNCTION
 | 
						|
deleteALToolKit( hALToolKit this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALToolKit, "deleteALToolKit()" );
 | 
						|
    delete (ALToolKit *) this_object;
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::operator+( const ALCompressor &c )
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Add a compressor object to a toolkit.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit &ALToolKit::operator+( const ALCompressor &c );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  c    :  A reference to an ALCompressor object.  A copy of this object
 | 
						|
//          will be added to the toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of three member operators that allow you to add a new
 | 
						|
//  object to an existing toolkit.  The function just has to either create
 | 
						|
//  a new list for the object, or expand the existing object by one entry.
 | 
						|
//  The object is then copied into the list using the Clone() function.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A reference to the toolkit.  This is done in standard C++ style to
 | 
						|
//  allow cascaded operations.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
ALToolKit AL_DLL_FAR & AL_PROTO
 | 
						|
ALToolKit::operator+( const ALCompressor AL_DLL_FAR &c )  /* Tag public function */
 | 
						|
{
 | 
						|
    if ( mpCompressors ) {
 | 
						|
        int i;
 | 
						|
        for ( i = 0 ; mpCompressors[ i ] ; i++ )
 | 
						|
            ;
 | 
						|
        ALCompressor AL_DLL_FAR **p = new ALCompressor AL_DLL_FAR *[ i + 2 ];
 | 
						|
        if ( p ) {
 | 
						|
            for ( int j = 0 ; j < i ; j++ )
 | 
						|
                p[ j ] = mpCompressors[ j ];
 | 
						|
            p[ i ] = c.Clone( AL_COMPRESSION_DEFAULT );
 | 
						|
            p[ i + 1 ] = 0;
 | 
						|
            delete[] mpCompressors;
 | 
						|
            mpCompressors = p;
 | 
						|
        }
 | 
						|
 | 
						|
    } else {
 | 
						|
        mpCompressors = new ALCompressor AL_DLL_FAR *[ 2 ];
 | 
						|
        if ( mpCompressors ) {
 | 
						|
            mpCompressors[ 0 ] = c.Clone( AL_COMPRESSION_DEFAULT );
 | 
						|
            mpCompressors[ 1 ] = 0;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::operator+( const ALDecompressor &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Add a decompressor object to a toolkit.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit &ALToolKit::operator+( const ALDecompressor &d );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  d    :  A reference to an ALDecompressor object.  A copy of this object
 | 
						|
//          will be added to the toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of three member operators that allow you to add a new
 | 
						|
//  object to an existing toolkit.  The function just has to either create
 | 
						|
//  a new list for the object, or expand the existing list by one entry.
 | 
						|
//  The object is then copied into the list using the Clone() function.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A reference to the toolkit.  This is done in standard C++ style to
 | 
						|
//  allow cascaded operations.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
ALToolKit AL_DLL_FAR & AL_PROTO
 | 
						|
ALToolKit::operator+( const ALDecompressor AL_DLL_FAR &d )  /* Tag public function */
 | 
						|
{
 | 
						|
    if ( mpDecompressors ) {
 | 
						|
        int i;
 | 
						|
        for ( i = 0 ; mpDecompressors[ i ] ; i++ )
 | 
						|
            ;
 | 
						|
        ALDecompressor AL_DLL_FAR **p = new ALDecompressor AL_DLL_FAR *[ i + 2 ];
 | 
						|
        if ( p ) {
 | 
						|
            for ( int j = 0 ; j < i ; j++ )
 | 
						|
                p[ j ] = mpDecompressors[ j ];
 | 
						|
            p[ i ] = d.Clone( AL_COMPRESSION_DEFAULT );
 | 
						|
            p[ i + 1 ] = 0;
 | 
						|
            delete[] mpDecompressors;
 | 
						|
            mpDecompressors = p;
 | 
						|
        }
 | 
						|
    } else {
 | 
						|
        mpDecompressors = new ALDecompressor AL_DLL_FAR *[ 2 ];
 | 
						|
        if ( mpDecompressors ) {
 | 
						|
            mpDecompressors[ 0 ] = d.Clone( AL_COMPRESSION_DEFAULT );
 | 
						|
            mpDecompressors[ 1 ] = 0;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::operator+( const ALStorage &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Add a storage object to a toolkit.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit &ALToolKit::operator+( const ALStorage &d );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  s    :  A reference to an ALStorage object.  A copy of this object
 | 
						|
//          will be added to the toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of three member operators that allow you to add a new
 | 
						|
//  object to an existing toolkit.  The function just has to either create
 | 
						|
//  a new list for the object, or expand the existing list by one entry.
 | 
						|
//  The object is then copied into the list using the Clone() function.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A reference to the toolkit.  This is done in standard C++ style to
 | 
						|
//  allow cascaded operations.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
ALToolKit AL_DLL_FAR & AL_PROTO
 | 
						|
ALToolKit::operator+( const ALStorage AL_DLL_FAR &s )  /* Tag public function */
 | 
						|
{
 | 
						|
    if ( mpStorages ) {
 | 
						|
        int i;
 | 
						|
        for ( i = 0 ; mpStorages[ i ] ; i++ )
 | 
						|
            ;
 | 
						|
        ALStorage AL_DLL_FAR **p = new ALStorage AL_DLL_FAR *[ i + 2 ];
 | 
						|
        if ( p ) {
 | 
						|
            for ( int j = 0 ; j < i ; j++ )
 | 
						|
                p[ j ] = mpStorages[ j ];
 | 
						|
            p[ i ] = s.Clone( "", AL_STORAGE_DEFAULT );
 | 
						|
            p[ i + 1 ] = 0;
 | 
						|
            delete[] mpStorages;
 | 
						|
            mpStorages = p;
 | 
						|
        }
 | 
						|
    } else {
 | 
						|
        mpStorages = new ALStorage AL_DLL_FAR *[ 2 ];
 | 
						|
        if ( mpStorages ) {
 | 
						|
            mpStorages[ 0 ] = s.Clone( "", AL_STORAGE_DEFAULT );
 | 
						|
            mpStorages[ 1 ] = 0;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  operator+( const ALCompressor &,const ALCompressor &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create a toolkit with two ALCompressor objects.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit operator+( const ALCompressor &c1,
 | 
						|
//                       const ALCompressor &c2 );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  c1   :  A reference to an ALCompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
//  c2   :  A reference to a second ALCompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of 9 global operators that overload the '+' symbol for
 | 
						|
//  ALCompressor, ALDecompressor, and ALStorage objects.  The operator
 | 
						|
//  creates an ALToolKit that is initialized with clones of the two
 | 
						|
//  objects.  These operators are provided to make it more convenient
 | 
						|
//  to create ALToolKit objects, using syntax like this:
 | 
						|
//
 | 
						|
//    ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A newly created toolkit.  Since the toolkit has a copy constructor
 | 
						|
//  defined, we can get away with this, as opposed to returning a pointer
 | 
						|
//  to a newly created toolkit object. This is a lot nicer.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_LINKAGE ALToolKit AL_FUNCTION
 | 
						|
operator+( const ALCompressor AL_DLL_FAR & c1,  /* Tag public function */
 | 
						|
           const ALCompressor AL_DLL_FAR & c2 )
 | 
						|
{
 | 
						|
    ALToolKit a( c1 );
 | 
						|
    return a + c2;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  operator+( const ALCompressor &,const ALDecompressor &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create a toolkit with and ALCompressor and ALDecompressor object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit operator+( const ALCompressor &c1,
 | 
						|
//                       const ALDecompressor &d1 );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  c1   :  A reference to an ALCompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
//  d1   :  A reference to an ALDecompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of 9 global operators that overload the '+' symbol for
 | 
						|
//  ALCompressor, ALDecompressor, and ALStorage objects.  The operator
 | 
						|
//  creates an ALToolKit that is initialized with clones of the two
 | 
						|
//  input objects.  These operators are provided to make it more convenient
 | 
						|
//  to create ALToolKit objects, using syntax like this:
 | 
						|
//
 | 
						|
//    ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A newly created toolkit.  Since the toolkit has a copy constructor
 | 
						|
//  defined, we can get away with this, as opposed to returning a pointer
 | 
						|
//  to a newly created toolkit object. This is a lot nicer.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_LINKAGE ALToolKit AL_FUNCTION
 | 
						|
operator+( const ALCompressor AL_DLL_FAR & c1,  /* Tag public function */
 | 
						|
           const ALDecompressor AL_DLL_FAR & d1 )
 | 
						|
{
 | 
						|
    ALToolKit a( c1 );
 | 
						|
    return a + d1;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  operator+( const ALCompressor &,const ALStorage &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create a toolkit with and ALCompressor and ALStorage object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit operator+( const ALCompressor &c1,
 | 
						|
//                       const ALStorage &s1 );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  c1   :  A reference to an ALCompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
//  s1   :  A reference to an ALStorage object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of 9 global operators that overload the '+' symbol for
 | 
						|
//  ALCompressor, ALDecompressor, and ALStorage objects.  The operator
 | 
						|
//  creates an ALToolKit that is initialized with clones of the two
 | 
						|
//  input objects.  These operators are provided to make it more convenient
 | 
						|
//  to create ALToolKit objects, using syntax like this:
 | 
						|
//
 | 
						|
//    ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A newly created toolkit.  Since the toolkit has a copy constructor
 | 
						|
//  defined, we can get away with this, as opposed to returning a pointer
 | 
						|
//  to a newly created toolkit object. This is a lot nicer.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_LINKAGE ALToolKit AL_FUNCTION
 | 
						|
operator+( const ALCompressor AL_DLL_FAR & c1,  /* Tag public function */
 | 
						|
           const ALStorage AL_DLL_FAR & s1 )
 | 
						|
{
 | 
						|
    ALToolKit a( c1 );
 | 
						|
    return a + s1;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  operator+( const ALDecompressor &,const ALCompressor &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create a toolkit with and ALDecompressor and ALCompressor object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit operator+( const ALDecompressor &d1,
 | 
						|
//                       const ALCompressor &c1 );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  d1   :  A reference to an ALDecompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
//  c1   :  A reference to an ALCompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of 9 global operators that overload the '+' symbol for
 | 
						|
//  ALCompressor, ALDecompressor, and ALStorage objects.  The operator
 | 
						|
//  creates an ALToolKit that is initialized with clones of the two
 | 
						|
//  input objects.  These operators are provided to make it more convenient
 | 
						|
//  to create ALToolKit objects, using syntax like this:
 | 
						|
//
 | 
						|
//    ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A newly created toolkit.  Since the toolkit has a copy constructor
 | 
						|
//  defined, we can get away with this, as opposed to returning a pointer
 | 
						|
//  to a newly created toolkit object. This is a lot nicer.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_LINKAGE ALToolKit AL_FUNCTION
 | 
						|
operator+( const ALDecompressor AL_DLL_FAR & d1,  /* Tag public function */
 | 
						|
           const ALCompressor AL_DLL_FAR & c1 )
 | 
						|
{
 | 
						|
    ALToolKit a( d1 );
 | 
						|
    return a + c1;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  operator+( const ALDecompressor &,const ALDecompressor &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create a toolkit with two ALDecompressor objects.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit operator+( const ALDecompressor &d1,
 | 
						|
//                       const ALDecompressor &d2 );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  d1   :  A reference to an ALDecompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
//  d2   :  A reference to a second ALDecompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of 9 global operators that overload the '+' symbol for
 | 
						|
//  ALCompressor, ALDecompressor, and ALStorage objects.  The operator
 | 
						|
//  creates an ALToolKit that is initialized with clones of the two
 | 
						|
//  input objects.  These operators are provided to make it more convenient
 | 
						|
//  to create ALToolKit objects, using syntax like this:
 | 
						|
//
 | 
						|
//    ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A newly created toolkit.  Since the toolkit has a copy constructor
 | 
						|
//  defined, we can get away with this, as opposed to returning a pointer
 | 
						|
//  to a newly created toolkit object. This is a lot nicer.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_LINKAGE ALToolKit AL_FUNCTION
 | 
						|
operator+( const ALDecompressor AL_DLL_FAR & d1,  /* Tag public function */
 | 
						|
           const ALDecompressor AL_DLL_FAR & d2 )
 | 
						|
{
 | 
						|
    ALToolKit a( d1 );
 | 
						|
    return a + d2;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  operator+( const ALDecompressor &,const ALStorage &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create a toolkit with an ALDecompressor and an ALStorage object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit operator+( const ALDecompressor &d1,
 | 
						|
//                       const ALStorage &s1 );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  d1   :  A reference to an ALDecompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
//  s1   :  A reference to an ALStorage object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of 9 global operators that overload the '+' symbol for
 | 
						|
//  ALCompressor, ALDecompressor, and ALStorage objects.  The operator
 | 
						|
//  creates an ALToolKit that is initialized with clones of the two
 | 
						|
//  input objects.  These operators are provided to make it more convenient
 | 
						|
//  to create ALToolKit objects, using syntax like this:
 | 
						|
//
 | 
						|
//    ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A newly created toolkit.  Since the toolkit has a copy constructor
 | 
						|
//  defined, we can get away with this, as opposed to returning a pointer
 | 
						|
//  to a newly created toolkit object. This is a lot nicer.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_LINKAGE ALToolKit AL_FUNCTION
 | 
						|
operator+( const ALDecompressor AL_DLL_FAR & d1,  /* Tag public function */
 | 
						|
           const ALStorage AL_DLL_FAR & s1 )
 | 
						|
{
 | 
						|
    ALToolKit a( d1 );
 | 
						|
    return a + s1;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  operator+( const ALStorage &,const ALCompressor &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create a toolkit with an ALStorage and an ALCompressor object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit operator+( const ALStorage &s1,
 | 
						|
//                       const ALCompressor &c1 );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  s1   :  A reference to an ALStorage object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
//  c1   :  A reference to an ALCompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of 9 global operators that overload the '+' symbol for
 | 
						|
//  ALCompressor, ALDecompressor, and ALStorage objects.  The operator
 | 
						|
//  creates an ALToolKit that is initialized with clones of the two
 | 
						|
//  input objects.  These operators are provided to make it more convenient
 | 
						|
//  to create ALToolKit objects, using syntax like this:
 | 
						|
//
 | 
						|
//    ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A newly created toolkit.  Since the toolkit has a copy constructor
 | 
						|
//  defined, we can get away with this, as opposed to returning a pointer
 | 
						|
//  to a newly created toolkit object. This is a lot nicer.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_LINKAGE ALToolKit AL_FUNCTION
 | 
						|
operator+( const ALStorage AL_DLL_FAR & s1,  /* Tag public function */
 | 
						|
           const ALCompressor AL_DLL_FAR & c1 )
 | 
						|
{
 | 
						|
    ALToolKit a( s1 );
 | 
						|
    return a + c1;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  operator+( const ALStorage &,const ALDecompressor &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create a toolkit with an ALStorage and an ALDecompressor object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit operator+( const ALStorage &s1,
 | 
						|
//                       const ALDecompressor &d1 );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  s1   :  A reference to an ALStorage object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
//  d1   :  A reference to an ALDecompressor object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of 9 global operators that overload the '+' symbol for
 | 
						|
//  ALCompressor, ALDecompressor, and ALStorage objects.  The operator
 | 
						|
//  creates an ALToolKit that is initialized with clones of the two
 | 
						|
//  input objects.  These operators are provided to make it more convenient
 | 
						|
//  to create ALToolKit objects, using syntax like this:
 | 
						|
//
 | 
						|
//    ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A newly created toolkit.  Since the toolkit has a copy constructor
 | 
						|
//  defined, we can get away with this, as opposed to returning a pointer
 | 
						|
//  to a newly created toolkit object. This is a lot nicer.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
AL_LINKAGE ALToolKit AL_FUNCTION
 | 
						|
operator+( const ALStorage AL_DLL_FAR & s1,  /* Tag public function */
 | 
						|
           const ALDecompressor AL_DLL_FAR & d1 )
 | 
						|
{
 | 
						|
    ALToolKit a( s1 );
 | 
						|
    return a + d1;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  operator+( const ALStorage &,const ALStorage &)
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create a toolkit with two ALStorage objects.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALToolKit operator+( const ALStorage &s1,
 | 
						|
//                       const ALStorage &s2 );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  s1   :  A reference to an ALStorage object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
//  s2   :  A reference to a second ALStorage object.  A copy of this
 | 
						|
//          object will be added to the resulting toolkit.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is one of 9 global operators that overload the '+' symbol for
 | 
						|
//  ALCompressor, ALDecompressor, and ALStorage objects.  The operator
 | 
						|
//  creates an ALToolKit that is initialized with clones of the two
 | 
						|
//  input objects.  These operators are provided to make it more convenient
 | 
						|
//  to create ALToolKit objects, using syntax like this:
 | 
						|
//
 | 
						|
//    ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A newly created toolkit.  Since the toolkit has a copy constructor
 | 
						|
//  defined, we can get away with this, as opposed to returning a pointer
 | 
						|
//  to a newly created toolkit object. This is a lot nicer.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   November 13, 1995  2.00A : First release.
 | 
						|
//
 | 
						|
 | 
						|
AL_LINKAGE ALToolKit AL_FUNCTION
 | 
						|
operator+( const ALStorage AL_DLL_FAR & s1,  /* Tag public function */
 | 
						|
           const ALStorage AL_DLL_FAR & s2 )
 | 
						|
{
 | 
						|
    ALToolKit a( s1 );
 | 
						|
    return a + s2;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::CreateCompressor()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create an ALCompressor object based on a given type.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALCompressor * ALToolKit::CreateCompressor( int engine_type );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  int engine_type :  An integer that describes the desirede engine type.
 | 
						|
//                     This is normally either an integer that was stored
 | 
						|
//                     in an archive along with a compressed object, or
 | 
						|
//                     the AL_COMPRESSION_DEFAULT that is used to ask for
 | 
						|
//                     the first available engine.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This function and its two siblings constitute the whole reason for the
 | 
						|
//  esistence of a toolkit.  When inserting objects int an entry list, this
 | 
						|
//  routine is called to build the appropriate engine.  The engine that
 | 
						|
//  actually gets selected will depend on which toolkit has been passed
 | 
						|
//  in the ALEntryList constructor.  This means that that archiving and
 | 
						|
//  entry list functions can operate without any knowledge about specific
 | 
						|
//  compression engines, which means they won't link in any engines that
 | 
						|
//  aren't included in your toolkit.
 | 
						|
//
 | 
						|
//  This function works by repeatedly trying to clone each of the engines
 | 
						|
//  in the compression engine list.  The Clone() function is called with
 | 
						|
//  the engine_type argument.  If the compression engine feels it can
 | 
						|
//  construct an engine that matches that type, it will return a cloned
 | 
						|
//  copy.  If not, it returns a 0.
 | 
						|
//
 | 
						|
//  As soon as one of the Clone() calls succeeds, this function will pass
 | 
						|
//  back a copy of the created engine.  Otherwise it will keep trying until
 | 
						|
//  it runs out of engines to clone.  When it finally fails, it returns
 | 
						|
//  a 0.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Either a pointer to a newly created compression engine, or a 0 if no
 | 
						|
//  engine could be created for the given type.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
ALCompressor AL_DLL_FAR * AL_PROTO
 | 
						|
ALToolKit::CreateCompressor( int engine_type )  /* Tag public function */
 | 
						|
{
 | 
						|
    if ( !mpCompressors )
 | 
						|
        return 0;
 | 
						|
    for ( int i = 0 ; ; ) {
 | 
						|
        ALCompressor *compressor;
 | 
						|
        if ( mpCompressors[ i ] ) {
 | 
						|
            compressor = mpCompressors[ i++ ]->Clone( engine_type );
 | 
						|
            if ( compressor )
 | 
						|
                return compressor;
 | 
						|
        } else
 | 
						|
            break;
 | 
						|
    }
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::CreateDecompressor()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create an ALDecompressor object based on a given engine type.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALDecompressor * ALToolKit::CreateDecompressor( int engine_type );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  int engine_type :  An integer that describes the desired engine type.
 | 
						|
//                     This is normally either an integer that was stored
 | 
						|
//                     in an archive along with a compressed object, or
 | 
						|
//                     the AL_COMPRESSION_DEFAULT that is used to ask for
 | 
						|
//                     the first available engine.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This function and its two siblings constitute the whole reason for the
 | 
						|
//  esistence of a toolkit.  When extracting objects from an archive, this
 | 
						|
//  routine is called to build the appropriate engine.  The engine that
 | 
						|
//  actually gets built will depend on which toolkit has been passed
 | 
						|
//  in the ALEntryList constructor.  This means that that archiving and
 | 
						|
//  entry list functions can operate without any knowledge about specific
 | 
						|
//  de/compression engines, which means they won't link in any engines that
 | 
						|
//  aren't included in your toolkit.
 | 
						|
//
 | 
						|
//  This function works by repeatedly trying to clone each of the engines
 | 
						|
//  in the decompression engine list.  The Clone() function is called with
 | 
						|
//  the engine_type argument.  If the decompression engine feels it can
 | 
						|
//  construct a copy of itself that matches that type, it will return a cloned
 | 
						|
//  decompression engine.  If not, it returns a 0.
 | 
						|
//
 | 
						|
//  As soon as one of the Clone() calls succeeds, this function will pass
 | 
						|
//  back a copy of the created engine.  Otherwise it will keep trying until
 | 
						|
//  it runs out of engines to clone.  When it finally fails, it returns
 | 
						|
//  a 0.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Either a pointer to a newly created decompression engine, or a 0 if no
 | 
						|
//  engine could be created for the given type.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
ALDecompressor AL_DLL_FAR * AL_PROTO
 | 
						|
ALToolKit::CreateDecompressor( int engine_type )  /* Tag public function */
 | 
						|
{
 | 
						|
    if ( !mpDecompressors )
 | 
						|
        return 0;
 | 
						|
    for ( int i = 0 ; ; ) {
 | 
						|
        ALDecompressor *decompressor;
 | 
						|
        if ( mpDecompressors[ i ] ) {
 | 
						|
            decompressor = mpDecompressors[ i++ ]->Clone( engine_type );
 | 
						|
            if ( decompressor )
 | 
						|
                return decompressor;
 | 
						|
        } else
 | 
						|
            break;
 | 
						|
    }
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALToolKit::CreateStorageObject()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Create an ALStorage object based on a given object type.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  ALStorage * ALToolKit::CreateStorageObject( int object_type );
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, ALToolkit operations aren't available in C/VB/Delphi.
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  int object_type :  An integer that describes the desired object type.
 | 
						|
//                     This is normally either an integer that was stored
 | 
						|
//                     in an archive along with a compressed object, or
 | 
						|
//                     the AL_STORAGE_DEFAULT that is used to ask for
 | 
						|
//                     the first available storage object.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This function and its two siblings constitute the whole reason for the
 | 
						|
//  esistence of a toolkit.  When extracting objects from an archvie,
 | 
						|
//  this routine is called to build the empty objects.  The object that
 | 
						|
//  actually gets built will depend on which toolkit has been passed
 | 
						|
//  in the ALEntryList constructor.  This means that that archiving and
 | 
						|
//  entry list functions can operate without any knowledge about specific
 | 
						|
//  ALStorage objec types, which means they won't link in any types that
 | 
						|
//  aren't included in your toolkit.
 | 
						|
//
 | 
						|
//  This function works by repeatedly trying to clone each of the objects
 | 
						|
//  in the storage object list.  The Clone() function is called with
 | 
						|
//  the object_type argument.  If the storage object feels it can
 | 
						|
//  construct a copy of itself that matches that type, it will return a cloned
 | 
						|
//  storage object.  If not, it returns a 0.
 | 
						|
//
 | 
						|
//  As soon as one of the Clone() calls succeeds, this function will pass
 | 
						|
//  back a copy of the storage object.  Otherwise it will keep trying until
 | 
						|
//  it runs out of objects to clone.  When it finally fails, it returns
 | 
						|
//  a 0.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Either a pointer to a newly created storage object, or a 0 if no
 | 
						|
//  object could be created for the given type.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release.
 | 
						|
//
 | 
						|
 | 
						|
ALStorage AL_DLL_FAR * AL_PROTO
 | 
						|
ALToolKit::CreateStorageObject( const char AL_DLL_FAR *name,  /* Tag public function */
 | 
						|
                                int object_type )
 | 
						|
{
 | 
						|
    if ( !mpStorages )
 | 
						|
        return 0;
 | 
						|
    for ( int i = 0 ; ; ) {
 | 
						|
        ALStorage *storage;
 | 
						|
        if ( mpStorages[ i ] ) {
 | 
						|
            storage = mpStorages[ i++ ]->Clone( name, object_type );
 | 
						|
            if ( storage )
 | 
						|
                return storage;
 | 
						|
        } else
 | 
						|
            break;
 | 
						|
    }
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 |