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

📄 sys_file_table0.c

📁 阿基米德操作系统的源代码
💻 C
字号:

/////////////////////////////////////////////////////////////////////
#include "general.h"

#include "hd_info_struct.h"
#include "dir_entry.h"
#include "msdos_dir_entry.h"
#include "d_inode.h"
#include "m_inode.h"
#include "buffer_head.h"
#include "fat_cache.h"
#include "file.h"
#include "hd_request_struct.h"
#include "super_block.h"

#include "common_head.h"

int sys_sync(void);
int sys_reload(void);
int sys_chdriver(long new_driver, unsigned char * buf, unsigned long length);
int msdos_sys_mkdir(const char * pathname);
int sys_mkdir(const char * pathname);
int msdos_sys_rmdir(const char * name);
int sys_rmdir(const char * name);
int msdos_sys_chdir(const char * filename, unsigned char * buf, unsigned long length);
int sys_chdir(const char * filename, unsigned char * buf, unsigned long length);
int msdos_sys_dirstart(const char * pathname,const char * basename,unsigned char * buf,unsigned long length);
int sys_dirstart(const char * pathname,const char * basename,unsigned char * buf,unsigned long length);
int msdos_sys_dirend(void);
int sys_dirend(void);
int msdos_sys_rddir(char * buf,int length);
int sys_rddir(char * buf,int length);
int msdos_sys_create(const char * pathname, unsigned long mode);
int sys_create(const char * pathname, unsigned long mode);
int msdos_sys_delete(const char * name);
int sys_delete(const char * name);
int msdos_sys_open(const char * filename,unsigned long flag,unsigned long mode);
int sys_open(const char * filename,unsigned long flag,unsigned long mode);
int msdos_sys_close(int fd);
int sys_close(int fd);
int msdos_sys_lseek(unsigned int fd, int offset, int origin);
int sys_lseek(unsigned int fd, int offset, int origin);
int msdos_sys_read(unsigned int fd,char * buf,int count);
int sys_read(unsigned int fd,char * buf,int count);
int msdos_sys_write(unsigned int fd,char * buf,int count);
int sys_write(unsigned int fd,char * buf,int count);

int msdos_sys_openEX(const char * filename,unsigned long flag,unsigned long mode,unsigned char * buf,unsigned long length);
int sys_openEX(const char * filename,unsigned long flag,unsigned long mode,unsigned char * buf,unsigned long length);

int sys_getpath(unsigned char * buf, unsigned long length, unsigned long * driver_ptr);
int sys_getsize(unsigned int fd);
/////////////////////////////////////////////////////////////////////
	
int sys0_sync(long none_0, long none_1)
{
	int temp_ret;
	
	temp_ret = sys_sync();

	return temp_ret;
}

int sys0_reload(long none_0, long none_1)
{
	int temp_ret;

	temp_ret = sys_reload();

	return temp_ret;
}

int sys0_chdriver(long none_0, long none_1, long new_driver, unsigned char * buf, unsigned long length)
{
	int temp_ret;

	temp_ret = sys_chdriver(new_driver, buf, length);

	return temp_ret;
}

