Subversion Repositories spk

Rev

Rev 1 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1 Rev 114
Line 9... Line 9...
9
	"No error.",
9
	"No error.",
10
	"Bad header.",
10
	"Bad header.",
11
	"Bad ending header.",
11
	"Bad ending header.",
12
	"Not enough data.",
12
	"Not enough data.",
13
	"More data than expected.",
13
	"More data than expected.",
14
	"Unknown Point header (tag).",
14
	"Unknown Point flags.",
15
	"General error.",
15
	"General error.",
16
	"No STAT format available.",
16
	"No STAT format available.",
17
	"Not enough data to match STAT format.",
17
	"Not enough data to match STAT format.",
18
	"Format marked with warning sign was used.",
18
	"Format marked with warning sign was used.",
19
	"Point not found in section POIN.",
19
	"Point not found in section POIN.",
20
	"Invalid version",
20
	"Invalid version",
21
	"Unsupported bits set in frame flags",
21
	"Unsupported bits set in frame flags",
22
	"Unknown material6 value type"
22
	"Unknown material6 value type"
23
	
23
 
24
	// don forget to increase bob_error_count below!
24
	// don forget to increase bob_error_count below!
25
};
25
};
26
 
26
 
27
#define bob_error_count 14
27
#define bob_error_count 14
28
 
28
 
Line 33... Line 33...
33
	else
33
	else
34
		return bob_errors[e_error];
34
		return bob_errors[e_error];
