443 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			443 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| //
 | |
| // CXL_CMPO.CPP
 | |
| //
 | |
| //  Source file for ArchiveLib 1.0
 | |
| //
 | |
| //  Copyright (c) Greenleaf Software, Inc. 1994
 | |
| //  All Rights Reserved
 | |
| //
 | |
| // CONTENTS
 | |
| //
 | |
| //  newALCompressed()
 | |
| //  deleteALCompressed()
 | |
| //  ALCompressedInsert()
 | |
| //  ALCompressedExtract()
 | |
| //  ALCompresssedGetStatusCode()
 | |
| //  ALCompressedSetError()
 | |
| //  ALCompressedGetStatusString()
 | |
| //  ALCompressedGetStatusStringVB()
 | |
| //  ALCompressedGetStatusDetail()
 | |
| //  ALCompressedGetStatusDetailVB()
 | |
| 
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This file contains all the C/VB translation routines to support 
 | |
| //  operations on ALCompressedObject objects.  These routines are all
 | |
| //  going to be short and sweet, so don't expect too much explanation.
 | |
| //  The meat can all be found in CMPOBJ.CPP
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //  May 24, 1994  1.0A  : First release
 | |
| //
 | |
| //
 | |
| 
 | |
| #include "arclib.h"
 | |
| #pragma hdrstop
 | |
| 
 | |
| #include "al.h"
 | |
| #include "alcxl.h"
 | |
| 
 | |
| //
 | |
| // extern "C" hALCompressed newALCompressed( hALStorage storage,
 | |
| //                                           hALEngine engine )
 | |
| //
 | |
| // ARGUMENTS:
 | |
| //
 | |
| //  storage  :  A handle for (pointer to) an ALStorage object that is
 | |
| //              going to hold the compressed object.
 | |
| //
 | |
| //  engine   :  A handle for (pointer to) an ALCompressionEngine that will
 | |
| //              be used to insert and extract objects from the the storage
 | |
| //              object.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  A handle for (pointer to) a newly created ALCompressedObject, or 0 if
 | |
| //  the constructor failed.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is the C/VB translation function for the C++ constructor
 | |
| //  ALCompressedObject::ALCompressedObject().  See CMPOBJ.CPP for
 | |
| //  details on what happens in the member function.
 | |
| //
 | |
| //  In the translation function, we just check the arguments for
 | |
| //  correct type (in the debug version) and call the function, returning
 | |
| //  the result to the calling function.
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   May 24, 1994  1.0A  : First release
 | |
| //
 | |
| 
 | |
| extern "C" hALCompressed AL_FUNCTION
 | |
| newALCompressed( hALStorage storage,
 | |
|                  hALEngine engine )
 | |
| {
 | |
|     AL_ASSERT_OBJECT( storage, ALStorage, "newALCompressed" );
 | |
|     AL_ASSERT_OBJECT( engine, ALCompressionEngine, "newALCompressed" );
 | |
|     return (hALCompressed) new ALCompressedObject( *(ALStorage *) storage, *(ALCompressionEngine *) engine );
 | |
| }
 | |
| 
 | |
| //
 | |
| // extern "C" void deleteALCompressed( hALCompressed this_object )
 | |
| //
 | |
| // ARGUMENTS:
 | |
| //
 | |
| //  this_object  : A handle for (pointer to) an ALCompressedObject
 | |
| //                 that is going to be destroyed.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  Nothing, this is a destructor.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is the C/VB translation function for the C++ destructor
 | |
| //  ALCompressedObject::~ALCompressedObject().  See CMPOBJ.CPP for
 | |
| //  details on what happens in the member function.
 | |
| //
 | |
| //  In the translation function, we just check the arguments for
 | |
| //  correct type (in the debug version) and call the function.
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   May 24, 1994  1.0A  : First release
 | |
| //
 | |
| 
 | |
| extern "C" void AL_FUNCTION deleteALCompressed( hALCompressed this_object )
 | |
