493 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			493 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| /*
 | |
|  * MEMSTORE.H
 | |
|  *
 | |
|  *  Header file for ArchiveLib 2.0
 | |
|  *
 | |
|  *  Copyright (c) 1994-1996 Greenleaf Software, Inc.
 | |
|  *  All Rights Reserved
 | |
|  *
 | |
|  * DESCRIPTION
 | |
|  *
 | |
|  *  This header file contains the class declaration for ALMemoryBase and
 | |
|  *  its three descendants.
 | |
|  *
 | |
|  * CLASS DEFINITIONS:
 | |
|  *
 | |
|  *  ALMemoryBase
 | |
|  *  ALMemory
 | |
|  *  ALHugeMemory
 | |
|  *  ALWinMemory
 | |
|  *
 | |
|  * REVISION HISTORY
 | |
|  *
 | |
|  *  February 14, 1996  2.0A : New release
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #ifndef _MEMSTORE_H
 | |
| #define _MEMSTORE_H
 | |
| 
 | |
| #include "arclib.h"
 | |
| 
 | |
| #if defined( __cplusplus )
 | |
| 
 | |
| /*
 | |
|  * class ALMemoryBase : public ALStorage
 | |
|  *
 | |
|  * DESCRIPTION
 | |
|  *
 | |
|  *  Class ALMemoryBase is ALStorage class that serves as a parent
 | |
|  *  class to three other classes.  The three derived classes store
 | |
|  *  data in three different types of memory buffers:  standard buffers
 | |
|  *  created from the heap, huge buffers created from the far heap, and
 | |
|  *  windows memory blocks created using the Windows API.
 | |
|  *
 | |
|  *  ALMemoryBase doesn't know much about pointers on its own, so it
 | |
|  *  has some pure virtual functions that have to get filled in by
 | |
|  *  the derived classes.  They are the classes that you instantiate
 | |
|  *  to create memory based storage objects.
 | |
|  *
 | |
|  * DATA MEMBERS
 | |
|  *
 | |
|  *  mfUserOwnsBuffer    : If this flag is set, it indicates that the user
 | |
|  *                        owns the buffer, not the class.  This means
 | |
|  *                        the class can't grow the buffer if it runs out
 | |
|  *                        of space, and it can't delete it in the
 | |
|  *                        ALMemoryBase destructor.
 | |
|  *
 | |
|  *  mlUserBufferSize    : The actual size of the buffer, whether it is
 | |
|  *                        owned by the user or not.  This is a long always.
 | |
|  *
 | |
|  * MEMBER FUNCTIONS
 | |
|  *
 | |
|  *  ALMemoryBase()        : The constructor, only called by derived classes.
 | |
|  *  ~ALMemoryBase()       : The virtual destructor.
 | |
|  *  operator new()        : Memory allocation operator, only used when the
 | |
|  *                          library is in a DLL.  Note that this isn't the
 | |
|  *                          operator used to allocate the buffer, just the
 | |
|  *                          one to allocate a class object.
 | |
|  *  _LoadBuffer()         : A virtual function defined in the derived class.
 | |
|  *                          When more data is needed from the memory buffer,
 | |
|  *                          this class gets called.
 | |
|  *  _FlushBuffer()        : Another virtual function that will be defined
 | |
|  *                          in the derived class.  When ALMemoryBase decides
 | |
|  *                          it needs to store some data, it has to call this
 | |
|  *                          function to do the work.
 | |
|  *  Open()                : Open the storage object for reading and writing.
 | |
|  *  Create()              : Create a new buffer to write to.
 | |
|  *  Close()               : Close the existing memory object.
 | |
|  *  LoadBuffer()          : Load a new block from the memory object into
 | |
|  *                          the I/O buffer. (Needs _LoadBuffer() to do the work.)
 | |
|  *  FlushBuffer()         : Flush the contents of the I/O buffer, sending
 | |
|  *                          the contents into the memory object.  (Needs to
 | |
|  *                          call _FlushBuffer() to do the work).
 | |
|  *  Seek()                : Seek to a new location in the memory object.
 | |
|  *  Rename()              : Give the object a new name.  Names are pretty
 | |
|  *                          irrelevant for memory objects, feel free to use
 | |
|  *                          whatever you want here.
 | |
|  *  UnRename()            : Restore the old name.
 | |
|  *  Delete()              : Delete the memory object.  It is gone forever.
 | |
|  *  RenameToBackup()      : Give the memory object an arbitrary new name.
 | |
|  *  GrowUserBuffer()      : A private function used to give us more space
 | |
|  *                          when the memory object is owner of the buffer.
 | |
|  *                          This is pure virtual, it must be implemented
 | |
|  *                          by a derived memory class.
 | |
|  *
 | |
|  * REVISION HISTORY
 | |
|  *
 | |
|  *  February 14, 1996  2.0: New release
 | |
|  */
 | |
