#ifndef __netvar_h__ #define __netvar_h__ #ifndef WIN32 #include #endif #include "common.h" /* A netvar is 4096 (1 page) in size less the sizeof a sem_t */ /* Currently this is 12 bytes in LynxOS, 48 in SunOS... */ /* The largest scalar is a double - 8 bytes */ #define MAX_SCALAR_ARRAY_LEN 504 #define MAX_STRING_ARRAY_LEN 63 #define MAX_STR_LEN 63 #define MAX_BLOCK_LEN (MAX_STRING_ARRAY_LEN*(MAX_STR_LEN+1)) typedef union NETVAR_TYPES { union scalars { float floa; double doub; int intg; UINT untg; INT32 lng; UINT32 ulon; INT16 shor; UINT16 usho; char chr; UCHAR ucha; } scalar[MAX_SCALAR_ARRAY_LEN]; char stri[MAX_STRING_ARRAY_LEN][MAX_STR_LEN+1]; char block[MAX_BLOCK_LEN]; } netvar_types; typedef struct NETVAR { #ifdef WIN32 HANDLE shmH; HANDLE sem; #else sem_t sem; #endif netvar_types type; } NetVar; STATUS assignNetChar (char *name, int index, int len, char val); STATUS assignNetUChar (char *name, int index, int len, UCHAR val); STATUS assignNetInt (char *name, int index, int len, int val); STATUS assignNetUInt (char *name, int index, int len, UINT val); STATUS assignNetShort (char *name, int index, int len, INT16 val); STATUS assignNetUShort (char *name, int index, int len, UINT16 val); STATUS assignNetLong (char *name, int index, int len, INT32 val); STATUS assignNetULong (char *name, int index, int len, UINT32 val); STATUS assignNetFloat (char *name, int index, int len, float val); STATUS assignNetDouble (char *name, int index, int len, double val); STATUS assignNetString (char *name, int index, int len, char *val); STATUS assignNetBlock (char *name, int index, int len, char val); STATUS readNetChar (char *name, int index, int len, char *val); STATUS readNetUChar (char *name, int index, int len, UCHAR *val); STATUS readNetInt (char *name, int index, int len, int *val); STATUS readNetUInt (char *name, int index, int len, UINT *val); STATUS readNetShort (char *name, int index, int len, INT16 *val); STATUS readNetUShort (char *name, int index, int len, UINT16 *val); STATUS readNetLong (char *name, int index, int len, INT32 *val); STATUS readNetULong (char *name, int index, int len, UINT32 *val); STATUS readNetFloat (char *name, int index, int len, float *val); STATUS readNetDouble (char *name, int index, int len, double *val); STATUS readNetString (char *name, int index, int len, char *val); STATUS readNetBlock (char *name, int index, int len, char *val); STATUS releaseNetVar (char *name); STATUS freeNetVar (char *name); void *getNetVarMem (char *name); STATUS freeNetVarMem (char *name, void *memy); STATUS assignNetIntMem (void *memy, int index, int len, int val); STATUS assignNetStringMem (void *memy, int index, int len, char *val); STATUS assignNetBlockMem (void *memy, int index, int len, char *val); STATUS readNetIntMem (void *memy, int index, int len, int *val); STATUS readNetStringMem (void *memy, int index, int len, char *val); STATUS readNetBlockMem (void *memy, int index, int len, char *val); int *getNetIntIndexMem (void *memy, int index); INT16 *getNetShortIndexMem (void *memy, int index); char *getNetStringIndexMem (void *memy, int index); char *getNetBlockIndexMem (void *memy, int index); int *getNetIntMem (char *name); int *getNetIntArrayMem (char *name, int index); INT16 *getNetShortMem (char *name); INT16 *getNetShortArrayMem (char *name, int index); char *getNetStringMem (char *name); char *getNetStringArrayMem (char *name, int index); char *getNetBlockMem (char *name); char *getNetBlockArrayMem (char *name, int index); #define readNetIntMemDirect(m,i) (((netvar_types *)(m))->scalar[(i)].intg) #define readNetShortMemDirect(m,i) (((netvar_types *)(m))->scalar[(i)].shor) #define readNetStringMemDirect(m,i) (((netvar_types *)(m))->stri[(i)]) #define readNetBlockMemDirect(m,i) (((netvar_types *)(m))->block[(i)]) #define assignNetIntMemDirect(m,i,v) (((netvar_types *)(m))->scalar[(i)].intg=(v)) #define assignNetShortMemDirect(m,i,v) (((netvar_types *)(m))->scalar[(i)].shor=(v)) #define assignNetStringMemDirect(m,i,v) (strcpy(((netvar_types *)(m))->stri[(i)],(v))) #define assignNetBlockMemDirect(m,i,v) (((netvar_types *)(m))->block[(i)]=(v)) #endif