static UnshieldReader* unshield_reader_create(/*{{{*/ Unshield* unshield, int index, FileDescriptor* file_descriptor) { bool success = false; UnshieldReader* reader = NEW1(UnshieldReader); if (!reader) return NULL; reader->unshield = unshield; reader->index = index; reader->file_descriptor = file_descriptor; for (;;) { if (!unshield_reader_open_volume(reader, file_descriptor->volume)) { unshield_error("Failed to open volume %i", file_descriptor->volume); goto exit; } /* Start with the correct volume for IS5 cabinets */ if (reader->unshield->header_list->major_version == 5 && index > (int)reader->volume_header.last_file_index) { unshield_trace("Trying next volume..."); file_descriptor->volume++; continue; } break; }; success = true; exit: if (success) return reader; FREE(reader); return NULL; }/*}}}*/
double lowNE6SSM_convergence_tester<Two_scale>::max_rel_diff() const { const lowNE6SSM<Two_scale>* ol = get_last_iteration_model(); const lowNE6SSM<Two_scale>* ne = get_model(); double diff[81] = { 0 }; diff[0] = MaxRelDiff(OLD1(MGlu),NEW1(MGlu)); diff[1] = MaxRelDiff(OLD1(MChaP),NEW1(MChaP)); diff[2] = MaxRelDiff(OLD1(MVZp),NEW1(MVZp)); for (unsigned i = 0; i < 6; ++i) { diff[i + 3] = MaxRelDiff(OLD(MSd,i),NEW(MSd,i)); } for (unsigned i = 0; i < 3; ++i) { diff[i + 9] = MaxRelDiff(OLD(MSv,i),NEW(MSv,i)); } for (unsigned i = 0; i < 6; ++i) { diff[i + 12] = MaxRelDiff(OLD(MSu,i),NEW(MSu,i)); } for (unsigned i = 0; i < 6; ++i) { diff[i + 18] = MaxRelDiff(OLD(MSe,i),NEW(MSe,i)); } for (unsigned i = 0; i < 6; ++i) { diff[i + 24] = MaxRelDiff(OLD(MSDX,i),NEW(MSDX,i)); } for (unsigned i = 0; i < 5; ++i) { diff[i + 30] = MaxRelDiff(OLD(Mhh,i),NEW(Mhh,i)); } for (unsigned i = 2; i < 5; ++i) { diff[i + 35] = MaxRelDiff(OLD(MAh,i),NEW(MAh,i)); } for (unsigned i = 1; i < 2; ++i) { diff[i + 40] = MaxRelDiff(OLD(MHpm,i),NEW(MHpm,i)); } for (unsigned i = 0; i < 8; ++i) { diff[i + 42] = MaxRelDiff(OLD(MChi,i),NEW(MChi,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 50] = MaxRelDiff(OLD(MCha,i),NEW(MCha,i)); } for (unsigned i = 0; i < 3; ++i) { diff[i + 52] = MaxRelDiff(OLD(MFDX,i),NEW(MFDX,i)); } for (unsigned i = 0; i < 7; ++i) { diff[i + 55] = MaxRelDiff(OLD(MSHI0,i),NEW(MSHI0,i)); } for (unsigned i = 0; i < 4; ++i) { diff[i + 62] = MaxRelDiff(OLD(MSHIPM,i),NEW(MSHIPM,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 66] = MaxRelDiff(OLD(MChaI,i),NEW(MChaI,i)); } for (unsigned i = 0; i < 7; ++i) { diff[i + 68] = MaxRelDiff(OLD(MChiI,i),NEW(MChiI,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 75] = MaxRelDiff(OLD(MSHp0,i),NEW(MSHp0,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 77] = MaxRelDiff(OLD(MSHpp,i),NEW(MSHpp,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 79] = MaxRelDiff(OLD(MChiP,i),NEW(MChiP,i)); } return *std::max_element(diff, diff + 81); }
static FileDescriptor* unshield_read_file_descriptor(Unshield* unshield, int index) { /* XXX: multi-volume support... */ Header* header = unshield->header_list; uint8_t* p = NULL; uint8_t* saved_p = NULL; FileDescriptor* fd = NEW1(FileDescriptor); switch (header->major_version) { case 0: case 5: saved_p = p = header->data + header->common.cab_descriptor_offset + header->cab.file_table_offset + header->file_table[header->cab.directory_count + index]; #if VERBOSE unshield_trace("File descriptor offset %i: %08x", index, p - header->data); #endif fd->volume = header->index; fd->name_offset = READ_UINT32(p); p += 4; fd->directory_index = READ_UINT32(p); p += 4; fd->flags = READ_UINT16(p); p += 2; fd->expanded_size = READ_UINT32(p); p += 4; fd->compressed_size = READ_UINT32(p); p += 4; p += 0x14; fd->data_offset = READ_UINT32(p); p += 4; #if VERBOSE >= 2 unshield_trace("Name offset: %08x", fd->name_offset); unshield_trace("Directory index: %08x", fd->directory_index); unshield_trace("Flags: %04x", fd->flags); unshield_trace("Expanded size: %08x", fd->expanded_size); unshield_trace("Compressed size: %08x", fd->compressed_size); unshield_trace("Data offset: %08x", fd->data_offset); #endif if (header->major_version == 5) { memcpy(fd->md5, p, 0x10); p += 0x10; assert((p - saved_p) == 0x3a); } break; case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: default: saved_p = p = header->data + header->common.cab_descriptor_offset + header->cab.file_table_offset + header->cab.file_table_offset2 + index * 0x57; #if VERBOSE unshield_trace("File descriptor offset: %08x", p - header->data); #endif fd->flags = READ_UINT16(p); p += 2; fd->expanded_size = READ_UINT32(p); p += 4; p += 4; fd->compressed_size = READ_UINT32(p); p += 4; p += 4; fd->data_offset = READ_UINT32(p); p += 4; p += 4; memcpy(fd->md5, p, 0x10); p += 0x10; p += 0x10; fd->name_offset = READ_UINT32(p); p += 4; fd->directory_index = READ_UINT16(p); p += 2; assert((p - saved_p) == 0x40); p += 0xc; fd->link_previous = READ_UINT32(p); p += 4; fd->link_next = READ_UINT32(p); p += 4; fd->link_flags = *p; p ++; #if VERBOSE if (fd->link_flags != LINK_NONE) { unshield_trace("Link: previous=%i, next=%i, flags=%i", fd->link_previous, fd->link_next, fd->link_flags); } #endif fd->volume = READ_UINT16(p); p += 2; assert((p - saved_p) == 0x57); break; } if (!(fd->flags & FILE_COMPRESSED) && fd->compressed_size != fd->expanded_size) { unshield_warning("File is not compressed but compressed size is %08x and expanded size is %08x", fd->compressed_size, fd->expanded_size); } return fd; }
double E6SSM_convergence_tester<Two_scale>::max_rel_diff() const { const E6SSM<Two_scale>* ol = get_last_iteration_model(); const E6SSM<Two_scale>* ne = get_model(); double diff[73] = { 0 }; diff[0] = MaxRelDiff(OLD1(MGlu),NEW1(MGlu)); diff[1] = MaxRelDiff(OLD1(MChaP),NEW1(MChaP)); diff[2] = MaxRelDiff(OLD1(MVZp),NEW1(MVZp)); for (unsigned i = 0; i < 6; ++i) { diff[i + 3] = MaxRelDiff(OLD(MSd,i),NEW(MSd,i)); } for (unsigned i = 0; i < 3; ++i) { diff[i + 9] = MaxRelDiff(OLD(MSv,i),NEW(MSv,i)); } for (unsigned i = 0; i < 6; ++i) { diff[i + 12] = MaxRelDiff(OLD(MSu,i),NEW(MSu,i)); } for (unsigned i = 0; i < 6; ++i) { diff[i + 18] = MaxRelDiff(OLD(MSe,i),NEW(MSe,i)); } for (unsigned i = 0; i < 6; ++i) { diff[i + 24] = MaxRelDiff(OLD(MSDX,i),NEW(MSDX,i)); } for (unsigned i = 0; i < 3; ++i) { diff[i + 30] = MaxRelDiff(OLD(Mhh,i),NEW(Mhh,i)); } for (unsigned i = 2; i < 3; ++i) { diff[i + 33] = MaxRelDiff(OLD(MAh,i),NEW(MAh,i)); } for (unsigned i = 1; i < 2; ++i) { diff[i + 36] = MaxRelDiff(OLD(MHpm,i),NEW(MHpm,i)); } for (unsigned i = 0; i < 6; ++i) { diff[i + 38] = MaxRelDiff(OLD(MChi,i),NEW(MChi,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 44] = MaxRelDiff(OLD(MCha,i),NEW(MCha,i)); } for (unsigned i = 0; i < 3; ++i) { diff[i + 46] = MaxRelDiff(OLD(MFDX,i),NEW(MFDX,i)); } for (unsigned i = 0; i < 4; ++i) { diff[i + 49] = MaxRelDiff(OLD(MSHI0,i),NEW(MSHI0,i)); } for (unsigned i = 0; i < 4; ++i) { diff[i + 53] = MaxRelDiff(OLD(MSHIp,i),NEW(MSHIp,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 57] = MaxRelDiff(OLD(MChaI,i),NEW(MChaI,i)); } for (unsigned i = 0; i < 4; ++i) { diff[i + 59] = MaxRelDiff(OLD(MChiI,i),NEW(MChiI,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 63] = MaxRelDiff(OLD(MSSI0,i),NEW(MSSI0,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 65] = MaxRelDiff(OLD(MFSI,i),NEW(MFSI,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 67] = MaxRelDiff(OLD(MSHp0,i),NEW(MSHp0,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 69] = MaxRelDiff(OLD(MSHpp,i),NEW(MSHpp,i)); } for (unsigned i = 0; i < 2; ++i) { diff[i + 71] = MaxRelDiff(OLD(MChiP,i),NEW(MChiP,i)); } return *std::max_element(diff, diff + 73); }