Beispiel #1
0
bool Th105DataArchiveExtractor::build_header(std::vector<unsigned char> &header, std::vector<FileInfo> &file_list) {
	if(file_list.empty()){
		header.clear();
		return true;
	}
	if(!validate_file_list(file_list)) {
		return false;
	}
	unsigned int size;
	if(!calc_header_size(size, file_list)){
		return false;
	}
	header = std::vector<unsigned char>(size);
	unsigned char *p = &header.front();
	std::vector<FileInfo>::iterator cur = file_list.begin();
	while(cur != file_list.end()){
		*(unsigned int*)p = cur->addr;
		p += 4;
		*(unsigned int*)p = cur->comp_size;
		p += 4;
		*p = strlen(cur->filename);
		memcpy(p+1, cur->filename, *p);
		p += *p + 1;
		++cur;
	}
	return true;
}
Beispiel #2
0
bool Th105DataArchiveExtractor::write_header(std::vector<FileInfo> &file_list, FILE *fp) {
	if(fp == NULL) {
		return false;
	}

	const unsigned short file_count = file_list.size();
	unsigned int header_size;
	if(!calc_header_size(header_size, file_list)) {
		return false;
	}
	fseek(fp, 0, SEEK_SET);
	if(fwrite(&file_count, 2, 1, fp) != 1) {
		return false;
	}
	if(fwrite(&header_size, 4, 1, fp) != 1) {
		return false;
	}
	if(file_list.empty()) {
		return true;
	}
	std::vector<unsigned char> header(header_size);
	if(!build_header(header, file_list)) {
		return false;
	}
	if(!header_encrypt(header, 6 + header_size, 0xC5, 0x83, 0x53)) {
		return false;
	}
	if(fwrite(&header.front(), 1, header_size, fp) != header_size) {
		return false;
	}
	return true;
}
Beispiel #3
0
    //------------------------------------------------------------------------
    bool pixel_map::save_as_bmp(FILE *fd) const
    {
        if(m_bmp == 0) return 0;

        BITMAPFILEHEADER bmf;

        bmf.bfType      = 0x4D42;
        bmf.bfOffBits   = calc_header_size(m_bmp) + sizeof(bmf);
        bmf.bfSize      = bmf.bfOffBits + m_img_size;
        bmf.bfReserved1 = 0;
        bmf.bfReserved2 = 0;

        fwrite(&bmf, sizeof(bmf), 1, fd);
        fwrite(m_bmp, m_full_size, 1, fd);
        return true;
    }
Beispiel #4
0
 //static
 //------------------------------------------------------------------------
 unsigned char * pixel_map::calc_img_ptr(BITMAPINFO *bmp)
 {
     if(bmp == 0) return 0;
     return ((unsigned char*)bmp) + calc_header_size(bmp);
 }