| {
 | |
|     AL_ASSERT_OBJECT( this_object, ALCompressedObject, "deleteALCompressed" );
 | |
|     delete (ALCompressedObject *) this_object;
 | |
| }
 | |
| 
 | |
| //
 | |
| // extern "C" int ALCompressedInsert( hALCompressed this_object,
 | |
| //                                    hALStorage input_object )
 | |
| //
 | |
| // ARGUMENTS:
 | |
| //
 | |
| //  this_object  : A handle for (pointer to) an ALCompressedObject
 | |
| //                 that is going to have a storage object inserted
 | |
| //                 int it.
 | |
| //
 | |
| //  input_object : A handle for (pointer to) a storage object that is
 | |
| //                 going to get compressed into this_object.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  AL_SUCCESS for success, or < AL_SUCCESS for one of many failures
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is the C/VB translation function for the C++ function
 | |
| //  ALCompressedObject::Insert().  See CMPOBJ.CPP for more details
 | |
| //  on what happens in the member function.
 | |
| //
 | |
| //  In the translation function, we just check the arguments for
 | |
| //  correct type (in the debug version) and call the function.  We
 | |
| //  return the integer result of the function directly to the calling
 | |
| //  function.
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   May 24, 1994  1.0A  : First release
 | |
| //
 | |
| 
 | |
| extern "C" int AL_FUNCTION ALCompressedInsert( hALCompressed this_object,
 | |
|                                                 hALStorage input_object )
 | |
| {
 | |
|     AL_ASSERT_OBJECT( this_object, ALCompressedObject, "ALCompressedInsert" );
 | |
|     AL_ASSERT_OBJECT( input_object, ALStorage, "ALCompressedInsert" );
 | |
|     return ( (ALCompressedObject *) this_object )->Insert( * (ALStorage *) input_object );
 | |
| }
 | |
| 
 | |
| //
 | |
| // extern "C" int ALCompressedExtract( hALCompressed this_object,
 | |
| //                                     hALStorage output_object )
 | |
| //
 | |
| // ARGUMENTS:
 | |
| //
 | |
| //  this_object  : A handle for (pointer to) an ALCompressedObject
 | |
| //                 that is going to have a storage object extracted
 | |
| //                 from it.
 | |
| //
 | |
| //  output_object: A handle for (pointer to) a storage object that is
 | |
| //                 going to receive the uncompressed object.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  AL_SUCCESS for success, or < AL_SUCCESS for one of many failures
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is the C/VB translation function for the C++ function
 | |
| //  ALCompressedObject::Extract().  See CMPOBJ.CPP for more details
 | |
| //  on what happens in the member function.
 | |
| //
 | |
| //  In the translation function, we just check the arguments for
 | |
| //  correct type (in the debug version) and call the function.  We
 | |
| //  return the integer result of the function directly to the calling
 | |
| //  function.
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   May 24, 1994  1.0A  : First release
 | |
| //
 | |
| 
 | |
| extern "C" int AL_FUNCTION ALCompressedExtract( hALCompressed this_object,
 | |
|                                                  hALStorage output_object )
 | |
| {
 | |
|     AL_ASSERT_OBJECT( this_object, ALCompressedObject, "ALCompressedExtract" );
 | |
|     AL_ASSERT_OBJECT( output_object, ALStorage, "ALCompressedExtract" );
 | |
|     return ( (ALCompressedObject *) this_object )->Extract( * (ALStorage *) output_object );
 | |
| }
 | |
| 
 | |
| //
 | |
| // extern "C" int ALCompressedGetStatusCode( hALCompressed this_object )
 | |
| //
 | |
| // ARGUMENTS:
 | |
| //
 | |
| //  this_object   : A handle for (pointer to) an ALCompressedObject.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  An integer that contains the current status code for the object.
 | |
| //  Note that values of < 0 always indicate an error conditions.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is the C/VB wrapper function for the C++ function
 | |
