745 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			745 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
//
 | 
						|
// CXL_ARCH.CPP
 | 
						|
//
 | 
						|
//  Source file for ArchiveLib 2.0
 | 
						|
//
 | 
						|
//  Copyright (c) Greenleaf Software, Inc. 1994-1996
 | 
						|
//  All Rights Reserved
 | 
						|
//
 | 
						|
// CONTENTS
 | 
						|
//
 | 
						|
//  ALArchiveReadDirectory()
 | 
						|
//  ALArchiveGetComment()
 | 
						|
//  ALArchiveGetCommentVB()
 | 
						|
//  ALArchiveGetStorage()
 | 
						|
//  ALArchiveSetError()
 | 
						|
//  ALArchiveGetStatusCode()
 | 
						|
//  ALArchiveGetStatusString()
 | 
						|
//  ALArchiveGetStatusStringVB()
 | 
						|
//  ALArchiveGetStatusStringVB()
 | 
						|
//  ALArchiveGetStatusDetail()
 | 
						|
//  ALArchiveGetStatusDetailVB()
 | 
						|
//  ALArchiveGetVersion()
 | 
						|
//  ALArchiveClearError()
 | 
						|
//  ALArchiveSetStripOnInsert()
 | 
						|
//  ALArchiveSetStripOnExtract()
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This file contains all the C translation layer routines for the
 | 
						|
//  pure virtual member functions in ALArchive, as well as some
 | 
						|
//  member access routines.
 | 
						|
//
 | 
						|
//  Functions that simply provide a translation layer for an existing C++
 | 
						|
//  function are always located in the same file as the C++ function.  The
 | 
						|
//  function sign this file don't have any existing C functions to attach
 | 
						|
//  to, since they implement either pure virtual functions or member access
 | 
						|
//  routines.
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//  May 22, 1994  1.0A   : First release
 | 
						|
//
 | 
						|
//  August 10, 1994 1.0B : Made a few patches in the #ifdefs around VB
 | 
						|
//                         functions, mostly for cosmetic reasons.  I used
 | 
						|
//                         to have to test a whole bunch of #defines to
 | 
						|
//                         see if I was building a VB DLL.  Now I just
 | 
						|
//                         have to test AL_VB.
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
 | 
						|
#include "arclib.h"
 | 
						|
#if !defined( AL_IBM )
 | 
						|
#pragma hdrstop
 | 
						|
#endif
 | 
						|
 | 
						|
#include "_vbutil.h"
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchive::ReadDirectory()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C++  C  VB  Delphi
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Read an archive directory into an ALEntryList object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  virtual int ALArchive::ReadDirectory( ALEntryList &list );
 | 
						|
//
 | 
						|
//  Note that this is a pure virtual function, and does not have
 | 
						|
