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

📄 fdos.c

📁 F:worksip2440a board可启动u-boot-like.tar.gz F:worksip2440a board可启动u-boot-like.tar.gz
💻 C
字号:
/* * (C) Copyright 2002 * St鋟bli Faverges - <www.staubli.com> * Pierre AUBERT  p.aubert@staubli.com * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */#include <common.h>#include <config.h>#if (CONFIG_COMMANDS & CFG_CMD_FDOS)#include <malloc.h>#include "dos.h"#include "fdos.h"const char *month [] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};Fs_t    fs;File_t  file;/*----------------------------------------------------------------------------- * dos_open -- *----------------------------------------------------------------------------- */int dos_open(char *name){    int lg;    int entry;    char *fname;    /* We need to suppress the " char around the name                        */    if (name [0] == '"') {	name ++;    }    lg = strlen (name);    if (name [lg - 1] == '"') {	name [lg - 1] = '\0';    }    /* Open file system                                                      */    if (fs_init (&fs) < 0) {	return -1;    }    /* Init the file descriptor                                              */    file.name = name;    file.fs = &fs;    /* find the subdirectory containing the file                             */    if (open_subdir (&file) < 0) {	return (-1);    }    fname = basename (name);    /* if we try to open root directory                                      */    if (*fname == '\0') {	file.file = file.subdir;	return (0);    }    /* find the file in the subdir                                           */    entry = 0;    if (vfat_lookup (&file.subdir,		     file.fs,		     &file.file.dir,		     &entry,		     0,		     fname,		     ACCEPT_DIR | ACCEPT_PLAIN | SINGLE | DO_OPEN,		     0,		     &file.file) != 0) {	/* File not found                                                    */	printf ("File not found\n");	return (-1);    }    return 0;}/*----------------------------------------------------------------------------- * dos_read -- *----------------------------------------------------------------------------- */int dos_read (ulong addr){    int read = 0, nb;    /* Try to boot a directory ?                                             */    if (file.file.dir.attr & (ATTR_DIRECTORY | ATTR_VOLUME)) {	printf ("Unable to boot %s !!\n", file.name);	return (-1);    }    while (read < file.file.FileSize) {	PRINTF ("read_file (%ld)\n", (file.file.FileSize - read));	nb = read_file (&fs,			&file.file,			(char *)addr + read,			read,			(file.file.FileSize - read));	PRINTF ("read_file -> %d\n", nb);	if (nb < 0) {	    printf ("read error\n");	    return (-1);	}	read += nb;    }    return (read);}/*----------------------------------------------------------------------------- * dos_dir -- *----------------------------------------------------------------------------- */int dos_dir (void){    int entry;    Directory_t dir;    char *name;    if ((file.file.dir.attr & ATTR_DIRECTORY) == 0) {	printf ("%s: not a directory !!\n", file.name);	return (1);    }    entry = 0;    if ((name = malloc (MAX_VNAMELEN + 1)) == NULL) {	PRINTF ("Allcation error\n");	return (1);    }    while (vfat_lookup (&file.file,			file.fs,			&dir,			&entry,			0,			NULL,			ACCEPT_DIR | ACCEPT_PLAIN | MATCH_ANY,			name,			NULL) == 0) {	/* Display file info                                                 */	printf ("%3.3s %9d %s %02d %04d %02d:%02d:%02d %s\n",		(dir.attr & ATTR_DIRECTORY) ? "dir" : "   ",		__le32_to_cpu (dir.size),		month [DOS_MONTH (&dir) - 1],		DOS_DAY (&dir),		DOS_YEAR (&dir),		DOS_HOUR (&dir),		DOS_MINUTE (&dir),		DOS_SEC (&dir),		name);    }    free (name);    return (0);}#endif

⌨️ 快捷键说明

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