]> git.cworth.org Git - apitrace/blob - log.hpp
Autogenerate d3d8.dll wrapper.
[apitrace] / log.hpp
1
2 #ifndef _LOG_HPP_
3 #define _LOG_HPP_
4
5 #include <stdio.h>
6 #include <stdlib.h>
7
8
9 class Log
10 {
11 public:
12     Log(const char *name) {
13         char fileName[_MAX_PATH];
14         _snprintf(fileName, _MAX_PATH, "%s.%u.xml", name, rand());
15         file = fopen(fileName, "wt");
16         Write("<?xml version='1.0' encoding='UTF-8'?>\n");
17         Write("<?xml-stylesheet type='text/xsl' href='d3dtrace.xsl'?>\n");
18         Write("<trace>\n");
19     }
20     
21     ~Log() {
22         Write("</trace>\n");
23         fclose(file);
24     }
25     
26     void NewLine(void) {
27         Write("\n");
28     }
29     
30     void Tag(const char *name) {
31         Write("<");
32         Write(name);
33         Write("/>");
34     }
35     
36     void BeginTag(const char *name) {
37         Write("<");
38         Write(name);
39         Write(">");
40     }
41     
42     void BeginTag(const char *name, 
43                   const char *attr1, const char *value1) {
44         Write("<");
45         Write(name);
46         Write(" ");
47         Write(attr1);
48         Write("=\"");
49         Escape(value1);
50         Write("\">");
51     }
52     
53     void BeginTag(const char *name, 
54                   const char *attr1, const char *value1,
55                   const char *attr2, const char *value2) {
56         Write("<");
57         Write(name);
58         Write(" ");
59         Write(attr1);
60         Write("=\"");
61         Escape(value1);
62         Write("\" ");
63         Write(attr2);
64         Write("=\"");
65         Escape(value2);
66         Write("\">");
67     }
68     
69     void EndTag(const char *name) {
70         Write("</");
71         Write(name);
72         Write(">");
73     }
74     
75     void Text(const char *text) {
76         Escape(text);
77     }
78     
79     void TextF(const char *format, ...) {
80         va_list ap;
81         va_start(ap, format);
82         vfprintf(file, format, ap);
83         va_end(ap);
84     }
85     
86     void BeginCall(const char *function) {
87         Write("\t");
88         BeginTag("call", "name", function);
89         NewLine();
90     }
91     
92     void EndCall(void) {
93         Write("\t");
94         EndTag("call");
95         NewLine();
96     }
97     
98     void BeginParam(const char *type, const char *name) {
99         Write("\t\t");
100         BeginTag("param", "type", type, "name", name);
101     }
102     
103     void EndParam(void) {
104         EndTag("param");
105         NewLine();
106     }
107     
108     void BeginReturn(const char *type, const char *name) {
109         Write("\t\t");
110         BeginTag("return", "type", type);
111     }
112     
113     void EndReturn(void) {
114         EndTag("return");
115         NewLine();
116     }
117     
118 protected:
119     void Escape(const char *s) {
120         /* FIXME */
121         Write(s);
122     }
123     
124     void Write(const char *s) {
125         fputs(s, file);
126     }
127     
128     void WriteF(const char *f, ...) {
129         va_list ap;
130         va_start(ap, f);
131         vfprintf(file, f, ap);
132         va_end(ap);
133     }
134
135 private:
136     FILE *file;
137 };
138
139
140 #endif /* _LOG_HPP_ */