467 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			467 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
//
 | 
						|
// CXL_MEM.CPP
 | 
						|
//
 | 
						|
//  Source file for ArchiveLib 2.0
 | 
						|
//
 | 
						|
//  Copyright (c) Greenleaf Software, Inc. 1994-1996
 | 
						|
//  All Rights Reserved
 | 
						|
//
 | 
						|
// CONTENTS
 | 
						|
//
 | 
						|
//  ALMemoryBaseSetBufferOwner()
 | 
						|
//  ALMemoryBaseGetBufferSize()
 | 
						|
//  ALMemoryBaseGetBufferOwner()
 | 
						|
//
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This file contains the C and VB translation routines to access
 | 
						|
//  class ALMemoryBase. 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 the ALStorage 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
 | 
						|
//  functions in 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 24, 1994  1.0A   : First release
 | 
						|
//
 | 
						|
//  July 7, 1994  1.0B   : Added ALMemoryCopyBufferVB() for better VB support
 | 
						|
//                         of memory objects.
 | 
						|
//
 | 
						|
//  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 "memstore.h"
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALMemoryBaseSetBufferOwner()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C  VB  Delphi
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Set the value of mfUserOwnsBuffer for an ALMemoryBase object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None.  C++ programs have direct access to the member mfUserOwnsBuffer
 | 
						|
//  of ALMemoryBase, so they don't have to have an access function.
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//  #include "memstore.h"
 | 
						|
//
 | 
						|
//  void ALMemoryBaseSetBufferOwner( hALStorage this_object,
 | 
						|
//                                   int user_owns_buffer );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Sub ALMemoryBaseSetBufferOwner Lib "AL20LW"
 | 
						|
//    (ByVal this_object&, ByVal user_owns_buffer%)
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  procedure ALMemoryBaseSetBufferOwner( this_object : hALStorage;
 | 
						|
//                                        user_owns_buffer : Integer );
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object      :  A handle for (pointer to) an ALMemoryBase object.
 | 
						|
//
 | 
						|
//  user_owns_buffer : The new setting of the flag.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This C/VB translation function provides access to the C++ data member
 | 
						|
//  ALMemoryBase::mfUserOwnsBuffer.  Why would you want to change this
 | 
						|
//  data member?  Well, if the ALMemoryBase 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 ALMemoryBase
 | 
						|
//  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.
 | 
						|
//
 | 
						|
//  Note that this is a universal memory function.  It works with
 | 
						|
//  ALMemory, ALWinMemory, and ALHugeMemory.  That isn't the case
 | 
						|
//  with all of the memory functions, so be careful!
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  Nothing.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE void AL_FUNCTION
 | 
						|
ALMemoryBaseSetBufferOwner( hALStorage this_object,  /* Tag public function */
 | 
						|
                            int user_owns_buffer )
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemoryBase, "ALMemoryBaseSetBufferOwner" );
 | 
						|
    ( (ALMemoryBase *) this_object )->mfUserOwnsBuffer = user_owns_buffer;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALMemoryBaseGetBufferSize()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C  VB  Delphi
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Retrieve the user buffer size for an ALMemoryBase object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None, C++ programmers have public access to the mlUserBufferSize
 | 
						|
//  members, so they don't need an access routine.
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//  #include "memstore.h"
 | 
						|
//
 | 
						|
//  long ALMemoryBaseGetBufferSize( hALStorage this_object );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Function ALMemoryBaseGetBufferSize LIb "AL20LW"
 | 
						|
//    (ByVal this_object&) As Long
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  function ALMemoryBaseGetBufferSize( this_object : hALStorage ) : LongInt;
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object  :  A handle for (pointer to) an ALMemoryBase object.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This C/VB translation function provides access to the C++ data member
 | 
						|
//  ALMemoryBase::mlUserBufferSize.  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.
 | 
						|
//
 | 
						|
//  Note that this is a universal memory function.  It works with
 | 
						|
//  ALMemory, ALWinMemory, and ALHugeMemory.  That isn't the case
 | 
						|
//  with all of the memory functions, so be careful!
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  The size of the memory buffer being used as a storage object.  The
 | 
						|
//  type of the the size differs between Windows and DOS, simply
 | 
						|
//  because Windows can access a lot more memory, especially when
 | 
						|
//  using Win32.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE long AL_FUNCTION
 | 
						|
ALMemoryBaseGetBufferSize( hALStorage this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemoryBase, "ALMemoryBaseGetBufferSize" );
 | 
						|
    return ( (ALMemoryBase *) this_object )->mlUserBufferSize;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALMemoryBaseGetBufferOwner()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C  VB  Delphi
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Access the mfUserOwnsBuffer member of an ALMemoryBase object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None.  C++ programs have direct access to the member mfUserOwnsBuffer
 | 
						|
//  of ALMemoryBase, so they don't have to have an access function.
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//  #include "memstore.h"
 | 
						|
//
 | 
						|
//  int ALMemoryBaseGetBufferOwner( hALStorage this_object );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  Declare Function ALMemoryBaseGetBufferOwner Lib "AL20LW"
 | 
						|
