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

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

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

Revision 2 Revision 63
1/* 1/*
2 parse_common.c - Part of psiconv, a PSION 5 file formats converter 2 parse_common.c - Part of psiconv, a PSION 5 file formats converter
3 Copyright (c) 1999 Frodo Looijaard <frodol@dds.nl> 3 Copyright (c) 1999, 2000 Frodo Looijaard <frodol@dds.nl>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18*/ 18*/
19 19
20#include "config.h" 20#include "config.h"
21#include "compat.h"
21#include <stdlib.h> 22#include <stdlib.h>
22#include <string.h> 23#include <string.h>
23 24
24#include "data.h" 25#include "data.h"
25#include "parse_routines.h" 26#include "parse_routines.h"
43 (*result) = malloc(sizeof(**result)); 44 (*result) = malloc(sizeof(**result));
44 45
45 psiconv_progress(lev+2,off+len,"Going to read UID1 to UID3"); 46 psiconv_progress(lev+2,off+len,"Going to read UID1 to UID3");
46 (*result)->uid1 = psiconv_read_u32(buf,lev+2,off+len); 47 (*result)->uid1 = psiconv_read_u32(buf,lev+2,off+len);
47 psiconv_debug(lev+2,off+len,"UID1: %08x",(*result)->uid1); 48 psiconv_debug(lev+2,off+len,"UID1: %08x",(*result)->uid1);
49 if ((*result)->uid1 == PSICONV_ID_CLIPART) {
50 /* That's all folks... */
51 (*result)->file = psiconv_clipart_file;
52 (*result)->uid2 = 0;
53 (*result)->uid3 = 0;
54 (*result)->checksum = 0;
55 len += 4;
56 psiconv_debug(lev+2,off+len,"File is a Clipart file");
57 goto DONE;
58 }
48 if ((*result)->uid1 != PSICONV_ID_PSION5) { 59 if ((*result)->uid1 != PSICONV_ID_PSION5) {
49 psiconv_warn(lev+2,off+len,"UID1 has unknown value. This is probably " 60 psiconv_warn(lev+2,off+len,"UID1 has unknown value. This is probably "
50 "not a (parsable) Psion 5 file"); 61 "not a (parsable) Psion 5 file");
51 res = -1; 62 res = -1;
52 } 63 }
65 (*result)->file = psiconv_word_file; 76 (*result)->file = psiconv_word_file;
66 psiconv_debug(lev+2,off+len,"File is a Word file"); 77 psiconv_debug(lev+2,off+len,"File is a Word file");
67 } else if ((*result)->uid3 == PSICONV_ID_TEXTED) { 78 } else if ((*result)->uid3 == PSICONV_ID_TEXTED) {
68 (*result)->file = psiconv_texted_file; 79 (*result)->file = psiconv_texted_file;
69 psiconv_debug(lev+2,off+len,"File is a TextEd file"); 80 psiconv_debug(lev+2,off+len,"File is a TextEd file");
81 } else if ((*result)->uid3 == PSICONV_ID_SKETCH) {
82 (*result)->file = psiconv_sketch_file;
83 psiconv_debug(lev+2,off+len,"File is a Sketch file");
70 } 84 }
85 } else if ((*result)->uid2 == PSICONV_ID_MBM_FILE) {
86 (*result)->file = psiconv_mbm_file;
87 if ((*result)->uid3 != 0x00)
88 psiconv_warn(lev+2,off+len,"UID3 set in MBM file?!?");
89 psiconv_debug(lev+2,off+len,"File is a MBM file");
71 } 90 }
72 } 91 }
73 if ((*result)->file == psiconv_unknown_file) { 92 if ((*result)->file == psiconv_unknown_file) {
74 psiconv_warn(lev+2,off+len,"Unknown file type"); 93 psiconv_warn(lev+2,off+len,"Unknown file type");
75 (*result)->file = psiconv_unknown_file; 94 (*result)->file = psiconv_unknown_file;
76 } 95 }
86 psiconv_checkuid((*result)->uid1,(*result)->uid2, 105 psiconv_checkuid((*result)->uid1,(*result)->uid2,
87 (*result)->uid3),temp); 106 (*result)->uid3),temp);
88 res = -1; 107 res = -1;
89 } 108 }
90 len += 4; 109 len += 4;
91
92 psiconv_progress(lev+2,off+len,"Going to read Section Table Section offset");
93 (*result)->section_table_offset = psiconv_read_u32(buf,lev+2,off+len);
94 psiconv_debug(lev+2,off+len,"Section Table Section starts at offset %08x",
95 (*result)->section_table_offset) ;
96 len += 4;
97 110
111DONE:
98 if (length) 112 if (length)
99 *length = len; 113 *length = len;
100 114
101 psiconv_progress(lev+1,off+len-1, 115 psiconv_progress(lev+1,off+len-1,
102 "End of Header Section (total length: %08x)",len); 116 "End of Header Section (total length: %08x)",len);
144 158
145 if (length) 159 if (length)
146 *length = len; 160 *length = len;
147 161
148 psiconv_progress(lev+1,off+len-1,"End of section table section " 162 psiconv_progress(lev+1,off+len-1,"End of section table section "
149 "(total length: %08x", len); 163 "(total length: %08x)", len);
150 164
151 return res; 165 return res;
152} 166}
153 167
154int psiconv_parse_application_id_section(const psiconv_buffer buf, int lev, 168int psiconv_parse_application_id_section(const psiconv_buffer buf, int lev,
244 free(para); 258 free(para);
245 259
246 /* Initialize the remaining parts of each paragraph */ 260 /* Initialize the remaining parts of each paragraph */
247 for (i = 0; i < psiconv_list_length(*result); i ++) { 261 for (i = 0; i < psiconv_list_length(*result); i ++) {
248 para = psiconv_list_get(*result,i); 262 para = psiconv_list_get(*result,i);
249 para->in_lines = psiconv_list_new(sizeof(struct psiconv_in_line_layout)); 263 para->in_lines = psiconv_list_new(sizeof(struct psiconv_in_line_layout_s));
250 para->replacements = psiconv_list_new(sizeof(struct psiconv_replacement)); 264 para->replacements = psiconv_list_new(sizeof(struct psiconv_replacement_s));
251 para->base_style = 0; 265 para->base_style = 0;
252 para->base_character = psiconv_basic_character_layout(); 266 para->base_character = psiconv_basic_character_layout();
253 para->base_paragraph = psiconv_basic_paragraph_layout(); 267 para->base_paragraph = psiconv_basic_paragraph_layout();
254 } 268 }
255 269
276 int res = 0; 290 int res = 0;
277 int len = 0; 291 int len = 0;
278 psiconv_u32 temp; 292 psiconv_u32 temp;
279 int parse_styles,nr,i,j,total,leng,line_length; 293 int parse_styles,nr,i,j,total,leng,line_length;
280 294
281 typedef struct anon_style 295 typedef struct anon_style_s
282 { 296 {
283 int nr; 297 int nr;
284 psiconv_s16 base_style; 298 psiconv_s16 base_style;
285 psiconv_character_layout character; 299 psiconv_character_layout character;
286 psiconv_paragraph_layout paragraph; 300 psiconv_paragraph_layout paragraph;
287 } *anon_style; 301 } *anon_style;
288 302
289 typedef psiconv_list anon_style_list; /* of struct anon_style */ 303 typedef psiconv_list anon_style_list; /* of struct anon_style */
290 304
291 anon_style_list anon_styles; 305 anon_style_list anon_styles;
292 struct anon_style anon; 306 struct anon_style_s anon;
293 anon_style anon_ptr=NULL; 307 anon_style anon_ptr=NULL;
294 308
295 psiconv_paragraph para; 309 psiconv_paragraph para;
296 struct psiconv_in_line_layout in_line; 310 struct psiconv_in_line_layout_s in_line;
297 311
298 int *inline_count; 312 int *inline_count;
299 313
300 314
301 psiconv_progress(lev+1,off,"Going to read the layout section"); 315 psiconv_progress(lev+1,off,"Going to read the layout section");
382 for (i = 0; i < nr; i ++) { 396 for (i = 0; i < nr; i ++) {
383 psiconv_progress(lev+3,off+len,"Element %d",i); 397 psiconv_progress(lev+3,off+len,"Element %d",i);
384 if (i >= psiconv_list_length(result)) { 398 if (i >= psiconv_list_length(result)) {
385 psiconv_debug(lev+4,off+len,"Going to allocate a new element"); 399 psiconv_debug(lev+4,off+len,"Going to allocate a new element");
386 para = malloc(sizeof(*para)); 400 para = malloc(sizeof(*para));
387 para->in_lines = psiconv_list_new(sizeof(struct psiconv_in_line_layout)); 401 para->in_lines = psiconv_list_new(sizeof(struct psiconv_in_line_layout_s));
388 para->base_style = 0; 402 para->base_style = 0;
389 para->base_character = psiconv_basic_character_layout(); 403 para->base_character = psiconv_basic_character_layout();
390 para->base_paragraph = psiconv_basic_paragraph_layout(); 404 para->base_paragraph = psiconv_basic_paragraph_layout();
391 free(para); 405 free(para);
392 } 406 }
438 } else { 452 } else {
439 psiconv_debug(lev+4,off+len,"Type: %02x (not based on a paragraph type)" 453 psiconv_debug(lev+4,off+len,"Type: %02x (not based on a paragraph type)"
440 ,temp); 454 ,temp);
441 len += 0x01; 455 len += 0x01;
442 if (parse_styles) { 456 if (parse_styles) {
443 psiconv_progress(lev+4,off+len+psiconv_read_u32(buf,lev+4,off+len), 457 psiconv_progress(lev+4,off+len+psiconv_read_u32(buf,lev+4,off+len)+4,
444 "Going to read the paragraph element base style"); 458 "Going to read the paragraph element base style");
445 temp = psiconv_read_u8(buf,lev+4, 459 temp = psiconv_read_u8(buf,lev+4,
446 off+len+psiconv_read_u32(buf,lev+4,off+len)); 460 off+len+psiconv_read_u32(buf,lev+4,off+len)+4);
447 psiconv_debug(lev+4,off+len+psiconv_read_u32(buf,lev+4,off+len), 461 psiconv_debug(lev+4,off+len+psiconv_read_u32(buf,lev+4,off+len)+4,
448 "Style: %02x",temp); 462 "Style: %02x",temp);
449 } else 463 } else
450 temp = 0x00; 464 temp = 0x00;
451 psiconv_free_paragraph_layout(para->base_paragraph); 465 psiconv_free_paragraph_layout(para->base_paragraph);
452 psiconv_free_character_layout(para->base_character); 466 psiconv_free_character_layout(para->base_character);
572 styles_section->normal = malloc(sizeof(*styles_section->normal)); 586 styles_section->normal = malloc(sizeof(*styles_section->normal));
573 styles_section->normal->character = psiconv_clone_character_layout(base_char); 587 styles_section->normal->character = psiconv_clone_character_layout(base_char);
574 styles_section->normal->paragraph = psiconv_clone_paragraph_layout(base_para); 588 styles_section->normal->paragraph = psiconv_clone_paragraph_layout(base_para);
575 styles_section->normal->hotkey = 0; 589 styles_section->normal->hotkey = 0;
576 styles_section->normal->name = strdup(""); 590 styles_section->normal->name = strdup("");
577 styles_section->styles = psiconv_list_new(sizeof(struct psiconv_word_style)); 591 styles_section->styles = psiconv_list_new(sizeof(struct psiconv_word_style_s));
578 592
579 res = psiconv_parse_layout_section(buf,lev,off,length,result, 593 res = psiconv_parse_layout_section(buf,lev,off,length,result,
580 styles_section,0); 594 styles_section,0);
581 595
582 psiconv_free_word_styles_section(styles_section); 596 psiconv_free_word_styles_section(styles_section);

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

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