mirror of
https://github.com/DS-Homebrew/flashcard-archive.git
synced 2024-11-30 05:24:15 +01:00
117 lines
2.9 KiB
C
117 lines
2.9 KiB
C
|
|
||
|
#ifndef extlink_filestruct_h
|
||
|
#define extlink_filestruct_h
|
||
|
|
||
|
// extlink.dat structure
|
||
|
|
||
|
typedef u16 UnicodeChar;
|
||
|
|
||
|
#define ExtLinkBody_MaxLength (256)
|
||
|
|
||
|
#define ExtLinkBody_ID (0x30545845) // EXT0
|
||
|
|
||
|
typedef struct {
|
||
|
u32 ID,dummy1,dummy2,dummy3; // dummy is ZERO.
|
||
|
char DataFullPathFilenameAlias[ExtLinkBody_MaxLength];
|
||
|
char DataPathAlias[ExtLinkBody_MaxLength];
|
||
|
char DataFilenameAlias[ExtLinkBody_MaxLength];
|
||
|
char NDSFullPathFilenameAlias[ExtLinkBody_MaxLength];
|
||
|
char NDSPathAlias[ExtLinkBody_MaxLength];
|
||
|
char NDSFilenameAlias[ExtLinkBody_MaxLength];
|
||
|
UnicodeChar DataFullPathFilenameUnicode[ExtLinkBody_MaxLength];
|
||
|
UnicodeChar DataPathUnicode[ExtLinkBody_MaxLength];
|
||
|
UnicodeChar DataFilenameUnicode[ExtLinkBody_MaxLength];
|
||
|
UnicodeChar NDSFullPathFilenameUnicode[ExtLinkBody_MaxLength];
|
||
|
UnicodeChar NDSPathUnicode[ExtLinkBody_MaxLength];
|
||
|
UnicodeChar NDSFilenameUnicode[ExtLinkBody_MaxLength];
|
||
|
} TExtLinkBody;
|
||
|
|
||
|
|
||
|
static bool GetFileBody_From_MoonShell2_ExtLink(const char **res_pFullPathFilenameAlias,void **res_pfilebuf,u32 *res_filesize)
|
||
|
{
|
||
|
*res_pFullPathFilenameAlias=NULL;
|
||
|
*res_pfilebuf=NULL;
|
||
|
*res_filesize=0;
|
||
|
|
||
|
/*
|
||
|
consolePrintf("Start disk driver.\n");
|
||
|
if(FAT_InitFiles()==false){
|
||
|
consolePrintf("DLDI init error.\n");
|
||
|
return(false);
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
static char FullAlias[ExtLinkBody_MaxLength];
|
||
|
|
||
|
{
|
||
|
const char *pfn="/moonshl2/extlink.dat"; // This full path file name is fixation. It is never moved.
|
||
|
|
||
|
FILE *pf=FAT_fopen(pfn,"r");
|
||
|
if(pf==NULL){
|
||
|
consolePrintf("Extend link data file not found. [%s]\n",pfn);
|
||
|
return(false);
|
||
|
}
|
||
|
|
||
|
u32 ID,IDSize;
|
||
|
IDSize=FAT_fread(&ID,1,4,pf);
|
||
|
|
||
|
if((IDSize==0)||(ID==0)){
|
||
|
consolePrintf("Please call this application from MoonShell2 by way of the extend link. [%s]\n",pfn);
|
||
|
FAT_fclose(pf); pf=NULL;
|
||
|
return(false);
|
||
|
}
|
||
|
if(ExtLinkBody_ID!=ID){
|
||
|
consolePrintf("Extend link ID error. (0x%08x!=0x%08x)\n",ExtLinkBody_ID,ID);
|
||
|
FAT_fclose(pf); pf=NULL;
|
||
|
return(false);
|
||
|
}
|
||
|
|
||
|
u32 Dummy[3];
|
||
|
FAT_fread(Dummy,1,4*3,pf);
|
||
|
|
||
|
FAT_fread(FullAlias,1,ExtLinkBody_MaxLength,pf);
|
||
|
|
||
|
FAT_fclose(pf); pf=NULL;
|
||
|
}
|
||
|
|
||
|
u8 *pfilebuf=NULL;
|
||
|
u32 filesize=0;
|
||
|
|
||
|
{
|
||
|
const char *pfn=FullAlias;
|
||
|
|
||
|
FILE *pf=FAT_fopen(pfn,"r");
|
||
|
if(pf==NULL){
|
||
|
consolePrintf("File not found. [%s]\n",pfn);
|
||
|
return(false);
|
||
|
}
|
||
|
|
||
|
FAT_fseek(pf,0,SEEK_END);
|
||
|
filesize=FAT_ftell(pf);
|
||
|
FAT_fseek(pf,0,SEEK_SET);
|
||
|
|
||
|
pfilebuf=malloc(filesize);
|
||
|
if(pfilebuf==NULL){
|
||
|
consolePrintf("Memory overflow. [%s] %dbyte.\n",pfn,filesize);
|
||
|
FAT_fclose(pf); pf=NULL;
|
||
|
return(false);
|
||
|
}
|
||
|
|
||
|
if(FAT_fread(pfilebuf,1,filesize,pf)!=filesize){
|
||
|
consolePrintf("File read error. [%s] %dbyte.\n",pfn,filesize);
|
||
|
FAT_fclose(pf); pf=NULL;
|
||
|
return(false);
|
||
|
}
|
||
|
|
||
|
FAT_fclose(pf); pf=NULL;
|
||
|
}
|
||
|
|
||
|
*res_pFullPathFilenameAlias=FullAlias;
|
||
|
*res_pfilebuf=pfilebuf;
|
||
|
*res_filesize=filesize;
|
||
|
|
||
|
return(true);
|
||
|
}
|
||
|
|
||
|
#endif
|