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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fatdriver.cpp

?? Jazmyn is a 32-bit, protected mode, multitasking OS which runs on i386 & above CPU`s. Its complete
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 * Copyright (C) 2004, Thejesh AP. All rights reserved.
 */

#include <sys\types.h>
#include <null.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <dirent.h>

#include <mm\new.h>
#include <mm\heap.h>
#include <jazmyn\desc.h>
#include <mm\memory.h>
#include <fs\file_sys.h>
#include <jazmyn\process.h>

#include <jazmyn\i386.h>
#include <semaphore.h>
#include <drivers\console.h>
#include <drivers\keyboard.h>
#include <fs\devmgr.h>
#include <fs\fatbuffer.h>
#include <fs\fatvol.h>
#include <fs\fatdriver.h>

/*
 *This FAT driver has been coded in very few days.So, don`t expect it to be fast.Probably, in
 *the next version, (if i have the same kind of spirit) i will improve it.
 */

extern device_manager   _dev_mgr;
extern process          *curr_proc;

//#define __FATDRIVER_DEBUG

#define root	FATvolume::root
#define pwd     FATvolume::pwd
#define ppwd	FATvolume::ppwd

#define SAVE_ROOT(r) \
do {\
if(_fv != curr_fv) {\
        cout<<"save root";\
	FATvolume::save_root(r);\
	_fv->set_root();\
}\
}while(0)

#define RESTORE_ROOT(r) \
do {\
if(_fv != curr_fv) {\
	FATvolume::restore_root(r);\
}\
}while(0)
		
char            FATdriver::drives[24] = 
		{
			'C','D','E','F','G','H',
			'I','J','K','L','M','N',
			'O','P','Q','R','S','T',
			'U','V','W','X','Y','Z'
		};
char            FATdriver::fd[2] = {'A','B'};
FILE            FATdriver::FILE_tab[SYS_FILE_OPENMAX] = {{0,0,0,0,0}};
finode          FATdriver::FAT_inode[SYS_FILE_OPENMAX] = {{0,0}};


uint get_p_mem()
{
        disable_paging();

        ulong *ptr = (ulong*)0x100000;
        ulong temp;
        while(1)
        {
                temp = *ptr;
                *ptr = 0xAABBCCDD;
                if(*ptr != 0xAABBCCDD)
                        break;
                *ptr = temp;
                ptr = ptr + 4096;
        }
        enable_paging(0x100000);
        return (uint)ptr;
}



FATdriver::FATdriver():bsem(1)
{

}

FATdriver::~FATdriver()
{

}
void FATdriver::init_FATdriver(char boot_drive)
{
	tab dtab[10];
	int ndd;
	int d = 0;
        if((ndd = _dev_mgr.get_dsk_drivers(dtab)) < 0) return;
        if((num_drives = get_num_drives(dtab,ndd)) < 0) return;
       
	fv = new FATvolume[num_drives];
	int vi = 0;
	for(int i=0;i<ndd;i++)
	{
		switch(dtab[i].disk_type)
		{
		case FLOPPY_DISK:
                        for(int k=0;k<dtab[i].num_devices;k++)
			{
                                /*fv[vi].init_volume(0,2879,fd[k],SLOT(dtab[i].name),k);
                                if(boot_drive == fv[vi].get_drive()) curr_fv = &fv[vi];*/
                                vi++;
			}
			break;
		case HARD_DISK:
                        for(int k=0;k<dtab[i].num_devices;k++)
			{
				int num_part;
				if((num_part=get_num_partitions(SLOT(dtab[i].name),k))<0) return;
				for(int j=0;j<num_part;j++)
				{
					uint s,e;
					if(get_part_info(s,e,SLOT(dtab[i].name),k,j) < 0) return;
                                        fv[vi].init_volume(s,e,drives[d],SLOT(dtab[i].name),k);
                                        if(boot_drive == fv[vi].get_drive())
                                        {
                                                curr_fv = &fv[vi];
                                        }
					vi++;
                                        d++;
				}
			}
		}
	}
        cout<<"FAT 12/16/32 driver initialized                 [OK]\n";
        cout<<"Boot drive :"<<curr_fv->get_drive()<<endl;
        if(FATvolume::_fb.init_FATbuffer(FATvolume::totsz,get_p_mem()) < 0)
	{
		cout<<"Error initializing FAT buffer\n";
		while(1);
	}
        chroot(boot_drive);
}

