Result enablethemecache(u32 type) { Result ret=0; u32 filesize = 0; printf("Reading SaveData.dat...\n"); ret = archive_getfilesize(HomeMenu_Extdata, "/SaveData.dat", &filesize); if(ret!=0) { printf("Failed to get filesize for extdata SaveData.dat: 0x%08x\n", (unsigned int)ret); return ret; } if(filesize > filebuffer_maxsize) { printf("Extdata SaveData.dat filesize is too large: 0x%08x\n", (unsigned int)filesize); return ret; } ret = archive_readfile(HomeMenu_Extdata, "/SaveData.dat", filebuffer, filesize); if(ret!=0) { printf("Failed to read file: 0x%08x\n", (unsigned int)ret); return ret; } if(ret==0) { if(filebuffer[0x141b]==0 && filebuffer[0x13b8]!=0 && filebuffer[0x13bc]==0 && filebuffer[0x13bd]==type) { ret = 0; printf("SaveData.dat is already set for using the theme cache with a regular theme.\n"); return ret; } } if(ret==0) { filebuffer[0x141b]=0;//Disable theme shuffle. memset(&filebuffer[0x13b8], 0, 8);//Clear the regular-theme structure. filebuffer[0x13bd]=type;//theme-type filebuffer[0x13b8] = 0xff;//theme-index printf("Writing updated SaveData.dat...\n"); ret = archive_writefile(HomeMenu_Extdata, "/SaveData.dat", filebuffer, filesize); if(ret!=0) { printf("Failed to write file: 0x%08x\n", (unsigned int)ret); } } return ret; }
Result archive_copyfile(Archive inarchive, Archive outarchive, char *inpath, char *outpath, u8* buffer, u32 size, u32 maxbufsize, char *display_filepath) { Result ret=0; u32 filesize=0; ret = archive_getfilesize(inarchive, inpath, &filesize); if (ret > 0) { printf("archive_getfilesize() ret=0x%08x, size=0x%08x\n", (unsigned int)ret, (unsigned int)filesize); gfxFlushBuffers(); gfxSwapBuffers(); } if(ret!=0)return ret; if(size==0 || size>filesize) { size = filesize; } if(size>maxbufsize) { printf("-----Size is too large.-----\n"); gfxFlushBuffers(); gfxSwapBuffers(); ret = -1; return ret; } /*printf("Reading %s...\n", display_filepath); gfxFlushBuffers(); gfxSwapBuffers();*/ ret = archive_readfile(inarchive, inpath, buffer, size); if(ret!=0) { printf("-----Failed to read %s (%d): 0x%08x-----\n", display_filepath, (unsigned int) size, (unsigned int)ret); gfxFlushBuffers(); gfxSwapBuffers(); return ret; } /*printf("Writing %s...\n", display_filepath); gfxFlushBuffers(); gfxSwapBuffers();*/ ret = archive_writefile(outarchive, outpath, buffer, size); if(ret!=0) { printf("-----Failed to write %s (%d): 0x%08x-----\n", display_filepath, (unsigned int) size, (unsigned int)ret); gfxFlushBuffers(); gfxSwapBuffers(); return ret; } return ret; }
Result disablethemecache() { Result ret=0; u32 filesize = 0; printf("Reading SaveData.dat...\n"); ret = archive_getfilesize(HomeMenu_Extdata, "/SaveData.dat", &filesize); if(ret!=0) { printf("Failed to get filesize for extdata SaveData.dat: 0x%08x\n", (unsigned int)ret); return ret; } if(filesize > filebuffer_maxsize) { printf("Extdata SaveData.dat filesize is too large: 0x%08x\n", (unsigned int)filesize); return ret; } ret = archive_readfile(HomeMenu_Extdata, "/SaveData.dat", filebuffer, filesize); if(ret!=0) { printf("Failed to read file: 0x%08x\n", (unsigned int)ret); return ret; } if(ret==0) { filebuffer[0x141b]=0;//Disable theme shuffle. memset(&filebuffer[0x13b8], 0, 8);//Clear the regular-theme structure. printf("Writing updated SaveData.dat...\n"); ret = archive_writefile(HomeMenu_Extdata, "/SaveData.dat", filebuffer, filesize); if(ret!=0) { printf("Failed to write file: 0x%08x\n", (unsigned int)ret); } } return ret; }