📄 file_sys.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 + -