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

📄 etc.h

📁 T-kernel 的extension源代码
💻 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 + -