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

📄 dsk_boot.c

📁 [随书类]Dos6.0源代码
💻 C
字号:
/***************************************************************************/
/*																									*/
/*	DSK_BOOT.C																					*/
/*																									*/
/*		Copyright (c) 1991 - Microsoft Corp.											*/
/*		All rights reserved.																	*/
/*		Microsoft Confidential																*/
/*																									*/
/*	Misc. floppy disk access function via the ROM BIOS int 13h interface.	*/
/* Original created for the RUP format and backup programs.						*/
/*																									*/
/* 																								*/
/* Created 07-23-89 johnhe																	*/
/***************************************************************************/

#include		<stdio.h>
#include 	<string.h>
#include		<memory.h>

#include		<alias.h>
#include 	<disk_io.h>

/************************************************************************/
/* Copies the BPB structure for the current disk to a boot record and	*/
/* then writes the boot record to the disk.										*/
/*																								*/
/* int WriteBoot( int iDrv, struct BPB *Bpb, char *szLabel )				*/
/*																								*/
/*	ARGUMENTS:	Bpb		- BPB to use for this disk								*/
/*					szLabel	- Disk label string or NULL for no label			*/
/*	RETURNS:		int		- OK or BIOS int 13h disk error						*/
/*																								*/
/************************************************************************/

int WriteBoot( int iDrv, struct BPB *Bpb, char *szLabel )
{
	extern char				NewBootRec;		/* 512 byte boot sector	*/
	struct BOOT_HEADER	*Header;
	struct DIR				Dir;
	int						i;

	Header = (struct BOOT_HEADER *)(&NewBootRec);

	memcpy( &(Header->Bpb), Bpb, sizeof( struct BPB ) );

	Header->uchPhysDrv = 0;
	Header->uchCurHd = 0;

		/* If boot header doesn't have extended BPB signature we need	*/
		/* to zero any extended fields not explicitly set by us.			*/

	if ( Header->uchExtSig != 0x29 )
	{												/* Zero hi-word of hidden sectors	*/
		Header->Bpb.ulHiddenSec &= 0x0000ffffL;
		Header->Bpb.ulTotalBigSecs = 0L;
		Header->uchExtSig = 0x29;
	}

	SetFileTimeDate( &Dir );
	Header->ulSerial = *( (long *)(&(Dir.Time)) );
	
	if ( szLabel != NULL )
	{
		for ( i = 0; i < 11; i++ )
		{
			if ( *szLabel != 0 )
				Header->uchVolLabel[i] = *(szLabel++);
			else
				Header->uchVolLabel[i] = ' ';	
		}
	}
	else
		memset( Header->uchVolLabel, ' ', 11 );


	memcpy( Header->uchSystemId, "FAT12   ", 8 );

	return( RdWrSectors( iDrv, 0, 1, &NewBootRec, Bpb, WRITE ) );
}

⌨️ 快捷键说明

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