#define YCORG -1 //该设置使编译器生成头部为YCEXE结构的可执行文件
#include "ycio.cpp"
ycfsCLASS YCFS;
void main(void **pObj)
{
for(int ii=0; ii<sizeof fd/sizeof fd[0]; ii++)
fd[ii].len = strlen(fd[ii].file);
*pObj = &YCFS;
}
char yctty[sizeof<yctty.sys>] = <yctty.sys>;
char ycshell[sizeof<ycshell.exp>] = <ycshell.exp>;
char wina[sizeof<wina.js>] = <wina.js>;
char http_cpp[sizeof<http.cpp>] = <http.cpp>;
char pro0[sizeof<pro0.exp>] = <pro0.exp>;
char pro1[sizeof<pro1.exp>] = <pro1.exp>;
char pro2[sizeof<pro2.exp>] = <pro2.exp>;
char pi2_cpp[sizeof<pi2.cpp>] = <pi2.cpp>;
char pi2[sizeof<pi2.exp>] = <pi2.exp>;
char exp0[sizeof<exp0.exp>] = <exp0.exp>;
char drv[sizeof<drv.sys>] = <drv.sys>;
char dra[sizeof<dra.exp>] = <dra.exp>;
char drb[sizeof<drb.exp>] = <drb.exp>;
char ex0[sizeof<ex0.exp>] = <ex0.exp>;
struct
{
char *file;
int size;
char *buf;
int len;
} fd[] = {
{ "yctty.sys", sizeof yctty, yctty},
{ "ycshell.sys", sizeof ycshell, ycshell},
{ "wina.js", sizeof wina, wina},
{ "http.cpp", sizeof http_cpp, http_cpp},
{ "pro0.exe", sizeof pro0, pro0},
{ "pro1.exe", sizeof pro1, pro1},
{ "pro2.exe", sizeof pro2, pro2},
{ "pi2.cpp", sizeof pi2_cpp, pi2_cpp},
{ "pi2.exe", sizeof pi2, pi2},
{ "exp0.exe", sizeof exp0, exp0},
{ "drv.sys", sizeof drv, drv},
{ "dra.exe", sizeof dra, dra},
{ "drb.exe", sizeof drb, drb},
{ "ex0.exe", sizeof ex0, ex0},
};
char *ycfsCLASS::get_file_name(int pos,int &size)
{
if(pos<0 || pos>=sizeof fd/sizeof fd[0]) return nullptr;
size = fd[pos].size;
return fd[pos].file;
}
byte *ycfsCLASS::get_file_code(char *fptr,int flen,int *pSize)
{
if(!flen) flen = strlen(fptr);
for(int ii=0; ii<sizeof fd/sizeof fd[0]; ii++)
{
if(flen != fd[ii].len || memcmp(fd[ii].file,fptr,flen)) continue;
if(pSize) *pSize = fd[ii].size;
return (byte*)fd[ii].buf;
}
return nullptr;
}
C/C++代码文件: ycfs.cpp
真正的文件系统比较复杂,ycfs.cpp只是模拟读几个固定的文件。