349 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			349 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
//
 | 
						|
// CXL_MEM.CPP
 | 
						|
//
 | 
						|
//  Source file for ArchiveLib 1.0
 | 
						|
//
 | 
						|
//  Copyright (c) Greenleaf Software, Inc. 1994
 | 
						|
//  All Rights Reserved
 | 
						|
//
 | 
						|
// CONTENTS
 | 
						|
//
 | 
						|
//  newALMemory()
 | 
						|
//  ALMemoryGetBufferOwner()
 | 
						|
//  ALMemorySetBufferOwner()
 | 
						|
//  ALMemoryGetHandle()
 | 
						|
//  ALMemoryGetBufferSize()
 | 
						|
//  ALMemoryGetBuffer()
 | 
						|
//  
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This file contains the C and VB translation routines to access
 | 
						|
//  class ALMemory. Most of the ALStorage routines need to be called
 | 
						|
//  via the base class, so most of the functions to use ALMemory
 | 
						|
//  from C or VB will be found in CXL_STOR.CPP.
 | 
						|
//
 | 
						|
//  As always, these translation routines are extremely uninformative.
 | 
						|
//  To get the real lowdown on what is happening, look first at the C++
 | 
						|
//  member functions in MEMSTORE.CPP, then STORAGE.CPP.
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//  May 24, 1994  1.0A  : First release
 | 
						|
//
 | 
						|
//
 | 
						|
 | 
						|
#include "arclib.h"
 | 
						|
#pragma hdrstop
 | 
						|
 | 
						|
#include "al.h"
 | 
						|
#include "alcxl.h"
 | 
						|
 | 
						|
// Windows:
 | 
						|
//
 | 
						|
// extern "C" hALStorage newALMemory( char *buffer_name, 
 | 
						|
//                                    char AL_HUGE *user_buffer,
 | 
						|
//                                    DWORD user_buffer_size )
 | 
						|
//
 | 
						|
// MS-DOS:
 | 
						|
//
 | 
						|
// extern "C" hALStorage newALMemory( char *buffer_name, 
 | 
						|
//                                    char *user_buffer,
 | 
						|
//                                    int user_buffer_size )
 | 
						|
// ARGUMENTS:
 | 
						|
//
 | 
						|
//  name             : A character string containing an arbitrary name 
 | 
						|
//                     name for the memory buffer.
 | 
						|
//
 | 
						|
//  user_buffer      : If you want to supply a buffer of your own, pass it
 | 
						|
//                     here.  Otherwise, set it to 0, and the ALMemory
 | 
						|
//                     class will allocate storage as needed.
 | 
						|
//
 | 
						|
//  user_buffer_size : If you are supplying a buffer, you have to say how
 | 
						|
//                     long it is.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A handle for (pointer to) a newly created ALMemory object.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This C/VB translation function provides access to the ALMemory 
 | 
						|
//  constructor.  Note that the constructor has the same name under
 | 
						|
//  MS-DOS and Windows, but it does have slightly different capabilities.
 | 
						|
//  Because of this, the Windows version also has different argument types.
 | 
						|
//
 | 
						|
//  This function passes all of its arguments to the C++ constructor 
 | 
						|
//  in unchanged form.  It then takes the return from the function, casts
 | 
						|
//  it to a C/VB acceptable type, and returns it otherwise unchanged.
 | 
						|
//
 | 
						|
//  This function is like all of the other translation routines in that
 | 
						|
//  it is fairly uninformative.  To get the real information about what
 | 
						|
//  is happening in the constructor, take a look at the source for the
 | 
						|
//  C++ functions in MEMSTORE.CPP.
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   May 24, 1994  1.0A  : First release
 | 
						|
//
 | 
						|
 | 
						|
#if defined( AL_WINDOWS_MEMORY )
 | 
						|
extern "C" hALStorage AL_FUNCTION 
 | 
						|
newALMemory( char AL_DLL_FAR *buffer_name, 
 | 
						|
             char AL_HUGE *user_buffer,
 | 
						|
             DWORD user_buffer_size )
 | 
						|
{
 | 
						|
    if ( user_buffer_size == 0 )
 | 
						|
        return (hALStorage) new ALMemory( buffer_name );
 | 
						|
    else
 | 
						|
        return (hALStorage) new ALMemory( buffer_name, user_buffer, user_buffer_size );
 | 
						|
}             
 | 
						|
 | 
						|
#else
 | 
						|
extern "C" hALStorage AL_FUNCTION newALMemory( char AL_DLL_FAR *buffer_name, 
 | 
						|
                                               char AL_DLL_FAR *user_buffer,
 | 
						|
                                               int user_buffer_size )
 | 
						|
{
 | 
						|
    if ( user_buffer_size == 0 )
 | 
						|
        return (hALStorage) new ALMemory( buffer_name );
 | 
						|
    else
 | 
						|
        return (hALStorage) new ALMemory( buffer_name, user_buffer, user_buffer_size );
 | 
						|
}                                    
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
//
 | 
						|
