コード例 #1
0
//-------------------------------------------------------------------------------------------------------------------------------
//
//  硬盘初始化函数
//
//-------------------------------------------------------------------------------------------------------------------------------
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);

}
コード例 #2
0
ファイル: AlignmentReader.cpp プロジェクト: JohnNash/MOSAIK
	// 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;
	}