void mobi::parse_header() { file->read((char *) &header, PALMDOC_DB_HEADER_LEN); unretardify_header(header); if(!strcmp_is_a_worthless_pos(header.type,MOBI_TYPE,8)) throw invalid_file_exception(); uint32 header_offset, header_offset_unk; for(int i=0;i<header.num_records;i++) { file->read((char *) &header_offset, sizeof(uint32_t)); file->read((char *) &header_offset_unk, sizeof(uint32_t)); bswap(header_offset); header_offsets.push_back(header_offset); } file->seekg(header_offsets[0]); file->read((char *) &pd_header, PALMDOC_HEADER_LEN); file->read((char *) &mobi_header_, MOBI_HEADER_LEN); unretardify_header(mobi_header_); unretardify_header(pd_header); file->seekg(header_offsets[1]); cout << this->get_section_uncompressed(1); //string cppssie ; //size_t src size_t src_size = header_offsets[2] - header_offsets[1]; //pd_compression unc; //unc.uncompress(cppssie, src_size); //unc.print_raw(); //cout << cppssie; //src_size = (get_section(2).end - get_section(2).start); //file->seekg(get_section(2).start); //file->read((uint8 *) &cppssie, src_size); //unc.uncompress(cppssie, src_size); //unc.print_raw(); }
inline void bswap(st_mobi &x) {unretardify_header(x);}
inline void bswap(st_palmdoc &x) {unretardify_header(x);}