sharedMemory.h


/*
** $RCSfile: sharedMemory.h $
** $Revision: 1.18 $
** $Author: doomer $
** $Date: 1996/05/09 18:12:12 $
** Copyright (c) 1996 John Dumais
*/

#if !defined(_veeSharedMemory_)
#define _veeSharedMemory_

#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include "list.h"
#include "SWMRG.h"
#include "AdvWin32.H"

/********************************************************************
Manifest constant definitons
********************************************************************/

#define vErrorAlreadyExists 	-1
#define vErrorMapFailed			-2
#define vErrorListFailed		-3
#define vErrorAllocFailed		-4
#define vErrorGuardInitFailed	-5
#define vErrorWriteFailed		-6
#define vErrorReadFailed		-7
#define vErrorDataSize			-8
#define vErrorLockFailed		-9
#define vErrorUnknown			-100

/********************************************************************
Data type definitions
********************************************************************/

enum DataType{
	TypeLong,					/* 0 */
	TypeShort,					/* 1 */
	TypeFloat,					/* 2 */	
	TypeDouble,					/* 3 */
	TypeString					/* 4 */
};

struct VeeSharedDataInfo{
	char *segmentName;
	HANDLE segmentHandle;
	long nDataElements;
	LPVOID baseAddr;
	enum DataType dataType;
	SWMRG sharedMemoryGuard;
};

/********************************************************************
Prototypes for exported functions
********************************************************************/

long createLongShare(char *segmentName, long nLongs);
long createShortShare(char *segmentName, long nShorts);
long createFloatShare(char *segmentName, long nFloats);
long createDoubleShare(char *segmentName, long nDoubles);

long openLongShare(char *segmentName, long nLongs);
long openShortShare(char *segmentName, long nShorts);
long openFloatShare(char *segmentName, long nFloats);
long openDoubleShare(char *segmentName, long nDoubles);

long writeLongData(char *segmentName, long *data, long nLongs);
long writeShortData(char *segmentName, short *data, long nShorts);
long writeFloatData(char *segmentName, float *data, long nFloats);
long writeDoubleData(char *segmentName, double *data, long nDoubles);

long readLongData(char *segmentName, long *data, long nLongs);
long readShortData(char *segmentName, short *data, long nShorts);
long readFloatData(char *segmentName, float *data, long nFloats);
long readDoubleData(char *segmentName, double *data, long nDoubles);

long destroySharedMemory(char *segmentName);
long destroyAllSharedMemory(void);

long numberOfSegments(void);
long enumerateSharedMemory(char **segmentNames,
	long *nElements,
	short *dataType,
	long nEntries);

void setTimeOut(long timeValue);

char *revInfo(void);

/********************************************************************
Prototypes for functions used internally in the library
********************************************************************/

short openSharedMemory(char *segmentName,
	enum DataType type,
	long nElements,
	BOOL openExisting);
						 
BOOL compareSegName(void *nodeData, void *cmpData);

short segmentIsInList(char *segmentName,
	enum DataType type,
	long nElements);
					  
short createMappedSegment(struct VeeSharedDataInfo *segmentEntry);
short openMappedSegment(struct VeeSharedDataInfo *segmentEntry);
BOOL removeMappedSegment(struct VeeSharedDataInfo *segmentEntry);

BOOL initializeReadWriteGuard(struct VeeSharedDataInfo *segmentEntry);
BOOL openReadWriteGuard(struct VeeSharedDataInfo *segmentEntry);
void destroyReadWriteGuard(struct VeeSharedDataInfo *segmentEntry);

void numSegments(void *nodeData);
void enumerateSegments(void *nodeData);

long allocatedSize(struct VeeSharedDataInfo *segmentEntry);

long getWriteLock(struct VeeSharedDataInfo *segementEntry);
long getReadLock(struct VeeSharedDataInfo *segementEntry);
long lockResult(DWORD waitResult);

long writeSegment(char *segmentName, void *data, size_t dataSize);
long readSegment(char *segmentName, void *data, size_t dataSize);
	
#endif

/*
** $Log: sharedMemory.h $
** Revision 1.18  1996/05/09 18:12:12  doomer
** fixed an include
** Revision 1.17  1996/02/02 16:29:18  doomer
** removed prototype for unimplemented functions
** Revision 1.16  1996/02/02 09:51:52  doomer
** cleaned up some segmentation faults.
** Revision 1.15  1996/02/01 11:53:20  doomer
** first time I git round trip with locking working
** Revision 1.14  1996/01/31 16:08:48  doomer
** pointed the segment guards to occupy the top of the shared segement.
** read/write access to shared data looks one byte beyond the size
** of the shared segment guard
** did this so that another process can look at the handles to get read
** and write lockes.  dunno if this works.
** Revision 1.13  1996/01/31 13:16:18  doomer
** added prototype for numberOfSegments() & enumerateSharedMemory().
** Revision 1.12  1996/01/30 17:59:06  doomer
** added copyright information.
** Revision 1.11  1996/01/30 17:43:04  doomer
** added stuff to write to a shared memory segment.
** Revision 1.10  1996/01/30 15:57:46  doomer
** rearranged stuff to make it easier to read.
** Revision 1.9  1996/01/29 18:05:04  doomer
** added revInfo() function
** Revision 1.8  1996/01/29 17:27:26  doomer
** changed prototype for  removeMappedSegment() to take 
** struct VeeSharedDataInfo *segmentEntry as an argument.
** Revision 1.7  1996/01/29 16:55:12  doomer
** added proptotype for removeMappedSegment().
** Revision 1.6  1996/01/29 14:58:18  doomer
** gutted stuff to make this library depend on list.dll for its list management
** compiled all the stuff to add a shared memory segement.
** Revision 1.5  1995/12/29 18:12:38  doomer
** removed references to lastEntry from removeFromList() & destroySharedMemory().
** in removeSharedMemory(), adjusted the list head pointer in the case where
** I wanted to remove the first entry (which could, by definition be the
** last entry) in the list.
** Revision 1.4  1995/12/29 17:47:32  doomer
** added HANDLE segmentHandle to struct veeSharedDataInfo
** added BOOL *lastEntry to removeFromList().  This is to let the calling
** function know that the laste entry in the list has been removed
** changed return type from isInList() to struct veeSharedDataInfo.
** Revision 1.3  1995/12/29 16:18:32  doomer
** added #include of stdlib.h
** Revision 1.2  1995/12/29 15:40:06  doomer
** added #include of windows.h & string.h
** Revision 1.1  1995/12/29 15:31:34  doomer
** Initial revision
*/