int FATdriver::get_num_drives(tab *dtab,int ndd)
{
	int cnt = 0;
	for(int i=0;i<ndd;i++)
	{
		switch(dtab[i].disk_type)
		{
                case FLOPPY_DISK:
                        cnt += dtab[i].num_devices;break;
		case HARD_DISK:
                        for(int dev=0;dev<dtab[i].num_devices;dev++)
			{
				int p;
                                if((p = get_num_partitions(SLOT(dtab[i].name),dev)) < 0) return -1;
				cnt += p;
                        }
			break;
		}
	}
	return cnt;
}

int FATdriver::get_num_partitions(int slot,int dev)
{
	disk_req req;
	int cnt = 0;
        uint start,num_sec;
        uint ext_start = 0;
        uint endpart;
	byte buf[512];
	do
	{
                _CR(req,DISK_READ,dev,ext_start,1,buf);
                if(_dev_mgr.driver_tab[slot].main(&req) < 0)
                {
                        cout<<"failed\n";
                        return -1;
                }

                start = *(uint*)&buf[454] + ext_start;
                num_sec = *(uint*)&buf[458];
                ext_start = start + num_sec;
                endpart = *(uint*)&buf[470];
		cnt++;
        }while(endpart);
	return cnt;
}

int FATdriver::get_part_info(uint &s,uint &e,int slot,int dev,int part)
{
	disk_req req;
	int cnt = -1;
	uint start,num_sec;
	uint ext_start = 0;
	byte buf[512];
	do
	{
                _CR(req,DISK_READ,dev,ext_start,1,buf);
		if(_dev_mgr.driver_tab[slot].main(&req) < 0) return -1;


                start = *(uint*)&buf[454] + ext_start;
                num_sec = *(uint*)&buf[458];
                ext_start = start + num_sec;
		cnt ++;
	}while(cnt < part);
	s = start;
	e = start + num_sec - 1;
	return 0;
}

inline void* FATdriver::read_FAT(FATvolume &fv)
{
        return FATvolume::_fb.read_FAT(fv);
}

int FATdriver::chroot(char drive)
{
        bsem.down();
	int __ret = -1;
	FATvolume *_fv;
        if(_fv = get_FATvolume(drive))
	{
		if(!_fv->set_root())
		{
			curr_fv = _fv;
			__ret = 0;
		}
	}
        bsem.up();
	return __ret;
}

int FATdriver::chdir(char *path)
{
        bsem.down();
	int __ret = -1;
        if(curr_fv->mem_FAT = (byte*)read_FAT(*curr_fv))
	__ret = curr_fv->chdir(path);
        bsem.up();
	return __ret;
}

FATvolume* FATdriver::get_FATvolume(char drive)
{
	for(int i=0;i<num_drives;i++)
        if(fv[i].get_drive() == drive)
	{
                if(!fv[i].mounted) return NULL;
                if(!(fv[i].mem_FAT = (byte*)read_FAT(fv[i]))) return NULL;
		return &fv[i];
	}
	return NULL;
}

FATvolume* FATdriver::get_FATvolume(char* path)
{
	if(path[1] == ':')
	{
		for(int i=0;i<num_drives;i++)
                if(fv[i].get_drive() == path[0])
                {
			if(!fv[i].mounted) return NULL;
                        if(!(fv[i].mem_FAT = (byte*)read_FAT(fv[i]))) return NULL;
			return &fv[i];
		}
	}
	else
	{
                if(!(curr_fv->mem_FAT = (byte*)read_FAT(*curr_fv))) return NULL;
		return curr_fv;
	}
	return NULL;
}

