183 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
/*
 | 
						|
 * MEMSTORE.H
 | 
						|
 *
 | 
						|
 *  Header file for ArchiveLib 1.0
 | 
						|
 *
 | 
						|
 *  Copyright (c) 1994 Greenleaf Software, Inc.
 | 
						|
 *  All Rights Reserved
 | 
						|
 *
 | 
						|
 * DESCRIPTION
 | 
						|
 *
 | 
						|
 *  This header file contains the class declaration for ALMemory.
 | 
						|
 * 
 | 
						|
 * CLASS DEFINITIONS:
 | 
						|
 *
 | 
						|
 *  ALMemory
 | 
						|
 *
 | 
						|
 * REVISION HISTORY
 | 
						|
 *
 | 
						|
 *  May 26, 1994  1.0A  : First release
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _MEMSTORE_H
 | 
						|
#define _MEMSTORE_H
 | 
						|
 | 
						|
#include "arclib.h"
 | 
						|
 | 
						|
#if defined( __cplusplus )
 | 
						|
 | 
						|
/*
 | 
						|
 * class ALMemory : public ALStorage 
 | 
						|
 *
 | 
						|
 * DESCRIPTION
 | 
						|
 *
 | 
						|
 *  Class ALMemory is an ALStorage class that stores its data in memory
 | 
						|
 *  buffers. Under real mode MS-DOS, buffers are limited to 64Kbytes.
 | 
						|
 *  Under Windows, they can get a lot bigger.  There are slight
 | 
						|
 *  differences in operations between the the Windows and MS-DOS 
 | 
						|
 *  versions, so you will see some #ifdefs here and there.
 | 
						|
 *
 | 
						|
 *  You can use ALMemory to work with a buffer of your own, or you
 | 
						|
 *  can ask the class to allocate the memory for you.  You can
 | 
						|
 *  also change the ownership of the buffer in midstream, allowing
 | 
						|
 *  you to take control of a buffer that the class has generated.
 | 
						|
 *
 | 
						|
 * 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 
 | 
						|
 *                        ALMemory destructor.
 | 
						|
 *                      
 | 
						|
 *  mhUserMemoryHandle  : Under Windows, this member contains the handle
 | 
						|
 *                        of the Windows memory block that has been
 | 
						|
 *                        allocated
 | 
						|
 *
 | 
						|
 *  muUserBufferSize    : The actual size of the buffer, whether it is
 | 
						|
 *                        owned by the user or not.  This is a size_t
 | 
						|
 *                        member under real mode DOS, and a long under
 | 
						|
 *                        Windows.
 | 
						|
 *
 | 
						|
 *  mpcUserBuffer       : A pointer to the buffer the class is presently
 | 
						|
 *                        using.  The name User Buffer was probably a bad
 | 
						|
 *                        choice, because this is the pointer we use 
 | 
						|
 *                        regardless of whether or not the user owns the
 | 
						|
 *                        buffer.
 | 
						|
 *
 | 
						|
 * MEMBER FUNCTIONS
 | 
						|
 *
 | 
						|
 *  ALMemory()        : The constructor, slightly different between DOS 
 | 
						|
 *                      and Windows.
 | 
						|
 *  ~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.
 | 
						|
 *  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.
 | 
						|
 *  FlushBuffer()     : Flush the contents of the I/O buffer, sending
 | 
						|
 *                      the contents into the memory object.
 | 
						|
 *  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.
 | 
						|
 *
 | 
						|
 * REVISION HISTORY
 | 
						|
 *
 | 
						|
 *  May 26, 1994  1.0A  : First release
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
class AL_CLASS_TYPE ALMemory : public ALStorage {
 | 
						|
/*
 | 
						|
 * Constructors, destructors, assignment operator, friends, declarations
 | 
						|
 */
 | 
						|
 | 
						|
    public :
 | 
						|
#ifdef AL_WINDOWS_MEMORY
 | 
						|
        AL_PROTO ALMemory( const char AL_DLL_FAR *buffer_name = "",
 | 
						|
                           char AL_HUGE *user_buffer = 0,
 | 
						|
                           DWORD user_buffer_size = 0,
 | 
						|
                           ALCase name_case = AL_MIXED );
 | 
						|
#else
 | 
						|
        AL_PROTO ALMemory( const char AL_DLL_FAR *buffer_name = "",
 | 
						|
                           char AL_DLL_FAR *user_buffer = 0,
 | 
						|
                           int user_buffer_size = 0,
 | 
						|
                           ALCase name_case = AL_MIXED );
 | 
						|
#endif
 | 
						|
        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 & );
 | 
						|
 | 
						|
/*
 | 
						|
 * Member functions, grouped by category.
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * Protected member manipulation, used inside library, not for public use.
 | 
						|
 */
 | 
						|
    protected :
 | 
						|
/*
 | 
						|
 * The file I/O access public interface
 | 
						|
 */
 | 
						|
    public :
 | 
						|
        virtual int AL_PROTO Open();
 | 
						|
        virtual int AL_PROTO Create();
 | 
						|
        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();
 | 
						|
        virtual int AL_PROTO RenameToBackup( int delete_on_clash = 1 );
 | 
						|
/*
 | 
						|
 * Unique to this class
 | 
						|
 */
 | 
						|
    protected :
 | 
						|
        int AL_PROTO GrowUserBuffer( long minimum_new_size );
 | 
						|
/*
 | 
						|
 * Data members
 | 
						|
 */
 | 
						|
    protected :
 | 
						|
    public :   /* Should some of these might be better off private */
 | 
						|
        int mfUserOwnsBuffer;
 | 
						|
#ifdef AL_WINDOWS_MEMORY
 | 
						|
        HGLOBAL mhUserMemoryHandle;
 | 
						|
        long muUserBufferSize;
 | 
						|
        char AL_HUGE *mpcUserBuffer;
 | 
						|
#else
 | 
						|
        size_t muUserBufferSize;
 | 
						|
        char AL_DLL_FAR *mpcUserBuffer;
 | 
						|
#endif
 | 
						|
        AL_CLASS_TAG( _ALMemoryTag );
 | 
						|
};
 | 
						|
 | 
						|
#endif /* #if defined( __cplusplus ) */
 | 
						|
 | 
						|
#endif /* #ifndef _MEMSTORE_H        */
 |