35
}
35
}
36
//---------------------------------------------------------------------------------
36
//---------------------------------------------------------------------------------
37
// STRING - object
37
// STRING - object
38
bool bob_dom_string::load(bob_dom_ibinaryfilestream& is, int startHeader, int endHeader)
38
bool bob_string::load(ibinaryfilestream& is, int startHeader, int endHeader)
39
{
39
{
40
	int hdr;
40
	int hdr;
41
	is >> hdr;
41
	is >> hdr;
42
	if(hdr!=startHeader){
42
	if(hdr!=startHeader){
43
		error(e_badHeader);
43
		error(e_badHeader);
Line 52... Line 52...
52
	is >> hdr;
52
	is >> hdr;
53
	if(hdr!=endHeader)
53
	if(hdr!=endHeader)
54
		error(e_badEndHeader);
54
		error(e_badEndHeader);
55
	return hdr==endHeader;
55
	return hdr==endHeader;
56
}
56
}
57
 
-
 
58
bool bob_dom_string::load(unsigned char *data, size_t size, int startHeader, int endHeader)
-
 
59
{
-
 
60
	if ( data[0] != startHeader )
-
 
61
		return false;
-
 
62
 
-
 
63
	size_t pos = 0;
-
 
64
	while ( pos < size && data[pos] != '\n' );
-
 
65
	m_text = new char[pos];
-
 
66
	memcpy(m_text, data, pos);
-
 
67
 
-
 
68
	if ( data[pos] != endHeader )
-
 
69
		return false;
-
 
70
 
-
 
71
	return true;
-
 
72
}
-
 
73
 
-
 
74
//---------------------------------------------------------------------------------
57
//---------------------------------------------------------------------------------
75
bool bob_dom_string::toFile(bob_dom_obinaryfilestream& os, int begin, int end)
58
bool bob_string::toFile(obinaryfilestream& os, int begin, int end)
76
{
59
{
77
	if(m_text && *m_text!=0)
60
	if(m_text && *m_text!=0)
78
		os << begin << m_text << end;
61
		os << begin << m_text << end;
79
		
62
 
80
	return os.good();
63
	return os.good();
81
}
64
}
82
//---------------------------------------------------------------------------------
65
//---------------------------------------------------------------------------------
83
// INFO
66
// INFO
84
bool bob_dom_info::toFile(bob_dom_otextfilestream& os)
67
bool bob_info::toFile(otextfilestream& os)
85
{
68
{
86
	if(m_text && *m_text!=0)
69
	if(m_text && *m_text!=0)
87
		os << noSemicolons << "/# " << m_text << endl;
70
		os << noSemicolons << "/# " << m_text << endl;
88
	return os.good();
71
	return os.good();
89
}
72
}
Line 104... Line 87...
104
}
87
}
105
//---------------------------------------------------------------------------------
88
//---------------------------------------------------------------------------------
106
void bob_with_errors::error(bob_error_codes code)
89
void bob_with_errors::error(bob_error_codes code)
107
{
90
{
108
	error(s_error, code);
91
	error(s_error, code);
109
}
92
}
110
//---------------------------------------------------------------------------------
93
//---------------------------------------------------------------------------------
111
void bob_with_errors::error(bob_error_severity severity, bob_error_codes code, const char *format, ...)
94
void bob_with_errors::error(bob_error_severity severity, bob_error_codes code, const char *format, ...)
112
{
95
{
113
	va_list ap;
96
	va_list ap;
114
	va_start(ap, format);
97
	va_start(ap, format);
115
	verror(severity, code, format, ap);
98
	verror(severity, code, format, ap);
116
	va_end(ap);
99
	va_end(ap);
117
}
100
}
118
//---------------------------------------------------------------------------------
101
//---------------------------------------------------------------------------------
119
void bob_with_errors::error(bob_error_codes code, const char *format, ...)
102
void bob_with_errors::error(bob_error_codes code, const char *format, ...)
120
{
103
{
121
	va_list ap;
104
	va_list ap;
122
	va_start(ap, format);
105
	va_start(ap, format);
123
	verror(s_error, code, format, ap);
106
	verror(s_error, code, format, ap);
124
	va_end(ap);
107
	va_end(ap);
125
}
108
}
126
//---------------------------------------------------------------------------------
109
//---------------------------------------------------------------------------------
127
int peek(bob_dom_ibinaryfilestream& is)
110
int peek(ibinaryfilestream& is)
128
{
111
{
129
	int i;
112
	int i;
130
	is >> i;
113
	is >> i;
131
	is.advance(-(int)sizeof(int));
114
	is.advance(-(int)sizeof(int));
132
	return i;
115
	return i;
133
}
116
}
134
//---------------------------------------------------------------------------------
117
//---------------------------------------------------------------------------------
135
// DOCUMENT
118
// DOCUMENT
136
bool bob_dom_document::fromFile(bob_dom_ibinaryfilestream& is)
119
bool bob_dom_document::fromFile(ibinaryfilestream& is)
137
{
120
{
138
	bool bRes=false;
121
	bool bRes=false;
139
	bob_with_errors *e=0;
122
	bob_with_errors *e=0;
140
	char *name="";
123
	char *name="";
141
 
124
 
142
	clearErrors();
125
	clearErrors();
143
	
126
 
144
	switch(peek(is)){
127
	switch(peek(is)){
145
		case bob_dom_bob::hdr_begin:
128
		case bob_dom_bob::HDR_BEGIN:
146
			bob=new bob_dom_bob(settings);
129
			bob=new bob_dom_bob(settings);
147
			e=bob;
130
			e=bob;
148
			name="bob";
131
			name="bob";
149
			bRes=bob->load(is);
132
			bRes=bob->load(is);
150
			break;
133
			break;
151
		case bob_dom_cut::hdr_begin:
134
		case bob_dom_cut::HDR_BEGIN:
152
			cut=new bob_dom_cut(settings);
135
			cut=new bob_dom_cut(settings);
153
			e=cut;
136
			e=cut;
154
			name="cut";
137
			name="cut";
155
			bRes=cut->load(is);
138
			bRes=cut->load(is);
156
			break;
139
			break;
157
		default:
140
		default:
158
			error(F_BOBLoader, S_Error, E_BadHeader, "Bad document header.");
141
			error(F_BOBLoader, S_Error, E_BadHeader, "Bad document header.");
159
	}
142
	}
160
 
143
 
161
	if(e){
144
	if(e){
162
		for(bob_with_errors::ErrorIterator &it=e->errors.begin(); it!=e->errors.end(); ++it){
145
		for(bob_with_errors::ErrorIterator &it=e->errors.begin(); it!=e->errors.end(); ++it){
163
			bob_error(it->severity, it->code, "%s->%s", name, it->text);
146
			bob_error(it->severity, it->code, "%s->%s", name, it->text);
164
		}
147
		}
165
	}
148
	}
166
	return bRes;
149
	return bRes;
167
}
150
}
168
//---------------------------------------------------------------------------------
151
//---------------------------------------------------------------------------------
169
#include <time.h>
152
#include <time.h>
170
bool bob_dom_document::convert(bob_dom_ibinaryfilestream& is, bob_dom_otextfilestream& os)
153
bool bob_dom_document::convert(ibinaryfilestream& is, otextfilestream& os)
171
{
154
{
172
	bool bRes=false;
155
	bool bRes=false;
173
	bob_with_errors *e=0;
156
	bob_with_errors *e=0;
174
	char *pszTime;
157
	char *pszTime;
175
	char *name="";
158
	char *name="";
176
	
159
 
177
	time_t tm=time(0);
160
	time_t tm=time(0);
178
	pszTime=ctime(&tm);
161
	pszTime=ctime(&tm);
179
	pszTime[strlen(pszTime)-1]=0;
162
	pszTime[strlen(pszTime)-1]=0;
180
	
163
 
181
	clearErrors();
164
	clearErrors();
182
	
165
 
183
	os << "// Converted with x2bc from \"" << is.name() << "\" at " << pszTime << endl;
166
	os << "// Converted with x2bc from \"" << is.name() << "\" at " << pszTime << endl;
184
	if(settings->convert()==false)
167
	if(settings->rawMode())
185
		os << "// Raw mode - values are not converted" << endl;
168
		os << "// Raw mode - values are not converted" << endl;
186
	os << endl;
169
	os << endl;
187
	
170
 
188
	switch(peek(is)){
171
	switch(peek(is)){
189
		case bob_dom_bob::hdr_begin:
172
		case bob_dom_bob::HDR_BEGIN:
190
			bob=new bob_dom_bob(settings);
173
			bob=new bob_dom_bob(settings);
191
			e=bob;
174
			e=bob;
192
			name="bob";
175
			name="bob";
193
			bRes=bob->load(is);
176
			bRes=bob->load(is);
194
			if(bRes) bRes=bob->toFile(os);
177
			if(bRes) bRes=bob->toFile(os);
195
			break;
178
			break;
196
		case bob_dom_cut::hdr_begin:
179
		case bob_dom_cut::HDR_BEGIN:
197
			cut=new bob_dom_cut(settings);
180
			cut=new bob_dom_cut(settings);
198
			e=cut;
181
			e=cut;
199
			name="cut";
182
			name="cut";
200
			bRes=cut->convert(is, os);
183
			bRes=cut->convert(is, os);
201
			break;
184
			break;
Line 209... Line 192...
209
		}
192
		}
210
	}
193
	}