int FATdriver::mkdir(char *path)
{
        bsem.down();
	int __ret = -1;

	FATvolume *_fv;
        if(_fv = get_FATvolume(path))
	{
		fdir cwd = pwd;
		fdir r;
		ppwd = pwd;
		char parent[1024],child[255];
                split_path(path,parent,child);
		SAVE_ROOT(r);
		if(!_fv->chdir(parent))
		if(!_fv->put_dir_entry(child,ATTR_DIRECTORY,0))
		{
			if(!_fv->chdir(child))
			if(!_fv->put_dir_entry(".",ATTR_DIRECTORY,0))
			if(!_fv->put_dir_entry("..",ATTR_DIRECTORY,0))
  			__ret = 0;
		}
		RESTORE_ROOT(r);
		pwd = cwd;
	}
        bsem.up();
	return __ret;
}

int FATdriver::rmdir(char *path)
{
        bsem.down();
	int __ret = -1;
	FATvolume *_fv;
	if(_fv = get_FATvolume(path))
	{
		fdir cwd = pwd;
		fdir r;
                char parent[1024],child[255];
		split_path(path,parent,child);
		SAVE_ROOT(r);	
		if(!_fv->chdir(parent))
                if(!_fv->del_dir_entry(child))
		__ret = 0;
		RESTORE_ROOT(r);
		pwd = cwd;
	}
        bsem.up();
	return __ret;
}		

