bool IO_UncertSimResults::ReadUncertResults(DC_UncertSimResults& results) { try { ReadFileHeader(results, true); ReadNextRecord(); ReadInt(); // skip next rec SC_IntArray runStartRecs; ReadIntArray(runStartRecs); results.AllocAndSetSize(runStartRecs.Size()); for (int i = 0; i < results.Size(); i++) { ReadAbsolute(runStartRecs[i]); ReadOneRun(results[i]); } CloseFile(); return true; } catch (BufFileC::BufferFileError& err) { GenAppErrorMsg("ReadUncertResults", err.errMsg); CloseFile(); } return false; }
void IO_ProfileSimResults::ReadOneRun(ProfileSimRunResults& runRes) { ReadString(runRes.runID, ProfileSimRunResults::runIDLen); ReadStringArray(runRes.caseValDesc); ReadStringArray(runRes.caseValShortDesc); ReadStringArray(runRes.caseSeqData.sequenceIDs); ReadDoubleArray(runRes.caseSeqData.sequenceStartTimes); // next record contains case start records ReadNextRecord(); SC_IntArray caseStartRecs; ReadIntArray(caseStartRecs); runRes.AllocAndSetSize(caseStartRecs.Size()); // individual case results for (int i = 0; i < runRes.Size(); i++) { ReadAbsolute(caseStartRecs[i]); ReadOneCase(runRes[i]); } }
BOOL P9xPhysicalDrive::ReadPartitionInfoRecursive(DWORD dwSector,INT64 TotalOffset,int depth ) { CHAR szHeader[80]; if(depth) memset(szHeader,'\t',depth); szHeader[depth] = 0; TRACE("%sReading sector %d, offset %I64d\n", szHeader,dwSector,TotalOffset ); BYTE mbr[SIZE_OF_ONE_BLOCK]; if( ReadAbsolute(mbr,sizeof(mbr),dwSector) ) { MBR* pMBR = (MBR*) &(mbr[446]); TRACE("%sSignature = 0x%04hx\n", szHeader,pMBR->wSignature); if( pMBR->wSignature != 0xaa55 ) return FALSE; INT64 ScheissOffset = 0; for( int i = 0; i < 4; i++ ) { PARTITIONINFO* source = &(pMBR->pi[i]); if( !source->SIZE && !source->LBA ) continue; TRACE("%s-------------------- Partition %d --------------\n", szHeader, i ); TRACE("%sDH=%d\n", szHeader, (int) source->DH); TRACE("%sSOURCE = %ld, LBA = %ld\n", szHeader, source->LBA, source->SIZE ); PARTITION_INFORMATION pi; ZeroMemory(&pi,sizeof(pi)); pi.PartitionLength.QuadPart = source->SIZE; pi.PartitionLength.QuadPart *= SIZE_OF_ONE_BLOCKL; pi.PartitionType = source->Type; if( i == 0 ) { pi.StartingOffset.QuadPart = source->LBA; pi.StartingOffset.QuadPart *= SIZE_OF_ONE_BLOCKL; pi.StartingOffset.QuadPart += TotalOffset; ScheissOffset = pi.StartingOffset.QuadPart; } else { pi.StartingOffset.QuadPart = ScheissOffset; } ScheissOffset += pi.PartitionLength.QuadPart; TRACE("%sPartitionLength = %I64d\n", szHeader, pi.PartitionLength.QuadPart ); TRACE("%sStartingOffset = %I64d\n", szHeader, pi.StartingOffset.QuadPart ); P9xPartitionInfo* p9pi = new P9xPartitionInfo(&pi); m_PartitionInfo.AddTail( p9pi ); if( pi.PartitionType == PARTITION_TYPE_EXTENDED ) { if( !ReadPartitionInfoRecursive(dwSector + source->LBA,pi.StartingOffset.QuadPart,depth+1) ) { p9pi->m_pi.StartingOffset.QuadPart += 63*512; } } } } return TRUE; }