annotate tools/db.d @ 1630:d0efa3ae5522 default tip

run/mini/naked_asm5: New x86_64 ABI passes the arguments in reverse order.
author David Nadlinger <code@klickverbot.at>
date Sat, 23 Apr 2011 22:57:32 +0200
parents c5a076546700
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1333
c5a076546700 added db.d
thomask
parents:
diff changeset
1 import std.file, std.stdio, std.cstream, std.conv, std.string, std.ctype;
c5a076546700 added db.d
thomask
parents:
diff changeset
2
c5a076546700 added db.d
thomask
parents:
diff changeset
3 static char[][] TORTURE_FLAGS = [
c5a076546700 added db.d
thomask
parents:
diff changeset
4 /* 0 args */
c5a076546700 added db.d
thomask
parents:
diff changeset
5 "",
c5a076546700 added db.d
thomask
parents:
diff changeset
6
c5a076546700 added db.d
thomask
parents:
diff changeset
7 /* 1 args */
c5a076546700 added db.d
thomask
parents:
diff changeset
8 "-g",
c5a076546700 added db.d
thomask
parents:
diff changeset
9 "-inline",
c5a076546700 added db.d
thomask
parents:
diff changeset
10 "-fPIC",
c5a076546700 added db.d
thomask
parents:
diff changeset
11 "-O",
c5a076546700 added db.d
thomask
parents:
diff changeset
12 "-release",
c5a076546700 added db.d
thomask
parents:
diff changeset
13
c5a076546700 added db.d
thomask
parents:
diff changeset
14 /* 2 args */
c5a076546700 added db.d
thomask
parents:
diff changeset
15 "-g -inline",
c5a076546700 added db.d
thomask
parents:
diff changeset
16 "-g -fPIC",
c5a076546700 added db.d
thomask
parents:
diff changeset
17 "-g -O",
c5a076546700 added db.d
thomask
parents:
diff changeset
18 "-g -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
19 "-inline -fPIC",
c5a076546700 added db.d
thomask
parents:
diff changeset
20 "-inline -O",
c5a076546700 added db.d
thomask
parents:
diff changeset
21 "-inline -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
22 "-fPIC -O",
c5a076546700 added db.d
thomask
parents:
diff changeset
23 "-fPIC -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
24 "-O -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
25
c5a076546700 added db.d
thomask
parents:
diff changeset
26 /* 3 args */
c5a076546700 added db.d
thomask
parents:
diff changeset
27 "-g -inline -fPIC",
c5a076546700 added db.d
thomask
parents:
diff changeset
28 "-g -inline -O",
c5a076546700 added db.d
thomask
parents:
diff changeset
29 "-g -inline -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
30 "-g -fPIC -O",
c5a076546700 added db.d
thomask
parents:
diff changeset
31 "-g -fPIC -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
32 "-g -O -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
33 "-inline -fPIC -O",
c5a076546700 added db.d
thomask
parents:
diff changeset
34 "-inline -fPIC -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
35 "-inline -O -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
36 "-fPIC -O -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
37
c5a076546700 added db.d
thomask
parents:
diff changeset
38 /* 4 args */
c5a076546700 added db.d
thomask
parents:
diff changeset
39 "-g -inline -fPIC -O",
c5a076546700 added db.d
thomask
parents:
diff changeset
40 "-g -inline -fPIC -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
41 "-g -fPIC -O -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
42 "-inline -fPIC -O -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
43
c5a076546700 added db.d
thomask
parents:
diff changeset
44 /* 5 args */
c5a076546700 added db.d
thomask
parents:
diff changeset
45 "-g -inline -fPIC -O -release",
c5a076546700 added db.d
thomask
parents:
diff changeset
46
c5a076546700 added db.d
thomask
parents:
diff changeset
47 /* 4 args - previously ommitted */
c5a076546700 added db.d
thomask
parents:
diff changeset
48 "-g -inline -O -release"
c5a076546700 added db.d
thomask
parents:
diff changeset
49 ];
c5a076546700 added db.d
thomask
parents:
diff changeset
50
c5a076546700 added db.d
thomask
parents:
diff changeset
51 char[] stripMessage(char[] raw, char[] file){
c5a076546700 added db.d
thomask
parents:
diff changeset
52 char[] ext = file[rfind(file, '.') .. $];
c5a076546700 added db.d
thomask
parents:
diff changeset
53 // locations
c5a076546700 added db.d
thomask
parents:
diff changeset
54 {
c5a076546700 added db.d
thomask
parents:
diff changeset
55 uint loc = 1;
c5a076546700 added db.d
thomask
parents:
diff changeset
56 int a = find(raw, file ~ "(");
c5a076546700 added db.d
thomask
parents:
diff changeset
57 while(a != -1){
c5a076546700 added db.d
thomask
parents:
diff changeset
58 int b = a + file.length + 1;
c5a076546700 added db.d
thomask
parents:
diff changeset
59 while(b < raw.length && isdigit(raw[b])){
c5a076546700 added db.d
thomask
parents:
diff changeset
60 b++;
c5a076546700 added db.d
thomask
parents:
diff changeset
61 }
c5a076546700 added db.d
thomask
parents:
diff changeset
62 if(b < raw.length && raw[b] == ')'){
c5a076546700 added db.d
thomask
parents:
diff changeset
63 raw = replace(raw, raw[a .. b+1], format("source%s(%s)", ext, loc++));
c5a076546700 added db.d
thomask
parents:
diff changeset
64 a = find(raw, file ~ "(");
c5a076546700 added db.d
thomask
parents:
diff changeset
65 }else{
c5a076546700 added db.d
thomask
parents:
diff changeset
66 a = -1;
c5a076546700 added db.d
thomask
parents:
diff changeset
67 }
c5a076546700 added db.d
thomask
parents:
diff changeset
68 }
c5a076546700 added db.d
thomask
parents:
diff changeset
69 }
c5a076546700 added db.d
thomask
parents:
diff changeset
70
c5a076546700 added db.d
thomask
parents:
diff changeset
71 // module name
c5a076546700 added db.d
thomask
parents:
diff changeset
72 raw = replace(raw, "dstress." ~ replace(file[0 .. $ - ext.length], "/", "."), "source");
c5a076546700 added db.d
thomask
parents:
diff changeset
73
c5a076546700 added db.d
thomask
parents:
diff changeset
74 // file name
c5a076546700 added db.d
thomask
parents:
diff changeset
75 raw = replace(raw, file, "source" ~ ext);
c5a076546700 added db.d
thomask
parents:
diff changeset
76
c5a076546700 added db.d
thomask
parents:
diff changeset
77 return raw;
c5a076546700 added db.d
thomask
parents:
diff changeset
78 }
c5a076546700 added db.d
thomask
parents:
diff changeset
79
c5a076546700 added db.d
thomask
parents:
diff changeset
80 void toText(char[] raw){
c5a076546700 added db.d
thomask
parents:
diff changeset
81 toBlob(cast(ubyte[]) raw);
c5a076546700 added db.d
thomask
parents:
diff changeset
82 }
c5a076546700 added db.d
thomask
parents:
diff changeset
83
c5a076546700 added db.d
thomask
parents:
diff changeset
84 void toBlob(void[] raw){
c5a076546700 added db.d
thomask
parents:
diff changeset
85 printf("'");
c5a076546700 added db.d
thomask
parents:
diff changeset
86 foreach(ubyte x; cast(ubyte[])raw){
c5a076546700 added db.d
thomask
parents:
diff changeset
87 switch(x){
c5a076546700 added db.d
thomask
parents:
diff changeset
88 case '\\', '\'':
c5a076546700 added db.d
thomask
parents:
diff changeset
89 printf("\\%c", x);
c5a076546700 added db.d
thomask
parents:
diff changeset
90 break;
c5a076546700 added db.d
thomask
parents:
diff changeset
91 case '\r':
c5a076546700 added db.d
thomask
parents:
diff changeset
92 printf("\\r");
c5a076546700 added db.d
thomask
parents:
diff changeset
93 break;
c5a076546700 added db.d
thomask
parents:
diff changeset
94 case '\n':
c5a076546700 added db.d
thomask
parents:
diff changeset
95 printf("\\n");
c5a076546700 added db.d
thomask
parents:
diff changeset
96 break;
c5a076546700 added db.d
thomask
parents:
diff changeset
97 case 0:
c5a076546700 added db.d
thomask
parents:
diff changeset
98 printf("\\0");
c5a076546700 added db.d
thomask
parents:
diff changeset
99 break;
c5a076546700 added db.d
thomask
parents:
diff changeset
100 default:
c5a076546700 added db.d
thomask
parents:
diff changeset
101 printf("%c", x);
c5a076546700 added db.d
thomask
parents:
diff changeset
102 }
c5a076546700 added db.d
thomask
parents:
diff changeset
103 }
c5a076546700 added db.d
thomask
parents:
diff changeset
104 printf("'");
c5a076546700 added db.d
thomask
parents:
diff changeset
105 }
c5a076546700 added db.d
thomask
parents:
diff changeset
106
c5a076546700 added db.d
thomask
parents:
diff changeset
107 int main(char[][] arg){
c5a076546700 added db.d
thomask
parents:
diff changeset
108 printf("%.*s", `
c5a076546700 added db.d
thomask
parents:
diff changeset
109 drop table Result;
c5a076546700 added db.d
thomask
parents:
diff changeset
110 drop table Message;
c5a076546700 added db.d
thomask
parents:
diff changeset
111 drop table Testcase;
c5a076546700 added db.d
thomask
parents:
diff changeset
112
c5a076546700 added db.d
thomask
parents:
diff changeset
113 create TABLE Message(
c5a076546700 added db.d
thomask
parents:
diff changeset
114 id smallint(2) unsigned unique,
c5a076546700 added db.d
thomask
parents:
diff changeset
115 message TEXT
c5a076546700 added db.d
thomask
parents:
diff changeset
116 ) ENGINE=InnoDB CHARSET=utf8;
c5a076546700 added db.d
thomask
parents:
diff changeset
117
c5a076546700 added db.d
thomask
parents:
diff changeset
118 CREATE TABLE Testcase (
c5a076546700 added db.d
thomask
parents:
diff changeset
119 name CHAR(40) unique,
c5a076546700 added db.d
thomask
parents:
diff changeset
120 source BLOB,
c5a076546700 added db.d
thomask
parents:
diff changeset
121 id SMALLINT(2) unsigned unique,
c5a076546700 added db.d
thomask
parents:
diff changeset
122 type enum('compile','complex','nocompile','norun','run','undefined')
c5a076546700 added db.d
thomask
parents:
diff changeset
123 ) ENGINE=InnoDB CHARSET=utf8;
c5a076546700 added db.d
thomask
parents:
diff changeset
124
c5a076546700 added db.d
thomask
parents:
diff changeset
125 create TABLE Result (
c5a076546700 added db.d
thomask
parents:
diff changeset
126 testcase SMALLINT(2) unsigned,
c5a076546700 added db.d
thomask
parents:
diff changeset
127 message SMALLINT(2) unsigned,
c5a076546700 added db.d
thomask
parents:
diff changeset
128 result enum('FAIL','XPASS','ERROR') NOT NULL default 'ERROR',
c5a076546700 added db.d
thomask
parents:
diff changeset
129 options enum('','-g','-inline','-fPIC','-O','-release','-g -inline','-g -fPIC','-g -O','-g -release',
c5a076546700 added db.d
thomask
parents:
diff changeset
130 '-inline -fPIC','-inline -O','-inline -release','-fPIC -O','-fPIC -release','-O -release',
c5a076546700 added db.d
thomask
parents:
diff changeset
131 '-g -inline -fPIC','-g -inline -O','-g -inline -release','-g -fPIC -O','-g -fPIC -release',
c5a076546700 added db.d
thomask
parents:
diff changeset
132 '-g -O -release','-inline -fPIC -O','-inline -fPIC -release','-inline -O -release',
c5a076546700 added db.d
thomask
parents:
diff changeset
133 '-fPIC -O -release','-g -inline -fPIC -O','-g -inline -fPIC -release','-g -inline -O -release',
c5a076546700 added db.d
thomask
parents:
diff changeset
134 '-g -fPIC -O -release','-inline -fPIC -O -release','-g -inline -fPIC -O -release'),
c5a076546700 added db.d
thomask
parents:
diff changeset
135 CONSTRAINT Result_c1 FOREIGN KEY (testcase) REFERENCES Testcase (id),
c5a076546700 added db.d
thomask
parents:
diff changeset
136 CONSTRAINT Result_c2 FOREIGN KEY (message) REFERENCES Message (id)
c5a076546700 added db.d
thomask
parents:
diff changeset
137 ) ENGINE=InnoDB CHARSET=utf8;
c5a076546700 added db.d
thomask
parents:
diff changeset
138 `);
c5a076546700 added db.d
thomask
parents:
diff changeset
139
c5a076546700 added db.d
thomask
parents:
diff changeset
140
c5a076546700 added db.d
thomask
parents:
diff changeset
141 ushort[char[]] tests;
c5a076546700 added db.d
thomask
parents:
diff changeset
142 ushort[char[]] messages;
c5a076546700 added db.d
thomask
parents:
diff changeset
143
c5a076546700 added db.d
thomask
parents:
diff changeset
144 char[] msg;
c5a076546700 added db.d
thomask
parents:
diff changeset
145 bool badValgrind;
c5a076546700 added db.d
thomask
parents:
diff changeset
146 bool badGDB;
c5a076546700 added db.d
thomask
parents:
diff changeset
147
c5a076546700 added db.d
thomask
parents:
diff changeset
148 for(char[] line = din.readLine(); !din.eof(); line = din.readLine()){
c5a076546700 added db.d
thomask
parents:
diff changeset
149 if(find(line, "Torture-Sub-") == 0){
c5a076546700 added db.d
thomask
parents:
diff changeset
150 line = line["Torture-Sub-".length .. $];
c5a076546700 added db.d
thomask
parents:
diff changeset
151 int torture_id;
c5a076546700 added db.d
thomask
parents:
diff changeset
152 char[] result;
c5a076546700 added db.d
thomask
parents:
diff changeset
153 char[] name;
c5a076546700 added db.d
thomask
parents:
diff changeset
154 char[] root;
c5a076546700 added db.d
thomask
parents:
diff changeset
155
c5a076546700 added db.d
thomask
parents:
diff changeset
156 {
c5a076546700 added db.d
thomask
parents:
diff changeset
157 int i = find(line, '/');
c5a076546700 added db.d
thomask
parents:
diff changeset
158 torture_id = toInt(line[0 .. i]);
c5a076546700 added db.d
thomask
parents:
diff changeset
159 }
c5a076546700 added db.d
thomask
parents:
diff changeset
160
c5a076546700 added db.d
thomask
parents:
diff changeset
161 {
c5a076546700 added db.d
thomask
parents:
diff changeset
162 int a = find(line, '-');
c5a076546700 added db.d
thomask
parents:
diff changeset
163 int b = find(line, ':');
c5a076546700 added db.d
thomask
parents:
diff changeset
164 result = line[a + 1 .. b];
c5a076546700 added db.d
thomask
parents:
diff changeset
165 line = strip(line[b+1 .. $]);
c5a076546700 added db.d
thomask
parents:
diff changeset
166 }
c5a076546700 added db.d
thomask
parents:
diff changeset
167
c5a076546700 added db.d
thomask
parents:
diff changeset
168 {
c5a076546700 added db.d
thomask
parents:
diff changeset
169 int a = find(line, std.path.sep);
c5a076546700 added db.d
thomask
parents:
diff changeset
170 root = line[0 .. a];
c5a076546700 added db.d
thomask
parents:
diff changeset
171 name = line[a + std.path.sep.length .. $];
c5a076546700 added db.d
thomask
parents:
diff changeset
172 a = find(name, ' ');
c5a076546700 added db.d
thomask
parents:
diff changeset
173 if(a != -1){
c5a076546700 added db.d
thomask
parents:
diff changeset
174 name = name[0 .. a];
c5a076546700 added db.d
thomask
parents:
diff changeset
175 }
c5a076546700 added db.d
thomask
parents:
diff changeset
176 }
c5a076546700 added db.d
thomask
parents:
diff changeset
177
c5a076546700 added db.d
thomask
parents:
diff changeset
178 if(root == "complex"){
c5a076546700 added db.d
thomask
parents:
diff changeset
179 // ignore complex test cases
c5a076546700 added db.d
thomask
parents:
diff changeset
180 continue;
c5a076546700 added db.d
thomask
parents:
diff changeset
181 }
c5a076546700 added db.d
thomask
parents:
diff changeset
182
c5a076546700 added db.d
thomask
parents:
diff changeset
183 if(result == "XPASS" || result == "FAIL" || result == "ERROR"){
c5a076546700 added db.d
thomask
parents:
diff changeset
184 ushort* test_id = name in tests;
c5a076546700 added db.d
thomask
parents:
diff changeset
185 if(!test_id){
c5a076546700 added db.d
thomask
parents:
diff changeset
186 printf("insert into Testcase values(");
c5a076546700 added db.d
thomask
parents:
diff changeset
187 toText(name);
c5a076546700 added db.d
thomask
parents:
diff changeset
188 printf(",");
c5a076546700 added db.d
thomask
parents:
diff changeset
189 toBlob(replace(cast(char[]) read(root ~ std.path.sep ~ name), "$HeadURL: /local/dstress/", "$HeadURL: http://dstress.kuehne.cn/"));
c5a076546700 added db.d
thomask
parents:
diff changeset
190 ushort new_id = cast(ushort)(tests.length + 1);
c5a076546700 added db.d
thomask
parents:
diff changeset
191 printf(", %hu, '%.*s');\n", new_id, root);
c5a076546700 added db.d
thomask
parents:
diff changeset
192 tests[name] = new_id;
c5a076546700 added db.d
thomask
parents:
diff changeset
193 test_id = name in tests;
c5a076546700 added db.d
thomask
parents:
diff changeset
194 }
c5a076546700 added db.d
thomask
parents:
diff changeset
195
c5a076546700 added db.d
thomask
parents:
diff changeset
196 if(badValgrind){
c5a076546700 added db.d
thomask
parents:
diff changeset
197 msg = "Valgrind";
c5a076546700 added db.d
thomask
parents:
diff changeset
198 }else if(badGDB){
c5a076546700 added db.d
thomask
parents:
diff changeset
199 msg = "GDB";
c5a076546700 added db.d
thomask
parents:
diff changeset
200 }else {
c5a076546700 added db.d
thomask
parents:
diff changeset
201 msg = stripMessage(msg, root ~ std.path.sep ~ name);
c5a076546700 added db.d
thomask
parents:
diff changeset
202 }
c5a076546700 added db.d
thomask
parents:
diff changeset
203 ushort* message_id = msg in messages;
c5a076546700 added db.d
thomask
parents:
diff changeset
204 if(!message_id){
c5a076546700 added db.d
thomask
parents:
diff changeset
205 ushort new_id = cast(ushort) (messages.length + 1);
c5a076546700 added db.d
thomask
parents:
diff changeset
206 printf("insert into Message values(%hu, ", new_id);
c5a076546700 added db.d
thomask
parents:
diff changeset
207 toText(msg);
c5a076546700 added db.d
thomask
parents:
diff changeset
208 printf(");\n");
c5a076546700 added db.d
thomask
parents:
diff changeset
209 messages[msg] = new_id;
c5a076546700 added db.d
thomask
parents:
diff changeset
210 message_id = msg in messages;
c5a076546700 added db.d
thomask
parents:
diff changeset
211 }
c5a076546700 added db.d
thomask
parents:
diff changeset
212 printf("insert into Result values(%hu, %hu, '%.*s', '%.*s');\n", *test_id,
c5a076546700 added db.d
thomask
parents:
diff changeset
213 *message_id, result, TORTURE_FLAGS[torture_id - 1]);
c5a076546700 added db.d
thomask
parents:
diff changeset
214 }else{
c5a076546700 added db.d
thomask
parents:
diff changeset
215 // ignore 'good' results
c5a076546700 added db.d
thomask
parents:
diff changeset
216 }
c5a076546700 added db.d
thomask
parents:
diff changeset
217 msg.length = 0;
c5a076546700 added db.d
thomask
parents:
diff changeset
218 badValgrind = false;
c5a076546700 added db.d
thomask
parents:
diff changeset
219 badGDB = false;
c5a076546700 added db.d
thomask
parents:
diff changeset
220 continue;
c5a076546700 added db.d
thomask
parents:
diff changeset
221 }
c5a076546700 added db.d
thomask
parents:
diff changeset
222
c5a076546700 added db.d
thomask
parents:
diff changeset
223 if(line.length < 1){
c5a076546700 added db.d
thomask
parents:
diff changeset
224 continue;
c5a076546700 added db.d
thomask
parents:
diff changeset
225 }
c5a076546700 added db.d
thomask
parents:
diff changeset
226 if(line == "--------"){
c5a076546700 added db.d
thomask
parents:
diff changeset
227 continue;
c5a076546700 added db.d
thomask
parents:
diff changeset
228 }
c5a076546700 added db.d
thomask
parents:
diff changeset
229 if(line == "EXIT CODE: 0"){
c5a076546700 added db.d
thomask
parents:
diff changeset
230 msg.length = 0;
c5a076546700 added db.d
thomask
parents:
diff changeset
231 continue;
c5a076546700 added db.d
thomask
parents:
diff changeset
232 }
c5a076546700 added db.d
thomask
parents:
diff changeset
233 if(find(line, "EXIT CODE:") == 0){
c5a076546700 added db.d
thomask
parents:
diff changeset
234 continue;
c5a076546700 added db.d
thomask
parents:
diff changeset
235 }
c5a076546700 added db.d
thomask
parents:
diff changeset
236 if(find(line, "compile:") == 0 || find(line, "run:") == 0 || find(line, "norun:") == 0 || find(line, "nocompile:") == 0){
c5a076546700 added db.d
thomask
parents:
diff changeset
237 continue;
c5a076546700 added db.d
thomask
parents:
diff changeset
238 }
c5a076546700 added db.d
thomask
parents:
diff changeset
239 if(find(line, "gcc ./obj/") == 0 || find(line, "creating a DT_TEXTREL in object") != -1){
c5a076546700 added db.d
thomask
parents:
diff changeset
240 continue;
c5a076546700 added db.d
thomask
parents:
diff changeset
241 }
c5a076546700 added db.d
thomask
parents:
diff changeset
242 if(find(line, "valgrind --leak-check=no") == 0){
c5a076546700 added db.d
thomask
parents:
diff changeset
243 continue;
c5a076546700 added db.d
thomask
parents:
diff changeset
244 }
c5a076546700 added db.d
thomask
parents:
diff changeset
245 if(find(line, "==") == 0){
c5a076546700 added db.d
thomask
parents:
diff changeset
246 badValgrind=true;
c5a076546700 added db.d
thomask
parents:
diff changeset
247 line = line[find(line[1 .. $], "==") + 1 + 3 .. $];
c5a076546700 added db.d
thomask
parents:
diff changeset
248 }
c5a076546700 added db.d
thomask
parents:
diff changeset
249 if(find(line, "This GDB was configured") == 0){
c5a076546700 added db.d
thomask
parents:
diff changeset
250 badGDB = true;
c5a076546700 added db.d
thomask
parents:
diff changeset
251 }
c5a076546700 added db.d
thomask
parents:
diff changeset
252 if(find(line, "/opt/dmd/bin/") == 0){
c5a076546700 added db.d
thomask
parents:
diff changeset
253 line = "Killed";
c5a076546700 added db.d
thomask
parents:
diff changeset
254 }
c5a076546700 added db.d
thomask
parents:
diff changeset
255 if(msg.length){
c5a076546700 added db.d
thomask
parents:
diff changeset
256 msg ~= '\n';
c5a076546700 added db.d
thomask
parents:
diff changeset
257 msg ~= line;
c5a076546700 added db.d
thomask
parents:
diff changeset
258 }else{
c5a076546700 added db.d
thomask
parents:
diff changeset
259 msg = line.dup;
c5a076546700 added db.d
thomask
parents:
diff changeset
260 }
c5a076546700 added db.d
thomask
parents:
diff changeset
261 }
c5a076546700 added db.d
thomask
parents:
diff changeset
262
c5a076546700 added db.d
thomask
parents:
diff changeset
263 return 0;
c5a076546700 added db.d
thomask
parents:
diff changeset
264 }