亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? disk_io.cpp

?? Unix操作系統minix 2.0源碼
?? CPP
字號:
/*

	FIPS - the First nondestructive Interactive Partition Splitting program



	Module disk_io.cpp



	RCS - Header:

	$Header: c:/daten/fips/source/main/RCS/disk_io.cpp 1.4 1995/01/19 00:00:51 schaefer Exp schaefer $



	Copyright (C) 1993 Arno Schaefer



	This program is free software; you can redistribute it and/or modify

	it under the terms of the GNU General Public License as published by

	the Free Software Foundation; either version 2 of the License, or

	(at your option) any later version.



	This program is distributed in the hope that it will be useful,

	but WITHOUT ANY WARRANTY; without even the implied warranty of

	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

	GNU General Public License for more details.



	You should have received a copy of the GNU General Public License

	along with this program; if not, write to the Free Software

	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.





	Report problems and direct all questions to:



	schaefer@rbg.informatik.th-darmstadt.de

*/



#include "disk_io.h"

#include <dos.h>

#include <bios.h>



#define DISK_INT 0x13



#define RESET_DISK 0

#define READ_SECTOR 2

#define WRITE_SECTOR 3

#define VERIFY_SECTOR 4

#define GET_DRIVE_PARAMS 8

#define GET_DISK_TYPE 0x15





/* ----------------------------------------------------------------------- */

/* Bios call to get the number of drives attached                          */

/* ----------------------------------------------------------------------- */



int get_no_of_drives (void)

{

	union REGS regs;



	regs.h.ah = GET_DRIVE_PARAMS;

	regs.h.dl = 0x80;

	int86 (DISK_INT, &regs, &regs);



	if (regs.h.ah != 0) return (1); // will be checked again

	return (regs.h.dl);

}





/* ----------------------------------------------------------------------- */

/* Calculates physical sector number (Head, Cylinder, Sector).             */

/* Log_sector is absolute logical sector number (0 = master boot record).  */

/* ----------------------------------------------------------------------- */



physical_sector_no::physical_sector_no

(

	dword logical_sector,

	const drive_geometry &geometry

)

{

	cylinder =

		logical_sector

		/ (geometry.heads * geometry.sectors);



	head =

	(

		logical_sector

		- (cylinder * geometry.heads * geometry.sectors)

	)

	/ geometry.sectors;



	sector =

		logical_sector

		- (cylinder * geometry.heads * geometry.sectors)

		- (head * geometry.sectors)

		+ 1;

}





/* ----------------------------------------------------------------------- */

/* Bios call get_drive_geometry, returns error status in var errorcode     */

/* ----------------------------------------------------------------------- */



void physical_drive::get_geometry (void)

{

	union REGS regs;



	regs.h.ah = GET_DRIVE_PARAMS;

	regs.h.dl = number;

	int86 (DISK_INT, &regs, &regs);



	if ((errorcode = regs.h.ah) != 0) return;



	geometry.heads = (dword) regs.h.dh + 1;

	geometry.sectors = (dword) regs.h.cl & 0x3f;

	geometry.cylinders =

	(

		(dword) regs.h.ch

		| (((dword) regs.h.cl << 2) & 0x300)

	) + 1;

}





/* ----------------------------------------------------------------------- */

/* Bios call reset_drive, returns error status in var errorcode            */

/* ----------------------------------------------------------------------- */



void physical_drive::reset (void)

{

	union REGS regs;



	regs.h.ah = RESET_DISK;

	regs.h.dl = number;

	int86 (DISK_INT, &regs, &regs);



	errorcode = regs.h.ah;

}





/* ----------------------------------------------------------------------- */

/* Initialization physical_drive, requires drive number.                   */

/* Calls get_drive_geometry, errorcode contains return status              */

/* ----------------------------------------------------------------------- */



physical_drive::physical_drive (int number)

{

	physical_drive::number = number;

	get_geometry ();

};





/* ----------------------------------------------------------------------- */

/* Initialization physical_drive with physical_drive object                */

/* ----------------------------------------------------------------------- */



physical_drive::physical_drive (physical_drive &pd)

{

	number = pd.number;

	errorcode = pd.errorcode;

	geometry = pd.geometry;

}





/* ----------------------------------------------------------------------- */

/* Assignment operator for physical drive                                  */

/* ----------------------------------------------------------------------- */



void physical_drive::operator= (physical_drive &pd)

{

	number = pd.number;

	errorcode = pd.errorcode;

	geometry = pd.geometry;

}





/* ----------------------------------------------------------------------- */

/* Read sector                                                             */

/* ----------------------------------------------------------------------- */



int physical_drive::read_sector (struct sector *sector, dword sector_number)

{

	physical_sector_no p (sector_number, geometry);



	boolean done = false;



	for (int i=0; i<3; i++)

	{

		if (biosdisk

		(

			READ_SECTOR,

			number,

			p.head,

			p.cylinder,

			p.sector,

			1,

			sector->data

		) == 0)

		{

			done=true;

			break;

		}



		reset ();

	}



	if (!done) return (-1);

	return 0;

}





/* ----------------------------------------------------------------------- */

/* Write sector with verify                                                */

/* ----------------------------------------------------------------------- */



int physical_drive::write_sector (struct sector *sector, dword sector_number)

{

	physical_sector_no p (sector_number,geometry);



	boolean done = false;



	for (int i=0; i<3; i++)

	{

		if (biosdisk

		(

			WRITE_SECTOR,

			number,

			p.head,

			p.cylinder,

			p.sector,

			1,

			sector->data

		) == 0)

		{

			done=true;

			break;

		}



		reset ();

	}



	if (!done) return (-1);



	if (biosdisk

	(

		VERIFY_SECTOR,

		number,

		p.head,

		p.cylinder,

		p.sector,

		1,

		sector->data



	) != 0) return (-1);



	return 0;

}





/* ----------------------------------------------------------------------- */

/* Bios call get_disk_type - returns 0 if drive not present.               */

/* Valid drive numbers: 0 - 255, result: 1 - floppy without disk change    */

/* detection, 2 - floppy with disk change detection, 3 - harddisk          */

/* ----------------------------------------------------------------------- */



int get_disk_type (int drive_number)

