예제 #1
0
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();
  }
예제 #2
0
inline void bswap(st_mobi &x)      {unretardify_header(x);}
예제 #3
0
inline void bswap(st_palmdoc &x)   {unretardify_header(x);}