📄 tfs.h
字号:
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 + -