6
#define xmlsec_maxpri 10000000
7
#define xmlsec_maxsec 25
8
#define xmlsec_minpri 10
9
#define xmlsec_basesize 500
10
#define xmlsec_secsize 300
11
#define xmlsec_min_maxsize 1024
12
char xmlgen_s[xmlsec_basesize];
13
char xmlgen_ss[xmlsec_secsize];
15
char *xmlgen_feel_mem;
16
long xmlgen_real_maxsec;
17
unsigned long xmlgen_maxsize;
18
unsigned long xmlgen_header_size;
20
char *xmlgen_strgen(int size) {
24
s=(char*)malloc(size+1);
27
for (i=0;i<size;i++) s[i]=rnd_cyr();
29
for (i=0;i<size;i++) s[i]=rnd_char();
36
void xmlgen_gensec(char *str) {
39
s1=xmlgen_strgen(strlength);
40
s2=xmlgen_strgen(strlength);
41
sprintf(xmlgen_ss,"<item><title>%s</title><note>%s</note><quantity>%u</quantity><price>%.2f</price></item>\n",
42
s1,s2,1+rand()/(RAND_MAX/98),0.1+((double)rand())/(RAND_MAX/99));
45
strcat(str,xmlgen_ss);
48
int xmlgen_genfirst(char *str,int maxsize,int maxsec) {
49
int i,max,size,fullsize;
50
char *s1,*s2,*s3,*s4,*s5;
52
s1=xmlgen_strgen(strlength);
53
s2=xmlgen_strgen(strlength);
54
s3=xmlgen_strgen(strlength);
55
s4=xmlgen_strgen(strlength);
56
s5=xmlgen_strgen(strlength);
57
sprintf(xmlgen_s,"<shiporder orderid=\"%06u\"><orderperson>%s</orderperson><shipto><name>%s</name><address>%s</address><city>%s</city><country>%s</country></shipto>\n",
58
rand()/(RAND_MAX/100000),s1,s2,s3,s4,s5);
65
fullsize=strlen(xmlgen_s);
68
size=strlen(xmlgen_ss)+10;
71
max=(maxsize-fullsize-13)/size;
72
if (max>maxsec) max=maxsec;
73
max=rand()/(RAND_MAX/max);
77
fullsize+=strlen(xmlgen_ss);
79
strcat(str,"</shiporder>\n");
80
fullsize+=strlen("</shiporder>\n");
85
char *xmlgen_init(int maxsize) {
87
if (maxsize<xmlsec_min_maxsize) maxsize=xmlsec_min_maxsize;
89
xmlgen_mem=(char*)malloc(maxsize+1);
91
fprintf(stderr,"Can't allocate %lu bytes of memory!\n",maxsize+1);
95
xmlgen_real_maxsec = (long)( ( maxsize / xmlsec_minpri ) - xmlsec_basesize ) / xmlsec_secsize;
96
if (2*xmlgen_real_maxsec<xmlsec_minpri) {
97
xmlgen_real_maxsec = (long)(sqrt((double)(xmlsec_basesize*xmlsec_basesize+4*xmlsec_secsize*maxsize))-xmlsec_basesize)/(2*xmlsec_secsize);
99
if (xmlgen_real_maxsec<2) xmlgen_real_maxsec=2;
100
if (xmlgen_real_maxsec>xmlsec_maxsec) xmlgen_real_maxsec=xmlsec_maxsec;
102
#if defined(ORACLE_PARSER_FIX)
103
strcpy(xmlgen_mem,"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<?xml-stylesheet type=\"text/xsl\" href=\"../xml.files/generated.xsl\"?>\n<data xmlns:xsi=\"http://www.w3.org/2000/08/XMLSchema-instance\">\n");
104
#elif defined(PARABIX_PARSER_FIX)
105
strcpy(xmlgen_mem,"<data>\n");
107
strcpy(xmlgen_mem,"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<?xml-stylesheet type=\"text/xsl\" href=\"../xml.files/generated.xsl\"?>\n<data xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"../xml.files/generated.xsd\">\n");
109
xmlgen_header_size = strlen(xmlgen_mem);
111
xmlgen_feel_mem=xmlgen_mem + xmlgen_header_size;
113
xmlgen_maxsize=maxsize - xmlgen_header_size;
118
void xmlgen_deinit() {
122
unsigned long xmlgen() {
124
char *s=xmlgen_feel_mem;
125
unsigned long maxsize=xmlgen_maxsize;
128
for (i=0;((i<xmlsec_maxpri)&&(maxsize>xmlsec_basesize));i++) {
129
size=xmlgen_genfirst(s,maxsize,xmlgen_real_maxsec);
134
return xmlgen_header_size + (xmlgen_maxsize - maxsize) + 7;