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

📄 processbib.h

📁 用Platform Builder定制Windows CE系统镜像时制作Multibin的工具
💻 H
字号:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
const char *move_filelists[]={
	"nk.exe",
	"coredll.dll",
	"filesys.exe",
	"fatfsd.dll",
	"diskcache.dll",
	"fatutil.dll",
	"binfs.dll",
	"fsdmgr.dll",
	"mspart.dll",
	"ceddk.dll",
	"smflash.dll",
	"boot.hv",
};
#define COUNTOF(array) sizeof(array)/sizeof(array[0])
class CxFile
{
public:
	CxFile(void) { };
	virtual ~CxFile() { };

	virtual bool	Close() = 0;
	virtual size_t	Read(void *buffer, size_t size, size_t count) = 0;
	virtual size_t	Write(const void *buffer, size_t size, size_t count) = 0;
	virtual bool	Seek(long offset, int origin) = 0;
	virtual long	Tell() = 0;
	virtual long	Size() = 0;
	virtual bool	Flush() = 0;
	virtual bool	Eof() = 0;
	virtual long	Error() = 0;
	virtual bool	PutC(unsigned char c)
		{
		// Default implementation
		size_t nWrote = Write(&c, 1, 1);
		return (bool)(nWrote == 1);
		}
	virtual long	GetC() = 0;
	virtual size_t	GetStr(char *str,size_t count) = 0;
};

class CxIOFile : public CxFile
	{
public:
	CxIOFile(FILE* fp = NULL)
	{
		m_fp = fp;
		m_bCloseFile = (bool)(fp==0);
	}

	~CxIOFile()
	{
		Close();
	}
//////////////////////////////////////////////////////////
	bool Open(const char *filename, const char *mode)
	{
		if (m_fp) return false;	// Can't re-open without closing first

		m_fp = fopen(filename, mode);
		if (!m_fp) return false;

		m_bCloseFile = true;
		printf("open file %s\r\n",filename);
		return true;
	}
//////////////////////////////////////////////////////////
	virtual bool Close()
	{
		int iErr = 0;
		if ( (m_fp) && (m_bCloseFile) ){ 
			iErr = fclose(m_fp);
			m_fp = NULL;
		}
		return (bool)(iErr==0);
	}
//////////////////////////////////////////////////////////
	virtual size_t	Read(void *buffer, size_t size, size_t count)
	{
		if (!m_fp) return 0;
		return fread(buffer, size, count, m_fp);
	}
//////////////////////////////////////////////////////////
	virtual size_t	Write(const void *buffer, size_t size, size_t count)
	{
		if (!m_fp) return 0;
		return fwrite(buffer, size, count, m_fp);
	}
//////////////////////////////////////////////////////////
	virtual bool Seek(long offset, int origin)
	{
		if (!m_fp) return false;
		return (bool)(fseek(m_fp, offset, origin) == 0);
	}
//////////////////////////////////////////////////////////
	virtual long Tell()
	{
		if (!m_fp) return 0;
		return ftell(m_fp);
	}
//////////////////////////////////////////////////////////
	virtual long	Size()
	{
		if (!m_fp) return -1;
		long pos,size;
		pos = ftell(m_fp);
		fseek(m_fp, 0, SEEK_END);
		size = ftell(m_fp);
		fseek(m_fp, pos,SEEK_SET);
		return size;
	}
//////////////////////////////////////////////////////////
	virtual bool	Flush()
	{
		if (!m_fp) return false;
		return (bool)(fflush(m_fp) == 0);
	}
//////////////////////////////////////////////////////////
	virtual bool	Eof()
	{
		if (!m_fp) return true;
		return (bool)(feof(m_fp) != 0);
	}
//////////////////////////////////////////////////////////
	virtual long	Error()
	{
		if (!m_fp) return -1;
		return ferror(m_fp);
	}
//////////////////////////////////////////////////////////
	virtual bool PutC(unsigned char c)
	{
		if (!m_fp) return false;
		return (bool)(fputc(c, m_fp) == c);
	}
//////////////////////////////////////////////////////////
	virtual long	GetC()
	{
		if (!m_fp) return EOF;
		return getc(m_fp);
	}
	virtual size_t	GetStr(char *str,size_t count)
	{
		if (!m_fp) return 0;
		if(fgets(str,count,m_fp)!=NULL);
		return strlen(str);
		return 0;
	}
	virtual size_t PutStr(const char *str)
	{
		if (!m_fp) return 0;
		fputs(str,m_fp);
		return strlen(str);
	}
	int parsestr(char *str,size_t count)
	{
		int not_space = 0;
		int i = 0,j,k;
		if(count == 0)
			return 0;
		if(str[0]==';')
			return 0;//skipped the comments.
		while(str[i]<=' ')
		{
			i++;
			if(i>=count)
			return 0;
		}
		if(str[i]==';')
			return 0;
		/*1--get file name*/
		j=i;
		while(str[i]>' ')//&&str[i]!='\n'&&str[i]!='\t')
		{
			i++;
			
		}
		if(i>=count)
			return 0;
		memset(file_name,0,sizeof(file_name));
		strncpy(file_name,&str[j],i-j);
		file_name[i-j]=0;
		for( k=0;k<COUNTOF(move_filelists);k++)
			if(strcmp(move_filelists[k],file_name)==0)
				break;
		if(k>=COUNTOF(move_filelists))
			return 0;
		/*2-- get path */
		/*skip spaces*/
		while(str[i]<=' ')
		{
			i++;
			if(i>=count)
			return 0;
		}
		j=i;
		while(str[i]>' ')
		{
			i++;
			if(i>=count)
			return 0;
		}
		if(i>=count)
			return 0;
		memset(path,0,sizeof(path));
		strncpy(path,&str[j],i-j);
		path[i-j]=0;
		/*3-- get memory region*/
		while(str[i]<=' ')
		{
			i++;
			if(i>=count)
			return 0;
		}
		j=i;
		while(str[i]>' ')
		{
			i++;
			if(i>=count)
			return 0;
		}
		if(i>=count)
			return 0;
		memset(memory,0,sizeof(memory));
		strncpy(memory,&str[j],i-j);
		memory[i-j]=0;
		/*3-- get attributes*/
		while(str[i]<=' ')
		{
			i++;
			if(i>=count)
			return 0;
		}
		j=i;
		while((str[i]!=' ')&&(str[i]!='\n'))
		{
			i++;
		}
//		if(i>=count)
//			return 0;
		memset(attributes,0,sizeof(attributes));
		strncpy(attributes,&str[j],i-j+1);
		attributes[i-j+1]=0;
		if(strcmp(memory,"NK")==0)
		{
			strcpy(memory,"XIPKERNEL");
		}
		sprintf(str,"   %-15s %-89s %-10s %s",file_name,path,memory,attributes);
		return 1;
	}
//////////////////////////////////////////////////////////
protected:
	FILE *m_fp;
	bool m_bCloseFile;
	char file_name[128];
	char path[128];
	char memory[32];
	char attributes[32];
	};

⌨️ 快捷键说明

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