int sys0_mkdir(long none_0, long none_1, const char * pathname)
{
	int temp_ret;

	if (current_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_mkdir(pathname);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((current_driver > 1) && (current_driver < nr_super_blocks))
		temp_ret = sys_mkdir(pathname);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_rmdir(long none_0, long none_1, const char * name)
{
	int temp_ret;

	if (current_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_rmdir(name);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((current_driver > 1) && (current_driver < nr_super_blocks))
		temp_ret = sys_rmdir(name);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_chdir(long none_0, long none_1, const char * filename, unsigned char * buf, unsigned long length)
{
	int temp_ret;

	if (current_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_chdir(filename, buf, length);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((current_driver > 1) && (current_driver < nr_super_blocks))
		temp_ret = sys_chdir(filename, buf, length);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_dirstart(long none_0, long none_1, const char * pathname,const char * basename,unsigned char * buf,unsigned long length)
{
	int temp_ret;

	if (current_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_dirstart(pathname, basename, buf, length);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((current_driver > 1) && (current_driver < nr_super_blocks))
		temp_ret = sys_dirstart(pathname, basename, buf, length);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_dirend(long none_0, long none_1)
{
	long temp_driver;
	int  temp_ret;

	if ((dir_file.f_count == 0) || (dir_file.f_inode == NULL))
	{
		dir_file.f_count = 0;
		dir_file.f_inode = NULL;
		return -1;
	}
	temp_driver = dir_file.f_inode->i_dev;

	if (temp_driver == 0)
	{
		temp_ret = msdos_sys_dirend();
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((temp_driver > 1) && (temp_driver < nr_super_blocks))
		temp_ret = sys_dirend();
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_rddir(long none_0, long none_1, char * buf,int length)
{
	long temp_driver;
	int  temp_ret;

	if ((dir_file.f_count == 0) || (dir_file.f_inode == NULL))
	{
		dir_file.f_count = 0;
		dir_file.f_inode = NULL;
		return -1;
	}
	temp_driver = dir_file.f_inode->i_dev;

	if (temp_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_rddir(buf, length);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((temp_driver > 1) && (temp_driver < nr_super_blocks))
		temp_ret = sys_rddir(buf, length);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_create(long none_0, long none_1, const char * pathname, unsigned long mode)
{
	int temp_ret;

	if (current_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_create(pathname, mode);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((current_driver > 1) && (current_driver < nr_super_blocks))
		temp_ret = sys_create(pathname, mode);
	else
		temp_ret = -1;

	return temp_ret;

}

int sys0_delete(long none_0, long none_1, const char * name)
{
	int temp_ret;

	if (current_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_delete(name);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((current_driver > 1) && (current_driver < nr_super_blocks))
		temp_ret = sys_delete(name);
	else
		temp_ret = -1;

	return temp_ret;

}

int sys0_open(long none_0, long none_1, const char * filename,unsigned long flag,unsigned long mode)
{
	int temp_ret;

	if (current_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_open(filename, flag, mode);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((current_driver > 1) && (current_driver < nr_super_blocks))
		temp_ret = sys_open(filename, flag, mode);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_close(long none_0, long none_1, int fd)
{
	long temp_driver;
	int  temp_ret;

	if (fd >= NR_FILE)
		return -1;
	if ((file_table[fd].f_count == 0) || (file_table[fd].f_inode == NULL))
	{
		file_table[fd].f_count = 0;
		file_table[fd].f_inode = NULL;
		return -1;
	}
	temp_driver = file_table[fd].f_inode->i_dev;

	if (temp_driver == 0)
	{
		temp_ret = msdos_sys_close(fd);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((temp_driver > 1) && (temp_driver < nr_super_blocks))
		temp_ret = sys_close(fd);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_lseek(long none_0, long none_1, unsigned int fd, int offset, int origin)
{
	long temp_driver;
	int  temp_ret;

	if (fd >= NR_FILE)
		return -1;
	if ((file_table[fd].f_count == 0) || (file_table[fd].f_inode == NULL))
	{
		file_table[fd].f_count = 0;
		file_table[fd].f_inode = NULL;
		return -1;
	}
	temp_driver = file_table[fd].f_inode->i_dev;

	if (temp_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_lseek(fd, offset, origin);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((temp_driver > 1) && (temp_driver < nr_super_blocks))
		temp_ret = sys_lseek(fd, offset, origin);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_read(long none_0, long none_1, unsigned int fd,char * buf,int count)
{
	long temp_driver;
	int  temp_ret;

	if (fd >= NR_FILE)
		return -1;
	if ((file_table[fd].f_count == 0) || (file_table[fd].f_inode == NULL))
	{
		file_table[fd].f_count = 0;
		file_table[fd].f_inode = NULL;
		return -1;
	}
	temp_driver = file_table[fd].f_inode->i_dev;

	if (temp_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_read(fd, buf, count);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((temp_driver > 1) && (temp_driver < nr_super_blocks))
		temp_ret = sys_read(fd, buf, count);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_write(long none_0, long none_1, unsigned int fd,char * buf,int count)
{
	long temp_driver;
	int  temp_ret;

	if (fd >= NR_FILE)
		return -1;
	if ((file_table[fd].f_count == 0) || (file_table[fd].f_inode == NULL))
	{
		file_table[fd].f_count = 0;
		file_table[fd].f_inode = NULL;
		return -1;
	}
	temp_driver = file_table[fd].f_inode->i_dev;

	if (temp_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_write(fd, buf, count);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((temp_driver > 1) && (temp_driver < nr_super_blocks))
		temp_ret = sys_write(fd, buf, count);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_openEX(long none_0, long none_1, const char * filename,unsigned long flag,unsigned long mode,unsigned char * buf,unsigned long length)
{
	int temp_ret;

	if ((!buf) || (length < 256))
		return -1;

	put_gs_byte(0,buf);
	if (current_driver == 0)
	{
		temp_ret = -1;
		if (floppy_workstate == 1)
			temp_ret = msdos_sys_openEX(filename, flag, mode, buf, length);
		if (floppy_workstate != 1)
			invalid_fd(0);
	}
	else if ((current_driver > 1) && (current_driver < nr_super_blocks))
		temp_ret = sys_openEX(filename, flag, mode, buf, length);
	else
		temp_ret = -1;

	return temp_ret;
}

int sys0_getpath(long none_0, long none_1, unsigned char * buf, unsigned long length, unsigned long * driver_ptr)
{
	int temp_ret;
	
	temp_ret = sys_getpath(buf, length, driver_ptr);

	return temp_ret;
}
	
int sys0_getsize(long none_0, long none_1, unsigned int fd)
{
	int temp_ret;
	
	temp_ret = sys_getsize(fd);

	return temp_ret;
}

/////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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