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

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

?? dsk.c

?? 一個用C和匯編寫的Dos操作系統的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************/
/*								*/
/*			      dsk.c				*/
/*								*/
/*			Copyright (c) 1995			*/
/*			Pasquale J. Villani			*/
/*			All Rights Reserved			*/
/*								*/
/* This file is part of DOS-C.					*/
/*								*/
/* DOS-C 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, or (at your option) any later version.			*/
/*								*/
/* DOS-C 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 DOS-C; see the file COPYING.  If not,	*/
/* write to the Free Software Foundation, 675 Mass Ave,		*/
/* Cambridge, MA 02139, USA.					*/
/****************************************************************/

#include "../../hdr/portab.h"
#include "globals.h"

/* $Logfile:   C:/dos-c/src/kernel/dsk.c_v  $ */
#ifdef VERSION_STRINGS
static BYTE *dskRcsId = "$Header:   C:/dos-c/src/kernel/dsk.c_v   1.6   04 Jan 1998 23:15:16   patv  $";
#endif

/* $Log:   C:/dos-c/src/kernel/dsk.c_v  $
 * 
 *    Rev 1.6   04 Jan 1998 23:15:16   patv
 * Changed Log for strip utility
 * 
 *    Rev 1.5   10 Jan 1997  5:41:48   patv
 * Modified for extended partition support
 *
 *    Rev 1.4   29 May 1996 21:03:32   patv
 * bug fixes for v0.91a
 *
 *    Rev 1.3   19 Feb 1996  3:21:36   patv
 * Added NLS, int2f and config.sys processing
 *
 *    Rev 1.2   01 Sep 1995 17:54:18   patv
 * First GPL release.
 *
 *    Rev 1.1   30 Jul 1995 20:52:00   patv
 * Eliminated version strings in ipl
 *
 *    Rev 1.0   02 Jul 1995  8:32:42   patv
 * Initial revision.
 */
/* $EndLog$ */

#ifdef PROTO
BOOL fl_reset(VOID);
COUNT fl_rd_status(WORD);
COUNT fl_read(WORD, WORD, WORD, WORD, WORD, BYTE FAR *);
COUNT fl_write(WORD, WORD, WORD, WORD, WORD, BYTE FAR *);
BOOL fl_verify(WORD, WORD, WORD, WORD, WORD, BYTE FAR *);
BOOL fl_format(WORD, BYTE FAR *);
#else
BOOL fl_reset();
COUNT fl_rd_status();
COUNT fl_read();
COUNT fl_write();
BOOL fl_verify();
BOOL fl_format();
#endif

#define NDEV		8		/* only one for demo		*/
#define	SEC_SIZE	512		/* size of sector in bytes	*/
#define N_RETRY		5		/* number of retries permitted	*/
#define	NENTRY		25		/* total size of dispatch table	*/

union
{
	BYTE	bytes[2 * SEC_SIZE];
	boot	boot_sector;
} buffer;

static struct media_info
{
	ULONG	mi_size;		/* physical sector count	*/
	UWORD	mi_heads;		/* number of heads (sides)	*/
	UWORD	mi_cyls;		/* number of cyl/drive		*/
	UWORD	mi_sectors;		/* number of sectors/cyl	*/
	ULONG	mi_offset;		/* relative partition offset	*/
        BYTE    mi_drive;               /* BIOS drive number            */
        COUNT   mi_partidx;             /* Index to partition array     */
};

static struct media_info miarray[NDEV]; /* Internal media info structs  */
static bpb bpbarray[NDEV];              /* BIOS parameter blocks        */
static bpb *bpbptrs[NDEV];              /* pointers to bpbs             */

#define N_PART 4                        /* number of partitions per
                                           table partition              */

static WORD head, track, sector, ret;   /* globals for blockio          */
static WORD count;
static COUNT nUnits;                    /* number of returned units     */
static COUNT nPartitions;               /* number of DOS partitions     */

#define PARTOFF	0x1be

static struct
{
        BYTE    peDrive;                /* BIOS drive number            */
	BYTE	peBootable;
	BYTE	peBeginHead;
	BYTE	peBeginSector;
	UWORD	peBeginCylinder;
	BYTE	peFileSystem;
	BYTE	peEndHead;
	BYTE	peEndSector;
	UWORD	peEndCylinder;
	LONG	peStartSector;
	LONG	peSectors;
        LONG    peAbsStart;             /* Absolute sector start        */
} dos_partition[NDEV - 2];


#ifdef PROTO
WORD init(rqptr), mediachk(rqptr), bldbpb(rqptr), blockio(rqptr), blk_error(rqptr);
COUNT ltop(WORD *, WORD *, WORD *, COUNT, COUNT, LONG, byteptr);
WORD dskerr(COUNT);
COUNT processtable(COUNT ptDrive, BYTE ptHead, UWORD ptCylinder, BYTE ptSector, LONG ptAccuOff);
#else
WORD init(), mediachk(), bldbpb(), blockio(), blk_error();
WORD dskerr();
COUNT processtable();
#endif

/*									*/
/* the function dispatch table						*/
/*									*/

#ifdef PROTO
static WORD (*dispatch[NENTRY]) (rqptr) =
#else
static WORD (*dispatch[NENTRY]) () =
#endif
{
	init,				/* Initialize			*/
	mediachk,			/* Media Check			*/
	bldbpb,				/* Build BPB			*/
	blk_error,			/* Ioctl In			*/
	blockio,			/* Input (Read)			*/
	blk_error,			/* Non-destructive Read		*/
	blk_error,			/* Input Status			*/
	blk_error,			/* Input Flush			*/
	blockio,			/* Output (Write)		*/
	blockio,			/* Output with verify		*/
	blk_error,			/* Output Status		*/
	blk_error,			/* Output Flush			*/
	blk_error,			/* Ioctl Out			*/
	blk_error,			/* Device Open			*/
	blk_error,			/* Device Close			*/
	blk_error,			/* Removable Media		*/
	blk_error,			/* Output till busy		*/
	blk_error,			/* undefined			*/
	blk_error,			/* undefined			*/
	blk_error,			/* Generic Ioctl		*/
	blk_error,			/* undefined			*/
	blk_error,			/* undefined			*/
	blk_error,			/* undefined			*/
	blk_error,			/* Get Logical Device		*/
	blk_error			/* Set Logical Device		*/
};

#define SIZEOF_PARTENT	16

#define FAT12		0x01
#define	FAT16SMALL	0x04
#define	EXTENDED	0x05
#define	FAT16LARGE	0x06

#define hd(x)	((x) & 0x80)

COUNT
processtable (COUNT ptDrive, BYTE ptHead, UWORD ptCylinder,
              BYTE ptSector, LONG ptAccuOff)
{
        struct                          /* Temporary partition table    */
        {
        	BYTE	peBootable;
	        BYTE	peBeginHead;
                BYTE	peBeginSector;
                UWORD   peBeginCylinder;
	        BYTE	peFileSystem;
	        BYTE	peEndHead;
                BYTE	peEndSector;
	        UWORD	peEndCylinder;
	        LONG	peStartSector;
	        LONG	peSectors;
        } temp_part[N_PART];

	REG retry = N_RETRY;
        UBYTE packed_byte, pb1;
        COUNT Part;

        /* Read partition table                         */
	do
	{
		ret = fl_read ((WORD)ptDrive, (WORD)ptHead, (WORD)ptCylinder,
                               (WORD)ptSector, (WORD)1, (byteptr)&buffer);
	} while (ret != 0 && --retry > 0);
	if(ret != 0)
		return FALSE;

        /* Read each partition into temporary array     */
        for (Part = 0; Part < N_PART; Part++)
        {
	        REG BYTE *p =
                    (BYTE *)&buffer.bytes[PARTOFF + (Part * SIZEOF_PARTENT)];

                getbyte((VOID *)p, &temp_part[Part].peBootable);
	        ++p;
	        getbyte((VOID *)p, &temp_part[Part].peBeginHead);
	        ++p;
	        getbyte((VOID *)p, &packed_byte);
	        temp_part[Part].peBeginSector = packed_byte & 0x3f;
	        ++p;
	        getbyte((VOID *)p, &pb1);
	        ++p;
	        temp_part[Part].peBeginCylinder = pb1 + ((UWORD)(0xc0 & packed_byte) << 2);
	        getbyte((VOID *)p, &temp_part[Part].peFileSystem);
	        ++p;
	        getbyte((VOID *)p, &temp_part[Part].peEndHead);
	        ++p;
	        getbyte((VOID *)p, &packed_byte);
	        temp_part[Part].peEndSector = packed_byte & 0x3f;
	        ++p;
	        getbyte((VOID *)p, &pb1);
	        ++p;
	        temp_part[Part].peEndCylinder = pb1 + ((UWORD)(0xc0 & packed_byte) << 2);
	        getlong((VOID *)p, &temp_part[Part].peStartSector);
	        p += sizeof(LONG);
	        getlong((VOID *)p, &temp_part[Part].peSectors);
        };

        /* Walk through the table, add DOS partitions to global
           array and process extended partitions         */
        for (Part = 0; Part < N_PART && nUnits < NDEV; Part++)
        {
                if (temp_part[Part].peFileSystem == FAT12 ||
                    temp_part[Part].peFileSystem == FAT16SMALL ||
                    temp_part[Part].peFileSystem == FAT16LARGE)
                {
                        miarray[nUnits].mi_offset =
                               temp_part[Part].peStartSector + ptAccuOff;
                        miarray[nUnits].mi_drive = ptDrive;
                        miarray[nUnits].mi_partidx = nPartitions;
                        nUnits++;

                        dos_partition[nPartitions].peDrive = ptDrive;
                        dos_partition[nPartitions].peBootable =
                               temp_part[Part].peBootable;
                        dos_partition[nPartitions].peBeginHead =
                               temp_part[Part].peBeginHead;
                        dos_partition[nPartitions].peBeginSector =
                               temp_part[Part].peBeginSector;
                        dos_partition[nPartitions].peBeginCylinder =
                               temp_part[Part].peBeginCylinder;
                        dos_partition[nPartitions].peFileSystem =
                               temp_part[Part].peFileSystem;
                        dos_partition[nPartitions].peEndHead =
                               temp_part[Part].peEndHead;
                        dos_partition[nPartitions].peEndSector =
                               temp_part[Part].peEndSector;
                        dos_partition[nPartitions].peEndCylinder =
                               temp_part[Part].peEndCylinder;
                        dos_partition[nPartitions].peStartSector =
                               temp_part[Part].peStartSector;
                        dos_partition[nPartitions].peSectors =
                               temp_part[Part].peSectors;
                        dos_partition[nPartitions].peAbsStart =
                               temp_part[Part].peStartSector + ptAccuOff;
                        nPartitions++;
                }
                else if (temp_part[Part].peFileSystem == EXTENDED)
                {
                        /* call again to process extended part table */
                        processtable (ptDrive,
                                      temp_part[Part].peBeginHead,
                                      temp_part[Part].peBeginCylinder,
                                      temp_part[Part].peBeginSector,
                                      temp_part[Part].peStartSector + ptAccuOff);
                };
        };
        return TRUE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆91精品| 国产精品一区二区不卡| 国产精品久久久久久久久久久免费看 | 国产精品免费av| 欧美激情在线看| 国产区在线观看成人精品| 欧美精品一区二区三区很污很色的| 日韩一区二区免费在线观看| 日韩欧美国产不卡| 精品久久久久久久久久久久久久久| 日韩一区二区视频在线观看| 日韩欧美亚洲一区二区| 日韩你懂的在线播放| 久久视频一区二区| 中文幕一区二区三区久久蜜桃| 国产精品区一区二区三| 一区二区三区中文在线| 亚洲va韩国va欧美va精品| 美腿丝袜一区二区三区| 国产.精品.日韩.另类.中文.在线.播放| 麻豆成人91精品二区三区| 国产69精品久久99不卡| 色欧美88888久久久久久影院| 精品视频全国免费看| 日韩一区二区视频在线观看| 国产亚洲综合性久久久影院| 亚洲欧美激情视频在线观看一区二区三区| 一区二区在线观看视频在线观看| 日韩电影在线免费看| 国产麻豆精品95视频| 一本色道**综合亚洲精品蜜桃冫 | 亚洲国产精品久久一线不卡| 美女一区二区三区| 91麻豆视频网站| 日韩一区二区三区视频| 国产精品美女久久久久久| 亚洲成人激情社区| 成人性生交大片免费看视频在线| 欧美视频在线观看一区二区| 国产午夜精品久久| 亚洲aaa精品| 欧美精品免费视频| 久久久久97国产精华液好用吗| 亚洲影院久久精品| 成人一级视频在线观看| 日韩欧美视频一区| 亚洲精品福利视频网站| 国产成a人无v码亚洲福利| 欧美一区二区三区四区久久| 亚洲欧美日韩国产成人精品影院 | 国产精品午夜电影| 美女网站视频久久| 欧美日韩国产三级| 国产精品第一页第二页第三页| 久草中文综合在线| 欧美日韩免费一区二区三区| 亚洲欧洲成人精品av97| 国产一区二区在线电影| 欧美日本一区二区三区| 激情综合网av| 欧美一区二区久久| 亚洲成人精品影院| 欧美午夜在线观看| 亚洲免费av高清| 成人午夜激情在线| 精品国产伦理网| 国内不卡的二区三区中文字幕| 欧美图区在线视频| 伊人夜夜躁av伊人久久| 91免费观看国产| 国产精品久线在线观看| 成人免费毛片片v| 国产精品美女久久久久久| 国产美女主播视频一区| 欧美精品一区二区三区高清aⅴ| 午夜精品久久久久久久蜜桃app| 日本国产一区二区| 一区二区三区美女| 久久亚洲综合av| 国产精品一卡二卡| 国产精品乱人伦中文| 91浏览器入口在线观看| 一区二区三区在线看| 欧美视频在线观看一区二区| 午夜天堂影视香蕉久久| 日韩一区二区三区精品视频 | 国产亚洲精品aa| 国产一区二区三区四| 中文子幕无线码一区tr| www.66久久| 一区二区三区在线观看网站| 在线成人av网站| 精品制服美女久久| 国产精品久久午夜夜伦鲁鲁| 91麻豆高清视频| 日韩中文字幕不卡| 久久精品亚洲精品国产欧美| 成人福利电影精品一区二区在线观看| 中文字幕在线观看一区二区| 欧美亚洲另类激情小说| 久久爱另类一区二区小说| 久久精品视频免费观看| 成人av网站在线观看免费| 18欧美乱大交hd1984| 911精品产国品一二三产区| 免费成人美女在线观看| 中文字幕乱码久久午夜不卡| 91久久久免费一区二区| 青青草成人在线观看| 欧美国产1区2区| 欧美喷水一区二区| 成人性视频免费网站| 日欧美一区二区| 国产精品乱码久久久久久| 欧美一区二区三区在| 99久久国产综合色|国产精品| 日韩国产成人精品| 中文字幕亚洲不卡| 337p日本欧洲亚洲大胆精品| 在线观看视频一区| 成人一区在线看| 毛片一区二区三区| 一级日本不卡的影视| 亚洲国产精品黑人久久久| 91精品久久久久久久91蜜桃| 不卡一区二区三区四区| 精品夜夜嗨av一区二区三区| 一区二区三区日韩欧美| 国产欧美日韩一区二区三区在线观看| 欧美丝袜丝交足nylons| 成人网男人的天堂| 韩国av一区二区三区四区| 日韩国产欧美一区二区三区| 玉米视频成人免费看| 中文在线资源观看网站视频免费不卡 | 国产精品福利一区二区| 欧美一区二区三区爱爱| 91久久免费观看| 99麻豆久久久国产精品免费优播| 精东粉嫩av免费一区二区三区| 亚洲无线码一区二区三区| 成人欧美一区二区三区白人| 久久久不卡网国产精品二区| 日韩欧美区一区二| 日韩欧美亚洲国产精品字幕久久久| 欧美日韩激情在线| 欧美日韩大陆在线| 欧美日韩国产影片| 欧美私人免费视频| 91久久精品一区二区三区| 不卡免费追剧大全电视剧网站| 国产91精品久久久久久久网曝门| 国内成人自拍视频| 国产一区二区三区四| 国产精品白丝jk黑袜喷水| 国产一区二区三区视频在线播放| 精品亚洲国产成人av制服丝袜| 美女网站一区二区| 国模冰冰炮一区二区| 国产高清亚洲一区| 国产精品99精品久久免费| 国产在线精品不卡| 成人激情黄色小说| 99视频精品免费视频| 色综合av在线| 欧美人与z0zoxxxx视频| 日韩三级电影网址| 久久婷婷一区二区三区| 久久精品一区四区| 日韩一区有码在线| 亚洲国产精品视频| 看电视剧不卡顿的网站| 精品一区二区三区av| 成人午夜av影视| 色狠狠色狠狠综合| 日韩视频一区二区三区在线播放| 欧美大胆人体bbbb| 中文字幕一区二区三区四区 | 国产精品国模大尺度视频| 亚洲色图都市小说| 亚洲成人一区在线| 国产综合色产在线精品| 色综合久久久久久久久久久| 在线电影一区二区三区| 26uuu亚洲婷婷狠狠天堂| 国产精品无圣光一区二区| 亚洲精品国产a久久久久久| 水野朝阳av一区二区三区| 国产成人午夜精品影院观看视频| 一本色道亚洲精品aⅴ| 欧美成人精品二区三区99精品| 久久精品在线免费观看| 亚洲综合偷拍欧美一区色| 精品午夜一区二区三区在线观看| 91在线观看美女| 亚洲精品一线二线三线| 亚洲女子a中天字幕| 国产一区亚洲一区| 欧美日韩精品系列| 亚洲日本青草视频在线怡红院|