📄 processbib.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 + -