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

📄 tfs.h

📁 可移到ucos上的文件系统
💻 H
📖 第 1 页 / 共 2 页
字号:
		b. defragstate(N,SECTOR_COPIED)
		c. erase sector[N]
		d. defragstate(N,SECTOR_UPDATE_BEGIN)
		e. scan defraghdrtbl, copy if necessary
		f. defragstate(N,SECTOR_UPDATE_COMPLETE)
		g. erase SPARE
	  }
	5. For the final sector (containing both file data and the defraghdr
	   table), copy it to SPARE, then do final update.

   struct defraghdr:
	Used during defragmentation to keep track of the defragmentation process.
	partial_hdr_copy:		if this value is not 0xffff, then the header
							of the file this defraghdr structure represents
							was only partially copied to the new space.  The
							number of bytes that were copied will be in this
							member of the structure.
	begin_sector_number:	sector that the file starts in prior to defrag.
	begin_sector_offset:	offset into that sector marking the start of the
							file header.
	end_sector_number:		sector that the file ends in prior to defrag.
	end_sector_offset:		offset into that sector marking the end of the
							file data.
	new_destination_addr:	address into flash where the file will begin
							after defragmentation.
	first_dead_file:		address of the first dead file in TFS.
*/
struct defraghdr {
	struct	tfshdr	fhdr;
	unsigned long	phc;		/* Size of partial header copy. */
	int	bsn;					/* Begin sector number. */
	int	bso;					/* Begin sector offset. */
	int	esn;					/* End sector number. */
	int	eso;					/* End sector offset. */
	char *nda;					/* New destination address. */
	char *fdf;					/* Pointer to first dead file in TFS. */
};

#define DEFRAGHDRSIZ	sizeof(struct defraghdr)

/* States used during defragmentation: */
#define	SECTOR_DEFRAG_INACTIVE		0xffffffff
#define BUILDING_HEADER_TABLE		0xfffffffe
#define HEADER_TABLE_READY			0xfffffffc
#define ERASING_DEAD_SECTOR			0xfffffff8
#define COPY_HDRS_TO_SPARE			0xfffffff0
#define HDRS_IN_SPARE				0xffffffe0
#define LASTSECTOR_IN_SPARE			0xffffffc0
#define SECTOR_COPIED_TO_SPARE		0xffffff80
#define SECTOR_UPDATE_STARTED		0xffffff00
#define SECTOR_UPDATE_COMPLETE		0xfffffe00
#define SECTOR_DEFRAG_COMPLETE		0xfffffc00
#define ERASING_LAST_SECTOR			0xfffff800
#define TOTAL_DEFRAG_COMPLETE		0xfffff000

/* struct tfsdat:
	Used by TFS to keep track of an opened file.
*/
struct tfsdat {
	long	offset;				/* Current offset into file. */
	long	hwp;				/* High water point for modified file. */
	unsigned char	*base;		/* Base address of file. */
	unsigned char	*wptr;		/* Current write pointer. */
	long	flagmode;			/* Flags & mode file was opened with. */
	struct	tfshdr hdr;			/* File structure. */
};

/* struct tfsdfg, tfsflg & tfserr:
	Structures provide an easy means of translation between values and
	strings that explain those values.
*/
struct tfsflg {
	long	flag;
	char	sdesc;
	char	*ldesc;
	long	mask;
};

struct tfserr {
	long	err;
	char	*msg;
};

struct tfsdfg {
	long	state;
	char	*msg;
};

struct tfsinfo {
	int	liveftot;		/* Number of live files. */
	int	livedata;		/* Space used by living file data. */
	int	liveovrhd;		/* Space used by living file overhead. */
	int	deadftot;		/* Number of dead files. */
	int	deaddata;		/* Space used by dead file data. */
	int deadovrhd;		/* Space used by dead file overhead. */
	int	pso;			/* Per-sector (not per file) TFS overhead. */
	int	sos;			/* Size of spare sector(s). */
	int memtot;			/* Total tfs memory space in device(s). */
	int memfree;		/* Memory space available for new file data. */
	int memused;		/* Total memory space used by files & overhead. */
	int memfordata;		/* Total memory available for new file data. */
};


/* TFS error returns. */
#define TFS_OKAY			0
#define TFSERR_NOFILE		-1
#define TFSERR_NOSLOT		-2
#define TFSERR_EOF			-3
#define TFSERR_BADARG		-4
#define TFSERR_NOTEXEC		-5
#define TFSERR_BADCRC		-6
#define TFSERR_FILEEXISTS	-7
#define TFSERR_FLASHFAILURE	-8
#define TFSERR_WRITEMAX		-9
#define TFSERR_RDONLY		-10
#define TFSERR_BADFD		-11
#define TFSERR_BADHDR		-12
#define TFSERR_CORRUPT		-13
#define TFSERR_MEMFAIL		-14
#define TFSERR_NOTIPMOD		-16
#define TFSERR_MUTEXFAILURE	-17
#define TFSERR_FLASHFULL	-18
#define TFSERR_USERDENIED	-19
#define TFSERR_NAMETOOBIG	-20
#define TFSERR_FILEINUSE	-21
#define TFSERR_SCRIPTINSUB	-22
#define TFSERR_NOTAVAILABLE	-23
#define TFSERR_BADFLAG		-24

/* TFS seek options. */
#define TFS_BEGIN		1
#define TFS_CURRENT		2
#define TFS_END			3

/* The function tfsrunrc() will search through the current file set and */
/* if the file defined by TFS_RCFILE exists, it will be executed. */
/* If this file exists, it will NOT be run by tfsrunboot(). */
#define TFS_RCFILE		"monrc"

/* Macros: */
#define TFS_DELETED(fp)		(!(fp->flags & TFS_ACTIVE))
#define TFS_FILEEXISTS(fp)	(fp->flags & TFS_ACTIVE)
#define TFS_ISCPRS(fp)		(fp->flags & TFS_CPRS)
#define TFS_ISEXEC(fp)		(fp->flags & TFS_EXEC)
#define TFS_ISBOOT(fp)		(fp->flags & TFS_BRUN)
#define TFS_STALE(fp) 		(!(fp->flags & TFS_NSTALE))
#define TFS_FLAGS(fp)		(fp->flags)
#define TFS_NAME(fp)		(fp->name)
#define TFS_SIZE(fp)		(fp->filsize)
#define TFS_TIME(fp)		(fp->modtime)
#define TFS_INFO(fp)		(fp->info)
#define TFS_NEXT(fp)		(fp->next)
#define TFS_CRC(fp)			(fp->filcrc)
#define TFS_ENTRY(fp)		(fp->entry)
#define TFS_BASE(fp)		((char *)fp+fp->hdrsize)

typedef struct tfshdr TFILE;
typedef struct tfsinfo TINFO;

extern	void gototag(char *), gosubtag(char *), gosubret(char *);
extern	void exitscript(char *);
extern	int tfsrunboot(void);
extern	void tfsstartup(void);
extern	void tfslog(int,char *);
extern	int tfsLogCmd(int,char **,int);
extern	char *(*tfsGetAtime)(long,char *,int);
extern	long (*tfsGetLtime)(void);
extern	void (*tfsDocommand)(char *,int);
extern	int _tfsunlink(char *);
extern	int showTfsError(int,char *);
extern	void tfsFacilityUnavailable(char *);
extern	struct tfsflg tfsflgtbl[];
extern	TDEV tfsDeviceTbl[];
extern	TFILE **tfsAlist;
extern	int	ScriptExitFlag;
extern	long tfsTrace;
extern	struct tfsdat tfsSlots[];
extern	TDEV *gettfsdev_fromprefix(char *,int);
extern	int _tfsinit(TDEV *);
extern	void tfsclear(TDEV *);
extern	int	tfscheck(TDEV *,int);
extern	int tfsclean(int,unsigned long *,struct defraghdr *,int,TDEV *,int,int);
extern	int tfsautoclean(int,unsigned long *,struct defraghdr *,int,TDEV *,int,int);
extern	int	tfsfixup(int,int);
extern	int tfsmemuse(TDEV *,TINFO *,int);
extern	char *tfsflagsbtoa(long,char *);
extern	int tfsreorder(void);
extern	TFILE *nextfp(TFILE *,TDEV *);
extern	int validtfshdr(TFILE *);
extern	int tfsloadebin(TFILE *,int,long *,int);
extern	int tfsmemset(unsigned char *,unsigned char,int,int,int);
extern	int tfsmemcpy(unsigned char *,unsigned char *,int,int,int);
extern	int tfsflasheraseall(TDEV *);
extern	int tfsflashwrite(unsigned long *,unsigned long *,long);
extern	int tfsflasherased(TDEV *,int);
extern	int tfsflasherase(int);
extern	int tfsscript(TFILE *,int);
extern	char *tfserrmsg(int);
extern	long tfstell(int);

/* Functions accessible to application through jmptbl: */
extern	int tfsinit(void);
extern	int tfsadd(char *,char *,char *,unsigned char *,int);
extern	int tfsunlink(char *);
extern	int tfsrun(char **,int);
extern	TFILE *tfsnext(TFILE *);
extern	TFILE *tfsstat(char *name);
extern	int tfsfstat(char *name,TFILE *);
extern	int tfsread(int,char *,int);
extern	int tfseof(int);
extern	int tfstruncate(int,long);
extern	int tfswrite(int, char *, int);
extern	int tfsopen(char *,long,char *);
extern	int tfsclose(int, char *);
extern	int tfsseek(int, int, int);
extern	int tfsgetline(int,char *,int);
extern	int tfsipmod(char *,char *,int,int);
extern	long tfsctrl(int,long,long);
#endif

⌨️ 快捷键说明

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