| 
 | |
| class AL_CLASS_TYPE ALMemoryBase : public ALStorage {  /* Tag public class */
 | |
| /*
 | |
|  * Constructors, destructors, assignment operator, friends, declarations
 | |
|  */
 | |
| 
 | |
|     public :
 | |
|         AL_PROTO ALMemoryBase( const char AL_DLL_FAR *buffer_name = "",
 | |
|                            ALCase name_case = AL_MIXED );
 | |
|         virtual AL_PROTO ~ALMemoryBase();
 | |
| #if defined( AL_USING_DLL ) || defined( AL_BUILDING_DLL )
 | |
|         void AL_DLL_FAR * AL_PROTO operator new( size_t size );
 | |
| #endif
 | |
| /*
 | |
|  * As usual, I don't want the compiler to generate a default copy constructor,
 | |
|  * or an assignment operator here.  I force it to back off by declaring them
 | |
|  * here.  They do not exist!
 | |
|  */
 | |
|     private   :
 | |
|         AL_PROTO ALMemoryBase( ALMemoryBase AL_DLL_FAR & );
 | |
|         ALMemoryBase AL_DLL_FAR & AL_PROTO operator=( const ALMemoryBase AL_DLL_FAR & );
 | |
| 
 | |
| /*
 | |
|  * Member functions, grouped by category.
 | |
|  *
 | |
|  *
 | |
|  * Protected member manipulation, used inside library, not for public use.
 | |
|  */
 | |
|     protected :
 | |
|         virtual void AL_PROTO _LoadBuffer( long address ) = 0;
 | |
|         virtual void AL_PROTO _FlushBuffer( long address ) = 0;
 | |
| /*
 | |
|  * The file I/O access public interface
 | |
|  */
 | |
|     public :
 | |
|         virtual int AL_PROTO Open();
 | |
|         virtual int AL_PROTO Create( long desired_size = -1L );
 | |
|         virtual int AL_PROTO Close();
 | |
|         virtual int AL_PROTO LoadBuffer( long address );
 | |
|         virtual int AL_PROTO FlushBuffer();
 | |
|         virtual int AL_PROTO Seek( long address );
 | |
| 
 | |
| /*
 | |
|  * File name and underlying object manipulation public interface
 | |
|  */
 | |
|     public :
 | |
|         virtual int AL_PROTO Rename( const char AL_DLL_FAR *new_name = 0,
 | |
|                                      int delete_on_clash = 1 );
 | |
|         virtual int AL_PROTO UnRename( int delete_on_clash = 1 );
 | |
|         virtual int AL_PROTO Delete() = 0;
 | |
|         virtual int AL_PROTO RenameToBackup( int delete_on_clash = 1 );
 | |
| /*
 | |
|  * Unique to this class
 | |
|  */
 | |
|     protected :
 | |
|         virtual int AL_PROTO GrowUserBuffer( long minimum_new_size ) = 0;
 | |
| /*
 | |
|  * Data members
 | |
|  */
 | |
|     protected :
 | |
|     public :   /* Should some of these might be better off private */
 | |
|         int mfUserOwnsBuffer;
 | |
|         long mlUserBufferSize;
 | |
|         AL_CLASS_TAG( _ALMemoryBaseTag );
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * class ALMemory : ALMemoryBase
 | |
|  *
 | |
|  * DESCRIPTION
 | |
|  *
 | |
|  *  Class ALMemory is an ALStorage class that stores its data in
 | |
|  *  buffers allocated from the default heap.  This means that it
 | |
|  *  has a pointer to a memory buffer using an unadorned pointer, and
 | |
|  *  it can keep track of its length in a size_t integer.
 | |
|  *
 | |
|  *  It has to define all of the functions that were left as pure
 | |
|  *  virtual in ALMemoryBase.  These functions are all the functions
 | |
|  *  that actually manage or use the memory buffer.
 | |
|  *
 | |
|  * DATA MEMBERS
 | |
|  *
 | |
|  *  mpcUserBuffer       : A pointer to the big buffer that is going to
 | |
|  *                        hold the data.  This is a buffer that gets
 | |
|  *                        allocated with malloc() and realloc(), and
 | |
|  *                        released using free().  Retro, but cool.
 | |
|  *
 | |
|  * MEMBER FUNCTIONS
 | |
|  *
 | |
|  *  ALMemory()            : The constructor.  This is where you decide
 | |
|  *                          whether to let ALMemory allocate and manage
 | |
|  *                          your buffer, or decide to use your own buffer.
 | |
|  *  ~ALMemory()           : The virtual destructor.
 | |
|  *  operator new()        : Memory allocation operator, only used when the
 | |
|  *                          library is in a DLL.  Note that this isn't the
 | |
|  *                          operator used to allocate the buffer, just the
 | |
|  *                          one to allocate a class object.
 | |
|  *  _LoadBuffer()         : A virtual function defined that loads more
 | |
|  *                          data out of the memory buffer so it can
 | |
|  *                          be stuffed into the I/O buffer.
 | |
|  *  _FlushBuffer()        : Another virtual function that takes data out
 | |
|  *                          of the I/O buffer and stuffs it into the
 | |
|  *                          memory buffer.
 | |
|  *  GrowUserBuffer()      : A private function used to give us more space
 | |
|  *                          when the memory object is owner of the buffer.
 | |
|  *                          This function tries to call realloc() to do
 | |
|  *                          its work.  The presence of realloc() accounts
 | |
|  *                          for the reason we use free() and malloc() instead
 | |
|  *                          of new and delete.
 | |
|  *  Clone()               : If you place an ALMemory object in a toolkit,
 | |
|  *                          this function can be called to create a new
 | |
|  *                          ALMemory object.
 | |
|  *  Open()                : Open the storage object for reading and writing.
 | |
|  *  Create()              : Create a new buffer to write to.
 | |
|  *  Delete()              : Delete the memory object.  It is gone forever.
 | |
|  *  Close()               : Close the existing memory object.
 | |
|  *
 | |
|  * REVISION HISTORY
 | |
|  *
 | |
|  *  February 14, 1996  2.0: New release
 | |
|  */
 | |
| 
 | |
| class AL_CLASS_TYPE ALMemory : public ALMemoryBase {  /* Tag public class */
 | |
| /*
 | |
|  * Constructors, destructors, assignment operator, friends, declarations
 | |
|  */
 | |
|     public :
 | |
|         AL_PROTO ALMemory( const char AL_DLL_FAR *buffer_name = "",
 | |
|                            char AL_DLL_FAR *user_buffer = 0,
 | |
|                            size_t user_buffer_size = 0,
 | |
|                            ALCase name_case = AL_MIXED );
 | |
|         virtual AL_PROTO ~ALMemory();
 | |
| #if defined( AL_USING_DLL ) || defined( AL_BUILDING_DLL )
 | |
|         void AL_DLL_FAR * AL_PROTO operator new( size_t size );
 | |
| #endif
 | |
| /*
 | |
|  * As usual, I don't want the compiler to generate a default copy constructor,
 | |
|  * or an assignment operator here.  I force it to back off by declaring them
 | |
|  * here.  They do not exist!
 | |
|  */
 | |
|     protected :
 | |
|         AL_PROTO ALMemory( ALMemory AL_DLL_FAR & );
 | |
|         ALMemory AL_DLL_FAR & AL_PROTO operator=( const ALMemory AL_DLL_FAR & );
 | |
|     protected :
 | |
|         virtual void AL_PROTO _LoadBuffer( long address );
 | |
|         virtual void AL_PROTO _FlushBuffer( long address );
 | |
| /*
 | |
|  * Unique to this class
 | |
|  */
 | |
|     protected :
 | |
|         virtual int AL_PROTO GrowUserBuffer( long minimum_new_size );
 | |
|     public :
 | |
|         virtual ALStorage AL_DLL_FAR * AL_PROTO Clone( const char AL_DLL_FAR *name,
 | |
|                                             int object_type ) const;
 | |
|         virtual int AL_PROTO Open();
 | |
|         virtual int AL_PROTO Create( long desired_size = -1L );
 | |
|         virtual int AL_PROTO Delete();
 | |
|         virtual int AL_PROTO Close();
 | |
|         char AL_DLL_FAR *mpcUserBuffer;
 | |
|         AL_CLASS_TAG( _ALMemoryTag );
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * class ALHugeMemory : ALMemoryBase
 | |
|  *
 | |
|  * DESCRIPTION
 | |
|  *
 | |
|  *  Class ALHugeMemory is an ALStorage class that stores its data in
 | |
|  *  huge buffers allocated from the far heap.  If you are writing
 | |
|  *  16 bit programs under MS-DOS, this gives you a way to create
 | |
|  *  memory based storage objects that can span more than 64Kbytes.
 | |
|  *
 | |
|  * DATA MEMBERS
 | |
|  *
 | |
|  *  mpcUserBuffer       : A pointer to the huge buffer that is going to
 | |
|  *                        hold the data.  This is a buffer that gets
 | |
|  *                        allocated with halloc() or faralloc().
 | |
|  *
 | |
|  * MEMBER FUNCTIONS
 | |
|  *
 | |
|  *  ALHugeMemory()        : The constructor.  This is where you decide
 | |
|  *                          whether to let ALHugeMemory allocate and manage
 | |
|  *                          your buffer, or decide to use your own buffer.
 | |
|  *  ~ALHugeMemory()       : The virtual destructor.
 | |
|  *  operator new()        : Memory allocation operator, only used when the
 | |
|  *                          library is in a DLL.  Note that this isn't the
 | |
|  *                          operator used to allocate the buffer, just the
 | |
|  *                          one to allocate a class object.
 | |
|  *  _LoadBuffer()         : A virtual function defined that loads more
 | |
|  *                          data out of the memory buffer so it can
 | |
|  *                          be stuffed into the I/O buffer.
 | |
|  *  _FlushBuffer()        : Another virtual function that takes data out
 | |
|  *                          of the I/O buffer and stuffs it into the
 | |
|  *                          memory buffer.
 | |
|  *  GrowUserBuffer()      : A private function used to give us more space
 | |
|  *                          when the memory object is owner of the buffer.
 | |
|  *                          This function tries to call farrealloc() to do
 | |
|  *                          its work.
 | |
|  *  Clone()               : If you place an ALHugeMemory object in a toolkit,
 | |
|  *                          this function can be called to create a new
 | |
|  *                          ALHugeMemory object.
 | |
|  *  Open()                : Open the storage object for reading and writing.
 | |
|  *  Create()              : Create a new buffer to write to.
 | |
|  *  Delete()              : Delete the memory object.  It is gone forever.
 | |
|  *  Close()               : Close the existing memory object.
 | |
|  *
 | |
|  * REVISION HISTORY
 | |
|  *
 | |
|  *  February 14, 1996  2.0: New release
 | |
|  */
 | |
| 
 | |
| 
 | |
| #if !defined( AL_FLAT_MODEL )
 | |
| 
 | |
| class AL_CLASS_TYPE ALHugeMemory : public ALMemoryBase {  /* Tag public class */
 | |
| /*
 | |
|  * Constructors, destructors, assignment operator, friends, declarations
 | |
|  */
 | |
|     public :
 | |
|         AL_PROTO ALHugeMemory( const char AL_DLL_FAR *buffer_name = "",
 | |
|                                char _huge *user_buffer = 0,
 | |
|                                long user_buffer_size = 0,
 | |
|                                ALCase name_case = AL_MIXED );
 | |
|         virtual AL_PROTO ~ALHugeMemory();
 | |
| #if defined( AL_USING_DLL ) || defined( AL_BUILDING_DLL )
 | |
|         void AL_DLL_FAR * AL_PROTO operator new( size_t size );
 | |
| #endif
 | |
| /*
 | |
|  * As usual, I don't want the compiler to generate a default copy constructor,
 | |
|  * or an assignment operator here.  I force it to back off by declaring them
 | |
|  * here.  They do not exist!
 | |
|  */
 | |
|     protected :
 | |
|         AL_PROTO ALHugeMemory( ALHugeMemory AL_DLL_FAR & );
 | |
|         ALHugeMemory AL_DLL_FAR & AL_PROTO operator=( const ALHugeMemory AL_DLL_FAR & );
 | |
|     protected :
 | |
|         virtual void AL_PROTO _LoadBuffer( long address );
 | |
|         virtual void AL_PROTO _FlushBuffer( long address );
 | |
| /*
 | |
|  * Unique to this class
 | |
|  */
 | |
|     protected :
 | |
|         virtual int AL_PROTO GrowUserBuffer( long minimum_new_size );
 | |
|     public :
 | |
|         virtual ALStorage AL_DLL_FAR * AL_PROTO Clone( const char AL_DLL_FAR *name,
 | |
|                                             int object_type ) const;
 | |
|         virtual int AL_PROTO Open();
 | |
|         virtual int AL_PROTO Create( long desired_size = -1L );
 | |
|         virtual int AL_PROTO Delete();
 | |
|         virtual int AL_PROTO Close();
 | |
|         char _huge *mpcUserBuffer;
 | |
|         AL_CLASS_TAG( _ALHugeMemoryTag );
 | |
| };
 | |
| 
 | |
| #endif /* #if !defined( AL_FLAT_MODEL ) */
 | |
| 
 | |
| /*
 | |
|  * class ALWinMemory : ALMemoryBase
 | |
|  *
 | |
|  * DESCRIPTION
 | |
|  *
 | |
|  *  Class ALWinMemory is an ALStorage class that stores its data in
 | |
|  *  huge buffers allocated from the Windows heap.  If you are writing
 | |
|  *  16 bit programs, this gives you a way to create memory based storage
 | |
|  *  objects that can span more than 64Kbytes.
 | |
|  *
 | |
|  * DATA MEMBERS
 | |
|  *
 | |
|  *  mpcUserBuffer       : A pointer to the huge buffer that is going to
 | |
|  *                        hold the data.  This is a buffer that gets
 | |
|  *                        allocated with GlobalAlloc().
 | |
|  *  mhUserMemoryHandle  : The Window handle for the memory block.
 | |
|  *
 | |
|  * MEMBER FUNCTIONS
 | |
|  *
 | |
|  *  ALWinMemory()         : The constructor.  This is where you decide
 | |
|  *                          whether to let ALWinMemory allocate and manage
 | |
|  *                          your buffer, or decide to use your own buffer.
 | |
|  *  ~ALWinMemory()        : The virtual destructor.
 | |
|  *  operator new()        : Memory allocation operator, only used when the
 | |
|  *                          library is in a DLL.  Note that this isn't the
 | |
|  *                          operator used to allocate the buffer, just the
 | |
|  *                          one to allocate a class object.
 | |
|  *  _LoadBuffer()         : A virtual function defined that loads more
 | |
|  *                          data out of the memory buffer so it can
 | |
|  *                          be stuffed into the I/O buffer.
 | |
|  *  _FlushBuffer()        : Another virtual function that takes data out
 | |
|  *                          of the I/O buffer and stuffs it into the
 | |
|  *                          memory buffer.
 | |
|  *  GrowUserBuffer()      : A private function used to give us more space
 | |
|  *                          when the memory object is owner of the buffer.
 | |
|  *                          This function tries to call GlobalRealloc() to do
 | |
|  *                          its work.
 | |
|  *  Clone()               : If you place an ALHugeMemory object in a toolkit,
 | |
|  *                          this function can be called to create a new
 | |
|  *                          ALHugeMemory object.
 | |
|  *  Open()                : Open the storage object for reading and writing.
 | |
|  *  Create()              : Create a new buffer to write to.
 | |
|  *  Delete()              : Delete the memory object.  It is gone forever.
 | |
|  *  Close()               : Close the existing memory object.
 | |
|  *
 | |
|  * REVISION HISTORY
 | |
|  *
 | |
|  *  February 14, 1996  2.0: New release
 | |
|  */
 | |
| 
 | |
| #if defined( AL_WINDOWS)
 | |
| class AL_CLASS_TYPE ALWinMemory : public ALMemoryBase {  /* Tag public class */
 | |
| /*
 | |
|  * Constructors, destructors, assignment operator, friends, declarations
 | |
|  */
 | |
|     public :
 | |
|         AL_PROTO ALWinMemory( const char AL_DLL_FAR *buffer_name = "",
 | |
|                            char AL_HUGE *user_buffer = 0,
 | |
|                            DWORD user_buffer_size = 0,
 | |
|                            ALCase name_case = AL_MIXED );
 | |
|         virtual AL_PROTO ~ALWinMemory();
 | |
| #if defined( AL_USING_DLL ) || defined( AL_BUILDING_DLL )
 | |
|         void AL_DLL_FAR * AL_PROTO operator new( size_t size );
 | |
| #endif
 | |
| /*
 | |
|  * As usual, I don't want the compiler to generate a default copy constructor,
 | |
|  * or an assignment operator here.  I force it to back off by declaring them
 | |
|  * here.  They do not exist!
 | |
|  */
 | |
|     protected :
 | |
|         AL_PROTO ALWinMemory( ALWinMemory AL_DLL_FAR & );
 | |
|         ALWinMemory AL_DLL_FAR & AL_PROTO operator=( const ALWinMemory AL_DLL_FAR & );
 | |
|     protected :
 | |
|         virtual void AL_PROTO _LoadBuffer( long address );
 | |
|         virtual void AL_PROTO _FlushBuffer( long address );
 | |
| /*
 | |
|  * Unique to this class
 | |
|  */
 | |
|     protected :
 | |
|         virtual int AL_PROTO GrowUserBuffer( long minimum_new_size );
 | |
|     public :
 | |
|         virtual ALStorage AL_DLL_FAR * AL_PROTO Clone( const char AL_DLL_FAR *name,
 | |
|                                             int object_type ) const;
 | |
|         virtual int AL_PROTO Open();
 | |
|         virtual int AL_PROTO Create( long desired_size = -1L );
 | |
|         virtual int AL_PROTO Delete();
 | |
|         virtual int AL_PROTO Close();
 | |
|         HGLOBAL mhUserMemoryHandle;
 | |
|         char AL_HUGE *mpcUserBuffer;
 | |
|         AL_CLASS_TAG( _ALWinMemoryTag );
 | |
| };
 | |
| #endif
 | |
| #else /* #if !defined( __cplusplus ) ... */
 | |
| 
 | |
| #if !defined( AL_FLAT_MODEL )
 | |
| AL_LINKAGE hALStorage AL_FUNCTION
 | |
| newALHugeMemory( char AL_DLL_FAR *buffer_name,
 | |
|                  char _huge *user_buffer,
 | |
|                  long user_buffer_size );
 | |
| #endif
 | |
| AL_LINKAGE hALStorage AL_FUNCTION
 | |
| newALMemory( char AL_DLL_FAR *buffer_name,
 | |
|              char AL_DLL_FAR *user_buffer,
 | |
|              size_t user_buffer_size );
 | |
| 
 | |
| AL_LINKAGE void AL_FUNCTION
 | |
| ALMemoryBaseSetBufferOwner( hALStorage this_object, int user_owns_buffer );
 | |
| AL_LINKAGE long AL_FUNCTION
 | |
| ALMemoryBaseGetBufferSize( hALStorage this_object );
 | |
| AL_LINKAGE int AL_FUNCTION
 | |
| ALMemoryBaseGetBufferOwner( hALStorage this_object );
 | |
| 
 | |
| AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
 | |
| ALMemoryGetBuffer( hALStorage this_object );
 | |
| 
 | |
| #if !defined( AL_FLAT_MODEL )
 | |
| 
 | |
| AL_LINKAGE char _huge * AL_FUNCTION
 | |
| ALHugeMemoryGetBuffer( hALStorage this_object );
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #if defined( AL_WINDOWS )
 | |
| 
 | |
| AL_LINKAGE hALStorage AL_FUNCTION
 | |
| newALWinMemory( char AL_DLL_FAR *buffer_name,
 | |
|                 char AL_HUGE *user_buffer,
 | |
|                 DWORD user_buffer_size );
 | |
| AL_LINKAGE UINT AL_FUNCTION ALWinMemoryGetHandle( hALStorage this_object );
 | |
| AL_LINKAGE char AL_HUGE * AL_FUNCTION
 | |
| ALWinMemoryGetBuffer( hALStorage this_object );
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif /* #if defined( __cplusplus ) ... #else ... */
 | |
| 
 | |
| #endif /* #ifndef _MEMSTORE_H        */
 |