*** empty log message ***

This commit is contained in:
cvs
2002-06-10 12:45:24 +00:00
parent 0daef05b2e
commit 267d16908a
20 changed files with 863 additions and 538 deletions

View File

@@ -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));
}
}