⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myview.cpp

📁 吐血了
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <afxwin.h>
#include <afxext.h>
#include "disk.h"
#include "mydoc.h"
#include "myview.h"

#include "resource.h"

#define VWIN32_DIOC_DOS_IOCTL		1
#define VWIN32_DIOC_DOS_INT25		2
#define VWIN32_DIOC_DOS_DRIVEINFO	6

#define		FSINFOSIG	0x61417272L

IMPLEMENT_DYNCREATE ( myview, CScrollView )

BEGIN_MESSAGE_MAP ( myview, CScrollView ) 

	ON_COMMAND_RANGE ( ID_DRIVE_A, ID_DRIVE_C,drive ) 

END_MESSAGE_MAP( )

void myview::OnInitialUpdate( )
{
	CScrollView::OnInitialUpdate( ) ;

	pdoc = ( mydoc * ) GetDocument( ) ;
	pds = pdoc -> getdiskobject( ) ;

	CClientDC d ( this ) ;
	d.SetMapMode ( MM_LOENGLISH ) ;

	int h = - ( ( d.GetDeviceCaps ( LOGPIXELSY ) * 10 ) / 72 ) ;
	
	if ( scr_font.m_hObject != NULL )
		scr_font.DeleteObject( ) ;

	scr_font.CreateFont ( h, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Courier New" ) ;

	CFont *prevfont = d.SelectObject ( &scr_font ) ;

	TEXTMETRIC tm ;
	d.GetTextMetrics ( &tm) ;
	scr_ht = tm.tmHeight + tm.tmExternalLeading ;

	d.SelectObject ( prevfont ) ;

	setview( ) ;
} 

void myview::setview( )
{
	SetScrollSizes ( MM_LOENGLISH, CSize ( 827, pdoc -> lines.GetCount( ) * scr_ht + 5 * scr_ht ) ) ;
}

void myview::OnDraw ( CDC *p )
{
	CFont* prevfont = p -> SelectObject ( &scr_font ) ;

	int count = pdoc -> lines.GetCount( ) ;
	POSITION pos = pdoc -> lines.GetHeadPosition( ) ;
	for ( int i = 0, y = 0 ; i < count ; i++ )
	{
		str = pdoc -> lines.GetNext ( pos ) ;
		p -> TextOut ( 5, y, str, str.GetLength( ) ) ;
		y -= scr_ht ;
	}
	str = "" ;

	p -> SelectObject ( prevfont ) ;
}

void myview::drive ( int id )
{
	switch ( id )
	{
		case ID_DRIVE_A :
			
			pdoc -> lines.RemoveAll( ) ;

			media_id_info ( 1 ) ; // reads and displays media ID information
			boot_info ( 0 ) ;  // reads and displays FAT 12 boot sector information

			fat_info( ) ; // reads and displays File Allocation Table 

			display_dir_info ( 0, 0 ) ; // reads and displays directory structure 
									//0 - !FAT32

			setview( ) ;
 			break ;

		case ID_DRIVE_C :

			pdoc -> lines.RemoveAll( ) ;

			media_id_info ( 3 ) ; // reads and displays media ID information

			if ( strncmp ( "FAT32", filetypestr, 5 ) )
			{
				boot_info ( 2 ) ; // reads and displays FAT 12/16 boot sector information
				fat_info( ) ; // reads and displays File Allocation Table 

				display_dir_info ( 0, 2 ) ; //reads and displays directory structure
										 //0 - !FAT32
			}
			else
			{
				boot_info_32 ( 3 ) ; // reads and displays FAT 32 boot sector information
				fat_info( ) ;
				display_dir_info ( 1, 2 ) ; //reads and displays directory structure
										 // 1 - FAT32
			}

			setview( ) ;

			break ;
	}

	Invalidate( ) ;
}

void myview::media_id_info  ( int drive_1 ) // one-based drive
{
	pds -> getmediaid ( drive_1, &m ) ;
	display_media_id( ) ;
}

void myview::display_media_id( ) 
{
	str = "-------------------------------" ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str = "Media ID" ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str = "-------------------------------" ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Serial Number = %u", m.serialnumber ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	CString volstr ;
	for ( int i = 0 ; i <= 10 ; i++ )
		volstr += m.vollabel[i] ;
	
	str = "Volume Label = " + volstr ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	filetypestr = "" ;
	for ( i = 0 ; i <= 7 ; i++ )
		filetypestr += m.filesystype[i] ; // private - filetypestr
	
	str = "File System Type = " + filetypestr ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str = "-------------------------------" ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;
}

void myview::boot_info ( int drive_0 )
{
	pds -> readabsolutesectors ( drive_0, 0, 1, &bs ) ; // zero-based drive
	display_boot_info( ) ;
}

void myview::display_boot_info( )
{
	CString totalhiddenstr ;
	CString totalsectorsstr ;

	str = filetypestr + " BOOT Sector" ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str = "-------------------------------" ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Jump Instruction : %X%X%X", ( BYTE ) bs.jump[0], ( BYTE ) bs.jump[1], ( BYTE ) bs.jump[2] ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "OEM Name : %s", bs.OEMname ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Bytes Per Sector : %u",bs.bps ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Sectors Per Cluster : %u",bs.spc ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Number of Sectors in Reserved Area : %u", bs.reservedsec ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Number of Copies of FAT : %u", bs.fatcopies ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Maximum Directory Entries : %u", bs.maxdirentries ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;
	
	if ( bs.totalsec == 0 )
	{
		CString hugesecstr ;
		hugesecstr.Format ( "Huge Sectors = %u", bs.hugesec ) ;
		str = hugesecstr ;
		pdoc -> lines.AddTail ( str ) ;
		str = "" ;
	}
	else
	{
		str.Format ( "Total Number of Sectors : %u", bs.totalsec ) ;
		pdoc -> lines.AddTail ( str ) ;
		str = "" ;
	}
	str.Format ( "Media Descriptor : %X", bs.mediadesc ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Sectors Per FAT : %u", bs.secperfat ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Sectors Per Track : %u", bs.secpertrack ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Number of Sides : %u", bs.noofsides ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Number of Hidden Sectors: %u", bs.hidden ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Drive Number: %d", bs.drivenumber ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Boot Signature: %u", bs.bootsignature ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Volume ID: %u", bs.volumeid ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	CString volstr ;
	for ( int i = 0 ; i <= 10 ; i++ )
		volstr += m.vollabel[i] ;
	
	str = "Volume Label = " + volstr ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str = "File System Type = " + filetypestr ; // private - filetypestr
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str = "-------------------------------" ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;
}

void myview::boot_info_32 ( int drive_1 )
{
	pds -> readabsolutesectors32 ( drive_1, 0, 1, &bs32 ) ; // one-based drive
	display_boot_info_32( ) ;
}

void myview::display_boot_info_32( )
{
	str = filetypestr + "Boot Sector" ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str = "-------------------------------" ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Jump Instruction : %X%X%X", ( BYTE ) bs32.jump[0], ( BYTE ) bs32.jump[1], ( BYTE ) bs32.jump[2] ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "OEM Name : %s", bs32.bsOemName ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Bytes Per Sector : %u", bs32.BytesPerSector ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Sectors Per Cluster : %u", bs32.SectorsPerCluster ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Number of Sectors in Reserved Area : %d", bs32.ReservedSectors ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;
	
	str.Format ( "Number of Copies of FAT : %d", bs32.NumberOfFATs ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Maximum Directory Entries : %d", bs32.RootEntries ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	if ( bs32.TotalSectors == 0 )
	{
		CString hugesecstr ;
		hugesecstr.Format ( "Huge Sectors = %u", ( bs32.BigTotalSectorsHigh << 16) + bs32.BigTotalSectors ) ;
		str = hugesecstr ;
		pdoc -> lines.AddTail ( str ) ;
		str = "" ;
	}
	else
	{
		str.Format ( "Total Number of Sectors : %d", bs32.TotalSectors ) ;
		pdoc -> lines.AddTail ( str ) ;
		str = "" ;
	}

	str.Format ( "Media Descriptor : %X", bs32.MediaDescriptor ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	if ( bs32.SectorsPerFAT == 0 )
	{
		str.Format ( "Big Sectors Per FAT : %d", (bs32.BigSectorsPerFatHi << 16) + bs32.BigSectorsPerFat ) ;
		pdoc -> lines.AddTail ( str ) ;
		str = "" ;
	}
	else
	{
		str.Format ( "Sectors Per FAT : %d", bs32.SectorsPerFAT ) ;
		pdoc -> lines.AddTail ( str ) ;
		str = "" ;
	}

	str.Format ( "Sectors Per Track : %d", bs32.SectorsPerTrack ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Number of Sides : %d", bs32.Heads ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	DWORD totalhidden = ( bs32.HiddenSectorsHigh << 16 ) + bs32.HiddenSectors ;
	str.Format ( "Number of Hidden Sectors: %d", totalhidden ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Extended flags : %d", bs32.ExtFlags ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "File System Version : %d", bs32.FS_Version ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "Root Dir Start Cluster : %d", ( bs32.RootDirStrtClusHi << 16 ) + bs32.RootDirStrtClus ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

	str.Format ( "File System Info Sector : %d", bs32.FSInfoSec ) ;
	pdoc -> lines.AddTail ( str ) ;
	str = "" ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -