flashcard-archive/R4iTT for 3DS/moonshl2/extlink/extlink_filestruct.h

117 lines
2.9 KiB
C
Raw Normal View History

2021-03-10 05:05:31 +01:00
#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