*** empty log message ***
This commit is contained in:
@@ -25,8 +25,9 @@ typedef struct _CocVar {
|
||||
void *var;
|
||||
int access;
|
||||
int type;
|
||||
int size;
|
||||
void *strucType;
|
||||
int (*hdl)(int, void *);
|
||||
int (*hdl)(int, void *, int);
|
||||
int pending;
|
||||
} CocVar;
|
||||
|
||||
@@ -76,8 +77,7 @@ void CocVarList(void **varList) {
|
||||
}
|
||||
}
|
||||
|
||||
void CocList() {
|
||||
CocVar *p;
|
||||
void CocList() { CocVar *p;
|
||||
|
||||
p=*varListHandle;
|
||||
while (p!=NULL) {
|
||||
@@ -140,7 +140,7 @@ void *CocIntPtr(int *ptr) { return(ptr); }
|
||||
void *CocFltPtr(float *ptr) { return(ptr); }
|
||||
void *CocChrPtr(char *ptr) { return(ptr); }
|
||||
|
||||
void *CocDefVar(const char *name, void *var, int type, int access) {
|
||||
void *CocDefVar(const char *name, void *var, int type, int size, int access) {
|
||||
CocVar *p;
|
||||
const char *f;
|
||||
void *adr;
|
||||
@@ -153,6 +153,7 @@ void *CocDefVar(const char *name, void *var, int type, int access) {
|
||||
*varListHandle=p;
|
||||
str_copy(p->name, name);
|
||||
p->type=type;
|
||||
p->size=size;
|
||||
} else {
|
||||
assert(p->type==type);
|
||||
}
|
||||
@@ -165,17 +166,22 @@ void *CocDefVar(const char *name, void *var, int type, int access) {
|
||||
assert(0);
|
||||
}
|
||||
|
||||
void CocHdl(int (*handler)(int, void *)) {
|
||||
void CocHdl(int (*handler)(int, void *, int)) {
|
||||
assert(lastDef!=NULL);
|
||||
lastDef->hdl=handler;
|
||||
}
|
||||
|
||||
int *CocSizePtr(void) {
|
||||
assert(lastDef!=NULL && lastDef->type==COC_ARRAY);
|
||||
return &lastDef->size;
|
||||
}
|
||||
|
||||
void CocDefVarS(const char *name, const char *tname, void *var, int type) {
|
||||
CocVar *p, *t;
|
||||
|
||||
assert(type==COC_PTR || type==COC_STRUCT);
|
||||
p=CocDefVar(name, var, type, COC_RDONLY);
|
||||
p->strucType=CocDefVar(tname, NULL, COC_TYPE, COC_RDONLY);
|
||||
p=CocDefVar(name, var, type, 0, COC_RDONLY);
|
||||
p->strucType=CocDefVar(tname, NULL, COC_TYPE, 0, COC_RDONLY);
|
||||
}
|
||||
|
||||
char err_name[64];
|
||||
@@ -192,12 +198,14 @@ int CocGetThisVar(CocVar *var, void *base, StrBuf *buf, int separator) {
|
||||
adr=(char *)base + (int)var->var;
|
||||
}
|
||||
/* printf("get %s %d\n", name, (int)adr); */
|
||||
if (var->type==-1) {
|
||||
if (var->type==COC_CHAR) {
|
||||
ERR_P(StrNGet(buf, (char *)adr, var->size, separator));
|
||||
} else if (var->type==COC_INT) {
|
||||
ERR_I(StrGetInt(buf, (int *)adr, separator));
|
||||
} else if (var->type==-2) {
|
||||
} else if (var->type==COC_FLT) {
|
||||
ERR_I(StrGetFloat(buf, (float *)adr, separator));
|
||||
} else if (var->type>1) {
|
||||
ERR_P(StrNGet(buf, (char *)adr, var->type, separator));
|
||||
} else if (var->type==COC_ARRAY) {
|
||||
ERR_I(StrGetArray(buf, (float *)adr, var->size));
|
||||
} else {
|
||||
ERR_MSG("unknown type");
|
||||
}
|
||||
@@ -217,12 +225,14 @@ int CocPutThisVar(CocVar *var, void *base, StrBuf *buf, int separator) {
|
||||
adr=(char *)base + (int)var->var;
|
||||
}
|
||||
/* printf("put %s %d\n", name, (int)adr); */
|
||||
if (var->type==-1) {
|
||||
ERR_I(StrPutInt(buf, *(int *)adr, separator));
|
||||
} else if (var->type==-2) {
|
||||
ERR_I(StrPutFloat(buf, *(float *)adr, separator));
|
||||
} else if (var->type>1) {
|
||||
if (var->type==COC_CHAR) {
|
||||
ERR_I(StrPut(buf, adr, separator));
|
||||
} else if (var->type==COC_INT) {
|
||||
ERR_I(StrPutInt(buf, *(int *)adr, separator));
|
||||
} else if (var->type==COC_FLT) {
|
||||
ERR_I(StrPutFloat(buf, *(float *)adr, separator));
|
||||
} else if (var->type==COC_ARRAY) {
|
||||
ERR_I(StrPutArray(buf, (float *)adr, var->size));
|
||||
} else {
|
||||
ERR_MSG("unknown type");
|
||||
}
|
||||
@@ -265,6 +275,32 @@ void CocFreeVarList(void) {
|
||||
*varListHandle=NULL;
|
||||
}
|
||||
|
||||
char *CocReadVars(char *str, char stop){
|
||||
int i, l;
|
||||
char *eql, *cr, buf[80];
|
||||
StrBuf sbuf;
|
||||
|
||||
/* interprete variables until stop character appeares */
|
||||
i=sscanf(str, "%79s%n", buf, &l);
|
||||
while (i>0 && buf[0]!=stop) {
|
||||
if (buf[0]=='!') {
|
||||
cr=strchr(str, '\n');
|
||||
if (cr==NULL) return strchr(str, '\0');
|
||||
str=cr+1;
|
||||
} else {
|
||||
str+=l;
|
||||
eql=strchr(buf,'=');
|
||||
if (eql==NULL) ERR_MSG("syntax error");
|
||||
*eql='\0';
|
||||
StrLink(&sbuf, eql+1);
|
||||
ERR_I(CocGetVar(buf, &sbuf, ' '));
|
||||
}
|
||||
i=sscanf(str, "%79s%n", buf, &l);
|
||||
}
|
||||
return str;
|
||||
OnError: return NULL;
|
||||
}
|
||||
|
||||
void CocToClients(int mask, char *str) {
|
||||
int iret;
|
||||
CocClient *cl;
|
||||
@@ -310,11 +346,11 @@ int CocInitServer(void *(*setDataRtn)(void *), int port) {
|
||||
OnError: return(-1);
|
||||
}
|
||||
|
||||
int CocHandleThis(CocVar *var, void *base, StrBuf *outBuf, int mode) {
|
||||
int CocHandleThis(CocVar *var, void *base, StrBuf *outBuf, int mode, int fd) {
|
||||
int iret;
|
||||
|
||||
if (var->hdl!=NULL) {
|
||||
iret=var->hdl(mode, base);
|
||||
iret=var->hdl(mode, base, fd);
|
||||
if (iret<0) { /* error */
|
||||
ErrShow(var->name);
|
||||
ERR_I(StrPut(outBuf, "", COC_ERR)); /* signal error message */
|
||||
@@ -375,7 +411,7 @@ int CocCallHandlers(void) {
|
||||
assert(var!=NULL && var->hdl!=NULL);
|
||||
if (mode==COC_DWR) {
|
||||
var->pending=0;
|
||||
ERR_I(var->hdl(mode, p->base));
|
||||
ERR_I(var->hdl(mode, p->base, cl->fd));
|
||||
p->mode=0;
|
||||
} else {
|
||||
delayedRead=1;
|
||||
@@ -391,7 +427,7 @@ int CocCallHandlers(void) {
|
||||
var=p->var;
|
||||
assert(var!=NULL && var->hdl!=NULL);
|
||||
if (mode==COC_DRD) {
|
||||
iret=var->hdl(mode, p->base);
|
||||
iret=var->hdl(mode, p->base, cl->fd);
|
||||
if (iret<0) { /* error */
|
||||
ERR_I(StrPut(&bufr, "", COC_ERR)); /* signal error message */
|
||||
ERR_I(StrPut(&bufr, ErrMessage, COC_SEP));
|
||||
@@ -455,6 +491,7 @@ int CocHandle1Request(int tmo_msec, int fd) {
|
||||
if (i==0) return(0); /* timeout */
|
||||
|
||||
if (FD_ISSET(mainFd, &rmask)) {
|
||||
cadrlen=sizeof(cadr);
|
||||
ERR_SI(newfd=accept(mainFd, (struct sockaddr *)&cadr, &cadrlen));
|
||||
FD_SET(newfd, &mask);
|
||||
if (newfd>=maxfd) maxfd=newfd+1;
|
||||
@@ -545,14 +582,14 @@ int CocHandle1Request(int tmo_msec, int fd) {
|
||||
if (NULL!=strchr(loglist,'M')) lmask = lmask | LOG_MAIN;
|
||||
ERR_I(StrPut(&bufo, "", COC_NUL)); /* o.k. */
|
||||
} else {
|
||||
ERR_I(iret=CocHandleThis(var, base, &bufo, COC_WR));
|
||||
ERR_I(iret=CocHandleThis(var, base, &bufo, COC_WR, cl->fd));
|
||||
if (iret) ERR_I(CocPushThisHandler(var, cl, base, iret));
|
||||
}
|
||||
modified=1;
|
||||
}
|
||||
} else {
|
||||
ERR_P(StrGet(&buf, NULL, COC_NUL)); /* skip separator */
|
||||
ERR_I(iret=CocHandleThis(var, base, &bufo, COC_RD));
|
||||
ERR_I(iret=CocHandleThis(var, base, &bufo, COC_RD, cl->fd));
|
||||
if (iret) ERR_I(CocPushThisHandler(var, cl, base, iret));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user