| //  ALName::GetStatusCode() as implemented for objects of type
 | |
| //  ALCompressedObject.  For details on how the member 
 | |
| //  function actually works, take a look at 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.
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   May 24, 1994  1.0A  : First release
 | |
| //
 | |
| 
 | |
| extern "C" int AL_FUNCTION 
 | |
| ALCompressedGetStatusCode( hALCompressed this_object )
 | |
| {
 | |
|     AL_ASSERT_OBJECT( this_object, ALCompressedObject, "ALCompressedGetStatusCode" );
 | |
|     return ( (ALCompressedObject *) this_object )->mStatus.GetStatusCode();
 | |
| }
 | |
| 
 | |
| //
 | |
| // extern "C" int ALCompressedSetError( hALCompressed this_object,
 | |
| //                                      int error,
 | |
| //                                      char *text )
 | |
| //
 | |
| // ARGUMENTS:
 | |
| //
 | |
| //  this_object   : A handle for (pointer to) an ALCompressedObject.
 | |
| //                  We are going to set the object'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.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  Returns the error code that you passed it.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is the C/VB wrapper function for the C++ member function
 | |
| //  ALName::SetError(), as applied to an ALCompressedObject.  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.  
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   May 24, 1994  1.0A  : First release
 | |
| //
 | |
| 
 | |
| extern "C" int AL_FUNCTION ALCompressedSetError( hALCompressed this_object,
 | |
|                                                   int error_code,
 | |
|                                                   char AL_DLL_FAR *text )
 | |
| {
 | |
|     AL_ASSERT_OBJECT( this_object, ALCompressedObject, "ALCompressedSetError" );
 | |
|     ( (ALCompressedObject *) this_object )->mStatus.SetError( error_code, text );
 | |
|     return error_code;
 | |
| }
 | |
| 
 | |
| //
 | |
| // extern "C" char *ALCompressedGetStatusString( hALCompressed this_object )
 | |
| //
 | |
| // ARGUMENTS:
 | |
| //
 | |
| //  this_object   : A handle for (pointer to) an ALCompressedObject.
 | |
| //                  We want to get the string translation of the error
 | |
| //                  code for this object.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  Always returns a pointer to a short string translation of the
 | |
| //  current error code.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is the C wrapper function for the C++ function
 | |
| //  ALName::GetStatusString(), as implemented for class ALCompressedObject.
 | |
| //  Note that we need a completely different function in order to
 | |
| //  return strings to VB programmers, this function is only good for C!
 | |
| //
 | |
| //  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.  
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   May 24, 1994  1.0A  : First release
 | |
| //
 | |
| 
 | |
| extern "C" char AL_DLL_FAR * AL_FUNCTION
 | |
| ALCompressedGetStatusString( hALCompressed this_object )
 | |
| {
 | |
|     AL_ASSERT_OBJECT( this_object, ALCompressedObject, "ALCompressedGetStatusString" );
 | |
|     const char *status = ( (ALCompressedObject *) this_object )->mStatus.GetStatusString();
 | |
|     if ( status == 0 )
 | |
|         status = "";
 | |
|     return (char AL_DLL_FAR *) status;
 | |
| }
 | |
| 
 | |
| //
 | |
| // extern "C" long ALCompressedGetStatusStringVB( hALCompressed this_object )
 | |
| //
 | |
| // ARGUMENTS:
 | |
| //
 | |
| //  this_object   : A handle for (pointer to) an ALCompressedObject.
 | |
| //                  We want to get the string translation of the error
 | |
| //                  code for this object.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  Always returns a VB handle (pointer?) to a short string translation of 
 | |
| //  the current error code for the ALCompressedObject.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is the VB wrapper function for the C++ function
 | |
| //  ALName::GetStatusString(), as implemented for class ALCompressedObject.
 | |
| //  Note that we need a completely different function to return strings
 | |
| //  to C programmers.  In this case, we use a special VB translation routine
 | |
| //  to convert a C string to one that is nice and easy for VB to use.
 | |