// extern "C" int ALMemoryGetBufferOwner( hALStorage this_object )
 | 
						|
//
 | 
						|
// ARGUMENTS:
 | 
						|
//
 | 
						|
//  this_object  :  A handle for (pointer to) an ALMemory object.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  An integer flag indicating whether the user owns the buffer.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This C/VB translation function provides access to the C++ data member
 | 
						|
//  ALMemory::mfUserOwnsBuffer.  
 | 
						|
//
 | 
						|
//  This function first tests its only argument for correct type (when in
 | 
						|
//  debug mode), then casts and accesses the data member.  The value of
 | 
						|
//  the data member is then returned unchanged to the calling C or VB
 | 
						|
//  procedure.
 | 
						|
//
 | 
						|
//  This function is like all of the other translation routines in that
 | 
						|
//  it is fairly uninformative.  To get the real information about what
 | 
						|
//  is happening in the constructor, take a look at the source for the
 | 
						|
//  C++ functions in MEMSTORE.CPP.
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   May 24, 1994  1.0A  : First release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" int AL_FUNCTION ALMemoryGetBufferOwner( hALStorage this_object )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemory, "ALMemoryGetBufferOwner" );
 | 
						|
    return ( (ALMemory *) this_object )->mfUserOwnsBuffer;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// extern "C" void ALMemorySetBufferOwner( hALStorage this_object, 
 | 
						|
//                                         int user_owns_buffer )
 | 
						|
//
 | 
						|
// ARGUMENTS:
 | 
						|
//
 | 
						|
//  this_object      :  A handle for (pointer to) an ALMemory object.
 | 
						|
//
 | 
						|
//  user_owns_buffer : The new setting of the flag.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Nothing.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This C/VB translation function provides access to the C++ data member
 | 
						|
//  ALMemory::mfUserOwnsBuffer.  Why would you want to change this
 | 
						|
//  data member?  Well, if the ALMemory object is currently the buffer
 | 
						|
//  owner, the buffer will be deleted when the ALMemory object is destroyed.
 | 
						|
//  You can set the owner of the buffer to be you, the user, and copy
 | 
						|
//  the pointer to it.  Then you get to keep it long after the ALMemory
 | 
						|
//  object is done with it.
 | 
						|
//
 | 
						|
//  This function first tests its only argument for correct type (when in
 | 
						|
//  debug mode), then casts and modifies the data member.
 | 
						|
//
 | 
						|
//  This function is like all of the other translation routines in that
 | 
						|
//  it is fairly uninformative.  To get the real information about what
 | 
						|
//  is happening in the constructor, take a look at the source for the
 | 
						|
//  C++ functions in MEMSTORE.CPP.
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   May 24, 1994  1.0A  : First release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" void AL_FUNCTION ALMemorySetBufferOwner( hALStorage this_object, 
 | 
						|
                                                    int user_owns_buffer )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemory, "ALMemorySetBufferOwner" );
 | 
						|
    ( (ALMemory *) this_object )->mfUserOwnsBuffer = user_owns_buffer;
 | 
						|
}                                                      
 | 
						|
 | 
						|
// WINDOWS ONLY PROCEDURE
 | 
						|
//
 | 
						|
// extern "C" UINT ALMemoryGetHandle( hALStorage this_object )
 | 
						|
//
 | 
						|
// ARGUMENTS:
 | 
						|
//
 | 
						|
//  this_object  :  A handle for (pointer to) an ALMemory object.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A UINT windows memory handle.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This C/VB translation function provides access to the C++ data member
 | 
						|
//  ALMemory::mhUserMemoryHandle.  Under C++, this is a public data
 | 
						|
//  member that the programmer is free to access or modify.
 | 
						|
//
 | 
						|
//  This function first tests its only argument for correct type (when in
 | 
						|
//  debug mode), then casts and accesses the data member.  The value of
 | 
						|
//  the data member is then returned unchanged to the calling C or VB
 | 
						|
//  procedure.
 | 
						|
//
 | 
						|
//  This function is like all of the other translation routines in that
 | 
						|
//  it is fairly uninformative.  To get the real information about what
 | 
						|
//  is happening in the constructor, take a look at the source for the
 | 
						|
//  C++ functions in MEMSTORE.CPP.
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   May 24, 1994  1.0A  : First release
 | 
						|
//
 | 
						|
 | 
						|
#if defined( AL_WINDOWS_MEMORY )
 | 
						|
extern "C" UINT AL_FUNCTION ALMemoryGetHandle( hALStorage this_object )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemory, "ALMemorySetBufferOwner" );
 | 
						|
    return (UINT) ( (ALMemory *) this_object )->mhUserMemoryHandle;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