//  an implementation in the base class ALArchive.
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  int ALArchiveReadDirectory( hALArchive this_object,
 | 
						|
//                              hALEntryList list );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Function ALArchiveReadDirectory Lib "AL20LW"
 | 
						|
//    (ByVal this_object, ByVal list&)
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  function ALArchiveReadDirectory( this_object : hALEntryList;
 | 
						|
//                                   list : hALEntryList ) : Integer;
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object   : A handle for (pointer to) an ALArchiveBase object.
 | 
						|
//                  This is the archive that is going to have its directory
 | 
						|
//                  read into the list.  Be sure to note that the C++
 | 
						|
//                  member function version of this function doesn't need
 | 
						|
//                  'this_object', since it has implicit access to 'this'.
 | 
						|
//
 | 
						|
//  list          : A handle for (pointer to) an ALEntryList object.
 | 
						|
//                  The list is going to receive descriptions for all
 | 
						|
//                  of the compressed objects stored in the archive.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is the C/VB wrapper function for the C++ function
 | 
						|
//  ALArchiveBase::ReadDirectory(ALEntrylist&).  This is a pure
 | 
						|
//  virtual function, so the base class doesn't do anything.  To
 | 
						|
//  see what is *really* happening when you call this function, you
 | 
						|
//  need to look at ALPkArchive::ReadDirectory() or
 | 
						|
//  ALGlArchive::ReadDirectory().
 | 
						|
//
 | 
						|
//  However, the overview of both versions of the function is identical.
 | 
						|
//  The archive is opened, and a directory of ALEntry objects is added
 | 
						|
//  to the list.  There should be a single new ALEntry added to the list
 | 
						|
//  for each object in the archive.  The actual storage object type,
 | 
						|
//  and compression/decompression engine types will be determined by the
 | 
						|
//  integer values stored in the archive, combined with the the toolkit
 | 
						|
//  owned by the ALEntryList.
 | 
						|
//
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  AL_SUCCESS for a successful read, < AL_SUCCESS for a failure.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE int AL_FUNCTION
 | 
						|
ALArchiveReadDirectory( hALArchive this_object,  /* Tag public function */
 | 
						|
                        hALEntryList list )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveReadDirectory" );
 | 
						|
    AL_ASSERT_OBJECT( list, ALEntryList, "ALArchiveReadDirectory" );
 | 
						|
    return ((ALArchive *) this_object )->ReadDirectory( *( (ALEntryList *) list ) );
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchive::GetComment()
 | 
						|
//
 | 
						|
//  This function is documented in H/ARC.INL, where the inline version of the
 | 
						|
//  C++ member function is found.  The source for the C/Delphi/VB versions
 | 
						|
//  can't be inlined, so it is found here.
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
 | 
						|
ALArchiveGetComment( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveGetComment" );
 | 
						|
    return (char *) ( (ALArchive *) this_object )->GetComment();
 | 
						|
}
 | 
						|
 | 
						|
#if defined( AL_VB )
 | 
						|
 | 
						|
extern "C" AL_LINKAGE long AL_FUNCTION
 | 
						|
ALArchiveGetCommentVB( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveGetCommentVB" );
 | 
						|
    const char _far *status = ( (ALArchive *) this_object )->GetComment();
 | 
						|
    if ( status == 0 )
 | 
						|
        status = "";
 | 
						|
    return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) );
 | 
						|
}
 | 
						|
 | 
						|
#elif defined( AL_VB32 )
 | 
						|
 | 
						|
extern "C" AL_LINKAGE BSTR AL_FUNCTION
 | 
						|
