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

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

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