{

	union REGS regs;



	regs.h.ah = GET_DISK_TYPE;

	regs.h.dl = drive_number;

	int86 (DISK_INT, &regs, &regs);



	if (regs.x.cflag) return 0;

	return (regs.h.ah);                     // disk type

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线观看18| 欧美videos大乳护士334| 欧美私人免费视频| 日韩欧美不卡在线观看视频| 日本一区二区免费在线观看视频| 亚洲一区国产视频| 国产伦精品一区二区三区免费| 99久久777色| 日韩精品在线一区| 亚洲成人综合在线| 国产suv精品一区二区三区| 欧美日本视频在线| 亚洲欧美日韩综合aⅴ视频| 精品一区免费av| 制服丝袜中文字幕亚洲| 亚洲色图欧美在线| 成人免费高清视频| 欧美mv日韩mv| 日产欧产美韩系列久久99| 91一区二区在线| 欧美国产亚洲另类动漫| 国内精品久久久久影院色| 欧美三级蜜桃2在线观看| 国产精品国产三级国产a | 日韩一区二区三区在线观看| 亚洲视频每日更新| 成人国产亚洲欧美成人综合网| 日韩午夜三级在线| 日韩精品一级中文字幕精品视频免费观看 | 国产福利精品一区| 精品国产电影一区二区| 激情综合网天天干| 日韩欧美亚洲国产另类| 日韩不卡免费视频| 欧美一区二区精品| 麻豆精品视频在线观看免费| 91精品国产综合久久精品性色| 亚洲一区视频在线| 欧美高清视频在线高清观看mv色露露十八 | 久久色中文字幕| 激情亚洲综合在线| 欧美精品一区二区蜜臀亚洲| 精品在线视频一区| 久久久精品免费观看| 国产成人在线视频播放| 国产日韩欧美一区二区三区综合| 国产馆精品极品| 国产欧美一区视频| 色综合久久综合| 亚洲国产欧美在线| 日韩精品一区二区三区视频 | 日韩免费观看高清完整版| 精品一二三四在线| 国产精品国产馆在线真实露脸| 99精品视频在线播放观看| 亚洲一区二区在线观看视频| 欧美色综合久久| 精品一区二区三区的国产在线播放| 欧美电视剧在线看免费| 国产超碰在线一区| 亚洲免费av高清| 3d动漫精品啪啪一区二区竹菊| 精品一区二区三区在线视频| 中文字幕欧美日韩一区| 欧洲精品一区二区三区在线观看| 视频一区二区三区中文字幕| 久久综合九色综合久久久精品综合| 在线一区二区三区四区| 亚洲图片一区二区| 精品久久久久久久久久久久包黑料| 国产91色综合久久免费分享| 成人欧美一区二区三区| 欧美一区二区免费| 99久久精品国产麻豆演员表| 日韩中文字幕麻豆| 国产精品久久久久久亚洲毛片| 色综合久久久久网| 黄页视频在线91| 亚洲精品高清在线| 久久午夜羞羞影院免费观看| 在线观看区一区二| 国产精品一区二区黑丝| 一区二区激情视频| 国产午夜久久久久| 欧美一区二区在线播放| 91影视在线播放| 国产盗摄女厕一区二区三区| 亚洲丰满少妇videoshd| 国产精品国产三级国产普通话99| 日韩欧美国产综合| 91福利国产成人精品照片| 国产精品456| 久久精品国产网站| 亚洲成人自拍网| 国产精品久久久一本精品| 精品国产一区二区三区四区四| 日本乱人伦一区| 成人av在线网站| 精品一区二区久久久| 亚洲一区二区三区视频在线| 国产精品久久久久桃色tv| 日韩精品一区在线| 日韩视频一区在线观看| 欧美日韩国产另类一区| k8久久久一区二区三区| 国产在线不卡一区| 九九热在线视频观看这里只有精品| 亚洲午夜免费视频| 亚洲综合激情网| 一区二区三区在线影院| 亚洲柠檬福利资源导航| 亚洲欧美一区二区在线观看| 国产女人18水真多18精品一级做| 精品免费日韩av| 精品少妇一区二区三区视频免付费 | 欧美电影一区二区| 欧美日韩和欧美的一区二区| 日本乱码高清不卡字幕| 日本韩国一区二区| 91国偷自产一区二区三区观看| 99精品视频在线观看免费| 91视频免费播放| 在线观看亚洲一区| 88在线观看91蜜桃国自产| 欧美精品xxxxbbbb| 精品精品欲导航| 国产午夜亚洲精品理论片色戒| 日韩精品资源二区在线| 精品国产百合女同互慰| 国产欧美精品一区二区色综合 | 日韩美女一区二区三区四区| 日韩视频永久免费| 国产欧美日韩精品一区| 中文字幕一区二区三区在线播放| 1024成人网色www| 一区二区三区四区激情| 日韩精品一卡二卡三卡四卡无卡| 蜜桃传媒麻豆第一区在线观看| 久久99精品国产.久久久久| 国产a精品视频| 一本久道中文字幕精品亚洲嫩| 欧美日韩视频第一区| 日韩一区二区精品葵司在线| 久久亚洲综合色一区二区三区| 日本一区二区免费在线| 亚洲综合一区二区精品导航| 蜜桃免费网站一区二区三区| 国产成人精品一区二| 日本电影亚洲天堂一区| 日韩欧美视频一区| 国产精品久久久久久久浪潮网站 | 国产精品成人网| 亚洲www啪成人一区二区麻豆 | 精品欧美一区二区久久| 亚洲欧美一区二区在线观看| 日韩电影免费在线| 成av人片一区二区| 欧美一区二区不卡视频| 亚洲私人影院在线观看| 蜜臀av一区二区在线观看| 成人晚上爱看视频| 69av一区二区三区| 国产精品网曝门| 蜜臀av性久久久久蜜臀aⅴ流畅| 粉嫩蜜臀av国产精品网站| 欧美日本在线播放| 国产精品三级电影| 久久超碰97中文字幕| 色视频成人在线观看免| 久久色成人在线| 日本不卡视频在线| av高清不卡在线| 国产欧美日韩另类一区| 美腿丝袜在线亚洲一区| 色狠狠色噜噜噜综合网| 中文字幕欧美日本乱码一线二线| 日韩国产在线一| 在线观看中文字幕不卡| 国产精品美女久久久久久久久久久| 蜜臀精品一区二区三区在线观看 | 99久久国产综合精品麻豆| 精品国产亚洲一区二区三区在线观看| 亚洲蜜臀av乱码久久精品| 福利一区福利二区| 日韩免费一区二区| 日本在线观看不卡视频| 欧美丝袜自拍制服另类| 一区二区三区精品视频在线| 成人三级在线视频| 国产夜色精品一区二区av| 久久99久国产精品黄毛片色诱| 欧美日韩国产首页在线观看| 亚洲国产精品人人做人人爽| 色一情一乱一乱一91av| 国产精品的网站| 成人av中文字幕| 综合久久久久久久| 91丨九色丨国产丨porny| 中文字幕日韩一区| 91亚洲永久精品|