ALArchiveGetCommentVB( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveGetCommentVB" );
 | 
						|
    const char *status = ( (ALArchive *) this_object )->GetComment();
 | 
						|
    if ( status == 0 )
 | 
						|
        status = "";
 | 
						|
    return SysAllocStringByteLen( status, strlen( status ) );
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchive::GetStorageObject()
 | 
						|
//
 | 
						|
//  This function is documend in H/ARC.INL, where the inline version of the
 | 
						|
//  C++ member function is found.  The source for the C/Delphi/VB versions
 | 
						|
//  can't be inlined, so it is found here.
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE hALStorage AL_FUNCTION
 | 
						|
ALArchiveGetStorage( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT( ((ALArchive *) this_object)->GoodTag(),
 | 
						|
               "archive argument is not a valid ALArchive" );
 | 
						|
    ALStorage *obj = ((ALArchive *) this_object)->GetStorageObject();
 | 
						|
    return (hALStorage) obj;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchiveSetError()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C  VB  Delphi
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Set an error code for the Archive object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None, C++ programmers can directly access the ALArchive::mStatus
 | 
						|
//  member, so they call ALArchive::mStatus.SetError().
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  int ALArchiveSetError( hALArchive this_object,
 | 
						|
//                         int error,
 | 
						|
//                         char *text );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Function ALArchiveSetError Lib "AL20LW"
 | 
						|
//    (ByVal this_object&, ByVal error%, ByVal test$ ) As Integer
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  function ALArchiveSetError( this_object : hALArchive;
 | 
						|
//                              error : Integer;
 | 
						|
//                              text : PChar ) : Integer;
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object   : A handle for (pointer to) an ALArchive object.
 | 
						|
//                  We are going to set the archive's status member
 | 
						|
//                  so that it is in an error state.
 | 
						|
//
 | 
						|
//  error         : The error code to apply to the object.  Values from
 | 
						|
//                  ALDEFS.H are good, but it really doesn't matter as
 | 
						|
//                  long as you use a negative number.
 | 
						|
//
 | 
						|
//  text          : The text of the error message you want to associate with
 | 
						|
//                  this error.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is the C/VB wrapper function for the C++ member function
 | 
						|
//  ALName::SetError(), as applied to an ALArchive object.  For more
 | 
						|
//  details on how the function actually works, check out OBJNAME.CPP.
 | 
						|
//
 | 
						|
//  All that happens here is that the arguments are checked for correct
 | 
						|
//  type (when in debug mode), and a call is made to the appropriate
 | 
						|
//  member function, with lots of casting.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Returns the error code that you passed it.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE int AL_FUNCTION
 | 
						|
ALArchiveSetError( hALArchive this_object,  /* Tag public function */
 | 
						|
                   int error,
 | 
						|
                   char AL_DLL_FAR *text )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveSetError" );
 | 
						|
    ( (ALArchive *) this_object )->mStatus.SetError( error, text );
 | 
						|
    return error;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchiveGetStatusCode()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C  VB  Delphi
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Get the integer status code for an Archive.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None.  C++ programmers have direct access to the ALArchive::mStatus
 | 
						|
//  memeber, so they can directly call ALArchive::mStatus.GetStatusCode().
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  int ALArchiveGetStatusCode( hALArchive this_object );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Function ALArchiveGetStatusCode Lib "AL20LW"
 | 
						|
//    (ByVal this_object&) As Integer
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  function ALArchiveGetStatusCode( this_object : hALArchive ) : Integer;
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object   : A handle for (pointer to) an ALArchive object.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is the C/VB wrapper function for the C++ access function
 | 
						|
//  ALArchive.mStatus::GetStatusCode().  For details on how the member
 | 
						|
//  function in ALName works, see ALName::GetStatusCode().
 | 
						|
//
 | 
						|
//  All that happens here is that the arguments are checked for correct
 | 
						|
//  type (when in debug mode), and a call is made to the appropriate
 | 
						|
//  member function, with some casting.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  An integer that contains the current status code for the object.
 | 
						|
//  Note that values of < 0 always indicate an error conditions.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE int AL_FUNCTION
 | 
						|
ALArchiveGetStatusCode( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive , "ALArchiveGetStatusCode" );
 | 
						|
    return ( (ALArchive *) this_object )->mStatus.GetStatusCode();
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchiveGetStatusString()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C  VB  Delphi
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Return the short status string from the Archive::mStatus member.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None.  C++ programmers have access to the ALArchive::mStatus member,
 | 
						|
//  so they can call ALStatus::GetStatusString() directly, instead of
 | 
						|
//  using this translation function.
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  char *ALArchiveGetStatusString( hALArchive this_object );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Function ALArchiveGetStatusString Lib "AL20LW"
 | 
						|
//    Alias "ALArchiveGetStatusStringVB"
 | 
						|
//    (ByVal this_object&) As String
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  function ALArchiveGetStatusString( this_object : hALArchive ) : PChar;
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object   : A handle for (pointer to) an ALArchive object.
 | 
						|
//                  We want to get the string translation of the error
 | 
						|
//                  code for this object.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is the C wrapper function that provides access to the mStatus
 | 
						|
//  member.  This routine calls GetStatusString for the member, returning
 | 
						|
//  a short descriptive character string.
 | 
						|
//
 | 
						|
//  Note that we have a slightly modified function to return strings
 | 
						|
//  to VB programmers.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Always returns a pointer to a short string translation of the
 | 
						|
//  current error code.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
 | 
						|
ALArchiveGetStatusString( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveGetStatusString" );
 | 
						|
    const char *status = ( (ALArchive *) this_object )->mStatus.GetStatusString();
 | 
						|
    if ( status == 0 )
 | 
						|
        status = "";
 | 
						|
    return (char AL_DLL_FAR *) status;
 | 
						|
}
 | 
						|
 | 
						|
#if defined( AL_VB )
 | 
						|
 | 
						|
extern "C" AL_LINKAGE long AL_FUNCTION
 | 
						|
ALArchiveGetStatusStringVB( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveGetStatusStringVB" );
 | 
						|
    const char _far *status = ( (ALArchive *) this_object )->mStatus.GetStatusString();
 | 
						|
    if ( status == 0 )
 | 
						|
        status = "";
 | 
						|
    return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) );
 | 
						|
}
 | 
						|
 | 
						|
#elif defined( AL_VB32 )
 | 
						|
 | 
						|
extern "C" AL_LINKAGE BSTR AL_FUNCTION
 | 
						|
ALArchiveGetStatusStringVB( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveGetStatusStringVB" );
 | 
						|
    const char *status = ( (ALArchive *) this_object )->mStatus.GetStatusString();
 | 
						|
    if ( status == 0 )
 | 
						|
        status = "";
 | 
						|
    return SysAllocStringByteLen( status, strlen( status ) );
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchiveGetStatusDetail()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C  VB  Delphi
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Read the status detail message from an ALArchive mStatus member.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None.  C++ programmers have access to the ALArchive::mStatus member,
 | 
						|
//  so they can call ALStatus::GetStatusDetail() directly, instead of
 | 
						|
//  using this translation function.
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  char *ALArchiveGetStatusDetail( hALArchive this_object );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Function ALArchiveGetStatusDetail Lib "AL20LW"
 | 
						|
//    Alias "ALArchiveGetStatusDetailVB"
 | 
						|
//    (ByVal this_object&) As String
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  function ALArchiveGetStatusDetail( this_object : hALArchive ) : PChar;
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object   : A handle for (pointer to) an ALArchive object.
 | 
						|
//                  We want to get the detailed string describing this
 | 
						|
//                  object's current status.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This is the C wrapper function for the C++ function
 | 
						|
//  ALName::GetStatusDetail(), as implemented for the mStatus member
 | 
						|
//  of class ALArchive. Note that we need a slightly different function
 | 
						|
//  to return strings to VB programmers.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Always returns a pointer to a status detail message.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
 | 
						|
ALArchiveGetStatusDetail( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveGetStatusDetail" );
 | 
						|
    const char *status = ( (ALArchive *) this_object )->mStatus.GetStatusDetail();
 | 
						|
    if ( status == 0 )
 | 
						|
        status = "";
 | 
						|
    return (char AL_DLL_FAR *) status;
 | 
						|
}
 | 
						|
 | 
						|
#if defined( AL_VB )
 | 
						|
 | 
						|
extern "C" AL_LINKAGE long AL_FUNCTION
 | 
						|
ALArchiveGetStatusDetailVB( hALArchive archive )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( archive, ALArchive, "ALArchiveGetStatusDetailVB" );
 | 
						|
    const char _far *status = ( (ALArchive *) archive)->mStatus.GetStatusDetail();
 | 
						|
    if ( status == 0 )
 | 
						|
        status = "";
 | 
						|
    return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) );
 | 
						|
}
 | 
						|
 | 
						|
