file_sys.cpp

来自「Jazmyn is a 32-bit, protected mode, mult」· C++ 代码 · 共 141 行

CPP
141
字号
/*
 * 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 + =
减小字号Ctrl + -
显示快捷键?