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

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

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

Revision 2 Revision 60
22 22
23#include "parse.h" 23#include "parse.h"
24#include "parse_routines.h" 24#include "parse_routines.h"
25#include "data.h" 25#include "data.h"
26 26
27int psiconv_verbosity = PSICONV_VERB_WARN;
28
27psiconv_file_type_t psiconv_file_type(psiconv_buffer buf) 29psiconv_file_type_t psiconv_file_type(psiconv_buffer buf,int *length,
30 psiconv_header_section *result)
28{ 31{
29 psiconv_header_section header; 32 psiconv_header_section header;
30 psiconv_file_type_t res; 33 psiconv_file_type_t res;
34 int leng;
31 35
32 psiconv_parse_header_section(buf,0,0,NULL,&header); 36 psiconv_parse_header_section(buf,0,0,&leng,&header);
33 res = header->file; 37 res = header->file;
38 if (result)
39 *result = header;
40 else
34 psiconv_free_header_section(header); 41 psiconv_free_header_section(header);
42 if (length)
43 *length = leng;
35 return res; 44 return res;
36} 45}
37 46
38int psiconv_parse(const psiconv_buffer buf,psiconv_file *result) 47int psiconv_parse(const psiconv_buffer buf,psiconv_file *result)
39{ 48{
40 int res=0; 49 int res=0;
41 int lev=0; 50 int lev=0;
42 int off=0; 51 int off=0;
52 int leng;
43 53
44 (*result) = malloc(sizeof(**result)); 54 (*result) = malloc(sizeof(**result));
45 55
46 (*result)->type = psiconv_file_type(buf); 56 (*result)->type = psiconv_file_type(buf,&leng,NULL);
47 if ((*result)->type == psiconv_unknown_file) { 57 if ((*result)->type == psiconv_unknown_file) {
48 psiconv_warn(lev+1,off,"Unknown file type: can't parse!"); 58 psiconv_warn(lev+1,off,"Unknown file type: can't parse!");
49 (*result)->file = NULL; 59 (*result)->file = NULL;
50 res = -1; 60 res = -1;
51 } else if ((*result)->type == psiconv_word_file) 61 } else if ((*result)->type == psiconv_word_file)
52 res = psiconv_parse_word_file(buf,lev+2,off, 62 res = psiconv_parse_word_file(buf,lev+2,leng,
53 (psiconv_word_f *)(&((*result)->file))); 63 (psiconv_word_f *)(&((*result)->file)));
54 else if ((*result)->type == psiconv_texted_file) 64 else if ((*result)->type == psiconv_texted_file)
55 res = psiconv_parse_texted_file(buf,lev+2,off, 65 res = psiconv_parse_texted_file(buf,lev+2,leng,
56 (psiconv_texted_f *)(&((*result)->file))); 66 (psiconv_texted_f *)(&((*result)->file)));
67 else if ((*result)->type == psiconv_mbm_file)
68 res = psiconv_parse_mbm_file(buf,lev+2,leng,
69 (psiconv_mbm_f *)(&((*result)->file)));
70 else if ((*result)->type == psiconv_sketch_file)
71 res = psiconv_parse_sketch_file(buf,lev+2,leng,
72 (psiconv_sketch_f *)(&((*result)->file)));
73 else if ((*result)->type == psiconv_clipart_file)
74 res = psiconv_parse_clipart_file(buf,lev+2,leng,
75 (psiconv_clipart_f *)(&((*result)->file)));
57 else { 76 else {
58 psiconv_warn(lev+1,off,"Can't parse this file yet!"); 77 psiconv_warn(lev+1,off,"Can't parse this file yet!");
59 (*result)->file = NULL; 78 (*result)->file = NULL;
60 } 79 }
61 res = -1; 80 res = -1;
62 81
63 return res; 82 return res;
64} 83}
65 84
85int psiconv_parse_clipart_file(const psiconv_buffer buf,int lev,
86 psiconv_u32 off, psiconv_clipart_f *result)
87{
88 int res=0;
89 int i;
90 psiconv_jumptable_section table;
91 psiconv_clipart_section clipart;
92 psiconv_u32 *entry;
93
94 psiconv_progress(lev+1,off,"Going to read a clipart file");
95 (*result) = malloc(sizeof(**result));
96
97 psiconv_progress(lev+2,off,"Going to read the MBM jumptable");
98 res |= psiconv_parse_jumptable_section(buf,lev+2,off, NULL,&table);
99
100 psiconv_progress(lev+2,off,"Going to read the clipart sections");
101 (*result)->sections = psiconv_list_new(sizeof(*clipart));
102 for (i = 0; i < psiconv_list_length(table); i ++) {
103 entry = psiconv_list_get(table,i);
104 psiconv_progress(lev+3,off,"Going to read clipart section %i",i);
105 psiconv_parse_clipart_section(buf,lev+3,*entry,NULL,&clipart);
106 psiconv_list_add((*result)->sections,clipart);
107 }
108
109 psiconv_free_jumptable_section(table);
110 psiconv_progress(lev+1,off,"End of clipart file");
111 return res;
112}
113
66int psiconv_parse_texted_file(const psiconv_buffer buf,int lev, psiconv_u32 off, 114int psiconv_parse_mbm_file(const psiconv_buffer buf,int lev, psiconv_u32 off,
115 psiconv_mbm_f *result)
116{
117 int res=0;
118 int i;
119 psiconv_jumptable_section table;
120 psiconv_paint_data_section paint;
121 psiconv_u32 *entry;
122 psiconv_u32 sto;
123
124 psiconv_progress(lev+1,off,"Going to read a mbm file");
125 *result = malloc(sizeof(**result));
126
127 psiconv_progress(lev+2,off,"Going to read the offset of the MBM jumptable");
128 sto = psiconv_read_u32(buf,lev+2,off);
129 psiconv_debug(lev+2,off,"Offset: %08x",sto);
130
131 psiconv_progress(lev+2,off,"Going to read the MBM jumptable");
132 res |= psiconv_parse_jumptable_section(buf,lev+2,sto, NULL,&table);
133
134 psiconv_progress(lev+2,off,"Going to read the picture sections");
135 (*result)->sections = psiconv_list_new(sizeof(*paint));
136 for (i = 0; i < psiconv_list_length(table); i ++) {
137 entry = psiconv_list_get(table,i);
138 psiconv_progress(lev+3,off,"Going to read picture section %i",i);
139 psiconv_parse_paint_data_section(buf,lev+3,*entry,NULL,0,&paint);
140 psiconv_list_add((*result)->sections,paint);
141 }
142
143 psiconv_free_jumptable_section(table);
144 psiconv_progress(lev+1,off,"End of mbm file");
145 return res;
146}
147
148int psiconv_parse_sketch_file(const psiconv_buffer buf,int lev,
149 psiconv_u32 off,
150 psiconv_sketch_f *result)
151{
152 psiconv_section_table_section table;
153 psiconv_application_id_section appl_id;
154 psiconv_u32 applid_sec = 0;
155 psiconv_u32 sketch_sec = 0;
156 psiconv_u32 sto;
157 psiconv_section_table_entry entry;
158 int i;
159 int res=0;
160 char *temp_str;
161
162 psiconv_progress(lev+1,off,"Going to read a sketch file");
163 *result = malloc(sizeof(**result));
164
165 psiconv_progress(lev+2,off,
166 "Going to read the offset of the section table section");
167 sto = psiconv_read_u32(buf,lev+2,off);
168 psiconv_debug(lev+2,off,"Offset: %08x",sto);
169
170 psiconv_progress(lev+2,sto, "Going to read the section table section");
171 res |= psiconv_parse_section_table_section(buf,lev+2,sto, NULL,&table);
172
173 for (i = 0; i < psiconv_list_length(table); i ++) {
174 psiconv_progress(lev+2,sto, "Going to read entry %d",i);
175 entry = psiconv_list_get(table,i);
176 if (entry->id == PSICONV_ID_APPL_ID_SECTION) {
177 applid_sec = entry->offset;
178 psiconv_debug(lev+3,sto,
179 "Found the Application ID section at %08x",applid_sec);
180 } else if (entry->id == PSICONV_ID_SKETCH_SECTION) {
181 sketch_sec = entry->offset;
182 psiconv_debug(lev+3,sto,
183 "Found the Sketch section at %08x",sketch_sec);
184 } else {
185 psiconv_warn(lev+3,sto,
186 "Found unknown section in the Section Table");
187 psiconv_debug(lev+3,sto,
188 "Section ID %08x, offset %08x",entry->id,entry->offset);
189 res = -1;
190 }
191 }
192
193 psiconv_progress(lev+2,sto, "Looking for the Application ID section");
194 if (! applid_sec) {
195 psiconv_warn(lev+2,sto,
196 "Application ID section not found in the section table");
197 res = -1;
198 } else {
199 psiconv_debug(lev+2,sto,
200 "Application ID section at offset %08x",applid_sec);
201 res |= psiconv_parse_application_id_section(buf,lev+2,applid_sec,NULL,
202 &appl_id);
203 }
204 if ((appl_id->id != PSICONV_ID_SKETCH) ||
205 strcmp(appl_id->name,"Paint.app")) {
206 psiconv_warn(lev+2,applid_sec,
207 "Application ID section contains unexpected data");
208 psiconv_debug(lev+2,applid_sec,"ID: %08x expected, %08x found",
209 PSICONV_ID_SKETCH,appl_id->id);
210 temp_str = psiconv_make_printable(appl_id->name);
211 psiconv_debug(lev+2,applid_sec,"Name: `%s' expected, `%s' found",
212 "Paint.app",temp_str);
213 free(temp_str);
214 }
215
216 psiconv_progress(lev+2,sto, "Looking for the Sketch section");
217 if (! sketch_sec) {
218 psiconv_warn(lev+2,sto,
219 "Sketch section not found in the section table");
220 res = -1;
221 } else {
222 psiconv_debug(lev+2,sto,
223 "Sketch section at offset %08x",applid_sec);
224 res |= psiconv_parse_sketch_section(buf,lev+2,sketch_sec,NULL,0,
225 &(*result)->sketch_sec);
226 }
227
228 psiconv_free_application_id_section(appl_id);
229 psiconv_free_section_table_section(table);
230
231 psiconv_progress(lev+1,off,"End of word file");
232 return res;
233}
234
235
236
237int psiconv_parse_texted_file(const psiconv_buffer buf,int lev,
238 psiconv_u32 off,
67 psiconv_texted_f *result) 239 psiconv_texted_f *result)
68{ 240{
69 int res=0; 241 int res=0;
70 psiconv_header_section header;
71 psiconv_section_table_section table; 242 psiconv_section_table_section table;
72 psiconv_application_id_section appl_id; 243 psiconv_application_id_section appl_id;
73 char *temp_str; 244 char *temp_str;
74 psiconv_character_layout base_char; 245 psiconv_character_layout base_char;
75 psiconv_paragraph_layout base_para; 246 psiconv_paragraph_layout base_para;
76 psiconv_u32 page_sec = 0; 247 psiconv_u32 page_sec = 0;
77 psiconv_u32 texted_sec = 0; 248 psiconv_u32 texted_sec = 0;
78 psiconv_u32 applid_sec = 0; 249 psiconv_u32 applid_sec = 0;
250 psiconv_u32 sto;
79 psiconv_section_table_entry entry; 251 psiconv_section_table_entry entry;
80 int i; 252 int i;
81 253
82 psiconv_progress(lev+1,off,"Going to read a texted file"); 254 psiconv_progress(lev+1,off,"Going to read a texted file");
83 *result = malloc(sizeof(**result)); 255 *result = malloc(sizeof(**result));
84 256
85 psiconv_progress(lev+2,off, "Going to read the header section"); 257 psiconv_progress(lev+2,off,
86 res |= psiconv_parse_header_section(buf,lev+2,off,NULL,&header);
87
88 psiconv_progress(lev+2,header->section_table_offset,
89 "Going to read the section table section"); 258 "Going to read the offset of the section table section");
259 sto = psiconv_read_u32(buf,lev+2,off);
260 psiconv_debug(lev+2,off,"Offset: %08x",sto);
261
262 psiconv_progress(lev+2,sto, "Going to read the section table section");
90 res |= psiconv_parse_section_table_section(buf,lev+2, 263 res |= psiconv_parse_section_table_section(buf,lev+2,sto, NULL,&table);
91 header->section_table_offset,
92 NULL,&table);
93 264
94 for (i = 0; i < psiconv_list_length(table); i ++) { 265 for (i = 0; i < psiconv_list_length(table); i ++) {
95 psiconv_progress(lev+2,header->section_table_offset, 266 psiconv_progress(lev+2,sto, "Going to read entry %d",i);
96 "Going to read entry %d",i);
97 entry = psiconv_list_get(table,i); 267 entry = psiconv_list_get(table,i);
98 if (entry->id == PSICONV_ID_APPL_ID_SECTION) { 268 if (entry->id == PSICONV_ID_APPL_ID_SECTION) {
99 applid_sec = entry->offset; 269 applid_sec = entry->offset;
100 psiconv_debug(lev+3,header->section_table_offset, 270 psiconv_debug(lev+3,sto,
101 "Found the Application ID section at %08x",applid_sec); 271 "Found the Application ID section at %08x",applid_sec);
102 } else if (entry->id == PSICONV_ID_PAGE_LAYOUT_SECTION) { 272 } else if (entry->id == PSICONV_ID_PAGE_LAYOUT_SECTION) {
103 page_sec = entry->offset; 273 page_sec = entry->offset;
104 psiconv_debug(lev+3,header->section_table_offset, 274 psiconv_debug(lev+3,sto,
105 "Found the Page Layout section at %08x",page_sec); 275 "Found the Page Layout section at %08x",page_sec);
106 } else if (entry->id == PSICONV_ID_TEXTED) { 276 } else if (entry->id == PSICONV_ID_TEXTED) {
107 texted_sec = entry->offset; 277 texted_sec = entry->offset;
108 psiconv_debug(lev+3,header->section_table_offset, 278 psiconv_debug(lev+3,sto,
109 "Found the TextEd section at %08x",texted_sec); 279 "Found the TextEd section at %08x",texted_sec);
110 } else { 280 } else {
111 psiconv_warn(lev+3,header->section_table_offset, 281 psiconv_warn(lev+3,sto,
112 "Found unknown section in the Section Table"); 282 "Found unknown section in the Section Table");
113 psiconv_debug(lev+3,header->section_table_offset, 283 psiconv_debug(lev+3,sto,
114 "Section ID %08x, offset %08x",entry->id,entry->offset); 284 "Section ID %08x, offset %08x",entry->id,entry->offset);
115 res = -1; 285 res = -1;
116 } 286 }
117 } 287 }
118 288
119 psiconv_progress(lev+2,header->section_table_offset, 289 psiconv_progress(lev+2,sto, "Looking for the Application ID section");
120 "Looking for the Application ID section");
121 if (! applid_sec) { 290 if (! applid_sec) {
122 psiconv_warn(lev+2,header->section_table_offset, 291 psiconv_warn(lev+2,sto,
123 "Application ID section not found in the section table"); 292 "Application ID section not found in the section table");
124 res = -1; 293 res = -1;
125 } else { 294 } else {
126 psiconv_debug(lev+2,header->section_table_offset, 295 psiconv_debug(lev+2,sto,
127 "Application ID section at offset %08x",applid_sec); 296 "Application ID section at offset %08x",applid_sec);
128 res |= psiconv_parse_application_id_section(buf,lev+2,applid_sec,NULL, 297 res |= psiconv_parse_application_id_section(buf,lev+2,applid_sec,NULL,
129 &appl_id); 298 &appl_id);
130 } 299 }
131 if ((appl_id->id != PSICONV_ID_TEXTED) || 300 if ((appl_id->id != PSICONV_ID_TEXTED) ||
134 "Application ID section contains unexpected data"); 303 "Application ID section contains unexpected data");
135 psiconv_debug(lev+2,applid_sec,"ID: %08x expected, %08x found", 304 psiconv_debug(lev+2,applid_sec,"ID: %08x expected, %08x found",
136 PSICONV_ID_TEXTED,appl_id->id); 305 PSICONV_ID_TEXTED,appl_id->id);
137 temp_str = psiconv_make_printable(appl_id->name); 306 temp_str = psiconv_make_printable(appl_id->name);
138 psiconv_debug(lev+2,applid_sec,"Name: `%s' expected, `%s' found", 307 psiconv_debug(lev+2,applid_sec,"Name: `%s' expected, `%s' found",
139 PSICONV_ID_TEXTED,temp_str); 308 "TextEd.app",temp_str);
140 free(temp_str); 309 free(temp_str);
141 } 310 }
142 311
143 psiconv_progress(lev+2,header->section_table_offset, 312 psiconv_progress(lev+2,sto,
144 "Looking for the Page layout section"); 313 "Looking for the Page layout section");
145 if (! page_sec) { 314 if (! page_sec) {
146 psiconv_warn(lev+2,header->section_table_offset, 315 psiconv_warn(lev+2,sto,
147 "Page layout section not found in the section table"); 316 "Page layout section not found in the section table");
148 (*result)->page_sec = NULL; 317 (*result)->page_sec = NULL;
149 res = -1; 318 res = -1;
150 } else { 319 } else {
151 psiconv_debug(lev+2,header->section_table_offset, 320 psiconv_debug(lev+2,sto,
152 "Page layout section at offset %08x",page_sec); 321 "Page layout section at offset %08x",page_sec);
153 res |= psiconv_parse_page_layout_section(buf,lev+2,page_sec,NULL, 322 res |= psiconv_parse_page_layout_section(buf,lev+2,page_sec,NULL,
154 &(*result)->page_sec); 323 &(*result)->page_sec);
155 } 324 }
156 325
157 base_char = psiconv_basic_character_layout(); 326 base_char = psiconv_basic_character_layout();
158 base_para = psiconv_basic_paragraph_layout(); 327 base_para = psiconv_basic_paragraph_layout();
159 328
160 psiconv_progress(lev+2,header->section_table_offset, 329 psiconv_progress(lev+2,sto,
161 "Looking for the TextEd section"); 330 "Looking for the TextEd section");
162 if (! texted_sec) { 331 if (! texted_sec) {
163 psiconv_warn(lev+2,header->section_table_offset, 332 psiconv_warn(lev+2,sto,
164 "TextEd section not found in the section table"); 333 "TextEd section not found in the section table");
165 (*result)->texted_sec = NULL; 334 (*result)->texted_sec = NULL;
166 res = -1; 335 res = -1;
167 } else { 336 } else {
168 psiconv_debug(lev+2,header->section_table_offset, 337 psiconv_debug(lev+2,sto, "TextEd section at offset %08x",texted_sec);
169 "TextEd section at offset %08x",texted_sec);
170 res |= psiconv_parse_texted_section(buf,lev+2,texted_sec,NULL, 338 res |= psiconv_parse_texted_section(buf,lev+2,texted_sec,NULL,
171 &(*result)->texted_sec, 339 &(*result)->texted_sec,
172 base_char,base_para); 340 base_char,base_para);
173 } 341 }
174 psiconv_free_character_layout(base_char); 342 psiconv_free_character_layout(base_char);
175 psiconv_free_paragraph_layout(base_para); 343 psiconv_free_paragraph_layout(base_para);
176 344
177 psiconv_free_application_id_section(appl_id); 345 psiconv_free_application_id_section(appl_id);
178 psiconv_free_header_section(header);
179 psiconv_free_section_table_section(table); 346 psiconv_free_section_table_section(table);
180 347
181 psiconv_progress(lev+1,off,"End of word file"); 348 psiconv_progress(lev+1,off,"End of word file");
182 return res; 349 return res;
183} 350}
184 351
185int psiconv_parse_word_file(const psiconv_buffer buf,int lev, psiconv_u32 off, 352int psiconv_parse_word_file(const psiconv_buffer buf,int lev, psiconv_u32 off,
186 psiconv_word_f *result) 353 psiconv_word_f *result)
187{ 354{
188 int res=0; 355 int res=0;
189 psiconv_header_section header;
190 psiconv_section_table_section table; 356 psiconv_section_table_section table;
191 psiconv_application_id_section appl_id; 357 psiconv_application_id_section appl_id;
192 char *temp_str; 358 char *temp_str;
193 psiconv_u32 pwd_sec = 0; 359 psiconv_u32 pwd_sec = 0;
194 psiconv_u32 status_sec = 0; 360 psiconv_u32 status_sec = 0;
196 psiconv_u32 page_sec = 0; 362 psiconv_u32 page_sec = 0;
197 psiconv_u32 text_sec = 0; 363 psiconv_u32 text_sec = 0;
198 psiconv_u32 layout_sec = 0; 364 psiconv_u32 layout_sec = 0;
199 psiconv_u32 applid_sec = 0; 365 psiconv_u32 applid_sec = 0;
200 psiconv_section_table_entry entry; 366 psiconv_section_table_entry entry;
367 psiconv_u32 sto;
201 int i; 368 int i;
202 369
203 psiconv_progress(lev+1,off,"Going to read a word file"); 370 psiconv_progress(lev+1,off,"Going to read a word file");
204 *result = malloc(sizeof(**result)); 371 *result = malloc(sizeof(**result));
205 372
206 psiconv_progress(lev+2,off, "Going to read the header section"); 373 psiconv_progress(lev+2,off,
207 res |= psiconv_parse_header_section(buf,lev+2,off,NULL,&header); 374 "Going to read the offset of the section table section");
375 sto = psiconv_read_u32(buf,lev+2,off);
376 psiconv_debug(lev+2,off,"Offset: %08x",sto);
208 377
209 psiconv_progress(lev+2,header->section_table_offset, 378 psiconv_progress(lev+2,sto,
210 "Going to read the section table section"); 379 "Going to read the section table section");
211 res |= psiconv_parse_section_table_section(buf,lev+2, 380 res |= psiconv_parse_section_table_section(buf,lev+2,sto, NULL,&table);
212 header->section_table_offset,
213 NULL,&table);
214 381
215 for (i = 0; i < psiconv_list_length(table); i ++) { 382 for (i = 0; i < psiconv_list_length(table); i ++) {
216 psiconv_progress(lev+2,header->section_table_offset, 383 psiconv_progress(lev+2,sto, "Going to read entry %d",i);
217 "Going to read entry %d",i);
218 entry = psiconv_list_get(table,i); 384 entry = psiconv_list_get(table,i);
219 if (entry->id == PSICONV_ID_APPL_ID_SECTION) { 385 if (entry->id == PSICONV_ID_APPL_ID_SECTION) {
220 applid_sec = entry->offset; 386 applid_sec = entry->offset;
221 psiconv_debug(lev+3,header->section_table_offset, 387 psiconv_debug(lev+3,sto,
222 "Found the Application ID section at %08x",applid_sec); 388 "Found the Application ID section at %08x",applid_sec);
223 } else if (entry->id == PSICONV_ID_PAGE_LAYOUT_SECTION) { 389 } else if (entry->id == PSICONV_ID_PAGE_LAYOUT_SECTION) {
224 page_sec = entry->offset; 390 page_sec = entry->offset;
225 psiconv_debug(lev+3,header->section_table_offset, 391 psiconv_debug(lev+3,sto,
226 "Found the Page Layout section at %08x",page_sec); 392 "Found the Page Layout section at %08x",page_sec);
227 } else if (entry->id == PSICONV_ID_TEXT_SECTION) { 393 } else if (entry->id == PSICONV_ID_TEXT_SECTION) {
228 text_sec = entry->offset; 394 text_sec = entry->offset;
229 psiconv_debug(lev+3,header->section_table_offset, 395 psiconv_debug(lev+3,sto, "Found the Text section at %08x",text_sec);
230 "Found the Text section at %08x",text_sec);
231 } else if (entry->id == PSICONV_ID_PASSWORD_SECTION) { 396 } else if (entry->id == PSICONV_ID_PASSWORD_SECTION) {
232 pwd_sec = entry->offset; 397 pwd_sec = entry->offset;
233 psiconv_debug(lev+3,header->section_table_offset, 398 psiconv_debug(lev+3,sto,
234 "Found the Password section at %08x",pwd_sec); 399 "Found the Password section at %08x",pwd_sec);
235 psiconv_warn(lev+3,header->section_table_offset, 400 psiconv_warn(lev+3,sto,
236 "Password section found - can't read encrypted data"); 401 "Password section found - can't read encrypted data");
237 res = -1; 402 res = -1;
238 } else if (entry->id == PSICONV_ID_WORD_STATUS_SECTION) { 403 } else if (entry->id == PSICONV_ID_WORD_STATUS_SECTION) {
239 status_sec = entry->offset; 404 status_sec = entry->offset;
240 psiconv_debug(lev+3,header->section_table_offset, 405 psiconv_debug(lev+3,sto,
241 "Found the Word Status section at %08x",status_sec); 406 "Found the Word Status section at %08x",status_sec);
242 } else if (entry->id == PSICONV_ID_WORD_STYLES_SECTION) { 407 } else if (entry->id == PSICONV_ID_WORD_STYLES_SECTION) {
243 styles_sec = entry->offset; 408 styles_sec = entry->offset;
244 psiconv_debug(lev+3,header->section_table_offset, 409 psiconv_debug(lev+3,sto,
245 "Found the Word Styles section at %08x",styles_sec); 410 "Found the Word Styles section at %08x",styles_sec);
246 } else if (entry->id == PSICONV_ID_LAYOUT_SECTION) { 411 } else if (entry->id == PSICONV_ID_LAYOUT_SECTION) {
247 layout_sec = entry->offset; 412 layout_sec = entry->offset;
248 psiconv_debug(lev+3,header->section_table_offset, 413 psiconv_debug(lev+3,sto,
249 "Found the Layout section at %08x",layout_sec); 414 "Found the Layout section at %08x",layout_sec);
250 } else { 415 } else {
251 psiconv_warn(lev+3,header->section_table_offset, 416 psiconv_warn(lev+3,sto,
252 "Found unknown section in the Section Table"); 417 "Found unknown section in the Section Table");
253 psiconv_debug(lev+3,header->section_table_offset, 418 psiconv_debug(lev+3,sto,
254 "Section ID %08x, offset %08x",entry->id,entry->offset); 419 "Section ID %08x, offset %08x",entry->id,entry->offset);
255 res = -1; 420 res = -1;
256 } 421 }
257 } 422 }
258 423
259 424
260 psiconv_progress(lev+2,header->section_table_offset, 425 psiconv_progress(lev+2,sto,
261 "Looking for the Status section"); 426 "Looking for the Status section");
262 if (!status_sec) { 427 if (!status_sec) {
263 psiconv_warn(lev+2,header->section_table_offset,
264 "Status section not found in the section table"); 428 psiconv_warn(lev+2,sto, "Status section not found in the section table");
265 res = -1; 429 res = -1;
266 } else { 430 } else {
267 psiconv_debug(lev+2,header->section_table_offset, 431 psiconv_debug(lev+2,sto, "Status section at offset %08x",status_sec);
268 "Status section at offset %08x",status_sec);
269 res |= psiconv_parse_word_status_section(buf,lev+2,status_sec,NULL, 432 res |= psiconv_parse_word_status_section(buf,lev+2,status_sec,NULL,
270 &((*result)->status_sec)); 433 &((*result)->status_sec));
271 } 434 }
272 435
273 psiconv_progress(lev+2,header->section_table_offset, 436 psiconv_progress(lev+2,sto, "Looking for the Application ID section");
274 "Looking for the Application ID section");
275 if (! applid_sec) { 437 if (! applid_sec) {
276 psiconv_warn(lev+2,header->section_table_offset, 438 psiconv_warn(lev+2,sto,
277 "Application ID section not found in the section table"); 439 "Application ID section not found in the section table");
278 res = -1; 440 res = -1;
279 } else { 441 } else {
280 psiconv_debug(lev+2,header->section_table_offset, 442 psiconv_debug(lev+2,sto,
281 "Application ID section at offset %08x",applid_sec); 443 "Application ID section at offset %08x",applid_sec);
282 res |= psiconv_parse_application_id_section(buf,lev+2,applid_sec,NULL, 444 res |= psiconv_parse_application_id_section(buf,lev+2,applid_sec,NULL,
283 &appl_id); 445 &appl_id);
284 } 446 }
285 if ((appl_id->id != PSICONV_ID_WORD) || 447 if ((appl_id->id != PSICONV_ID_WORD) ||
288 "Application ID section contains unexpected data"); 450 "Application ID section contains unexpected data");
289 psiconv_debug(lev+2,applid_sec,"ID: %08x expected, %08x found", 451 psiconv_debug(lev+2,applid_sec,"ID: %08x expected, %08x found",
290 PSICONV_ID_WORD,appl_id->id); 452 PSICONV_ID_WORD,appl_id->id);
291 temp_str = psiconv_make_printable(appl_id->name); 453 temp_str = psiconv_make_printable(appl_id->name);
292 psiconv_debug(lev+2,applid_sec,"Name: `%s' expected, `%s' found", 454 psiconv_debug(lev+2,applid_sec,"Name: `%s' expected, `%s' found",
293 PSICONV_ID_WORD,temp_str); 455 "Word.app",temp_str);
294 free(temp_str); 456 free(temp_str);
295 } 457 }
296 458
297 psiconv_progress(lev+2,header->section_table_offset, 459 psiconv_progress(lev+2,sto,
298 "Looking for the Page layout section"); 460 "Looking for the Page layout section");
299 if (! page_sec) { 461 if (! page_sec) {
300 psiconv_warn(lev+2,header->section_table_offset, 462 psiconv_warn(lev+2,sto,
301 "Page layout section not found in the section table"); 463 "Page layout section not found in the section table");
302 (*result)->page_sec = NULL; 464 (*result)->page_sec = NULL;
303 res = -1; 465 res = -1;
304 } else { 466 } else {
305 psiconv_debug(lev+2,header->section_table_offset, 467 psiconv_debug(lev+2,sto,
306 "Page layout section at offset %08x",page_sec); 468 "Page layout section at offset %08x",page_sec);
307 res |= psiconv_parse_page_layout_section(buf,lev+2,page_sec,NULL, 469 res |= psiconv_parse_page_layout_section(buf,lev+2,page_sec,NULL,
308 &(*result)->page_sec); 470 &(*result)->page_sec);
309 } 471 }
310 472
311 psiconv_progress(lev+2,header->section_table_offset, 473 psiconv_progress(lev+2,sto,
312 "Looking for the Word Style section"); 474 "Looking for the Word Style section");
313 if (!styles_sec) { 475 if (!styles_sec) {
314 psiconv_warn(lev+2,header->section_table_offset, 476 psiconv_warn(lev+2,sto,
315 "Word styles section not found in the section table"); 477 "Word styles section not found in the section table");
316 (*result)->styles_sec = NULL; 478 (*result)->styles_sec = NULL;
317 res = -1; 479 res = -1;
318 } else { 480 } else {
319 psiconv_debug(lev+2,header->section_table_offset, 481 psiconv_debug(lev+2,sto,
320 "Word styles section at offset %08x",styles_sec); 482 "Word styles section at offset %08x",styles_sec);
321 res |= psiconv_parse_word_styles_section(buf,lev+2,styles_sec,NULL, 483 res |= psiconv_parse_word_styles_section(buf,lev+2,styles_sec,NULL,
322 &(*result)->styles_sec); 484 &(*result)->styles_sec);
323 } 485 }
324 486
325 psiconv_progress(lev+2,header->section_table_offset, 487 psiconv_progress(lev+2,sto,
326 "Looking for the Text section"); 488 "Looking for the Text section");
327 if (!text_sec) { 489 if (!text_sec) {
328 psiconv_warn(lev+2,header->section_table_offset, 490 psiconv_warn(lev+2,sto, "Text section not found in the section table");
329 "Text section not found in the section table");
330 (*result)->paragraphs = NULL; 491 (*result)->paragraphs = NULL;
331 res = -1; 492 res = -1;
332 } else { 493 } else {
333 psiconv_debug(lev+2,header->section_table_offset, 494 psiconv_debug(lev+2,sto,
334 "Text section at offset %08x",text_sec); 495 "Text section at offset %08x",text_sec);
335 res |= psiconv_parse_text_section(buf,lev+2,text_sec,NULL, 496 res |= psiconv_parse_text_section(buf,lev+2,text_sec,NULL,
336 &(*result)->paragraphs); 497 &(*result)->paragraphs);
337 } 498 }
338 499
339 if (((*result)->paragraphs) && ((*result)->styles_sec)) { 500 if (((*result)->paragraphs) && ((*result)->styles_sec)) {
340 psiconv_progress(lev+2,header->section_table_offset, 501 psiconv_progress(lev+2,sto,
341 "Looking for the Layout section"); 502 "Looking for the Layout section");
342 if (!layout_sec) { 503 if (!layout_sec) {
343 psiconv_debug(lev+2,header->section_table_offset, 504 psiconv_debug(lev+2,sto,
344 "Layout section not found in the section table"); 505 "Layout section not found in the section table");
345 res = -1; 506 res = -1;
346 } else { 507 } else {
347 psiconv_debug(lev+2,header->section_table_offset, 508 psiconv_debug(lev+2,sto,
348 "Layout section at offset %08x",layout_sec); 509 "Layout section at offset %08x",layout_sec);
349 res |= psiconv_parse_styled_layout_section(buf,lev+2,layout_sec,NULL, 510 res |= psiconv_parse_styled_layout_section(buf,lev+2,layout_sec,NULL,
350 (*result)->paragraphs, 511 (*result)->paragraphs,
351 (*result)->styles_sec); 512 (*result)->styles_sec);
352 } 513 }
353 } else 514 } else
354 psiconv_debug(lev+2,header->section_table_offset, 515 psiconv_debug(lev+2,sto,
355 "Skipping search for Layout section, as either the " 516 "Skipping search for Layout section, as either the "
356 "text or the word styles section was not found"); 517 "text or the word styles section was not found");
357 518
358 psiconv_free_application_id_section(appl_id); 519 psiconv_free_application_id_section(appl_id);
359 psiconv_free_header_section(header);
360 psiconv_free_section_table_section(table); 520 psiconv_free_section_table_section(table);
361 521
362 psiconv_progress(lev+1,off,"End of word file"); 522 psiconv_progress(lev+1,off,"End of word file");
363 return res; 523 return res;
364} 524}

Legend:
Removed from v.2  
changed lines
  Added in v.60

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