// // CXL_ARCH.CPP // // Source file for ArchiveLib 1.0 // // Copyright (c) Greenleaf Software, Inc. 1994 // All Rights Reserved // // CONTENTS // // ALArchiveExtract() // ALArchiveCreate() // ALArchiveCreateFromArchive() // ALArchiveAppend() // ALArchiveAppendFromArchive() // ALArchiveReadDirectory() // ALArchiveWriteDirectory() // ALArchiveDelete() // ALArchiveSetComment() // ALArchiveGetComment() // ALArchiveGetCommentVB() // ALArchiveGetStorage() // ALArchiveFillListBoxWindow() // ALArchiveFillListBoxDialog() // deleteALArchive() // ALArchiveSetError() // ALArchiveGetStatusCode() // ALArchiveGetStatusString() // ALArchiveGetStatusStringVB() // ALArchiveGetStatusDetail() // ALArchiveGetStatusDetailVB() // ALArchiveGetVersion() // // DESCRIPTION // // This file contains all the C translation layer routines for the // member functions in ALArchiveBase. Note that we shorten the name // of the base class to ALArchive here. // // Most of the descriptions in this file of the routines are going // to be pretty skimpy. After all, there isn't much code to look // at here anyway. For detailed descriptions, you will want to // look in ARCHIVEB.CPP for the C++ archive base class member functions. // // The one thing all these functions do have in common is that they // perform type checking on the arguments passed from C or VB. // // REVISION HISTORY // // May 22, 1994 2.0A : First release // // #include "arclib.h" #pragma hdrstop #include "al.h" #include "alcxl.h" // // extern "C" int ALArchiveExtract( hALArchive this_object, // hALEntryList list ) // // ARGUMENTS: // // this_object : The handle of (pointer to) an ALArchiveBase object. // // list : The handle of (pointer to) an ALEntryList object. // // RETURNS // // A status code, AL_SUCCESS or < AL_SUCCESS in case of an error. // // DESCRIPTION // // This is the wrapper function for ALArchiveBase::Extract(). See the // function in ARCHIVEB.CPP for more details. // // REVISION HISTORY // // May 22, 1994 2.0A : First release // extern "C" int AL_FUNCTION ALArchiveExtract( hALArchive this_object, hALEntryList list ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveExtract" ); AL_ASSERT_OBJECT( list, ALEntryList, "ALArchiveExtract" ); return ((ALArchiveBase *) this_object )->Extract( *( (ALEntryList *) list ) ); } // // extern "C" int ALArchiveCreate( hALArchive this_object, // hALEntryList list ) // // ARGUMENTS: // // this_object : The handle of (pointer to) an ALArchiveBase object. // // list : The handle of (pointer to) an ALEntryList object. // // RETURNS // // AL_SUCCESS for successful creation, < AL_SUCCESS for a failure. // // DESCRIPTION // // This is the C/VB wrapper function that supports the // ALArchiveBase::Create(ALEntryList&) function. For details on the // internals, see ARCHIVEB.CPP. Note that the two arguments // are checked for correct type. The second version of // ALArchiveBase::Create() is found below. // // // REVISION HISTORY // // May 24, 1994 1.0A : First release // extern "C" int AL_FUNCTION ALArchiveCreate( hALArchive this_object, hALEntryList list ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveCreate" ); AL_ASSERT_OBJECT( list, ALEntryList, "ALArchiveCreate" ); return ((ALArchiveBase *) this_object )->Create( *( (ALEntryList *) list ) ); } // // extern "C" int ALArchiveCreateFromArchive( hALArchive this_object, // hALArchive input_archive, // hALEntryList list ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // This is the archive that is going to be created. // // input_archive : A handle for (pointer to) an ALArchiveBase object. // This is the archive that contains the compressed // objects that are going to be inserted. // // list : A handle for (pointer to) an ALEntryList object. // It will contains descriptions of all the compressed // objects in input_archive that are going to be inserted // into this_object. // // RETURNS // // AL_SUCCESS for successful creation, < AL_SUCCESS for a failure. // // DESCRIPTION // // This is the C/VB wrapper function for the C++ function // ALArchiveBase::Create(ALArchiveBase&,ALEntrylist&). // For details on how the member function actually works, take a // gander at ARCHIVEB.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 ALArchiveCreateFromArchive( hALArchive this_object, hALArchive input_archive, hALEntryList list ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveCreateFromArchive" ); AL_ASSERT_OBJECT( input_archive, ALArchiveBase, "ALArchiveCreateFromArchive" ); AL_ASSERT_OBJECT( list, ALEntryList, "ALArchiveCreateFromArchive" ); return ((ALArchiveBase *) this_object )->Create( *(ALArchiveBase *)input_archive, *( (ALEntryList *) list ) ); } // // extern "C" int ALArchiveAppend( hALArchive this_object, // hALEntryList list ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // This is the archive that is going to have new objects // appended to it. // // list : A handle for (pointer to) an ALEntryList object. // It will contains descriptions of all the standalone // objects that are going to be inserted into this_object. // // RETURNS // // AL_SUCCESS for a successful append, < AL_SUCCESS for a failure. // // DESCRIPTION // // This is the C/VB wrapper function for the C++ function // ALArchiveBase::Append(ALEntrylist&). For details on how the member // function actually works, see ARCHIVEB.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 ALArchiveAppend( hALArchive this_object, hALEntryList list ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveAppend" ); AL_ASSERT_OBJECT( list, ALEntryList, "ALArchiveAppend" ); return ((ALArchiveBase *) this_object )->Append( *( (ALEntryList *) list ) ); } // // extern "C" int ALArchiveAppendFromArchive( hALArchive this_object, // hALArchive input_archive, // hALEntryList list ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // This is the archive that is going to get new stuff // appended to it. // // input_archive : A handle for (pointer to) an ALArchiveBase object. // This is the archive that contains the compressed // objects that are going to be added to this_object. // // list : A handle for (pointer to) an ALEntryList object. // It will contains descriptions of all the compressed // objects in input_archive that are going to be added // to this_object. // // RETURNS // // AL_SUCCESS for a successful append, < AL_SUCCESS for a failure. // // DESCRIPTION // // This is the C/VB wrapper function for the C++ function // ALArchiveBase::Append(ALArchiveBase&,ALEntrylist&). // For details on how the member function actually works, take a // look at ARCHIVEB.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 ALArchiveAppendFromArchive( hALArchive this_object, hALArchive input_archive, hALEntryList list ) { AL_ASSERT( ((ALArchiveBase *) this_object)->GoodTag(), "archive argument is not a valid ALArchiveBase" ); AL_ASSERT( ((ALArchiveBase *) input_archive)->GoodTag(), "input archive argument is not a valid ALArchiveBase" ); AL_ASSERT( ((ALEntryList *) list)->GoodTag(), "list argument is not a valid ALEntryList" ); return ((ALArchiveBase *) this_object )->Append( *(ALArchiveBase *) input_archive, *( (ALEntryList *) list ) ); } // // extern "C" int ALArchiveReadDirectory( hALArchive this_object, // hALEntryList list ) // // 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. // // 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. // // RETURNS // // AL_SUCCESS for a successful read, < AL_SUCCESS for a failure. // // DESCRIPTION // // This is the C/VB wrapper function for the C++ function // ALArchiveBase::ReadDirectory(ALEntrylist&). For details on how // the member function actually works, take a look at ARCHIVEB.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 ALArchiveReadDirectory( hALArchive this_object, hALEntryList list ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveReadDirectory" ); AL_ASSERT_OBJECT( list, ALEntryList, "ALArchiveReadDirectory" ); return ((ALArchiveBase *) this_object )->ReadDirectory( *( (ALEntryList *) list ) ); } // // extern "C" int ALArchiveWriteDirectory( hALArchive this_object, // hALEntryList list ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // This is the archive that is going to get the new copy // of the directory written out to it. // // list : A handle for (pointer to) an ALEntryList object. // The list contains descriptions for all // of the compressed objects stored in the archive. // // RETURNS // // AL_SUCCESS for a successful write, < AL_SUCCESS for a failure. // // DESCRIPTION // // This is the C/VB wrapper function for the C++ function // ALArchiveBase::WriteDirectory(ALEntrylist&). For details on how // the member function actually works, take a look at ARCHIVEB.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 ALArchiveWriteDirectory( hALArchive this_object, hALEntryList list ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveWriteDirectory" ); AL_ASSERT_OBJECT( list, ALEntryList, "ALArchiveWriteDirectory" ); return ( (ALArchiveBase *) this_object )->WriteDirectory( *( (ALEntryList *) list ) ); } // // extern "C" int ALArchiveDelete( hALArchive this_object, // hALEntryList list, // hALArchive output_archive ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // This archive will have some of its compressed // objects copied to the output archive. It will // then be renamed to a backup name, with its contents // unchanged. // // list : A handle for (pointer to) an ALEntryList object. // All of the marked objects in the list will be // deleted (by not copying) from the output_archive. // // output_archive: This archive will get some of the files from // this_object. It will then be renamed to have the // original name of this_object. // // RETURNS // // AL_SUCCESS for a successful deletion, < AL_SUCCESS for a failure. // // DESCRIPTION // // This is the C/VB wrapper function for the C++ function // ALArchiveBase::Delete(). For details on how the member function // actually works, take a look at ARCHIVEB.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 ALArchiveDelete( hALArchive this_object, hALEntryList list, hALArchive output_archive ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveDelete" ); AL_ASSERT_OBJECT( list, ALEntryList, "ALArchiveDelete" ); AL_ASSERT_OBJECT( output_archive, ALArchiveBase, "IALArchiveDelete" ); return ((ALArchiveBase *) this_object )->Delete( *( (ALEntryList *) list ), *( (ALArchiveBase *) output_archive ) ); } // // extern "C" int ALArchiveSetComment( hALArchive this_object, // char *comment ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // We are going to change the comment in archive, although // the new comment won't be stored in the archive until // we do a WriteDirectory(). // // comment : An ASCII string that will be the new comment. Note // that this gets passed properly from both C and VB. // RETURNS // // AL_SUCCESS for a successful update, < AL_SUCCESS for a failure. // // DESCRIPTION // // This is the C/VB wrapper function for the C++ function // ALArchiveBase::SetComment(). For details on how the member function // actually works, take a look at ARCHIVEB.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 ALArchiveSetComment( hALArchive this_object, char *comment ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveSetComment" ); if ( comment == 0 ) comment = ""; return ( (ALArchiveBase *) this_object )->SetComment( comment ); } // // extern "C" char * ALArchiveGetComment( hALArchive this_object ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // We are going to get the comment from this archive. // Note that there won't be any comment here until // you have performed a ReadDirectory(). // RETURNS // // A pointer to the new string, which is stored in the ArchiveBase // object. You can print it, copy it, or whatever, but don't you // dare change it. // // DESCRIPTION // // This is the C wrapper function for the C++ function // ALArchiveBase::GetComment(). For details on how the member function // actually works, take a look at ARCHIVEB.CPP. Very important // to note that this is for C ONLY! VB strings take a special // return type, see the next function. // // 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_FUNCTION ALArchiveGetComment( hALArchive this_object ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveGetComment" ); return (char *) ( (ALArchiveBase *) this_object )->GetComment(); } // // extern "C" long ALArchiveGetCommentVB( hALArchive this_object ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // We are going to get the comment from this archive. // Note that there won't be any comment here until // you have performed a ReadDirectory(). // RETURNS // // A pointer (or something, I'm not really sure) to a VB string. // The string is created inside VB.EXE (I think), by the // special string creation function. // // DESCRIPTION // // This is the VB wrapper function for the C++ function // ALArchiveBase::GetComment(). For details on how the member function // actually works, take a look at ARCHIVEB.CPP. Very important // to note that this is for VB ONLY! We have to do something // special to translate a C character string to a VB native string // type, and the two are not interchangeable!!! // // 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. The return result from the // function has to get ground through the VB string maker before we // have something good to return. // // 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 ALArchiveGetCommentVB( hALArchive this_object ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveGetCommentVB" ); const char _far *status = ( (ALArchiveBase *) this_object )->GetComment(); if ( status == 0 ) status = ""; return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) ); } #endif // // extern "C" hALStorage ALArchiveGetStorage( hALArchive hArchive ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // we are going to get the handle for (pointer to) // the underlying storage object that contains the // archive. // RETURNS // // A handle for (pointer to) an ALStorage object. I think in theory // it isn't possible for this guy to return a 0. // // DESCRIPTION // // This is the C/VB wrapper function for the C++ function // ALArchiveBase::GetStorageObject(). For details on how the member // function actually works, take a look at ARCHIVEB.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" hALStorage AL_FUNCTION ALArchiveGetStorage( hALArchive this_object ) { AL_ASSERT( ((ALArchiveBase *) this_object)->GoodTag(), "archive argument is not a valid ALArchiveBase" ); ALStorage *obj = ((ALArchiveBase *) this_object)->GetStorageObject(); return (hALStorage) obj; } // // extern "C" int ALArchiveFillListBoxWindow( hALArchive this_object, // HWND window ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // We are going to fill a list box with the names // of the storage objects in this archive. // // window : The window handle (not the ID!!!) of a list box. // // RETURNS // // AL_SUCCESS for good things, FillListBox( window ); } // // extern "C" int ALArchiveFillListBoxDialog( hALArchive this_object, // HWND dialog, // int id ); // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // We are going to fill a list box with the names // of the storage objects in this archive. // // window : The window handle of a dialog box that contains // the list box that will be filled. // // id : The id of the list box control in the dialog. // // RETURNS // // AL_SUCCESS for good things, FillListBox( dialog, id ); } #endif // // extern "C" void deleteALArchive( hALArchive this_object ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // We destroy it in this function. // // RETURNS // // No returns from destructors. // // DESCRIPTION // // This is the C/VB wrapper function for the C++ function // ALArchiveBase::~ALArchiveBase(). For details on how the member // function actually works, take a look at ARCHIVEB.CPP. // // Note that this destructor function is virtual, and should be called // to destroy any derived classes as well. // // 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" void AL_FUNCTION deleteALArchive( hALArchive this_object ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "deleteALArchive()" ); delete (ALArchiveBase *) this_object; } // // extern "C" int ALArchiveSetError( hALArchive this_object, // int error, // char *text ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase 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. // // 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 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. // // REVISION HISTORY // // May 24, 1994 1.0A : First release // extern "C" int AL_FUNCTION ALArchiveSetError( hALArchive this_object, int error, char AL_DLL_FAR *text ) { AL_ASSERT_OBJECT( this_object, ALArchive, "ALArchiveSetError" ); ( (ALArchive *) this_object )->mStatus.SetError( error, text ); return error; } // // extern "C" int ALArchiveGetStatusCode( hALArchive this_object ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // // 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 // ALArchiveBase. 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 ALArchiveGetStatusCode( hALArchive this_object ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase , "ALArchiveGetStatusCode" ); return ( (ALArchiveBase *) this_object )->mStatus.GetStatusCode(); } // // extern "C" char *ALArchiveGetStatusString( hALArchive this_object ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // 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 ALArchiveBase. // Note that we need a completely different function 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 ALArchiveGetStatusString( hALArchive this_object ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveGetStatusString" ); const char *status = ( (ALArchiveBase *) this_object )->mStatus.GetStatusString(); if ( status == 0 ) status = ""; return (char AL_DLL_FAR *) status; } // // extern "C" long ALArchiveGetStatusStringVB( hALArchive this_object ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // 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 ALArchiveBase object. // // DESCRIPTION // // This is the VB wrapper function for the C++ function // ALName::GetStatusString(), as implemented for class ALArchiveBase. // 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 ALArchiveGetStatusStringVB( hALArchive this_object ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveGetStatusStringVB" ); const char _far *status = ( (ALArchiveBase *) this_object )->mStatus.GetStatusString(); if ( status == 0 ) status = ""; return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) ); } #endif // // extern "C" char * ALArchiveGetStatusDetail( hALArchive this_object ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // 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 ALArchiveBase. // Note that we need a completely different function 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 ALArchiveGetStatusDetail( hALArchive this_object ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveGetStatusDetail" ); const char *status = ( (ALArchiveBase *) this_object )->mStatus.GetStatusDetail(); if ( status == 0 ) status = ""; return (char AL_DLL_FAR *) status; } // // extern "C" long ALArchiveGetStatusDetailVB( hALArchive this_object ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // 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 ALArchiveBase object. // // DESCRIPTION // // This is the VB wrapper function for the C++ function // ALName::GetStatusDetail(), as implemented for class ALArchiveBase. // 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 ALArchiveGetStatusDetailVB( hALArchive archive ) { AL_ASSERT_OBJECT( archive, ALArchiveBase, "ALArchiveGetStatusDetailVB" ); const char _far *status = ( (ALArchiveBase *) archive)->mStatus.GetStatusDetail(); if ( status == 0 ) status = ""; return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) ); } #endif // // extern "C" int ALArchiveGetVersion( hALArchive this_object ) // // ARGUMENTS: // // this_object : A handle for (pointer to) an ALArchiveBase object. // We want to get the version of this archive. // // RETURNS // // Always returns the integer version of the object. The current version // is 0x100. Note that this is the version of the Archive, not of the // library. // // DESCRIPTION // // This is the VB/C wrapper function for the C++ function // ALArchiveBase::GetVersion(). For details on this function, // take a look at source file ARCHIVEB.CPP. // // REVISION HISTORY // // May 24, 1994 1.0A : First release // extern "C" int AL_FUNCTION ALArchiveGetVersion( hALArchive this_object ) { AL_ASSERT_OBJECT( this_object, ALArchiveBase, "ALArchiveGetVersion" ); return ( (ALArchiveBase *) this_object )->GetVersion(); }