#ifndef _SERVER_H_ #define _SERVER_H_ #include "myc_buf.h" void CocVarList(void **varlist); /* instal a variable list */ void CocFreeVarList(void); /* free variable list */ void *CocFindVar(const char *name, void **adr); /* find a variable. returns NULL if not found. */ int CocPutVar(const char *name, StrBuf *buf, int separator); /* put a variable named of variable list to the buffer */ int CocGetVar(const char *name, StrBuf *buf, int separator); /* get a variable named of variable list from the buffer */ void CocHdl(int (*handler)(int, void *)); /* define handler for last defined item */ void *CocIntPtr(int *ptr); void *CocFltPtr(float *ptr); void *CocChrPtr(char *ptr); void *CocDefVar(const char *name, void *var, int type, int access); void CocDefVarS(const char *name, const char *tname, void *var, int type); /* Define variables. Call this routines not directly, but through one of the macros below. */ #define CocDefInt(V,A) CocDefVar(#V,CocIntPtr(&V),COC_INT,A) #define CocDefFlt(V,A) CocDefVar(#V,CocFltPtr(&V),COC_FLT,A) #define CocDefStr(V,A) CocDefVar(#V,CocChrPtr(V),sizeof(V),A) #define CocDefPtr(V,S) CocDefVarS(#V,#S,&V,(V!=(S *)NULL,COC_PTR)); #define CocDefStruct(V,S) CocDefVarS(#V,#S,&V,(&V!=(S *)NULL,COC_STRUCT)); #define CocIntFld(S,V,A) CocDefVar(#S":"#V,CocIntPtr(&((S *)NULL)->V),COC_INT,A); #define CocFltFld(S,V,A) CocDefVar(#S":"#V,CocFltPtr(&((S *)NULL)->V),COC_FLT,A); #define CocStrFld(S,V,A) CocDefVar(#S":"#V,CocChrPtr(((S *)NULL)->V),sizeof(((S *)NULL)->V),A); #define CocDefCmd(V) CocDefVar("$",V,sizeof(V),0) #define CocDefStrPtr(V,S,A) CocDefVar(#V,V,S,A) #define CocAlias(A,V) CocDefVar(#A, #V, COC_ALIAS,0); #define COC_RDONLY 3 #define COC_RDWR 2 #define COC_RDWRALL 1 #define COC_WR 1 #define COC_RD 2 #define COC_DWR 3 #define COC_DRD 4 #define COC_SHOW 5 #define COC_INT -1 #define COC_FLT -2 #define COC_PTR -3 #define COC_STRUCT -4 #define COC_TYPE -5 #define COC_ALIAS -6 int CocInitServer(void *(*setDataRtn)(void *), int port); int CocHandleRequests(int tmo_msec, int fd); int CocHandle1Request(int tmo_msec, int fd); /* handle hetwork requests. return value: <0: error =0: timeout =1: event on fd =2: variable was changed =3: other network request treated CocHandle1Request handles only one network request For CocHandleRequests: if fd=0: returns when a network request has changed a variable, or when timeout has expired (result is 0 or 2) if fd>0: returns when an read event is pending on fd or when timeout has expired (result is 0 or 1) */ /* server handlers removed int CocPushHandler(const char *name); */ int CocCallHandlers(void); void CocShowHandlers(char *buf, int buf_len); void CocCloseServer(void); #endif /* _SERVER_H_ */