#elif defined( AL_VB32 )
 | 
						|
 | 
						|
extern "C" AL_LINKAGE BSTR AL_FUNCTION
 | 
						|
ALArchiveGetStatusDetailVB( hALArchive archive )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( archive, ALArchive, "ALArchiveGetStatusDetailVB" );
 | 
						|
    const char *status = ( (ALArchive *) archive)->mStatus.GetStatusDetail();
 | 
						|
    if ( status == 0 )
 | 
						|
        status = "";
 | 
						|
    return SysAllocStringByteLen( status, strlen( status ) );
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchive::GetVersion()
 | 
						|
//
 | 
						|
//  This function is documend in H/ARC.INL, where the inline version of the
 | 
						|
//  C++ member function is found.  The source for the C/Delphi/VB versions
 | 
						|
//  can't be inlined, so it is found here.
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE int AL_FUNCTION
 | 
						|
ALArchiveGetVersion( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveGetVersion" );
 | 
						|
    return ( (ALArchive *) this_object )->GetVersion();
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchive::ClearError()
 | 
						|
//
 | 
						|
//  This function is documented in H/ARC.INL, where the inline version of the
 | 
						|
//  C++ member function is found.  The source for the C/Delphi/VB versions
 | 
						|
//  can't be inlined, so it is found here.
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE void AL_FUNCTION
 | 
						|
ALArchiveClearError( hALArchive this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveClearError" );
 | 
						|
    ( (ALArchive *) this_object )->ClearError();
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchiveSetStripOnInsert()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C  VB  Delphi
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Set the insertion strip flag for an archive object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None, C++ programmers can directly access the ALArchive
 | 
						|
//  member and set it true or false manually.
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  void ALArchiveSetStripOnInsert( hALArchive this_object, int flag )
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Sub ALArchiveSetStripOnInsert Lib "AL20LW"
 | 
						|
//    (ByVal this_object&, ByVal flag% )
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  procedure ALArchiveSetStripOnInsert( this_object : hALArchive;
 | 
						|
//                                       flag : Integer );
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object   : A handle for (pointer to) an ALArchive object.
 | 
						|
//                  We are going to modify the archive's strip memeber.
 | 
						|
//
 | 
						|
//  flag          : The new setting for the flag.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  When inserting members into an archive, you will frequently be using
 | 
						|
//  fully qualified file names, which include a path.  If you want to
 | 
						|
//  store just the file name, and throw away the path component, you just
 | 
						|
//  set the mfStripOnInsert flag, and the rest is automatic.
 | 
						|
//
 | 
						|
//  C++ programmers can modify this element directly, so there is no
 | 
						|
//  C++ version of this function.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  None, this is a void function.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE void AL_FUNCTION
 | 
						|
ALArchiveSetStripOnInsert( hALArchive this_object, int flag )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveSetStripOnInsert" );
 | 
						|
    ((ALArchive *) this_object)->mfStripPathOnInsert = flag;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALArchiveSetStripOnExtract()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C  VB  Delphi
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Set the extraction strip flag for an archive object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None, C++ programmers can directly access the ALArchive
 | 
						|
//  member and set it true or false manually.
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//
 | 
						|
//  void ALArchiveSetStripOnExtract( hALArchive this_object, int flag )
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Sub ALArchiveSetStripOnExtract Lib "AL20LW"
 | 
						|
//    (ByVal this_object&, ByVal flag% )
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  procedure ALArchiveSetStripOnExtract( this_object : hALArchive;
 | 
						|
//                                        flag : Integer );
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object   : A handle for (pointer to) an ALArchive object.
 | 
						|
//                  We are going to modify the archive's strip memeber.
 | 
						|
//
 | 
						|
//  flag          : The new setting for the flag.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  When extracting objects from an archive, you will frequently be using
 | 
						|
//  fully qualified file names, which include a path.  If you want to
 | 
						|
//  extract the file into the current directory, and ignore the path
 | 
						|
//  component, you just set the mfStripOnExtract flag, and the rest is
 | 
						|
//  automatic.
 | 
						|
//
 | 
						|
//  C++ programmers can modify this element directly, so there is no
 | 
						|
//  C++ version of this function.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  None, this is a void function.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE void AL_FUNCTION
 | 
						|
ALArchiveSetStripOnExtract( hALArchive this_object, int flag )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveSetStripOnExtract" );
 | 
						|
    ((ALArchive *) this_object)->mfStripPathOnExtract = flag;
 | 
						|
}
 | 
						|
 | 
						|
 |