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
*/
|