/[public]/psiconv/trunk/lib/psiconv/parse_layout.c
ViewVC logotype

Diff of /psiconv/trunk/lib/psiconv/parse_layout.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 110 Revision 168
24#include <math.h> 24#include <math.h>
25 25
26#include "parse_routines.h" 26#include "parse_routines.h"
27#include "error.h" 27#include "error.h"
28 28
29int psiconv_parse_color(const psiconv_buffer buf, int lev, psiconv_u32 off, 29#ifdef DMALLOC
30#include <dmalloc.h>
31#endif
32
33
34int psiconv_parse_color(const psiconv_config config,
35 const psiconv_buffer buf, int lev, psiconv_u32 off,
30 int *length, psiconv_color *result) 36 int *length, psiconv_color *result)
31{ 37{
32 int res = 0; 38 int res = 0;
33 int len = 0; 39 int len = 0;
34 40
35 psiconv_progress(lev+1,off,"Going to parse color"); 41 psiconv_progress(config,lev+1,off,"Going to parse color");
36 if (!(*result = malloc(sizeof(**result)))) 42 if (!(*result = malloc(sizeof(**result))))
37 goto ERROR1; 43 goto ERROR1;
38 44
39 (*result)->red = psiconv_read_u8(buf,lev+2,off+len,&res); 45 (*result)->red = psiconv_read_u8(config,buf,lev+2,off+len,&res);
40 if (res) 46 if (res)
41 goto ERROR2; 47 goto ERROR2;
42 (*result)->green = psiconv_read_u8(buf,lev+2,off+len+1,&res); 48 (*result)->green = psiconv_read_u8(config,buf,lev+2,off+len+1,&res);
43 if (res) 49 if (res)
44 goto ERROR2; 50 goto ERROR2;
45 (*result)->blue = psiconv_read_u8(buf,lev+2,off+len+2,&res); 51 (*result)->blue = psiconv_read_u8(config,buf,lev+2,off+len+2,&res);
46 if (res) 52 if (res)
47 goto ERROR2; 53 goto ERROR2;
48 len += 3; 54 len += 3;
49 55
50 psiconv_debug(lev+2,off,"Color: red %02x, green %02x, blue %02x", 56 psiconv_debug(config,lev+2,off,"Color: red %02x, green %02x, blue %02x",
51 (*result)->red, (*result)->green, (*result)->blue); 57 (*result)->red, (*result)->green, (*result)->blue);
52 if (length) 58 if (length)
53 *length = len; 59 *length = len;
54 60
55 psiconv_progress(lev+1,off+len-1,"End of color (total length: %08x)",len); 61 psiconv_progress(config,lev+1,off+len-1,"End of color (total length: %08x)",len);
56 return 0; 62 return 0;
57 63
58ERROR2: 64ERROR2:
59 free(*result); 65 free(*result);
60ERROR1: 66ERROR1:
61 psiconv_warn(lev+1,off,"Reading of Color failed"); 67 psiconv_warn(config,lev+1,off,"Reading of Color failed");
62 if (length) 68 if (length)
63 *length = 0; 69 *length = 0;
64 if (res == 0) 70 if (res == 0)
65 return -PSICONV_E_NOMEM; 71 return -PSICONV_E_NOMEM;
66 else 72 else
67 return res; 73 return res;
68} 74}
69 75
70 76
71 77
72int psiconv_parse_font(const psiconv_buffer buf, int lev, psiconv_u32 off, 78int psiconv_parse_font(const psiconv_config config,
79 const psiconv_buffer buf, int lev, psiconv_u32 off,
73 int *length, psiconv_font *result) 80 int *length, psiconv_font *result)
74{ 81{
75 int res = 0; 82 int res = 0;
76 int strlength,i; 83 int strlength,i;
77 char *str_copy; 84 char *str_copy;
78 int len; 85 int len;
79 86
80 psiconv_progress(lev+1,off,"Going to parse font"); 87 psiconv_progress(config,lev+1,off,"Going to parse font");
81 if (!(*result = malloc(sizeof(**result)))) 88 if (!(*result = malloc(sizeof(**result))))
82 goto ERROR1; 89 goto ERROR1;
83 90
84 strlength = psiconv_read_u8(buf,lev+2,off,&res); 91 strlength = psiconv_read_u8(config,buf,lev+2,off,&res);
85 if (res) 92 if (res)
86 goto ERROR2; 93 goto ERROR2;
87 if (!((*result)->name = malloc(strlength))) { 94 if (!((*result)->name = malloc(strlength))) {
88 goto ERROR2; 95 goto ERROR2;
89 } 96 }
90 for (i = 0; (i < strlength-1) && !res; i++) 97 for (i = 0; (i < strlength-1) && !res; i++)
91 (*result)->name[i] = psiconv_read_u8(buf,lev+2,off + 1 + i,&res); 98 (*result)->name[i] = psiconv_read_u8(config,buf,lev+2,off + 1 + i,&res);
92 if (res) 99 if (res)
93 goto ERROR3; 100 goto ERROR3;
94 (*result)->name[strlength-1] = 0; 101 (*result)->name[strlength-1] = 0;
95 (*result)->screenfont = psiconv_read_u8(buf,lev+2,off + strlength,&res); 102 (*result)->screenfont = psiconv_read_u8(config,buf,lev+2,off + strlength,&res);
96 if (res) 103 if (res)
97 goto ERROR3; 104 goto ERROR3;
98 105
99 if (!(str_copy = psiconv_make_printable((*result)->name))) 106 if (!(str_copy = psiconv_make_printable((*result)->name)))
100 goto ERROR3; 107 goto ERROR3;
101 108
102 psiconv_debug(lev+2,off+1,"Found font `%s', displayed with screen font %02x", 109 psiconv_debug(config,lev+2,off+1,"Found font `%s', displayed with screen font %02x",
103 str_copy,(*result)->screenfont); 110 str_copy,(*result)->screenfont);
104 free(str_copy); 111 free(str_copy);
105 len = strlength + 1; 112 len = strlength + 1;
106 if (length) 113 if (length)
107 *length = len; 114 *length = len;
108 115
109 psiconv_progress(lev+1,off + len - 1,"End of font (total length: %08x)",len); 116 psiconv_progress(config,lev+1,off + len - 1,"End of font (total length: %08x)",len);
110 return 0; 117 return 0;
111 118
112ERROR3: 119ERROR3:
113 free ((*result)->name); 120 free ((*result)->name);
114ERROR2: 121ERROR2:
115 free (*result); 122 free (*result);
116ERROR1: 123ERROR1:
117 psiconv_warn(lev+1,off,"Reading of Font failed"); 124 psiconv_warn(config,lev+1,off,"Reading of Font failed");
118 if (length) 125 if (length)
119 *length = 0; 126 *length = 0;
120 if (!res) 127 if (!res)
121 return -PSICONV_E_NOMEM; 128 return -PSICONV_E_NOMEM;
122 else 129 else
123 return res; 130 return res;
124} 131}
125 132
126int psiconv_parse_border(const psiconv_buffer buf,int lev,psiconv_u32 off, 133int psiconv_parse_border(const psiconv_config config,
134 const psiconv_buffer buf,int lev,psiconv_u32 off,
127 int *length, psiconv_border *result) 135 int *length, psiconv_border *result)
128{ 136{
129 int res = 0; 137 int res = 0;
130 int len = 0; 138 int len = 0;
131 psiconv_u32 temp; 139 psiconv_u32 temp;
132 int leng; 140 int leng;
133 141
134 psiconv_progress(lev+1,off,"Going to parse border data"); 142 psiconv_progress(config,lev+1,off,"Going to parse border data");
135 if (!(*result = malloc(sizeof(**result)))) { 143 if (!(*result = malloc(sizeof(**result)))) {
136 goto ERROR1; 144 goto ERROR1;
137 } 145 }
138 146
139 psiconv_progress(lev+2,off+len,"Going to read border kind"); 147 psiconv_progress(config,lev+2,off+len,"Going to read border kind");
140 temp = psiconv_read_u8(buf,lev+2,off+len,&res); 148 temp = psiconv_read_u8(config,buf,lev+2,off+len,&res);
141 if (res) 149 if (res)
142 goto ERROR2; 150 goto ERROR2;
143 if (temp == 0x00) 151 if (temp == 0x00)
144 (*result)->kind = psiconv_border_none; 152 (*result)->kind = psiconv_border_none;
145 else if (temp == 0x01) 153 else if (temp == 0x01)
153 else if (temp == 0x05) 161 else if (temp == 0x05)
154 (*result)->kind = psiconv_border_dotdashed; 162 (*result)->kind = psiconv_border_dotdashed;
155 else if (temp == 0x06) 163 else if (temp == 0x06)
156 (*result)->kind = psiconv_border_dotdotdashed; 164 (*result)->kind = psiconv_border_dotdotdashed;
157 else { 165 else {
158 psiconv_warn(lev+2,off,"Unknown border kind (defaults to `none')"); 166 psiconv_warn(config,lev+2,off,"Unknown border kind (defaults to `none')");
159 (*result)->kind = psiconv_border_none; 167 (*result)->kind = psiconv_border_none;
160 } 168 }
161 psiconv_debug(lev+2,off+len,"Kind: %02x",temp); 169 psiconv_debug(config,lev+2,off+len,"Kind: %02x",temp);
162 len ++; 170 len ++;
163 171
164 psiconv_progress(lev+2,off+len,"Going to read border thickness"); 172 psiconv_progress(config,lev+2,off+len,"Going to read border thickness");
165 (*result)->thickness = psiconv_read_size(buf,lev+2,off+len,&leng,&res); 173 (*result)->thickness = psiconv_read_size(config,buf,lev+2,off+len,&leng,&res);
166 if (res) 174 if (res)
167 goto ERROR2; 175 goto ERROR2;
168#if 0 176#if 0
169 /* This seems no longer necessary to test? */ 177 /* This seems no longer necessary to test? */
170 if (((*result)->kind != psiconv_border_solid) && 178 if (((*result)->kind != psiconv_border_solid) &&
171 ((*result)->kind != psiconv_border_double) && 179 ((*result)->kind != psiconv_border_double) &&
172 ((*result)->thickness != 0.0) && 180 ((*result)->thickness != 0.0) &&
173 (fabs((*result)->thickness - 1/20) >= 1/1000)) { 181 (fabs((*result)->thickness - 1/20) >= 1/1000)) {
174 psiconv_warn(lev+2,off, 182 psiconv_warn(config,lev+2,off,
175 "Border thickness specified for unlikely border type"); 183 "Border thickness specified for unlikely border type");
176 } 184 }
177#endif 185#endif
178 psiconv_debug(lev+2,off+len,"Thickness: %f",(*result)->thickness); 186 psiconv_debug(config,lev+2,off+len,"Thickness: %f",(*result)->thickness);
179 len += leng; 187 len += leng;
180 188
181 psiconv_progress(lev+2,off+len,"Going to read the border color"); 189 psiconv_progress(config,lev+2,off+len,"Going to read the border color");
182 if ((psiconv_parse_color(buf,lev+2,off+len,&leng,&(*result)->color))) 190 if ((psiconv_parse_color(config,buf,lev+2,off+len,&leng,&(*result)->color)))
183 goto ERROR2; 191 goto ERROR2;
184 len += leng; 192 len += leng;
185 193
186 psiconv_progress(lev+2,off+len,"Going to read the final unknown byte " 194 psiconv_progress(config,lev+2,off+len,"Going to read the final unknown byte "
187 "(0x00 or 0x01 expected)"); 195 "(0x00 or 0x01 expected)");
188 temp = psiconv_read_u8(buf,lev+2,off + len,&res); 196 temp = psiconv_read_u8(config,buf,lev+2,off + len,&res);
189 if (res) 197 if (res)
190 goto ERROR3; 198 goto ERROR3;
191 if ((temp != 0x01) && (temp != 0x00)) { 199 if ((temp != 0x01) && (temp != 0x00)) {
192 psiconv_warn(lev+2,off,"Unknown last byte in border specification"); 200 psiconv_warn(config,lev+2,off,"Unknown last byte in border specification");
193 psiconv_debug(lev+2,off+len, "Last byte: read %02x, expected %02x or %02x", 201 psiconv_debug(config,lev+2,off+len, "Last byte: read %02x, expected %02x or %02x",
194 temp,0x00,0x01); 202 temp,0x00,0x01);
195 } 203 }
196 len ++; 204 len ++;
197 205
198 if (length) 206 if (length)
199 *length = len; 207 *length = len;
200 208
201 psiconv_progress(lev+1,off + len - 1, 209 psiconv_progress(config,lev+1,off + len - 1,
202 "End of border (total length: %08x)",len); 210 "End of border (total length: %08x)",len);
203 211
204 return 0; 212 return 0;
205 213
206ERROR3: 214ERROR3:
207 psiconv_free_color((*result)->color); 215 psiconv_free_color((*result)->color);
208ERROR2: 216ERROR2:
209 free (result); 217 free (result);
210ERROR1: 218ERROR1:
211 psiconv_warn(lev+1,off,"Reading of Border failed"); 219 psiconv_warn(config,lev+1,off,"Reading of Border failed");
212 if (length) 220 if (length)
213 *length = 0; 221 *length = 0;
214 if (!res) 222 if (!res)
215 return -PSICONV_E_NOMEM; 223 return -PSICONV_E_NOMEM;
216 else 224 else
217 return res; 225 return res;
218} 226}
219 227
220int psiconv_parse_bullet(const psiconv_buffer buf,int lev,psiconv_u32 off, 228int psiconv_parse_bullet(const psiconv_config config,
229 const psiconv_buffer buf,int lev,psiconv_u32 off,
221 int *length, psiconv_bullet *result) 230 int *length, psiconv_bullet *result)
222{ 231{
223 int res = 0; 232 int res = 0;
224 int len = 0; 233 int len = 0;
225 int leng; 234 int leng;
227 236
228 if (!(*result = malloc(sizeof(**result)))) 237 if (!(*result = malloc(sizeof(**result))))
229 goto ERROR1; 238 goto ERROR1;
230 (*result)->on = psiconv_bool_true; 239 (*result)->on = psiconv_bool_true;
231 240
232 psiconv_progress(lev+1,off,"Going to parse bullet data"); 241 psiconv_progress(config,lev+1,off,"Going to parse bullet data");
233 psiconv_progress(lev+2,off+len,"Going to read bullet length"); 242 psiconv_progress(config,lev+2,off+len,"Going to read bullet length");
234 bullet_length = psiconv_read_u8(buf,lev+2,off+len,&res); 243 bullet_length = psiconv_read_u8(config,buf,lev+2,off+len,&res);
235 if (res) 244 if (res)
236 goto ERROR2; 245 goto ERROR2;
237 psiconv_debug(lev+2,off+len,"Length: %02x",bullet_length); 246 psiconv_debug(config,lev+2,off+len,"Length: %02x",bullet_length);
238 len ++; 247 len ++;
239 248
240 psiconv_progress(lev+2,off+len,"Going to read bullet font size"); 249 psiconv_progress(config,lev+2,off+len,"Going to read bullet font size");
241 (*result)->font_size = psiconv_read_size(buf,lev+2,off+len, &leng,&res); 250 (*result)->font_size = psiconv_read_size(config,buf,lev+2,off+len, &leng,&res);
242 if (res) 251 if (res)
243 goto ERROR2; 252 goto ERROR2;
244 len +=leng; 253 len +=leng;
245 254
246 psiconv_progress(lev+2,off+len,"Going to read bullet character"); 255 psiconv_progress(config,lev+2,off+len,"Going to read bullet character");
247 (*result)->character = psiconv_read_u8(buf,lev+2,off+len,&res); 256 (*result)->character = psiconv_read_u8(config,buf,lev+2,off+len,&res);
248 if (res) 257 if (res)
249 goto ERROR2; 258 goto ERROR2;
250 psiconv_debug(lev+2,off+len,"Character: %02x",(*result)->character); 259 psiconv_debug(config,lev+2,off+len,"Character: %02x",(*result)->character);
251 len ++; 260 len ++;
252 261
253 psiconv_progress(lev+2,off+len,"Going to read indent on/off"); 262 psiconv_progress(config,lev+2,off+len,"Going to read indent on/off");
254 if ((res = psiconv_parse_bool(buf,lev+2,off+len,&leng,&(*result)->indent))) 263 if ((res = psiconv_parse_bool(config,buf,lev+2,off+len,&leng,&(*result)->indent)))
255 goto ERROR2; 264 goto ERROR2;
256 psiconv_debug(lev+2,off+len,"Indent on: %02x",(*result)->indent); 265 psiconv_debug(config,lev+2,off+len,"Indent on: %02x",(*result)->indent);
257 len += leng; 266 len += leng;
258 267
259 psiconv_progress(lev+2,off+len,"Going to read bullet color"); 268 psiconv_progress(config,lev+2,off+len,"Going to read bullet color");
260 if ((res = psiconv_parse_color(buf,lev+2,off+len,&leng,&(*result)->color))) 269 if ((res = psiconv_parse_color(config,buf,lev+2,off+len,&leng,&(*result)->color)))
261 goto ERROR2; 270 goto ERROR2;
262 len += leng; 271 len += leng;
263 272
264 psiconv_progress(lev+2,off+len,"Going to read bullet font"); 273 psiconv_progress(config,lev+2,off+len,"Going to read bullet font");
265 if ((res = psiconv_parse_font(buf,lev+2,off+len,&leng,&(*result)->font))) 274 if ((res = psiconv_parse_font(config,buf,lev+2,off+len,&leng,&(*result)->font)))
266 goto ERROR3; 275 goto ERROR3;
267 len += leng; 276 len += leng;
268 277
269 if (len != bullet_length + 1) { 278 if (len != bullet_length + 1) {
270 psiconv_warn(lev+2,off,"Bullet data structure length mismatch"); 279 psiconv_warn(config,lev+2,off,"Bullet data structure length mismatch");
271 psiconv_debug(lev+2,off,"Length: specified %02x, found %02x", 280 psiconv_debug(config,lev+2,off,"Length: specified %02x, found %02x",
272 bullet_length,len-1); 281 bullet_length,len-1);
273 } 282 }
274 283
275 psiconv_progress(lev+1,off + len - 1, 284 psiconv_progress(config,lev+1,off + len - 1,
276 "End of bullet data (total length: %08x)",len); 285 "End of bullet data (total length: %08x)",len);
277 286
278 if (length) 287 if (length)
279 *length = len; 288 *length = len;
280 return 0; 289 return 0;
282ERROR3: 291ERROR3:
283 psiconv_free_color((*result)->color); 292 psiconv_free_color((*result)->color);
284ERROR2: 293ERROR2:
285 free (result); 294 free (result);
286ERROR1: 295ERROR1:
287 psiconv_warn(lev+1,off,"Reading of Bullet failed"); 296 psiconv_warn(config,lev+1,off,"Reading of Bullet failed");
288 if (length) 297 if (length)
289 *length = 0; 298 *length = 0;
290 if (!res) 299 if (!res)
291 return -PSICONV_E_NOMEM; 300 return -PSICONV_E_NOMEM;
292 else 301 else
293 return res; 302 return res;
294} 303}
295 304
296int psiconv_parse_tab(const psiconv_buffer buf, int lev, psiconv_u32 off, 305int psiconv_parse_tab(const psiconv_config config,
306 const psiconv_buffer buf, int lev, psiconv_u32 off,
297 int *length, psiconv_tab *result) 307 int *length, psiconv_tab *result)
298{ 308{
299 int res = 0; 309 int res = 0;
300 int len = 0; 310 int len = 0;
301 int leng; 311 int leng;
302 psiconv_u8 temp; 312 psiconv_u8 temp;
303 313
304 psiconv_progress(lev+1,off,"Going to parse tab"); 314 psiconv_progress(config,lev+1,off,"Going to parse tab");
305 if (!(*result = malloc(sizeof(**result)))) 315 if (!(*result = malloc(sizeof(**result))))
306 goto ERROR1; 316 goto ERROR1;
307 317
308 psiconv_progress(lev+2,off,"Going to read tab location"); 318 psiconv_progress(config,lev+2,off,"Going to read tab location");
309 (*result)->location = psiconv_read_length(buf,lev+2,off+len,&leng,&res); 319 (*result)->location = psiconv_read_length(config,buf,lev+2,off+len,&leng,&res);
310 if (res) 320 if (res)
311 goto ERROR2; 321 goto ERROR2;
312 len += leng; 322 len += leng;
313 323
314 psiconv_progress(lev+2,off+len,"Going to read the tab kind"); 324 psiconv_progress(config,lev+2,off+len,"Going to read the tab kind");
315 temp = psiconv_read_u8(buf,lev+2,off+len,&res); 325 temp = psiconv_read_u8(config,buf,lev+2,off+len,&res);
316 if (res) 326 if (res)
317 goto ERROR2; 327 goto ERROR2;
318 if (temp == 1) 328 if (temp == 1)
319 (*result)->kind = psiconv_tab_left; 329 (*result)->kind = psiconv_tab_left;
320 else if (temp == 2) 330 else if (temp == 2)
321 (*result)->kind = psiconv_tab_centre; 331 (*result)->kind = psiconv_tab_centre;
322 else if (temp == 3) 332 else if (temp == 3)
323 (*result)->kind = psiconv_tab_right; 333 (*result)->kind = psiconv_tab_right;
324 else { 334 else {
325 psiconv_warn(lev+2,off+len,"Unknown tab kind argument"); 335 psiconv_warn(config,lev+2,off+len,"Unknown tab kind argument");
326 psiconv_debug(lev+2,off+len,"Kind found: %02x (defaulted to left tab)", 336 psiconv_debug(config,lev+2,off+len,"Kind found: %02x (defaulted to left tab)",
327 temp); 337 temp);
328 (*result)->kind = psiconv_tab_left; 338 (*result)->kind = psiconv_tab_left;
329 } 339 }
330 psiconv_debug(lev+2,off+len,"Kind: %02x",temp); 340 psiconv_debug(config,lev+2,off+len,"Kind: %02x",temp);
331 len ++; 341 len ++;
332 342
333 if (length) 343 if (length)
334 *length = len; 344 *length = len;
335 345
336 psiconv_progress(lev+1,off+len-1,"End of tab (total length: %08x)",len); 346 psiconv_progress(config,lev+1,off+len-1,"End of tab (total length: %08x)",len);
337 return 0; 347 return 0;
338 348
339ERROR2: 349ERROR2:
340 free (result); 350 free (result);
341ERROR1: 351ERROR1:
342 psiconv_warn(lev+1,off,"Reading of Tab failed"); 352 psiconv_warn(config,lev+1,off,"Reading of Tab failed");
343 if (length) 353 if (length)
344 *length = 0; 354 *length = 0;
345 if (!res) 355 if (!res)
346 return -PSICONV_E_NOMEM; 356 return -PSICONV_E_NOMEM;
347 else 357 else
348 return res; 358 return res;
349} 359}
350 360
351int psiconv_parse_paragraph_layout_list(const psiconv_buffer buf, int lev, 361int psiconv_parse_paragraph_layout_list(const psiconv_config config,
362 const psiconv_buffer buf, int lev,
352 psiconv_u32 off, int *length, 363 psiconv_u32 off, int *length,
353 psiconv_paragraph_layout result) 364 psiconv_paragraph_layout result)
354{ 365{
355 int res=0; 366 int res=0;
356 int len=0; 367 int len=0;
360 psiconv_tab temp_tab; 371 psiconv_tab temp_tab;
361 psiconv_color temp_color; 372 psiconv_color temp_color;
362 psiconv_border temp_border; 373 psiconv_border temp_border;
363 psiconv_bullet temp_bullet; 374 psiconv_bullet temp_bullet;
364 375
365 psiconv_progress(lev+1,off,"Going to read paragraph layout list"); 376 psiconv_progress(config,lev+1,off,"Going to read paragraph layout list");
366 377
367 psiconv_progress(lev+2,off,"Going to read the list length"); 378 psiconv_progress(config,lev+2,off,"Going to read the list length");
368 list_length = psiconv_read_u32(buf,lev+2,off + len,&res); 379 list_length = psiconv_read_u32(config,buf,lev+2,off + len,&res);
369 if (res) 380 if (res)
370 goto ERROR1; 381 goto ERROR1;
371 psiconv_debug(lev+2,off,"Length in bytes: %08x",list_length); 382 psiconv_debug(config,lev+2,off,"Length in bytes: %08x",list_length);
372 len += 4; 383 len += 4;
373 384
374 nr = 0; 385 nr = 0;
375 while(len - 4 < list_length) { 386 while(len - 4 < list_length) {
376 psiconv_progress(lev+2,off+len,"Going to read element %d",nr); 387 psiconv_progress(config,lev+2,off+len,"Going to read element %d",nr);
377 psiconv_progress(lev+3,off+len,"Going to read the element id"); 388 psiconv_progress(config,lev+3,off+len,"Going to read the element id");
378 id = psiconv_read_u8(buf,lev+2,off+len,&res); 389 id = psiconv_read_u8(config,buf,lev+2,off+len,&res);
379 if (res) 390 if (res)
380 goto ERROR1; 391 goto ERROR1;
381 psiconv_debug(lev+3,off+len,"Id: %02x",id); 392 psiconv_debug(config,lev+3,off+len,"Id: %02x",id);
382 len ++; 393 len ++;
383 switch(id) { 394 switch(id) {
384 case 0x01: 395 case 0x01:
385 psiconv_progress(lev+3,off+len,"Going to read background color"); 396 psiconv_progress(config,lev+3,off+len,"Going to read background color");
386 if ((res = psiconv_parse_color(buf,lev+3,off+len,&leng,&temp_color))) 397 if ((res = psiconv_parse_color(config,buf,lev+3,off+len,&leng,&temp_color)))
387 goto ERROR1; 398 goto ERROR1;
388 psiconv_free_color(result->back_color); 399 psiconv_free_color(result->back_color);
389 result->back_color = temp_color; 400 result->back_color = temp_color;
390 len += leng; 401 len += leng;
391 break; 402 break;
392 case 0x02: 403 case 0x02:
393 psiconv_progress(lev+3,off+len ,"Going to read indent left"); 404 psiconv_progress(config,lev+3,off+len ,"Going to read indent left");
394 result->indent_left = psiconv_read_length(buf,lev+3,off+len,&leng,&res); 405 result->indent_left = psiconv_read_length(config,buf,lev+3,off+len,&leng,&res);
395 if (res) 406 if (res)
396 goto ERROR1; 407 goto ERROR1;
397 len += leng; 408 len += leng;
398 break; 409 break;
399 case 0x03: 410 case 0x03:
400 psiconv_progress(lev+3,off+len,"Going to read indent right"); 411 psiconv_progress(config,lev+3,off+len,"Going to read indent right");
401 result->indent_right = psiconv_read_length(buf,lev+2,off+len,&leng, 412 result->indent_right = psiconv_read_length(config,buf,lev+2,off+len,&leng,
402 &res); 413 &res);
403 if (res) 414 if (res)
404 goto ERROR1; 415 goto ERROR1;
405 len += leng; 416 len += leng;
406 break; 417 break;
407 case 0x04: 418 case 0x04:
408 psiconv_progress(lev+3,off+len,"Going to read indent left first line"); 419 psiconv_progress(config,lev+3,off+len,"Going to read indent left first line");
409 result->indent_first = psiconv_read_length(buf,lev+2,off+len, &leng, 420 result->indent_first = psiconv_read_length(config,buf,lev+2,off+len, &leng,
410 &res); 421 &res);
411 if (res) 422 if (res)
412 goto ERROR1; 423 goto ERROR1;
413 len += leng; 424 len += leng;
414 break; 425 break;
415 case 0x05: 426 case 0x05:
416 psiconv_progress(lev+3,off+len,"Going to read horizontal justify"); 427 psiconv_progress(config,lev+3,off+len,"Going to read horizontal justify");
417 temp = psiconv_read_u8(buf,lev+3,off+len,&res); 428 temp = psiconv_read_u8(config,buf,lev+3,off+len,&res);
418 if (res) 429 if (res)
419 goto ERROR1; 430 goto ERROR1;
420 if (temp == 0x00) 431 if (temp == 0x00)
421 result->justify_hor = psiconv_justify_left; 432 result->justify_hor = psiconv_justify_left;
422 else if (temp == 0x01) 433 else if (temp == 0x01)
424 else if (temp == 0x02) 435 else if (temp == 0x02)
425 result->justify_hor = psiconv_justify_right; 436 result->justify_hor = psiconv_justify_right;
426 else if (temp == 0x03) 437 else if (temp == 0x03)
427 result->justify_hor = psiconv_justify_full; 438 result->justify_hor = psiconv_justify_full;
428 else { 439 else {
429 psiconv_warn(lev+3,off+len, "Unknown horizontal justify argument " 440 psiconv_warn(config,lev+3,off+len, "Unknown horizontal justify argument "
430 "in paragraph layout codes list"); 441 "in paragraph layout codes list");
431 result->justify_hor = psiconv_justify_left; 442 result->justify_hor = psiconv_justify_left;
432 } 443 }
433 psiconv_debug(lev+3,off+len,"Justify: %02x",temp); 444 psiconv_debug(config,lev+3,off+len,"Justify: %02x",temp);
434 len ++; 445 len ++;
435 break; 446 break;
436 case 0x06: 447 case 0x06:
437 psiconv_progress(lev+3,off+len,"Going to read vertical justify"); 448 psiconv_progress(config,lev+3,off+len,"Going to read vertical justify");
438 temp = psiconv_read_u8(buf,lev+3,off+len,&res); 449 temp = psiconv_read_u8(config,buf,lev+3,off+len,&res);
439 if (res) 450 if (res)
440 goto ERROR1; 451 goto ERROR1;
441 if (temp == 0x00) 452 if (temp == 0x00)
442 result->justify_ver = psiconv_justify_top; 453 result->justify_ver = psiconv_justify_top;
443 else if (temp == 0x01) 454 else if (temp == 0x01)
444 result->justify_ver = psiconv_justify_middle; 455 result->justify_ver = psiconv_justify_middle;
445 else if (temp == 0x02) 456 else if (temp == 0x02)
446 result->justify_ver = psiconv_justify_bottom; 457 result->justify_ver = psiconv_justify_bottom;
447 else { 458 else {
448 psiconv_warn(lev+3,off+len, "Unknown vertical justify argument " 459 psiconv_warn(config,lev+3,off+len, "Unknown vertical justify argument "
449 "in paragraph layout codes list"); 460 "in paragraph layout codes list");
450 result->justify_ver = psiconv_justify_bottom; 461 result->justify_ver = psiconv_justify_bottom;
451 } 462 }
452 psiconv_debug(lev+3,off+len,"Justify: %02x",temp); 463 psiconv_debug(config,lev+3,off+len,"Justify: %02x",temp);
453 len ++; 464 len ++;
454 break; 465 break;
455 case 0x07: 466 case 0x07:
456 psiconv_progress(lev+3,off+len,"Going to read linespacing distance"); 467 psiconv_progress(config,lev+3,off+len,"Going to read linespacing distance");
457 result->linespacing = psiconv_read_size(buf,lev+3,off+len,&leng,&res); 468 result->linespacing = psiconv_read_size(config,buf,lev+3,off+len,&leng,&res);
458 if (res) 469 if (res)
459 goto ERROR1; 470 goto ERROR1;
460 len += leng; 471 len += leng;
461 break; 472 break;
462 case 0x08: 473 case 0x08:
463 psiconv_progress(lev+3,off+len,"Going to read linespacing exact"); 474 psiconv_progress(config,lev+3,off+len,"Going to read linespacing exact");
464 if ((res = psiconv_parse_bool(buf,lev+3,off+len,&leng, 475 if ((res = psiconv_parse_bool(config,buf,lev+3,off+len,&leng,
465 &result->linespacing_exact))) 476 &result->linespacing_exact)))
466 goto ERROR1; 477 goto ERROR1;
467 len += leng; 478 len += leng;
468 break; 479 break;
469 case 0x09: 480 case 0x09:
470 psiconv_progress(lev+3,off+len,"Going to read top space"); 481 psiconv_progress(config,lev+3,off+len,"Going to read top space");
471 result->space_above = psiconv_read_size(buf,lev+3,off+len,&leng,&res); 482 result->space_above = psiconv_read_size(config,buf,lev+3,off+len,&leng,&res);
472 if (res) 483 if (res)
473 goto ERROR1; 484 goto ERROR1;
474 len += leng; 485 len += leng;
475 break; 486 break;
476 case 0x0a: 487 case 0x0a:
477 psiconv_progress(lev+3,off+len,"Going to read bottom space"); 488 psiconv_progress(config,lev+3,off+len,"Going to read bottom space");
478 result->space_below = psiconv_read_size(buf,lev+3,off+len,&leng,&res); 489 result->space_below = psiconv_read_size(config,buf,lev+3,off+len,&leng,&res);
479 if (res) 490 if (res)
480 goto ERROR1; 491 goto ERROR1;
481 len += leng; 492 len += leng;
482 break; 493 break;
483 case 0x0b: 494 case 0x0b:
484 psiconv_progress(lev+3,off+len,"Going to read on one page"); 495 psiconv_progress(config,lev+3,off+len,"Going to read on one page");
485 if ((res = psiconv_parse_bool(buf,lev+3,off+len,&leng, 496 if ((res = psiconv_parse_bool(config,buf,lev+3,off+len,&leng,
486 &result->keep_together))) 497 &result->keep_together)))
487 goto ERROR1; 498 goto ERROR1;
488 len += leng; 499 len += leng;
489 break; 500 break;
490 case 0x0c: 501 case 0x0c:
491 psiconv_progress(lev+3,off+len,"Going to read together with"); 502 psiconv_progress(config,lev+3,off+len,"Going to read together with");
492 if ((res = psiconv_parse_bool(buf,lev+3,off+len,&leng, 503 if ((res = psiconv_parse_bool(config,buf,lev+3,off+len,&leng,
493 &result->keep_with_next))) 504 &result->keep_with_next)))
494 goto ERROR1; 505 goto ERROR1;
495 len += leng; 506 len += leng;
496 break; 507 break;
497 case 0x0d: 508 case 0x0d:
498 psiconv_progress(lev+3,off+len,"Going to read on next page"); 509 psiconv_progress(config,lev+3,off+len,"Going to read on next page");
499 if ((res = psiconv_parse_bool(buf,lev+3,off+len,&leng, 510 if ((res = psiconv_parse_bool(config,buf,lev+3,off+len,&leng,
500 &result->on_next_page))) 511 &result->on_next_page)))
501 goto ERROR1; 512 goto ERROR1;
502 len += leng; 513 len += leng;
503 break; 514 break;
504 case 0x0e: 515 case 0x0e:
505 psiconv_progress(lev+3,off+len,"Going to read no widow protection"); 516 psiconv_progress(config,lev+3,off+len,"Going to read no widow protection");
506 if ((res = psiconv_parse_bool(buf,lev+3,off+len,&leng, 517 if ((res = psiconv_parse_bool(config,buf,lev+3,off+len,&leng,
507 &result->no_widow_protection))) 518 &result->no_widow_protection)))
508 goto ERROR1; 519 goto ERROR1;
509 len += leng; 520 len += leng;
510 break; 521 break;
511 case 0x0f: 522 case 0x0f:
512 psiconv_progress(lev+3,off+len,"Going to read wrap to fit cell limits"); 523 psiconv_progress(config,lev+3,off+len,"Going to read wrap to fit cell limits");
513 if ((res = psiconv_parse_bool(buf,lev+3,off+len,&leng, 524 if ((res = psiconv_parse_bool(config,buf,lev+3,off+len,&leng,
514 &result->wrap_to_fit_cell))) 525 &result->wrap_to_fit_cell)))
515 goto ERROR1; 526 goto ERROR1;
516 len += leng; 527 len += leng;
517 break; 528 break;
518 case 0x10: 529 case 0x10:
519 psiconv_progress(lev+3,off+len,"Going to read border distance to text"); 530 psiconv_progress(config,lev+3,off+len,"Going to read border distance to text");
520 result->border_distance = psiconv_read_length(buf,lev+3, 531 result->border_distance = psiconv_read_length(config,buf,lev+3,
521 off+len,&leng,&res); 532 off+len,&leng,&res);
522 if (res) 533 if (res)
523 goto ERROR1; 534 goto ERROR1;
524 len += leng; 535 len += leng;
525 break; 536 break;
526 case 0x11: 537 case 0x11:
527 psiconv_progress(lev+3,off+len,"Going to read top border"); 538 psiconv_progress(config,lev+3,off+len,"Going to read top border");
528 if ((res = psiconv_parse_border(buf,lev+3,off+len,&leng,&temp_border))) 539 if ((res = psiconv_parse_border(config,buf,lev+3,off+len,&leng,&temp_border)))
529 goto ERROR1; 540 goto ERROR1;
530 psiconv_free_border(result->top_border); 541 psiconv_free_border(result->top_border);
531 result->top_border = temp_border; 542 result->top_border = temp_border;
532 len += leng; 543 len += leng;
533 break; 544 break;
534 case 0x12: 545 case 0x12:
535 psiconv_progress(lev+3,off+len,"Going to read bottom border"); 546 psiconv_progress(config,lev+3,off+len,"Going to read bottom border");
536 if ((res = psiconv_parse_border(buf,lev+3,off+len,&leng,&temp_border))) 547 if ((res = psiconv_parse_border(config,buf,lev+3,off+len,&leng,&temp_border)))
537 goto ERROR1; 548 goto ERROR1;
538 psiconv_free_border(result->bottom_border); 549 psiconv_free_border(result->bottom_border);
539 result->bottom_border = temp_border; 550 result->bottom_border = temp_border;
540 len += leng; 551 len += leng;
541 break; 552 break;
542 case 0x13: 553 case 0x13:
543 psiconv_progress(lev+3,off+len,"Going to read left border"); 554 psiconv_progress(config,lev+3,off+len,"Going to read left border");
544 if ((res = psiconv_parse_border(buf,lev+3,off+len,&leng,&temp_border))) 555 if ((res = psiconv_parse_border(config,buf,lev+3,off+len,&leng,&temp_border)))
545 goto ERROR1; 556 goto ERROR1;
546 psiconv_free_border(result->left_border); 557 psiconv_free_border(result->left_border);
547 result->left_border = temp_border; 558 result->left_border = temp_border;
548 len += leng; 559 len += leng;
549 break; 560 break;
550 case 0x14: 561 case 0x14:
551 psiconv_progress(lev+3,off+len,"Going to read right border"); 562 psiconv_progress(config,lev+3,off+len,"Going to read right border");
552 if ((res = psiconv_parse_border(buf,lev+3,off+len,&leng,&temp_border))) 563 if ((res = psiconv_parse_border(config,buf,lev+3,off+len,&leng,&temp_border)))
553 goto ERROR1; 564 goto ERROR1;
554 psiconv_free_border(result->right_border); 565 psiconv_free_border(result->right_border);
555 result->right_border = temp_border; 566 result->right_border = temp_border;
556 len += leng; 567 len += leng;
557 break; 568 break;
558 case 0x15: 569 case 0x15:
559 psiconv_progress(lev+3,off+len,"Going to read bullet"); 570 psiconv_progress(config,lev+3,off+len,"Going to read bullet");
560 if ((res = psiconv_parse_bullet(buf,lev+3,off+len,&leng,&temp_bullet))) 571 if ((res = psiconv_parse_bullet(config,buf,lev+3,off+len,&leng,&temp_bullet)))
561 goto ERROR1; 572 goto ERROR1;
562 psiconv_free_bullet(result->bullet); 573 psiconv_free_bullet(result->bullet);
563 result->bullet = temp_bullet; 574 result->bullet = temp_bullet;
564 len += leng; 575 len += leng;
565 break; 576 break;
566 case 0x16: 577 case 0x16:
567 psiconv_progress(lev+3,off+len,"Going to read standard tabs"); 578 psiconv_progress(config,lev+3,off+len,"Going to read standard tabs");
568 result->tabs->normal = psiconv_read_length(buf,lev+3,off+len,&leng, 579 result->tabs->normal = psiconv_read_length(config,buf,lev+3,off+len,&leng,
569 &res); 580 &res);
570 if (res) 581 if (res)
571 goto ERROR1; 582 goto ERROR1;
572 len += leng; 583 len += leng;
573 break; 584 break;
574 case 0x17: 585 case 0x17:
575 psiconv_progress(lev+3,off+len,"Going to read extra tab"); 586 psiconv_progress(config,lev+3,off+len,"Going to read extra tab");
576 if ((res = psiconv_parse_tab(buf,lev+3,off+len,&leng,&temp_tab))) 587 if ((res = psiconv_parse_tab(config,buf,lev+3,off+len,&leng,&temp_tab)))
577 goto ERROR1; 588 goto ERROR1;
578 if ((res = psiconv_list_add(result->tabs->extras,temp_tab))) { 589 if ((res = psiconv_list_add(result->tabs->extras,temp_tab))) {
579 psiconv_free_tab(temp_tab); 590 psiconv_free_tab(temp_tab);
580 goto ERROR1; 591 goto ERROR1;
581 } 592 }
593 psiconv_free_tab(temp_tab);
582 len += leng; 594 len += leng;
583 break; 595 break;
584 default: 596 default:
585 psiconv_warn(lev+3,off+len, 597 psiconv_warn(config,lev+3,off+len,
586 "Unknown code in paragraph layout codes list"); 598 "Unknown code in paragraph layout codes list");
587 psiconv_debug(lev+3,off+len,"Code: %02x",id); 599 psiconv_debug(config,lev+3,off+len,"Code: %02x",id);
588 len ++; 600 len ++;
589 break; 601 break;
590 } 602 }
591 nr ++; 603 nr ++;
592 } 604 }
593 605
594 if (len - 4 != list_length) { 606 if (len - 4 != list_length) {
595 psiconv_warn(lev+2,off+len, 607 psiconv_warn(config,lev+2,off+len,
596 "Read past end of paragraph layout codes list. I probably lost track" 608 "Read past end of paragraph layout codes list. I probably lost track"
597 "somewhere!"); 609 "somewhere!");
598 psiconv_debug(lev+2,off+len,"Read %d characters instead of %d", 610 psiconv_debug(config,lev+2,off+len,"Read %d characters instead of %d",
599 len-4,list_length); 611 len-4,list_length);
600 res = PSICONV_E_PARSE; 612 res = PSICONV_E_PARSE;
601 goto ERROR1; 613 goto ERROR1;
602 } 614 }
603 615
604 len = list_length + 4; 616 len = list_length + 4;
605 617
606 psiconv_progress(lev+1,off+len, 618 psiconv_progress(config,lev+1,off+len,
607 "End of paragraph layout list (total length: %08x)",len); 619 "End of paragraph layout list (total length: %08x)",len);
608 620
609 if (length) 621 if (length)
610 *length = len; 622 *length = len;
611 return 0; 623 return 0;
612 624
613ERROR1: 625ERROR1:
614 psiconv_warn(lev+1,off,"Reading of paragraph_layout_list failed"); 626 psiconv_warn(config,lev+1,off,"Reading of paragraph_layout_list failed");
615 if (length) 627 if (length)
616 *length = 0; 628 *length = 0;
617 if (!res) 629 if (!res)
618 return -PSICONV_E_NOMEM; 630 return -PSICONV_E_NOMEM;
619 else 631 else
620 return res; 632 return res;
621} 633}
622 634
623int psiconv_parse_character_layout_list(const psiconv_buffer buf, int lev, 635int psiconv_parse_character_layout_list(const psiconv_config config,
636 const psiconv_buffer buf, int lev,
624 psiconv_u32 off, int *length, 637 psiconv_u32 off, int *length,
625 psiconv_character_layout result) 638 psiconv_character_layout result)
626{ 639{
627 int res=0; 640 int res=0;
628 int len=0; 641 int len=0;
630 psiconv_u8 id; 643 psiconv_u8 id;
631 psiconv_u32 temp; 644 psiconv_u32 temp;
632 psiconv_color temp_color; 645 psiconv_color temp_color;
633 psiconv_font temp_font; 646 psiconv_font temp_font;
634 647
635 psiconv_progress(lev+1,off,"Going to read character layout codes"); 648 psiconv_progress(config,lev+1,off,"Going to read character layout codes");
636 649
637 psiconv_progress(lev+2,off,"Going to read the list length"); 650 psiconv_progress(config,lev+2,off,"Going to read the list length");
638 list_length = psiconv_read_u32(buf,lev+2,off + len,&res); 651 list_length = psiconv_read_u32(config,buf,lev+2,off + len,&res);
639 if (res) 652 if (res)
640 goto ERROR1; 653 goto ERROR1;
641 psiconv_debug(lev+2,off,"Length in bytes: %08x",list_length); 654 psiconv_debug(config,lev+2,off,"Length in bytes: %08x",list_length);
642 len += 4; 655 len += 4;
643 656
644 nr = 0; 657 nr = 0;
645 while(len-4 < list_length) { 658 while(len-4 < list_length) {
646 psiconv_progress(lev+2,off+len,"Going to read element %d",nr); 659 psiconv_progress(config,lev+2,off+len,"Going to read element %d",nr);
647 psiconv_progress(lev+3,off+len,"Going to read the element id"); 660 psiconv_progress(config,lev+3,off+len,"Going to read the element id");
648 id = psiconv_read_u8(buf,lev+2,off+len,&res); 661 id = psiconv_read_u8(config,buf,lev+2,off+len,&res);
649 if (res) 662 if (res)
650 goto ERROR1; 663 goto ERROR1;
651 psiconv_debug(lev+3,off+len,"Id: %02x",id); 664 psiconv_debug(config,lev+3,off+len,"Id: %02x",id);
652 len ++; 665 len ++;
653 switch(id) { 666 switch(id) {
654 case 0x18: 667 case 0x18:
655 psiconv_progress(lev+3,off+len,"Going to skip an unknown setting"); 668 psiconv_progress(config,lev+3,off+len,"Going to skip an unknown setting");
656 len ++; 669 len ++;
657 break; 670 break;
658 case 0x19: 671 case 0x19:
659 psiconv_progress(lev+3,off+len,"Going to read text color"); 672 psiconv_progress(config,lev+3,off+len,"Going to read text color");
660 if ((res = psiconv_parse_color(buf,lev+3,off+len, &leng,&temp_color))) 673 if ((res = psiconv_parse_color(config,buf,lev+3,off+len, &leng,&temp_color)))
661 goto ERROR1; 674 goto ERROR1;
662 psiconv_free_color(result->color); 675 psiconv_free_color(result->color);
663 result->color = temp_color; 676 result->color = temp_color;
664 len += leng; 677 len += leng;
665 break; 678 break;
666 case 0x1a: 679 case 0x1a:
667 psiconv_progress(lev+3,off+len,"Going to read background color (?)"); 680 psiconv_progress(config,lev+3,off+len,"Going to read background color (?)");
668 if ((res = psiconv_parse_color(buf,lev+2,off+len, &leng,&temp_color))) 681 if ((res = psiconv_parse_color(config,buf,lev+2,off+len, &leng,&temp_color)))
669 goto ERROR1; 682 goto ERROR1;
670 psiconv_free_color(result->back_color); 683 psiconv_free_color(result->back_color);
671 result->back_color = temp_color; 684 result->back_color = temp_color;
672 len += leng; 685 len += leng;
673 break; 686 break;
674 case 0x1b: 687 case 0x1b:
675 psiconv_progress(lev+3,off+len,"Going to skip an unknown setting"); 688 psiconv_progress(config,lev+3,off+len,"Going to skip an unknown setting");
676 len ++; 689 len ++;
677 break; 690 break;
678 case 0x1c: 691 case 0x1c:
679 psiconv_progress(lev+3,off+len,"Going to read font size"); 692 psiconv_progress(config,lev+3,off+len,"Going to read font size");
680 result->font_size = psiconv_read_size(buf,lev+3,off+len,&leng,&res); 693 result->font_size = psiconv_read_size(config,buf,lev+3,off+len,&leng,&res);
681 if (res) 694 if (res)
682 goto ERROR1; 695 goto ERROR1;
683 len += leng; 696 len += leng;
684 break; 697 break;
685 case 0x1d: 698 case 0x1d:
686 psiconv_progress(lev+3,off+len,"Going to read italic"); 699 psiconv_progress(config,lev+3,off+len,"Going to read italic");
687 if ((res = psiconv_parse_bool(buf,lev+3,off+len,&leng,&result->italic))) 700 if ((res = psiconv_parse_bool(config,buf,lev+3,off+len,&leng,&result->italic)))
688 goto ERROR1; 701 goto ERROR1;
689 len += leng; 702 len += leng;
690 break; 703 break;
691 case 0x1e: 704 case 0x1e:
692 psiconv_progress(lev+3,off+len,"Going to read bold"); 705 psiconv_progress(config,lev+3,off+len,"Going to read bold");
693 if ((res = psiconv_parse_bool(buf,lev+3,off+len,&leng,&result->bold))) 706 if ((res = psiconv_parse_bool(config,buf,lev+3,off+len,&leng,&result->bold)))
694 goto ERROR1; 707 goto ERROR1;
695 len += leng; 708 len += leng;
696 break; 709 break;
697 case 0x1f: 710 case 0x1f:
698 psiconv_progress(lev+3,off+len,"Going to read super_sub"); 711 psiconv_progress(config,lev+3,off+len,"Going to read super_sub");
699 temp = psiconv_read_u8(buf,lev+3,off+len,&res); 712 temp = psiconv_read_u8(config,buf,lev+3,off+len,&res);
700 if (res) 713 if (res)
701 goto ERROR1; 714 goto ERROR1;
702 if (temp == 0x00) 715 if (temp == 0x00)
703 result->super_sub = psiconv_normalscript; 716 result->super_sub = psiconv_normalscript;
704 else if (temp == 0x01) 717 else if (temp == 0x01)
705 result->super_sub = psiconv_superscript; 718 result->super_sub = psiconv_superscript;
706 else if (temp == 0x02) 719 else if (temp == 0x02)
707 result->super_sub = psiconv_subscript; 720 result->super_sub = psiconv_subscript;
708 else { 721 else {
709 psiconv_warn(lev+3,off+len, 722 psiconv_warn(config,lev+3,off+len,
710 "Unknown super_sub argument in character layout codes list"); 723 "Unknown super_sub argument in character layout codes list");
711 } 724 }
712 psiconv_debug(lev+3,off+len,"Super_sub: %02x",temp); 725 psiconv_debug(config,lev+3,off+len,"Super_sub: %02x",temp);
713 len ++; 726 len ++;
714 break; 727 break;
715 case 0x20: 728 case 0x20:
716 psiconv_progress(lev+3,off+len,"Going to read underline"); 729 psiconv_progress(config,lev+3,off+len,"Going to read underline");
717 if ((res = psiconv_parse_bool(buf,lev+3,off+len,&leng, 730 if ((res = psiconv_parse_bool(config,buf,lev+3,off+len,&leng,
718 &result->underline))) 731 &result->underline)))
719 goto ERROR1; 732 goto ERROR1;
720 len += leng; 733 len += leng;
721 break; 734 break;
722 case 0x21: 735 case 0x21:
723 psiconv_progress(lev+3,off+len,"Going to read strikethrough"); 736 psiconv_progress(config,lev+3,off+len,"Going to read strikethrough");
724 if ((res = psiconv_parse_bool(buf,lev+3,off+len,&leng, 737 if ((res = psiconv_parse_bool(config,buf,lev+3,off+len,&leng,
725 &result->strikethrough))) 738 &result->strikethrough)))
726 goto ERROR1; 739 goto ERROR1;
727 len += leng; 740 len += leng;
728 break; 741 break;
729 case 0x22: 742 case 0x22:
730 psiconv_progress(lev+3,off+len,"Going to read font"); 743 psiconv_progress(config,lev+3,off+len,"Going to read font");
731 if ((res = psiconv_parse_font(buf,lev+3,off+len, &leng, &temp_font))) 744 if ((res = psiconv_parse_font(config,buf,lev+3,off+len, &leng, &temp_font)))
732 goto ERROR1; 745 goto ERROR1;
733 psiconv_free_font(result->font); 746 psiconv_free_font(result->font);
734 result->font = temp_font; 747 result->font = temp_font;
735 len += leng; 748 len += leng;
736 break; 749 break;
737 case 0x23: 750 case 0x23:
738 psiconv_progress(lev+3,off+len,"Going to skip an unknown setting"); 751 psiconv_progress(config,lev+3,off+len,"Going to skip an unknown setting");
739 len ++; 752 len ++;
740 break; 753 break;
741 case 0x24: 754 case 0x24:
742 psiconv_progress(lev+3,off+len, 755 psiconv_progress(config,lev+3,off+len,
743 "Going to read unknown code 0x24 (%02x expected)", 0); 756 "Going to read unknown code 0x24 (%02x expected)", 0);
744 temp = psiconv_read_u8(buf,lev+3,off+len,&res); 757 temp = psiconv_read_u8(config,buf,lev+3,off+len,&res);
745 if (res) 758 if (res)
746 goto ERROR1; 759 goto ERROR1;
747 if (temp != 0) { 760 if (temp != 0) {
748 psiconv_warn(lev+3,off+len, 761 psiconv_warn(config,lev+3,off+len,
749 "Unknown code 0x24 value != 0x0 (0x%02x)", temp); 762 "Unknown code 0x24 value != 0x0 (0x%02x)", temp);
750 } 763 }
751 len ++; 764 len ++;
752 break; 765 break;
753 default: 766 default:
754 psiconv_warn(lev+3,off+len,"Unknown code in character layout list"); 767 psiconv_warn(config,lev+3,off+len,"Unknown code in character layout list");
755 psiconv_debug(lev+3,off+len,"Code: %02x",id); 768 psiconv_debug(config,lev+3,off+len,"Code: %02x",id);
756 len ++; 769 len ++;
757 break; 770 break;
758 } 771 }
759 nr ++; 772 nr ++;
760 } 773 }
761 774
762 if (len - 4 != list_length) { 775 if (len - 4 != list_length) {
763 psiconv_warn(lev+2,off+len, 776 psiconv_warn(config,lev+2,off+len,
764 "Read past end of character layout codes list. I probably lost track" 777 "Read past end of character layout codes list. I probably lost track"
765 "somewhere!"); 778 "somewhere!");
766 psiconv_debug(lev+2,off+len,"Read %d characters instead of %d", 779 psiconv_debug(config,lev+2,off+len,"Read %d characters instead of %d",
767 len-4,list_length); 780 len-4,list_length);
768 res = PSICONV_E_PARSE; 781 res = PSICONV_E_PARSE;
769 goto ERROR1; 782 goto ERROR1;
770 } 783 }
771 784
772 len = list_length + 4; 785 len = list_length + 4;
773 786
774 psiconv_progress(lev+1,off+len, 787 psiconv_progress(config,lev+1,off+len,
775 "End of character layout list (total length: %08x)",len); 788 "End of character layout list (total length: %08x)",len);
776 789
777 if (length) 790 if (length)
778 *length = len; 791 *length = len;
779 return res; 792 return res;
780 793
781ERROR1: 794ERROR1:
782 psiconv_warn(lev+1,off,"Reading of character_layout_list failed"); 795 psiconv_warn(config,lev+1,off,"Reading of character_layout_list failed");
783 if (length) 796 if (length)
784 *length = 0; 797 *length = 0;
785 if (!res) 798 if (!res)
786 return -PSICONV_E_NOMEM; 799 return -PSICONV_E_NOMEM;
787 else 800 else

Legend:
Removed from v.110  
changed lines
  Added in v.168

frodo@frodo.looijaard.name
ViewVC Help
Powered by ViewVC 1.1.26