211
	return bRes;
194
	return bRes;
212
}
195
}
213
//---------------------------------------------------------------------------------
196
//---------------------------------------------------------------------------------
214
bool bob_dom_document::toFile(bob_dom_obinaryfilestream& os)
197
bool bob_dom_document::toFile(obinaryfilestream& os)
215
{
198
{
216
	if(bob)
199
	if(bob)
217
		bob->toFile(os);
200
		bob->toFile(os);
218
		
201
 
219
	else if(cut)
202
	else if(cut)
220
		cut->toFile(os);
203
		cut->toFile(os);
221
		
204
 
222
	return os.good();
205
	return os.good();
223
}
206
}
224
//---------------------------------------------------------------------------------
207
//---------------------------------------------------------------------------------
225
bool bob_dom_document::toFile(bob_dom_otextfilestream& os)
208
bool bob_dom_document::toFile(otextfilestream& os)
226
{
209
{
227
	os << noSemicolons << "// Converted with x2bc" << endl;
210
	os << noSemicolons << "// Converted with x2bc" << endl;
228
	if(settings->convert()==false)
211
	if(settings->rawMode())
229
		os << "// Raw mode - values are not converted" << endl;
212
		os << "// Raw mode - values are not converted" << endl;
230
	os << endl;
213
	os << endl;
231
	
214
 
232
	if(bob)
215
	if(bob)
233
		bob->toFile(os);
216
		bob->toFile(os);
234
		
217
 
235
	else if(cut)
218
	else if(cut)
236
		cut->toFile(os);
219
		cut->toFile(os);
237
		
220
 
238
	return os.good();
221
	return os.good();
239
}
222
}
240
//---------------------------------------------------------------------------------
223
//---------------------------------------------------------------------------------
241
void bob_dom_document::error(ErrorFacility facility, ErrorSeverity severity, ErrorCode code, const char *format, ...)
224
void bob_dom_document::error(ErrorFacility facility, ErrorSeverity severity, ErrorCode code, const char *format, ...)
242
{
225
{
Line 247... Line 230...
247
}
230
}
248
//---------------------------------------------------------------------------------
231
//---------------------------------------------------------------------------------
249
void bob_dom_document::verror(ErrorFacility facility, ErrorSeverity severity, ErrorCode code, const char *format, va_list ap)
232
void bob_dom_document::verror(ErrorFacility facility, ErrorSeverity severity, ErrorCode code, const char *format, va_list ap)
250
{
233
{
251
	Error *e=new Error();
234
	Error *e=new Error();
252
	
235
 
253
	e->makeCode(facility, severity, code);
236
	e->makeCode(facility, severity, code);
254
	_vsnprintf(e->text, sizeof(e->text), format, ap);
237
	_vsnprintf(e->text, sizeof(e->text), format, ap);
255
	errors.push_back(e);
238
	errors.push_back(e);
256
}
239
}
257
//---------------------------------------------------------------------------------
240
//---------------------------------------------------------------------------------
Line 278... Line 261...
278
		case e_moreData:
261
		case e_moreData:
279
			c=E_MoreData;
262
			c=E_MoreData;
280
			break;
263
			break;
281
		case e_noError:
264
		case e_noError:
282
			c=E_NoError;
265
			c=E_NoError;
283
			s=BOB_OK;
266
			s=S_OK;
284
			break;
267
			break;
285
		case e_format_noStatFormat:
268
		case e_format_noStatFormat:
286
			c=E_NoStatFormat;
269
			c=E_NoStatFormat;
287
			f=F_StatLoader;
270
			f=F_StatLoader;
288
			break;
271
			break;
Line 296... Line 279...
296
			f=F_StatLoader;
279
			f=F_StatLoader;
297
			break;
280
			break;
298
		case e_notEnoughData:
281
		case e_notEnoughData:
299
			c=E_NotEnoughData;
282
			c=E_NotEnoughData;
300
			break;
283
			break;
301
		case e_unkPointHeader:
284
		case e_unkPointFlags:
302
			c=E_UnkPointHeader;
285
			c=E_UnkPointFlags;
303
			break;
286
			break;
304
		case e_pointNotFound:
287
		case e_pointNotFound:
305
			c=E_PointNotFound;
288
			c=E_PointNotFound;
306
			break;
289
			break;
307
		case e_badVersion:
290
		case e_badVersion: