| … | |
… | |
| 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 | goto DONE; |
|
|
57 | } |
| 48 | if ((*result)->uid1 != PSICONV_ID_PSION5) { |
58 | if ((*result)->uid1 != PSICONV_ID_PSION5) { |
| 49 | psiconv_warn(lev+2,off+len,"UID1 has unknown value. This is probably " |
59 | psiconv_warn(lev+2,off+len,"UID1 has unknown value. This is probably " |
| 50 | "not a (parsable) Psion 5 file"); |
60 | "not a (parsable) Psion 5 file"); |
| 51 | res = -1; |
61 | res = -1; |
| 52 | } |
62 | } |
| … | |
… | |
| 65 | (*result)->file = psiconv_word_file; |
75 | (*result)->file = psiconv_word_file; |
| 66 | psiconv_debug(lev+2,off+len,"File is a Word file"); |
76 | psiconv_debug(lev+2,off+len,"File is a Word file"); |
| 67 | } else if ((*result)->uid3 == PSICONV_ID_TEXTED) { |
77 | } else if ((*result)->uid3 == PSICONV_ID_TEXTED) { |
| 68 | (*result)->file = psiconv_texted_file; |
78 | (*result)->file = psiconv_texted_file; |
| 69 | psiconv_debug(lev+2,off+len,"File is a TextEd file"); |
79 | psiconv_debug(lev+2,off+len,"File is a TextEd file"); |
|
|
80 | } else if ((*result)->uid3 == PSICONV_ID_SKETCH) { |
|
|
81 | (*result)->file = psiconv_sketch_file; |
|
|
82 | psiconv_debug(lev+2,off+len,"File is a Sketch file"); |
| 70 | } |
83 | } |
| 71 | } else if ((*result)->uid2 == PSICONV_ID_MBM_FILE) { |
84 | } else if ((*result)->uid2 == PSICONV_ID_MBM_FILE) { |
| 72 | (*result)->file = psiconv_mbm_file; |
85 | (*result)->file = psiconv_mbm_file; |
| 73 | if ((*result)->uid3 != 0x00) |
86 | if ((*result)->uid3 != 0x00) |
| 74 | psiconv_warn(lev+2,off+len,"UID3 set in MBM file?!?"); |
87 | psiconv_warn(lev+2,off+len,"UID3 set in MBM file?!?"); |
| 75 | psiconv_debug(lev+2,off+len,"File is a MBM file"); |
88 | psiconv_debug(lev+2,off+len,"File is a MBM file"); |
| … | |
… | |
| 91 | psiconv_checkuid((*result)->uid1,(*result)->uid2, |
104 | psiconv_checkuid((*result)->uid1,(*result)->uid2, |
| 92 | (*result)->uid3),temp); |
105 | (*result)->uid3),temp); |
| 93 | res = -1; |
106 | res = -1; |
| 94 | } |
107 | } |
| 95 | len += 4; |
108 | len += 4; |
| 96 | |
|
|
| 97 | psiconv_progress(lev+2,off+len,"Going to read Section Table Section offset"); |
|
|
| 98 | (*result)->section_table_offset = psiconv_read_u32(buf,lev+2,off+len); |
|
|
| 99 | psiconv_debug(lev+2,off+len,"Section Table Section starts at offset %08x", |
|
|
| 100 | (*result)->section_table_offset) ; |
|
|
| 101 | len += 4; |
|
|
| 102 | |
109 | |
|
|
110 | DONE: |
| 103 | if (length) |
111 | if (length) |
| 104 | *length = len; |
112 | *length = len; |
| 105 | |
113 | |
| 106 | psiconv_progress(lev+1,off+len-1, |
114 | psiconv_progress(lev+1,off+len-1, |
| 107 | "End of Header Section (total length: %08x)",len); |
115 | "End of Header Section (total length: %08x)",len); |
| … | |
… | |
| 149 | |
157 | |
| 150 | if (length) |
158 | if (length) |
| 151 | *length = len; |
159 | *length = len; |
| 152 | |
160 | |
| 153 | psiconv_progress(lev+1,off+len-1,"End of section table section " |
161 | psiconv_progress(lev+1,off+len-1,"End of section table section " |
| 154 | "(total length: %08x", len); |
162 | "(total length: %08x)", len); |
| 155 | |
163 | |
| 156 | return res; |
164 | return res; |
| 157 | } |
165 | } |
| 158 | |
166 | |
| 159 | int psiconv_parse_application_id_section(const psiconv_buffer buf, int lev, |
167 | int psiconv_parse_application_id_section(const psiconv_buffer buf, int lev, |