//------------------------------------------------------------------------------------------------------------------------------- // // 硬盘初始化函数 // //------------------------------------------------------------------------------------------------------------------------------- void HardDiskInit (void) { ConsolePrintf("Set the hard disk driver"); if(GetIDENum()==0) { ConsolePrintFault(); ConsoleMsg("\n"); ConsoleMsg(" System had no hard disk!\n"); ConsoleMsg("\n"); return;} ConsolePrintOK(); ConsoleMsg("\n"); if(NR_HD_DEV==1) ConsoleMsg(" System only one hard disk\n"); else if(NR_HD_DEV==2) ConsoleMsg(" System have two hard disk\n"); ConsoleMsg(" Hard disk Type: %s\n", HardDiskName ); ConsoleMsg("\n"); //for(i=0 ; i<NR_BLK_REQUEST ; i++) { // hd_req[i].flag = -1; // hd_req[i].next = NULL; // semaphore_init (&(hd_req[i].sem), 0); //} //semaphore_init(&request_sem, NR_BLK_REQUEST); SetIntrGate(0x2E,(void*)HardDiskInterrupt); outb_p(inb_p(0x21)&0xfb,0x21); outb(inb_p(0xA1)&0xbf,0xA1); TickDelay(1); ReadPartition(); //Must before fs!!! TickDelay(1); }
// loads the next read from the alignment archive bool CAlignmentReader::LoadNextRead(Mosaik::AlignedRead& ar) { if(!mIsOpen) { cout << "ERROR: An attempt was made to get reads from an alignment archive that hasn't been opened yet." << endl; exit(1); } // check if we have already processed all of the reads if(mCurrentRead >= mNumReads) return false; // read the partition if(mPartitionMembers == mPartitionSize) { if(!ReadPartition()) return false; } // initialize unsigned char readStatus = RF_UNKNOWN; int numMate1Alignments = 0; int numMate2Alignments = 0; int numMate1OriginalAlignments = 0; int numMate2OriginalAlignments = 0; int numMate1Hash = 0; int numMate2Hash = 0; // load the read header LoadReadHeader(ar.Name, ar.ReadGroupCode, readStatus, numMate1Alignments, numMate2Alignments, numMate1OriginalAlignments, numMate2OriginalAlignments, numMate1Hash, numMate2Hash); // interpret the read status const bool haveMate1 = ((readStatus & RF_HAVE_MATE1) != 0 ? true : false); const bool haveMate2 = ((readStatus & RF_HAVE_MATE2) != 0 ? true : false); const bool isResolvedAsPair = ((readStatus & RF_RESOLVED_AS_PAIR) != 0 ? true : false); ar.hasCsString = ((readStatus & RF_HAS_CS_STRING) != 0 ? true : false); ar.IsLongRead = ((readStatus & RF_IS_LONG_READ) != 0 ? true : false); ar.IsPairedEnd = ((readStatus & RF_IS_PAIRED_IN_SEQUENCING) != 0 ? true : false); ar.IsResolvedAsPair = ((readStatus & RF_RESOLVED_AS_PAIR) != 0 ? true : false); // ================================= // deserialize each mate 1 alignment // ================================= ar.Mate1Alignments.clear(); ar.Mate1Alignments.resize(numMate1Alignments); if (haveMate1) ReadAlignments(ar.Mate1Alignments, ar.IsLongRead, ar.IsPairedEnd, isResolvedAsPair, ar.ReadGroupCode, numMate1OriginalAlignments, numMate2OriginalAlignments, numMate1Hash, numMate2Hash, ar.hasCsString); // ================================= // deserialize each mate 2 alignment // ================================= ar.Mate2Alignments.clear(); ar.Mate2Alignments.resize(numMate2Alignments); if (haveMate2) ReadAlignments(ar.Mate2Alignments, ar.IsLongRead, ar.IsPairedEnd, isResolvedAsPair, ar.ReadGroupCode, numMate1OriginalAlignments, numMate2OriginalAlignments, numMate1Hash, numMate2Hash, ar.hasCsString); // increment the read counter ++mCurrentRead; ++mPartitionMembers; return true; }