// WINDOWS Version
 | 
						|
//
 | 
						|
// extern "C" long ALMemoryGetBufferSize( hALStorage this_object )
 | 
						|
//
 | 
						|
// MS-DOS Real Mode version
 | 
						|
//
 | 
						|
// extern "C" size_t ALMemoryGetBufferSize( hALStorage this_object )
 | 
						|
//
 | 
						|
// ARGUMENTS:
 | 
						|
//
 | 
						|
//  this_object  :  A handle for (pointer to) an ALMemory object.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  The size of the memory buffer being uses as a storage object.  The
 | 
						|
//  type of the the size differs between Windows and Real mode DOS, simply
 | 
						|
//  because Windows can access a lot more memory, especially when
 | 
						|
//  using Win32s.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This C/VB translation function provides access to the C++ data member
 | 
						|
//  ALMemory::muUserBufferSize.  Under C++, this is a public data
 | 
						|
//  member that the programmer is free to access or modify.
 | 
						|
//
 | 
						|
//  This function first tests its only argument for correct type (when in
 | 
						|
//  debug mode), then casts and accesses the data member.  The value of
 | 
						|
//  the data member is then returned unchanged to the calling C or VB
 | 
						|
//  procedure.
 | 
						|
//
 | 
						|
//  This function is like all of the other translation routines in that
 | 
						|
//  it is fairly uninformative.  To get the real information about what
 | 
						|
//  is happening in the constructor, take a look at the source for the
 | 
						|
//  C++ functions in MEMSTORE.CPP.
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   May 24, 1994  1.0A  : First release
 | 
						|
//
 | 
						|
 | 
						|
#if defined( AL_WINDOWS_MEMORY )
 | 
						|
extern "C" long AL_FUNCTION ALMemoryGetBufferSize( hALStorage this_object )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemory, "ALMemoryGetBufferSize" );
 | 
						|
    return ( (ALMemory *) this_object )->muUserBufferSize;
 | 
						|
}
 | 
						|
 | 
						|
#else
 | 
						|
 | 
						|
extern "C" size_t AL_FUNCTION ALMemoryGetBufferSize( hALStorage this_object )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemory, "ALMemoryGetBufferSize" );
 | 
						|
    return ( (ALMemory *) this_object )->muUserBufferSize;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
// WINDOWS Version
 | 
						|
//
 | 
						|
// extern "C" char AL_HUGE * ALMemoryGetBuffer( hALStorage this_object )
 | 
						|
//
 | 
						|
// MS-DOS Real Mode version
 | 
						|
//
 | 
						|
// extern "C" char *ALMemoryGetBuffer( hALStorage this_object )
 | 
						|
//
 | 
						|
// ARGUMENTS:
 | 
						|
//
 | 
						|
//  this_object  :  A handle for (pointer to) an ALMemory object.
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  A pointer to the memory buffer being uses as a storage object.  The
 | 
						|
//  type of the the pointer differs between the various modes of our 
 | 
						|
//  library.  Under Real Dos, it is just a normal pointer.  Under Win16
 | 
						|
//  it is a _huge pointer.  Under Win32s, it is a flat model pointer.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This C/VB translation function provides access to the C++ data member
 | 
						|
//  ALMemory::mpcUserBuffer.  Under C++, this is a public data
 | 
						|
//  member that the programmer is free to access or modify.
 | 
						|
//
 | 
						|
//  This function first tests its only argument for correct type (when in
 | 
						|
//  debug mode), then casts and accesses the data member.  The value of
 | 
						|
//  the data member is then returned unchanged to the calling C or VB
 | 
						|
//  procedure.
 | 
						|
//
 | 
						|
//  This function is like all of the other translation routines in that
 | 
						|
//  it is fairly uninformative.  To get the real information about what
 | 
						|
//  is happening in the constructor, take a look at the source for the
 | 
						|
//  C++ functions in MEMSTORE.CPP.
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   May 24, 1994  1.0A  : First release
 | 
						|
//
 | 
						|
 | 
						|
#if defined( AL_WINDOWS_MEMORY )
 | 
						|
extern "C" char AL_HUGE * AL_FUNCTION ALMemoryGetBuffer( hALStorage this_object )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemory, "ALMemoryGetBuffer" );
 | 
						|
    return ( (ALMemory *) this_object )->mpcUserBuffer;
 | 
						|
}
 | 
						|
 | 
						|
#else
 | 
						|
    
 | 
						|
extern "C" char AL_DLL_FAR *AL_FUNCTION ALMemoryGetBuffer( hALStorage this_object )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemory, "ALMemoryGetBuffer" );
 | 
						|
    return ( (ALMemory *) this_object )->mpcUserBuffer;
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |