| … |  | … |  | 
| 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, |