#include #include #include "attr.h" #include "debug.h" static char *inbuff=0; char *myinputptr; int myinputlim; static int haveLexedAttr=0; static struct s_attr lexed_attr; static struct s_syncvalues sync; struct s_attr *xml_parse(char *s) { int rval; inbuff=s; if (haveLexedAttr==0) { // first time through haveLexedAttr=1; lexed_attr.id=0; lexed_attr.envelopeId=0; lexed_attr. yourId=0; lexed_attr. data=0; lexed_attr. cnt=0; lexed_attr. maxcnt=0; lexed_attr. type=0; lexed_attr. lastkey=0; lexed_attr. infield=0; lexed_attr. fileid=0; lexed_attr. programname=0; } if (lexed_attr.id!=0) { free(lexed_attr.id); lexed_attr.id=0; } if (lexed_attr.envelopeId!=0) { free(lexed_attr.envelopeId); lexed_attr.envelopeId=0; } if (lexed_attr. yourId!=0) { free(lexed_attr. yourId); lexed_attr. yourId=0; } if (lexed_attr. data!=0) { free(lexed_attr. data); lexed_attr. data=0; } if (lexed_attr. type!=0) { free(lexed_attr. type); lexed_attr. type=0; } if (lexed_attr. lastkey!=0) { free(lexed_attr. lastkey); lexed_attr. lastkey=0; } if (lexed_attr. infield!=0) { free(lexed_attr. infield); lexed_attr. infield=0; } if (lexed_attr. fileid!=0) { free(lexed_attr. fileid); lexed_attr. fileid=0; } if (lexed_attr. programname!=0) { free(lexed_attr. programname); lexed_attr. programname=0; } myinputlim=strlen(s); myinputptr=inbuff; memset(&lexed_attr,0, sizeof(struct s_attr)); if (strlen(s)< 1000) { UIdebug(3,"INPUT = %s\n",s); } rval=xml_yylex(); if (rval==0) { return &lexed_attr; } else { printf("X2 - yylex failed (%s) rval=%d\n",s,rval); return &lexed_attr; } } int my_yyinput(char *buf,int maxsize) { int n=attr_min(maxsize,myinputlim); if (n>0) { memcpy(buf,myinputptr,n); myinputptr+=n; myinputlim-=n; } return n; } ]]>