DIR* FATdriver::opendir(char* path)
{
        bsem.down();

	void *__ret = NULL;
	FATvolume *_fv;
	if(_fv = get_FATvolume(path))
	{
		fdir cwd = pwd;
		fdir r;
                char parent[1024],child[255];
		split_path(path,parent,child);

                if(strcmp(child,"") == 0)
                {
                        strcpy(child,".");
                }

		SAVE_ROOT(r);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美高清| 国产一区 二区| 欧美亚洲免费在线一区| 日精品一区二区三区| 国产成人免费高清| 亚洲已满18点击进入久久| 91无套直看片红桃| 亚洲综合在线观看视频| 欧美日韩久久不卡| 久久国产三级精品| 国产精品久久久久久久午夜片| 成人app软件下载大全免费| 亚洲视频一区二区在线观看| 在线免费观看一区| www.欧美.com| 一区二区三区欧美久久| 欧美老肥妇做.爰bbww| 国内久久精品视频| 中文字幕中文字幕一区二区| 欧美性大战久久久久久久| 蜜桃视频在线观看一区| 久久九九久精品国产免费直播| 99天天综合性| 日韩专区欧美专区| 国产欧美va欧美不卡在线| 成人久久久精品乱码一区二区三区| 久久在线观看免费| 天天影视网天天综合色在线播放| 欧美色视频一区| 久久精品国产精品亚洲综合| 中文在线免费一区三区高中清不卡| 色视频一区二区| 精品一二三四区| 亚洲激情网站免费观看| 精品国产乱码久久久久久久久| 91丝袜美腿高跟国产极品老师| 免费成人在线网站| 一区二区三区精品| 久久久另类综合| 欧美精品视频www在线观看| 国产91精品精华液一区二区三区| 亚洲成人资源在线| 亚洲欧洲韩国日本视频| 欧美成人精品1314www| 欧美综合亚洲图片综合区| 国产成人av影院| 久久电影国产免费久久电影 | 精品一二三四在线| 日韩欧美电影一二三| 精品制服美女丁香| 亚洲一区二区av电影| 国产精品美女久久久久高潮 | 欧美日韩国产电影| 99视频精品全部免费在线| 激情伊人五月天久久综合| 视频一区在线视频| 一区二区三区在线视频免费观看| 亚洲国产精品高清| 久久亚洲精华国产精华液 | 91精品中文字幕一区二区三区| 成人va在线观看| 国产一区二区三区蝌蚪| 青青草国产成人99久久| 亚洲伊人伊色伊影伊综合网| 综合久久久久久| 国产精品污www在线观看| 久久久天堂av| 久久精品综合网| 久久婷婷综合激情| 精品福利av导航| 欧美一区二区三区啪啪| 色久综合一二码| 91亚洲国产成人精品一区二区三| 亚洲精品国久久99热| 欧美激情中文字幕一区二区| 日韩一区二区在线播放| 欧美一区二区三区播放老司机| 欧美系列日韩一区| 欧美日韩在线亚洲一区蜜芽| 色天使久久综合网天天| 欧美在线一区二区| 久久一区二区三区国产精品| 久久综合av免费| 久久网站最新地址| 中文文精品字幕一区二区| 国产精品你懂的在线欣赏| 国产欧美日韩综合| 1024亚洲合集| 一区二区三区视频在线观看| 一区二区三区国产精品| 亚洲一区视频在线| 日韩 欧美一区二区三区| 精品一区二区三区香蕉蜜桃 | 日本大胆欧美人术艺术动态 | 亚洲精品福利视频网站| 香蕉久久夜色精品国产使用方法 | 日韩一区二区免费视频| 久久你懂得1024| 国产精品美女久久福利网站| 成人免费在线观看入口| 亚洲大型综合色站| 久久99精品国产| proumb性欧美在线观看| 欧美性videosxxxxx| 精品久久五月天| 中文字幕视频一区二区三区久| 一区二区三区精品| 久久99久久精品| 成人黄色一级视频| 欧美人xxxx| 中文字幕欧美激情| 亚洲1区2区3区4区| 国产精品18久久久久久vr| 91丝袜高跟美女视频| 亚洲乱码国产乱码精品精98午夜| 亚洲一级二级三级| 国内一区二区在线| 在线观看欧美黄色| 久久久夜色精品亚洲| 亚洲一级二级三级在线免费观看| 韩日av一区二区| 91老司机福利 在线| 欧美v亚洲v综合ⅴ国产v| 国产精品国产自产拍高清av王其 | 蜜桃久久精品一区二区| proumb性欧美在线观看| 日韩欧美一级二级| 亚洲免费在线观看视频| 国产真实乱对白精彩久久| 91精品福利在线| 26uuu精品一区二区在线观看| 麻豆视频观看网址久久| 肉色丝袜一区二区| 日韩av电影天堂| 99久久er热在这里只有精品66| 69堂国产成人免费视频| 国产精品初高中害羞小美女文| 青青青伊人色综合久久| 色综合久久久久| 中文字幕av不卡| 精品一区二区三区视频| 欧美日本国产一区| 亚洲精品高清在线| 不卡的av网站| 久久久.com| 激情五月激情综合网| 欧美麻豆精品久久久久久| 亚洲欧美日韩国产一区二区三区 | 久久久影视传媒| 蜜臀av性久久久久蜜臀aⅴ| 欧美性生活久久| 亚洲久本草在线中文字幕| 风间由美一区二区av101| 精品99一区二区三区| 婷婷国产在线综合| 欧美日韩国产一级| 亚洲成av人片在线观看无码| 色网综合在线观看| 亚洲精品成a人| 一本一本久久a久久精品综合麻豆| 国产精品乱码一区二区三区软件| 国产乱人伦偷精品视频不卡| www国产亚洲精品久久麻豆| 经典三级一区二区| 精品国产乱码久久| 精品一区二区免费看| 精品日韩一区二区| 精品亚洲国产成人av制服丝袜| 日韩午夜在线观看| 精品综合免费视频观看| 精品日本一线二线三线不卡| 日韩美一区二区三区| 在线欧美日韩国产| 韩国女主播一区| 日韩福利视频导航| 精品国产在天天线2019| 一区二区三区四区不卡视频| 色综合色综合色综合| 亚洲视频免费在线| 欧美在线一区二区| 日本一区中文字幕 | 亚洲天堂免费看| 色吧成人激情小说| 丝袜诱惑制服诱惑色一区在线观看 | 国产成人在线看| 国产精品久久久久久亚洲毛片| 91在线视频免费观看| 一区二区欧美视频| 日韩一级精品视频在线观看| 久久国产精品露脸对白| 国产欧美精品一区aⅴ影院| 亚洲老妇xxxxxx| 久久精品72免费观看| 26uuu亚洲综合色欧美| 国产一区福利在线| 中文字幕视频一区| 欧美日高清视频| 国产黄人亚洲片| 一区二区三区日韩欧美精品| 日韩三级在线免费观看|