/xmlbench/trunk

To get this branch, use:
bzr branch http://darksoft.org/webbzr/xmlbench/trunk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "unix.h"

#define xmark_kb_size 20000
#define xmark_kb_min  250000

static char *xmarkBuffer=NULL, *xmarkBufferPtr=NULL;
static void *xmarkSave=NULL;

int xmark_printf(FILE *stream, const char *format, ...) {
    va_list ap;
    va_start(ap, format);
    xmarkBufferPtr+=vsprintf(xmarkBufferPtr,format,ap);
    va_end(ap);
}

static ObjDesc *xmarkRoot;

char *xmark_init(unsigned long size) {
    scale_factor=(1.*size/10000);
    if (correction) scale_factor=correction(scale_factor);

    xmlprintf=xmark_printf;
    
    size*=xmark_kb_size;
    if (size<xmark_kb_min) size=xmark_kb_min;
    xmarkBuffer = (char*)malloc(size*sizeof(char));
    xmarkSave = malloc(sizeof(objs));
    if ((!xmarkBuffer)||(!xmarkSave)) {
	fprintf(stderr,"Can't allocate memory!");
	exit(1);
    }
    memcpy(xmarkSave,objs,sizeof(objs));

    return xmarkBuffer;
}

void xmark_deinit() {
    if (xmarkBuffer) free(xmarkBuffer);
    if (xmarkSave) free(xmarkSave);
}

int xmark(int dtd) {
    int document_type;
    if (dtd) document_type=2;
    else document_type=1;
    xmarkBufferPtr=xmarkBuffer;

    memcpy(objs,xmarkSave,sizeof(objs));
    AlignObjs();
    xmarkRoot=objs+1;

    FixSetSize(xmarkRoot);
    ClearFlags();
    FixReferenceSets(xmarkRoot);
    ClearFlags();
    CheckRecursion();
    ClearFlags();
    if (InitHook) InitHook();
    Preamble(document_type);
    GenSubtree(xmarkRoot);
    return xmarkBufferPtr-xmarkBuffer;
}

/* main are here, 
Functions: Usage should be removed 
Symbols: Debug should be removed
*/