//    (ByVal this_object&) As Integer
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  function ALMemoryBaseGetBufferOwner( this_object : hALStorage ) : Integer;
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object  :  A handle for (pointer to) an ALMemoryBase object.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This C/VB translation function provides access to the C++ data member
 | 
						|
//  ALMemoryBase::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.
 | 
						|
//
 | 
						|
//  Note that this is a universal memory function.  It works with
 | 
						|
//  ALMemory, ALWinMemory, and ALHugeMemory.  That isn't the case
 | 
						|
//  with all of the memory functions, so be careful!
 | 
						|
//
 | 
						|
// RETURNS
 | 
						|
//
 | 
						|
//  An integer flag indicating whether the user owns the buffer.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE int AL_FUNCTION
 | 
						|
ALMemoryBaseGetBufferOwner( hALStorage this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemoryBase, "ALMemoryBaseGetBufferOwner" );
 | 
						|
    return ( (ALMemoryBase *) this_object )->mfUserOwnsBuffer;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALMemoryGetBuffer()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Retrieve the user buffer being used in an ALMemory object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None, C++ programmers have public access to the mpcUserBuffer
 | 
						|
//  members, so they don't need an access routine.
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//  #include "memstore.h"
 | 
						|
//
 | 
						|
//  char * ALMemoryGetBuffer( hALStorage this_object );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, VB can only use ALWinMemoryGetBuffer().
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, Delphi can only use ALWinMemoryGetBuffer().
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object  :  A handle for (pointer to) an ALMemory object.
 | 
						|
//                  This better not be ALHugeMemory or ALWinMemory!
 | 
						|
//
 | 
						|
// 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.
 | 
						|
//
 | 
						|
//  IMPORTANT:  This function should only be used in conjunction
 | 
						|
//  with standard memory objects created with new ALMemory() or
 | 
						|
//  newALMemory().  If your memory object was created using
 | 
						|
//  ALHugeMemory() or ALWinMemory(), this function is going to give
 | 
						|
//  you big trouble, as in not working!!!!
 | 
						|
//
 | 
						|
// 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.  This buffer is limited to 64Kbytes under real mode DOS
 | 
						|
//  or Win16.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
extern "C" AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
 | 
						|
ALMemoryGetBuffer( hALStorage this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALMemory, "ALMemoryGetBuffer" );
 | 
						|
    return ( (ALMemory *) this_object )->mpcUserBuffer;
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// NAME
 | 
						|
//
 | 
						|
//  ALHugeMemoryGetBuffer()
 | 
						|
//
 | 
						|
// PLATFORMS/ENVIRONMENTS
 | 
						|
//
 | 
						|
//  Console  Windows  PM
 | 
						|
//  C
 | 
						|
//
 | 
						|
// SHORT DESCRIPTION
 | 
						|
//
 | 
						|
//  Retrieve the user buffer being used in an ALHugeMemory object.
 | 
						|
//
 | 
						|
// C++ SYNOPSIS
 | 
						|
//
 | 
						|
//  None, C++ programmers have public access to the mpcUserBuffer
 | 
						|
//  members, so they don't need an access routine.
 | 
						|
//
 | 
						|
// C SYNOPSIS
 | 
						|
//
 | 
						|
//  #include "arclib.h"
 | 
						|
//  #include "memstore.h"
 | 
						|
//
 | 
						|
//  char _huge * ALHugeMemoryGetBuffer( hALStorage this_object );
 | 
						|
//
 | 
						|
// VB SYNOPSIS
 | 
						|
//
 | 
						|
//  None, VB can only use ALWinMemoryGetBuffer().
 | 
						|
//
 | 
						|
// DELPHI SYNOPSIS
 | 
						|
//
 | 
						|
//  None, Delphi can only use ALWinMemoryGetBuffer().
 | 
						|
//
 | 
						|
// ARGUMENTS
 | 
						|
//
 | 
						|
//  this_object  :  A handle for (pointer to) an ALHugeMemory object.
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This C/VB translation function provides access to the C++ data member
 | 
						|
//  ALHugeMemory::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.
 | 
						|
//
 | 
						|
//  IMPORTANT:  This function should only be used in conjunction
 | 
						|
//  with standard memory objects created with new ALHugeMemory() or
 | 
						|
//  newALHugeMemory().  If your memory object was created using
 | 
						|
//  ALMemory() or ALWinMemory(), this function is going to give
 | 
						|
//  you big trouble, as in not working!!!!
 | 
						|
//
 | 
						|
// 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.
 | 
						|
//
 | 
						|
// EXAMPLE
 | 
						|
//
 | 
						|
// SEE ALSO
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//   February 14, 1996  2.0A : New release
 | 
						|
//
 | 
						|
 | 
						|
#if !defined( AL_FLAT_MODEL )
 | 
						|
 | 
						|
extern "C" AL_LINKAGE char _huge * AL_FUNCTION
 | 
						|
ALHugeMemoryGetBuffer( hALStorage this_object )  /* Tag public function */
 | 
						|
{
 | 
						|
    AL_ASSERT_OBJECT( this_object, ALHugeMemory, "ALHugeMemoryGetBuffer" );
 | 
						|
    return ( (ALHugeMemory *) this_object )->mpcUserBuffer;
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 |