| //
 | |
| //  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.  
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   May 24, 1994  1.0A  : First release
 | |
| //
 | |
| 
 | |
| #if defined( AL_BUILDING_DLL ) && defined( AL_WINDOWS_GUI ) && !defined( AL_FLAT_MODEL )
 | |
| extern "C" long AL_FUNCTION ALCompressedGetStatusStringVB( hALCompressed this_object )
 | |
| {
 | |
|     AL_ASSERT_OBJECT( this_object, ALCompressedObject, "ALCompressedGetStatusStringVB" );
 | |
|     const char _far *status = ( (ALCompressedObject *) this_object )->mStatus.GetStatusString();
 | |
|     if ( status == 0 )
 | |
|         status = "";
 | |
|     return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) );
 | |
| }
 | |
| #endif
 | |
| 
 | |
| //
 | |
| // extern "C" char *ALCompressedGetStatusDetail( hALCompressed this_object )
 | |
| //
 | |
| // ARGUMENTS:
 | |
| //
 | |
| //  this_object   : A handle for (pointer to) an ALCompressedObject.
 | |
| //                  We want to get the detailed string describing this
 | |
| //                  object's current status.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  Always returns a pointer to a status detail message.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is the C wrapper function for the C++ function
 | |
| //  ALName::GetStatusDetail(), as implemented for class ALCompressedObject.
 | |
| //  Note that we need a completely different function in order to
 | |
| //  return strings to VB programmers.
 | |
| //
 | |
| //  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.  
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   May 24, 1994  1.0A  : First release
 | |
| //
 | |
| 
 | |
| extern "C" char AL_DLL_FAR * AL_FUNCTION
 | |
| ALCompressedGetStatusDetail( hALCompressed this_object )
 | |
| {
 | |
|     AL_ASSERT_OBJECT( this_object, ALCompressedObject, "ALCompressedGetStatusDetail" );
 | |
|     const char *status = ( (ALCompressedObject *) this_object )->mStatus.GetStatusDetail();
 | |
|     if ( status == 0 )
 | |
|         status = "";
 | |
|     return (char AL_DLL_FAR *) status;
 | |
| }
 | |
| 
 | |
| //
 | |
| // extern "C" long ALCompressedGetStatusDetailVB( hALCompressed this_object )
 | |
| //
 | |
| // ARGUMENTS:
 | |
| //
 | |
| //  this_object   : A handle for (pointer to) an ALCompressedobject.
 | |
| //                  We want to get the detailed status message for
 | |
| //                  this object.
 | |
| //
 | |
| // RETURNS
 | |
| //
 | |
| //  Always returns a VB handle (pointer?) to a translation of 
 | |
| //  the current status detail for the ALCompressedObject.
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is the VB wrapper function for the C++ function
 | |
| //  ALName::GetStatusDetail(), as implemented for class ALCompressedObject.
 | |
| //  Note that we need a completely different function to return strings
 | |
| //  to C programmers.  In this case, we use a special VB translation routine
 | |
| //  to convert a C string to one that is nice and easy for VB to use.
 | |
| //
 | |
| //  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.  
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //   May 24, 1994  1.0A  : First release
 | |
| //
 | |
| 
 | |
| #if defined( AL_BUILDING_DLL ) && defined( AL_WINDOWS_GUI ) && !defined( AL_FLAT_MODEL )
 | |
| extern "C" long AL_FUNCTION
 | |
| ALCompressedGetStatusDetailVB( hALCompressed this_object )
 | |
| {
 | |
|     AL_ASSERT_OBJECT( this_object, ALCompressedObject, "ALCompressedGetStatusDetailVB" );
 | |
|     const char _far *status = ( (ALCompressedObject *) this_object )->mStatus.GetStatusDetail();
 | |
|     if ( status == 0 )
 | |
|         status = "";
 | |
|     return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) );
 | |
| }
 | |
| #endif
 | |
| 
 |