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

📄 file_sys.cpp

📁 Jazmyn is a 32-bit, protected mode, multitasking OS which runs on i386 & above CPU`s. Its complete
💻 CPP
字号:
/*
 * 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 <fs\devmgr.h>
#include <fs\fatvol.h>
#include <semaphore.h>
#include <fs\fatdriver.h>
#include <fs\file_sys.h>
#include <drivers\console.h>
#include <drivers\keyboard.h>

extern FATdriver       _FAT_driver;

file_sys::file_sys()
{
	fcount = 0;
        int i;
        for(i =0;i<OPEN_MAX;i++)
	fd[i] = NULL;
	dcount = 0;
	for(i=0;i<DOPEN_MAX;i++)
	{
                d_fd[i].d = NULL;
                d_fd[i].count = 0;
	}	
        
}

file_sys::~file_sys()
{

}

void file_sys::init_fs()
{
	fcount = 0;
        int i;
        for(i =2;i<OPEN_MAX;i++)
	fd[i] = NULL;
	dcount = 0;
}


DIR* file_sys::opendir(char **names,uint num)
{
	int n ;
	if((n = get_free_dir()) < 0) return NULL;
	dcount++;
	d_fd[n].d = new dirent[num];
	for(int i=0;i<num;i++)
        strcpy(d_fd[n].d[i].d_name,names[i]);
	d_fd[n].pos = 0;
	d_fd[n].count = num; 
	return &d_fd[n];
}


dirent* file_sys::readdir(DIR* dfd)
{
        if(dfd->pos >= dfd->count) return NULL;
        return &dfd->d[dfd->pos++];
}

int file_sys::closedir(DIR* dfd)
{
	dfd->pos = 0;
        dfd->count = 0;
	delete dfd->d;
        dfd->d = NULL;
	dcount--;
	return 0;	
}


void file_sys::rewinddir(DIR* dfd)
{
	dfd->pos = 0;
}

int file_sys::get_free_dir()
{
	if(dcount == DOPEN_MAX) return -1;
	for(int i=0;i<DOPEN_MAX;i++)
        if(d_fd[i].count == 0) 
	return i;
	return -1;
}

int file_sys::get_fi()
{
	if(fcount == OPEN_MAX) return -1;
	for(int i=2;i<OPEN_MAX;i++)
	if(fd[i] == NULL) return i;
	return -1;
}

file_sys& file_sys::operator=(file_sys &parent)
{
        int i;
        umask = parent.umask;
	fcount = parent.fcount;
	dcount = parent.dcount;
        for(i=2;i<OPEN_MAX;i++)
		fd[i] = parent.fd[i];
	for(i=0;i<DOPEN_MAX;i++)
		d_fd[i] = parent.d_fd[i];
	return *this;
}

void file_sys::reset_file_sys()
{
        int i;
        for(i=2;i<OPEN_MAX;i++)
	if(fd[i] != NULL)
        {
	_FAT_driver.close(i);
        }
	
	for(i=0;i<DOPEN_MAX;i++)
	if(d_fd[i].d)
        {
        cout<<"closing dirs..\n";
        getch();
	closedir(&d_fd[i]);
        }
}

void file_sys::clear()
{
	reset_file_sys();
}

⌨️ 快捷键说明

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