|
|
/****************************************************************************
|
|
|
* FileName : DSFileSystem.h *
|
|
|
* Programmer : AAAwen *
|
|
|
* Writen at : 2005.05.10 *
|
|
|
* Version : 1.0 *
|
|
|
* Description: define filesystem of flash *
|
|
|
* Last modify: 2005.05.10 *
|
|
|
****************************************************************************/
|
|
|
|
|
|
#ifndef __DSFILESYSTEM_H_ICL__
|
|
|
#define __DSFILESYSTEM_H_ICL__
|
|
|
#include "basetype.h"
|
|
|
#include <stdio.h>
|
|
|
|
|
|
//typedef char* HDSFILE;
|
|
|
/*!
|
|
|
清除数据流已经被读取的字节数
|
|
|
*/
|
|
|
#define SEEK_CLR_RCNT SEEK_END+10
|
|
|
#define SEEK_CUR_EX SEEK_END+11
|
|
|
|
|
|
// 修改DS中的配置文件系统
|
|
|
#define DS_FILESYSTEM_ADDR 0x3b0000
|
|
|
#define DS_FILESYSTEM_LEN (0x50000-4)
|
|
|
|
|
|
#define DS_SECTION_OUT -1 // 段名称长度越限
|
|
|
#define DS_SECTION_NOEXIST 0 // 段名称不存在
|
|
|
#define DS_SECTION_EXIST 1 // 段名称存在
|
|
|
#define DS_SECTION_SEARCH 2 // 段名称查找
|
|
|
|
|
|
typedef struct tsgDSFILE
|
|
|
{
|
|
|
/*!
|
|
|
文件内容长度
|
|
|
*/
|
|
|
long m_lContentLen;
|
|
|
/*!
|
|
|
文件读取的当前位置
|
|
|
*/
|
|
|
long m_lOffset;
|
|
|
/*!
|
|
|
文件读取的字节数量
|
|
|
*/
|
|
|
long m_lReadCount;
|
|
|
|
|
|
// 增加优化配置文件读取项
|
|
|
/*!
|
|
|
段名称是否存在
|
|
|
*/
|
|
|
long m_lSectionOk;
|
|
|
/*!
|
|
|
段名称行数
|
|
|
*/
|
|
|
long m_lSectionLines;
|
|
|
/*!
|
|
|
段名称行数增加标识
|
|
|
*/
|
|
|
long m_lSectionLinesAddFlag;
|
|
|
/*!
|
|
|
段在文件中的偏移位置
|
|
|
*/
|
|
|
long m_lSectionOffset;
|
|
|
/*!
|
|
|
段名称
|
|
|
*/
|
|
|
char m_szSection[64];
|
|
|
/*!
|
|
|
文件正文
|
|
|
*/
|
|
|
char *m_pContent;
|
|
|
}DSFILE, *HDSFILE;
|
|
|
|
|
|
#ifdef OS_WINDOWS
|
|
|
#pragma pack (push,1)
|
|
|
typedef struct tagDSFILESYSTEMHEAD
|
|
|
{
|
|
|
/*!
|
|
|
文件系统中文件数量
|
|
|
*/
|
|
|
int m_iFiles;
|
|
|
/*!
|
|
|
文件系统中首文件偏移
|
|
|
\note
|
|
|
第一个文件=this+m_iOffset
|
|
|
*/
|
|
|
int m_iOffset;
|
|
|
}DSFILESYSTEMHEAD;
|
|
|
|
|
|
typedef struct tagDSFILEHEAD
|
|
|
{
|
|
|
/*!
|
|
|
文件长度(文件内容+文件头)
|
|
|
*/
|
|
|
int m_iFileSize;
|
|
|
/*!
|
|
|
文件内容偏移
|
|
|
*/
|
|
|
int m_iOffset;
|
|
|
/*!
|
|
|
文件名长度
|
|
|
*/
|
|
|
int m_iFileNameLen;
|
|
|
/*!
|
|
|
文件名称
|
|
|
*/
|
|
|
char m_FileName[1];
|
|
|
}DSFILEHEAD, *pDSFILEHEAD;
|
|
|
|
|
|
typedef struct tagFILECONTENT
|
|
|
{
|
|
|
long m_lContentLen;
|
|
|
long m_lOffset;
|
|
|
char m_pContent[1];
|
|
|
}FILECONTENT, *pFILECONTENT;
|
|
|
#pragma pack (pop)
|
|
|
#else
|
|
|
typedef struct tagDSFILESYSTEMHEAD
|
|
|
{
|
|
|
/*!
|
|
|
文件系统中文件数量
|
|
|
*/
|
|
|
int m_iFiles ;
|
|
|
/*!
|
|
|
文件系统中首文件偏移
|
|
|
\note
|
|
|
第一个文件=this+m_iOffset
|
|
|
*/
|
|
|
int m_iOffset ;
|
|
|
}DSFILESYSTEMHEAD;
|
|
|
|
|
|
typedef struct tagDSFILEHEAD
|
|
|
{
|
|
|
/*!
|
|
|
文件长度(文件内容+文件头)
|
|
|
*/
|
|
|
int m_iFileSize ;
|
|
|
/*!
|
|
|
文件内容偏移
|
|
|
*/
|
|
|
int m_iOffset ;
|
|
|
/*!
|
|
|
文件名长度
|
|
|
*/
|
|
|
int m_iFileNameLen ;
|
|
|
/*!
|
|
|
文件名称
|
|
|
*/
|
|
|
char m_FileName[1] ;
|
|
|
}DSFILEHEAD, *pDSFILEHEAD;
|
|
|
|
|
|
typedef struct tagFILECONTENT
|
|
|
{
|
|
|
long m_lContentLen ;
|
|
|
long m_lOffset ;
|
|
|
char m_pContent[1] ;
|
|
|
}FILECONTENT, *pFILECONTENT;
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
\brief 将指定文件载入目的内存
|
|
|
\param szFileName -- 要载入的文件名
|
|
|
\param ppDestMem -- 目的内存指针的指针
|
|
|
\retval -- 返回分配内存长度
|
|
|
\note
|
|
|
如果内存分配失败或者文件为空返回0\n
|
|
|
pDestMem必须在使用后有调用者释放
|
|
|
*/
|
|
|
long LoadFile(const char *szFileName, char **ppDestMem);
|
|
|
|
|
|
/*!
|
|
|
\brief 将指定文件载入目的内存
|
|
|
\param szFileName -- 要载入的文件名
|
|
|
\param ppDestMem -- 目的内存指针的指针
|
|
|
\param pFSAddr -- 文件系统首地址指针
|
|
|
\retval -- 返回分配内存长度
|
|
|
\note
|
|
|
如果内存分配失败或者文件为空返回0\n
|
|
|
pDestMem必须在使用后有调用者释放
|
|
|
*/
|
|
|
long LoadFileInDSFS(const char *szFileName, char **ppDestMem, BYTE *pFSAddr);
|
|
|
|
|
|
/*!
|
|
|
\brief 设置数据流偏移量
|
|
|
\param stream -- 数据流指针
|
|
|
\param offset -- 与origin的偏移值
|
|
|
\param origin -- 初始位置
|
|
|
\retval -- 成功返回0
|
|
|
*/
|
|
|
DSLIB_API int DS_Seek(FILECONTENT *stream, long offset, int origin);
|
|
|
DSLIB_API char *DS_Gets(char *pDest, int iDestMax, FILECONTENT *stream);
|
|
|
|
|
|
/*!
|
|
|
\brief 获取文件长度
|
|
|
\param fp -- 已经打开的文件指针
|
|
|
\retval -- 返回文件长度
|
|
|
*/
|
|
|
DSLIB_API int GetFileLen(FILE *fp);
|
|
|
|
|
|
/*!
|
|
|
\brief 将指定文件载入目的内存
|
|
|
\param szFileName -- 要载入的文件名
|
|
|
\retval -- 返回文件句柄
|
|
|
\note
|
|
|
如果内存分配失败或者文件为空返回0\n
|
|
|
pDestMem必须在使用后有调用者释放
|
|
|
*/
|
|
|
DSLIB_API HDSFILE DSOpenFile(const char *szFileName);
|
|
|
DSLIB_API HDSFILE DSOpenFileEx(const char *szFileName);
|
|
|
/*!
|
|
|
\brief 将指定文件载入目的内存
|
|
|
\param szRootDir -- 文件系统的根路径
|
|
|
\param szFileName -- 要载入的文件名
|
|
|
\retval -- 返回文件句柄
|
|
|
\note
|
|
|
如果内存分配失败或者文件为空返回0\n
|
|
|
pDestMem必须在使用后有调用者释放
|
|
|
该函数仅适合于pc系统,用来浏览文件系统信息
|
|
|
在嵌入式系统中,参数1无意义
|
|
|
|
|
|
*/
|
|
|
DSLIB_API HDSFILE DSOpenFileEx3(const char *szRootDir, const char *szFileName);
|
|
|
DSLIB_API HDSFILE DSOpenFileEx2(const char *szRootDir, const char *szFSName, const char *szFileName);
|
|
|
|
|
|
/*!
|
|
|
\brief 关闭打开的文件
|
|
|
\param hFile -- 打开的文件句柄
|
|
|
\note
|
|
|
如果内存分配失败或者文件为空返回0\n
|
|
|
pDestMem必须在使用后有调用者释放
|
|
|
*/
|
|
|
DSLIB_API BOOL DSCloseFile(HDSFILE hFile);
|
|
|
|
|
|
/*!
|
|
|
\brief 从数据流中获取数据
|
|
|
\param buffer -- 获取数据缓冲区指针
|
|
|
\param size -- 获取数据单元的长度
|
|
|
\param count -- 获取数据单元的数量
|
|
|
\param hFile -- 数据流指针
|
|
|
\retval -- 成功返回实际的读取数据单元数量
|
|
|
*/
|
|
|
DSLIB_API size_t DSfread(void *buffer, size_t size, size_t count, HDSFILE hFile);
|
|
|
/*!
|
|
|
\brief 获取数据流一个字符串(以回车和换行结束)
|
|
|
\param string -- 获取字符串的缓冲区指针
|
|
|
\param origin -- 缓冲区长度
|
|
|
\param hFile -- 数据流指针
|
|
|
\retval -- 成功返回读取的字符串指针
|
|
|
*/
|
|
|
DSLIB_API char *DSfgets(char *string, int iMaxSize, HDSFILE hFile);
|
|
|
/*!
|
|
|
\brief 获取数据流一个字符串(以回车和换行结束)
|
|
|
\param string -- 获取字符串的缓冲区指针
|
|
|
\param origin -- 缓冲区长度
|
|
|
\param hFile -- 数据流指针
|
|
|
\param ioffset -- 当前位置读取偏移
|
|
|
\retval -- 成功返回读取的字符串指针
|
|
|
\note
|
|
|
读取指针不移动,需要用户干预
|
|
|
*/
|
|
|
DSLIB_API char *DSfgetsEx(char *string, int iMaxSize, HDSFILE hFile);
|
|
|
/*!
|
|
|
\brief 读取文件已经读取的数据量
|
|
|
\param hFile -- 数据流指针
|
|
|
\retval -- 实际读取的数据量
|
|
|
*/
|
|
|
DSLIB_API int DSfgetreadcount(HDSFILE hFile);
|
|
|
/*!
|
|
|
\brief 设置数据流偏移量
|
|
|
\param hFile -- 数据流指针
|
|
|
\param offset -- 与origin的偏移值
|
|
|
\param origin -- 初始位置
|
|
|
\retval -- 成功返回0
|
|
|
*/
|
|
|
DSLIB_API int DSfseek(HDSFILE hFile, long offset, int origin);
|
|
|
/*!
|
|
|
\brief 是否到数据流底部
|
|
|
\param hFile -- 数据流指针
|
|
|
\retval -- 成功返回0
|
|
|
*/
|
|
|
DSLIB_API int DSfeof(HDSFILE hFile);
|
|
|
/*!
|
|
|
\brief 是否到数据流底部
|
|
|
\param hFile -- 数据流指针
|
|
|
\retval -- 成功返回0
|
|
|
*/
|
|
|
DSLIB_API int DSfeofEx(HDSFILE hFile);
|
|
|
/*!
|
|
|
\brief 是否数据流全部浏览完毕
|
|
|
\param hFile -- 数据流指针
|
|
|
\retval -- 成功返回0,否则为浏览过的字节数
|
|
|
*/
|
|
|
DSLIB_API int DSfeob(HDSFILE hFile);
|
|
|
/*!
|
|
|
\brief 数据流的偏移量
|
|
|
\param hFile -- 数据流指针
|
|
|
\retval -- 返回偏移量
|
|
|
*/
|
|
|
DSLIB_API int DSftell(HDSFILE hFile);
|
|
|
DSLIB_API int DSHaveSection(char *pSection, HDSFILE hFile);
|
|
|
DSLIB_API int DSSaveSectionOffset(HDSFILE hFile);
|
|
|
DSLIB_API int DSRestoreSectionOffset(HDSFILE hFile);
|
|
|
DSLIB_API int DSAddSectionLines(int iLines, HDSFILE hFile);
|
|
|
DSLIB_API int DSSubSectionLines(int iLines, HDSFILE hFile);
|
|
|
DSLIB_API int DSSetSectionLinesAddFlag(int iFlag, HDSFILE hFile);
|
|
|
DSLIB_API int DSSectionisOver(int iReadLines, HDSFILE hFile);
|
|
|
|
|
|
/*!
|
|
|
\brief 合并所有文件
|
|
|
\param szListFileName -- 要合并的文件列表文件名称
|
|
|
\param szDestFileName -- 合并的目的文件
|
|
|
\param szDestDir -- 文件路径
|
|
|
\retval -- 成功返回TRUE
|
|
|
\note
|
|
|
合并后的文件必须是偶字节对齐
|
|
|
*/
|
|
|
DSLIB_API BOOL FsCombinAllFile(const char *szListFileName, const char *szDestFileName, const char *szDestDir);
|
|
|
|
|
|
/*!
|
|
|
\brief 文件分离
|
|
|
\param szCombinFile -- 合并的文件名称
|
|
|
\param szDestDir -- 要分离的文件目录
|
|
|
\retval -- 成功返回TRUE
|
|
|
*/
|
|
|
DSLIB_API BOOL FsSplitAllFile(const char *szCombinFile, const char *szDestDir);
|
|
|
|
|
|
//测试用
|
|
|
/*!
|
|
|
\brief 读取合并的文件(文件系统)
|
|
|
\param szCombinFile -- 合并的文件名称
|
|
|
\retval -- 成功返回TRUE
|
|
|
*/
|
|
|
DSLIB_API BYTE *FsReadCombinFile(const char *szCombinFile);
|
|
|
DSLIB_API BYTE *FsReadCombinFileEx(const char *szCombinFile);
|
|
|
|
|
|
/*!
|
|
|
\brief 装载文件系统
|
|
|
\param szFileSystem -- 文件系统名称
|
|
|
\param ppDestBuf -- 文件系统的目的缓冲区
|
|
|
\retval -- 成功返回TRUE
|
|
|
*/
|
|
|
DSLIB_API BOOL FsLoadFileSystem(const char *szFileSystem, BYTE **ppDestBuf);
|
|
|
|
|
|
/*!
|
|
|
\brief 卸载文件系统
|
|
|
\param ppDestBuf -- 文件系统的目的缓冲区
|
|
|
\retval -- 成功返回TRUE
|
|
|
*/
|
|
|
DSLIB_API BOOL FsUnLoadFileSystem(BYTE **ppDestBuf);
|
|
|
|
|
|
/*!
|
|
|
\brief 显示指定文件系统路径的文件名称
|
|
|
\param szPath -- 要显示的文件系统路径
|
|
|
\param szFileSystem -- 指定的文件系统
|
|
|
\retval -- 成功返回TRUE
|
|
|
*/
|
|
|
DSLIB_API BOOL FsDirFileName(const char *szPath, const char *szFileSystem);
|
|
|
|
|
|
DSLIB_API void FsDispHead(const char *szName, const char *szFileSystem);
|
|
|
|
|
|
BOOL FsNetToHost(BYTE *pFSBuf);
|
|
|
BOOL FsHostToNet(BYTE *pFSBuf);
|
|
|
|
|
|
void DispMemoryData(const BYTE *pu8Addr, int iLen, int iNumofLine);
|
|
|
#endif |