📄 etc.h
字号:
/* *---------------------------------------------------------------------- * T-Kernel / Standard Extension * * Copyright (C) 2006 by Ken Sakamura. All rights reserved. * T-Kernel / Standard Extension is distributed * under the T-License for T-Kernel / Standard Extension. *---------------------------------------------------------------------- * * Version: 1.00.00 * Released by T-Engine Forum(http://www.t-engine.org) at 2006/8/11. * *---------------------------------------------------------------------- *//* * etc.h (file) * * File management * Various functions */#ifndef _FM_ETC_H_#define _FM_ETC_H_#include "fsinfo.h"/* === Process =========================================================== */#if USE_PROCESS_MANAGER# define GET_PINFO(tid) GetPinfo(tid)#else# define GET_PINFO(tid) GetDefaultPinfo(tid)#endif/* === Data transfer with application tasks =============================== */#define fmGetAplStruct(to,from) fmGetAplData(&(to), &(from), sizeof(to))#define fmSetAplStruct(to,from) fmSetAplData(&(to), &(from), sizeof(to))IMPORT ER fmGetAplData( VP to, VP from, W len );IMPORT ER fmSetAplData( VP to, VP from, W len );IMPORT ER fmGetAplStr( TC *to, TC *from, W max );/* === Analyze the path name. ============================================== *//* * Type of the path name token */typedef enum { PT_CON = 1, /* Connection name */ PT_OWN = 2, /* Work file name */ PT_NAM = 3 /* File name */} PTYPE;IMPORT PTYPE fmGetPathToken( TC **pathp, PathToken name );IMPORT W fmGetFileName( PathToken name );IMPORT ER fmCheckFileName( TC *name, W max );IMPORT ER fmCheckPathName( PathName name );/* === File name ========================================================= */IMPORT DfShortName fmShortFileName( FileName name );IMPORT ER fmpGetFileName( FID fid, FileName name, FsInfo *fsinfo );/* === Endian conversion =================================================== */IMPORT W fmConvEndianTC( TC *to, TC *from, W max, BOOL bigEndian );IMPORT void fmConvEndianHs( UH *to, UH *from, W len, BOOL bigEndian );Inline UW fmConvEndianW( UW x, BOOL bigEndian ){ return ( bigEndian == BIGENDIAN )? x: swapW(x);}Inline UH fmConvEndianH( UH x, BOOL bigEndian ){ return ( bigEndian == BIGENDIAN )? x: swapH(x);}Inline UW fmConvEndian3B( UW x, BOOL bigEndian ){ return ( bigEndian == BIGENDIAN )? x: swap3B(x);}Inline LogBlk fmConvEndianLogBlk( LogBlk lblk, BOOL bigEndian ){ LogBlk lb; lb.cnt = lblk.cnt; lb.adr = fmConvEndian3B(lblk.adr, bigEndian); return lb;}Inline DfFileID fmConvEndianFileID( DfFileID fidt, BOOL bigEndian ){ DfFileID f; f.w = fmConvEndianW(fidt.w, bigEndian); return f;}#define fmpConvEndianTC(to, from, max, fsinfo) \ fmConvEndianTC(to, from, max, (fsinfo)->bigEndian)#define fmpConvEndianHs(to, from, len, fsinfo) \ fmConvEndianHs(to, from, len, (fsinfo)->bigEndian)#define fmpConvEndianW(x, fsinfo) \ fmConvEndianW(x, (fsinfo)->bigEndian)#define fmpConvEndianH(x, fsinfo) \ fmConvEndianH(x, (fsinfo)->bigEndian)#define fmpConvEndian3B(x, fsinfo) \ fmConvEndian3B(x, (fsinfo)->bigEndian)#define fmpConvEndianLogBlk(lblk, fsinfo) \ fmConvEndianLogBlk(lblk, (fsinfo)->bigEndian)#define fmpConvEndianFileID(fidt, fsinfo) \ fmConvEndianFileID(fidt, (fsinfo)->bigEndian)/* === Time =============================================================== */IMPORT STIME fmGetTime( void );IMPORT ER fmpSetTimeStamp( OFCB *ofcb, UW mode );IMPORT ER fmpSetTimeStampFh( DfFileHeader *fh, UW mode, FsInfo *fsinfo );/* === Logical block list ================================================= */#define nLBlks 30typedef struct LBList { QUEUE q; LogBlk lblk[nLBlks];} LBList;typedef struct LBlks { W nlblk; /* The number of registrations of LogBlk */ QUEUE list; /* For connection of LBList */ LogBlk *next; /* Next writing position */ LBList *read; /* LBList during reading */} LBlks;#define fmpNLBlks(lb) ( (lb)->nlblk )IMPORT ER fmNewLBlks( LBlks *lb );IMPORT void fmDeleteLBlks( LBlks *lb );IMPORT ER fmAddLBlks( LBlks *lb, LogBlk lblk );IMPORT BOOL fmNextLBlks( LBlks *lb, LogBlk **lblk );/* === Index record address ======================================= */IMPORT void fmpExpandIdxAdr( IdxAdr *idxadr, DskAdr newroot );/* === File name retrieval=================================================== */#define N_SFN_MAPINFO 4typedef struct SFN { struct sfn_mapinfo { ID mid; /* Map ID (0 = Not mapped yet) */ DfShortName *mapbase; /* File abbreviated name table */ FID topfid; /* First file ID during mapping */ UH nfid; /* The number of valid file IDs */ } mi[N_SFN_MAPINFO]; FsInfo *fsinfo; /* Target file system */ TC *fname; /* File name to be retrieved */ DfShortName sname; /* File abbreviated name to be retrieved */ ER error; /* Error recording */ UB idx; /* mi[idx] was mapped lastly. */ DfShortName dummy; /* For dummy address at mapping error */} SFN;IMPORT ER fmpOpenSFN( SFN *sfn, FileName fname, FsInfo *fsinfo );IMPORT ER fmpCloseSFN( SFN *sfn );IMPORT ER fmpMatchSFN( SFN *sfn, FID fid, FileName fname );/* === LINK generation ======================================================= *//* * Return the LINK indicating the root file. */Inline LINK RootFile( FsInfo *fs ){ LINK lnk = NIL; if ( fs != NULL ) { tc_strncpy(lnk.fs_name, fs->fsName, FsNameLen); } return lnk;}/* * Generate the LINK indicating the file of fid. */Inline void MakeLINK( LINK *lnk, FID fid, FsInfo *fsinfo ){ tc_strncpy(lnk->fs_name, fsinfo->fsName, FsNameLen); lnk->f_id = fid; lnk->atr1 = 0; lnk->atr2 = 0; lnk->atr3 = 0; lnk->atr4 = 0; lnk->atr5 = 0;}IMPORT void fmpLIdxToLINK( LINK *lnk, DfLinkIndex *lidx, FsInfo *fsinfo );#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -