mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
958 lines
25 KiB
C++
958 lines
25 KiB
C++
/*---------------------------------------------------------------------------*
|
|
Project: Horizon
|
|
File: main.cpp
|
|
|
|
Copyright (C)2010 Nintendo Co., Ltd. All rights reserved.
|
|
|
|
These coded instructions, statements, and computer programs contain
|
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
Company Ltd., and are protected by Federal copyright law. They may
|
|
not be disclosed to third parties or copied or duplicated in any form,
|
|
in whole or in part, without the prior written consent of Nintendo.
|
|
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
#include <wchar.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <nn.h>
|
|
#include <nn/hid.h>
|
|
#include "demo.h"
|
|
|
|
nn::Result res;
|
|
|
|
nn::fs::FileOutputStream fout;
|
|
nn::fs::FileInputStream fin;
|
|
|
|
nn::fs::Directory dc[256];
|
|
|
|
wchar_t file_pathw[1024];
|
|
char file_path[1024];
|
|
char file_path2[1024];
|
|
char src_buff[1024*1024];
|
|
char get_buff[1024*1024];
|
|
char str[512];
|
|
|
|
|
|
extern demo::RenderSystemDrawing s_RenderSystem;
|
|
|
|
//終了処理
|
|
extern void finish(void);
|
|
extern u32 WaitKey(u32 mask);
|
|
|
|
extern void setColor(f32 r,f32 g,f32 b,f32 a);
|
|
extern void drawText(u16 x,u16 y,char *s);
|
|
void drawText(u16 x,u16 y,char *s,int v)
|
|
{
|
|
sprintf(str,s,v);
|
|
drawText( x,y,str);
|
|
}
|
|
|
|
|
|
//---------------------------------------- テストパターン
|
|
void make_pattern()
|
|
{
|
|
int i,j;
|
|
j=0;
|
|
for (i=0;i<1024*1024;i++){
|
|
src_buff[i] = j+i;
|
|
if (i & 0x100)j++;
|
|
}
|
|
}
|
|
|
|
//TEST ライト
|
|
s32 size;
|
|
#define SIZE_TEST1 421888
|
|
//#define SIZE_TEST1 244736 //dup
|
|
bool Test1_W()
|
|
{
|
|
int total,size2;
|
|
|
|
res = nn::fs::FormatSaveData(1,0,false);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"format Fail");
|
|
return false;
|
|
}
|
|
res =nn::fs::MountSaveData();
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Mount Fail");
|
|
return false;
|
|
}
|
|
|
|
res = nn::fs::TryCreateFile(L"data:/test1.bin",SIZE_TEST1);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Create Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fout.TryInitialize(L"data:/test1.bin",true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
total =0;
|
|
size2 = 512;
|
|
//size2 = 4096;
|
|
//size2 = SIZE_TEST1;
|
|
while(1){
|
|
res = fout.TryWrite( &size,&src_buff[total],size2);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"write Fail");
|
|
fout.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
total += size;
|
|
sprintf(str,"size %d",total);
|
|
s_RenderSystem.Clear();
|
|
drawText(10,80,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
//if (size<512)break;
|
|
if (total >= SIZE_TEST1)break;
|
|
if ((SIZE_TEST1 - total) < 512)size2 = SIZE_TEST1 - total ;
|
|
}
|
|
fout.Finalize();
|
|
nn::fs::CommitSaveData();
|
|
nn::fs::Unmount("data:");
|
|
NN_LOG("total %d",total);
|
|
drawText(10,100,"end");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
return true;
|
|
}
|
|
|
|
//ベリファイ
|
|
bool Test1_V()
|
|
{
|
|
int i,total;
|
|
|
|
res = fin.TryInitialize(L"data:/test1.bin");
|
|
if (res.IsFailure())
|
|
{
|
|
//NN_LOG("%d\n",res.GetDescription());
|
|
drawText(8,100,"open Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
total =0;
|
|
while(1){
|
|
res = fin.TryRead( &size,&get_buff[total],512);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"read Fail");
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
//if (size == 0)break;
|
|
for (i=0;i<size;i++) if (src_buff[total+i] != get_buff[total+i])
|
|
{
|
|
drawText(8,100,"verifi Fail at %d",total+i);
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
|
|
}
|
|
if (total >= SIZE_TEST1)break;
|
|
|
|
total += size;
|
|
s_RenderSystem.Clear();
|
|
sprintf(str,"now %d",total);
|
|
drawText(10,80,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
if (size<512)break;
|
|
}
|
|
fout.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
drawText(10,100,"end");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
return true;
|
|
}
|
|
|
|
|
|
//ファイル数
|
|
bool Test2_W(int n)
|
|
{
|
|
int total,size2;
|
|
|
|
res = nn::fs::FormatSaveData(680,1,false);//dupなしファイル680
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"format Fail");
|
|
return false;
|
|
}
|
|
res =nn::fs::MountSaveData();
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Mount Fail");
|
|
return false;
|
|
}
|
|
|
|
total =0;
|
|
int num = 0;
|
|
size2 = 512;
|
|
while(1){
|
|
sprintf(file_path,"data:/test%d.bin",num);
|
|
// res = nn::fs::TryCreateFile(L"data:/test2.bin",SIZE_TEST1);
|
|
// if (res.IsFailure()){
|
|
// drawText(8,100,"Create Fail");
|
|
// nn::fs::Unmount("data:");
|
|
// return false;
|
|
// }
|
|
res = fout.TryInitialize(file_path,true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fout.TryWrite( &size,&src_buff[total],size2);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"write Fail");
|
|
fout.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fout.Finalize();
|
|
total += size;
|
|
num++;
|
|
sprintf(str,"size %d , num %d",total,num);
|
|
s_RenderSystem.Clear();
|
|
drawText(10,80,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
//if (size<512)break;
|
|
if (num == n)break;
|
|
}
|
|
fout.Finalize();
|
|
nn::fs::CommitSaveData();
|
|
nn::fs::Unmount("data:");
|
|
NN_LOG("total %d",total);
|
|
drawText(10,100,"end");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
return true;
|
|
}
|
|
|
|
bool Test2_V(int n)
|
|
{
|
|
int total,size2,i;
|
|
|
|
total =0;
|
|
int num = 0;
|
|
size2 = 512;
|
|
while(1){
|
|
sprintf(file_path,"data:/test%d.bin",num);
|
|
res = fin.TryInitialize(file_path);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fin.TryRead( &size,&get_buff[total],size2);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"read Fail");
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
for (i=0;i<size;i++) if (src_buff[total+i] != get_buff[total+i])
|
|
{
|
|
drawText(8,100,"verifi Fail at %d",total+i);
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
|
|
}
|
|
fin.Finalize();
|
|
|
|
total += size;
|
|
num++;
|
|
sprintf(str,"size %d , num %d",total,num);
|
|
s_RenderSystem.Clear();
|
|
drawText(10,80,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
//if (size<512)break;
|
|
if (num == n)break;
|
|
}
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
NN_LOG("total %d",total);
|
|
drawText(10,100,"end");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
return true;
|
|
}
|
|
|
|
#define DirDepth 80
|
|
|
|
//ディレクトリ深度
|
|
bool Test3_W()
|
|
{
|
|
int total,size2;
|
|
|
|
res = nn::fs::FormatSaveData(200,200,false);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"format Fail");
|
|
return false;
|
|
}
|
|
res =nn::fs::MountSaveData();
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Mount Fail");
|
|
return false;
|
|
}
|
|
|
|
int num = 0;
|
|
total =0;
|
|
size2 = 512;
|
|
strcpy(file_path,"data:");
|
|
while(1){
|
|
sprintf(str,"/%d",num);
|
|
strcat(file_path,str);
|
|
res = nn::fs::TryCreateDirectory(file_path);
|
|
if (res.IsFailure()){
|
|
sprintf(str,"length = %d",(int)strlen(file_path));
|
|
drawText(8,110,str);
|
|
drawText(8,100,"Dir create Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
strcpy(file_path2,file_path);
|
|
sprintf(str,"/t%d.bin",num);
|
|
strcat(file_path2,str);
|
|
res = fout.TryInitialize(file_path2,true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fout.TryWrite( &size,&src_buff[total],size2);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"write Fail");
|
|
fout.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fout.Finalize();
|
|
|
|
num++;
|
|
total+=size;
|
|
s_RenderSystem.Clear();
|
|
sprintf(str,"num %d",num);
|
|
drawText(10,80,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
if (num == DirDepth)break;
|
|
}
|
|
|
|
nn::fs::CommitSaveData();
|
|
nn::fs::Unmount("data:");
|
|
|
|
drawText(10,100,"end");
|
|
sprintf(str,"length = %d",(int)strlen(file_path2));
|
|
drawText(8,110,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
return true;
|
|
}
|
|
|
|
|
|
bool Test3_V()
|
|
{
|
|
int i,total,size2;
|
|
|
|
int num = 0;
|
|
total =0;
|
|
size2 = 512;
|
|
strcpy(file_path,"data:");
|
|
while(1){
|
|
sprintf(str,"/%d",num);
|
|
strcat(file_path,str);
|
|
strcpy(file_path2,file_path);
|
|
sprintf(str,"/t%d.bin",num);
|
|
strcat(file_path2,str);
|
|
res = fin.TryInitialize(file_path2);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fin.TryRead( &size,&get_buff[total],size2);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"read Fail");
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
for (i=0;i<size;i++) if (src_buff[total+i] != get_buff[total+i])
|
|
{
|
|
drawText(8,100,"verifi Fail at %d",total+i);
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
|
|
}
|
|
fin.Finalize();
|
|
|
|
num++;
|
|
total+=size;
|
|
s_RenderSystem.Clear();
|
|
sprintf(str,"num %d",num);
|
|
drawText(10,80,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
if (num == DirDepth) break;
|
|
}
|
|
|
|
nn::fs::Unmount("data:");
|
|
drawText(10,100,"end");
|
|
sprintf(str,"length = %d",(int)strlen(file_path2));
|
|
drawText(8,110,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
return true;
|
|
}
|
|
|
|
//max size of name
|
|
#define max_len 16
|
|
bool Test4_W()
|
|
{
|
|
int i;
|
|
|
|
res = nn::fs::FormatSaveData(1,0,true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"format Fail");
|
|
return false;
|
|
}
|
|
res =nn::fs::MountSaveData();
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Mount Fail");
|
|
return false;
|
|
}
|
|
|
|
strcpy(str,"data:/");
|
|
for (i =6;i<max_len+6;i++)str[i] = '-';
|
|
str[i] = 0;
|
|
res = fout.TryInitialize(str,true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Open Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fout.TryWrite( &size,&src_buff[0],512);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Write Fail");
|
|
fout.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fout.Finalize();
|
|
nn::fs::CommitSaveData();
|
|
nn::fs::Unmount("data:");
|
|
return (size == 512);
|
|
|
|
}
|
|
|
|
|
|
bool Test4_V()
|
|
{
|
|
int i;
|
|
|
|
strcpy(str,"data:/");
|
|
for (i =6;i<max_len+6;i++)str[i] = '-';
|
|
str[i] = 0;
|
|
res = fin.TryInitialize(str);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Open Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fin.TryRead( &size,&get_buff[0],512);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Read Fail");
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
if (size != 512)return false;
|
|
|
|
for (i=0;i<size;i++) if (src_buff[i] != get_buff[i])
|
|
{
|
|
drawText(8,100,"verifi Fail at %d",i);
|
|
return false;
|
|
}
|
|
return true;
|
|
|
|
}
|
|
|
|
#define SIZE_TEST5 (512*100)
|
|
//生成サイズに満たないデータ
|
|
bool Test5_W()
|
|
{
|
|
int pos;
|
|
|
|
res = nn::fs::FormatSaveData(1,0,true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"format Fail");
|
|
return false;
|
|
}
|
|
res =nn::fs::MountSaveData();
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Mount Fail");
|
|
return false;
|
|
}
|
|
|
|
res = nn::fs::TryCreateFile(L"data:/test5.bin",SIZE_TEST5);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Create Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fout.TryInitialize(L"data:/test5.bin",true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
pos =0;
|
|
while(1){
|
|
fout.SetPosition(pos);
|
|
res = fout.TryWrite( &size,&src_buff[pos],512);
|
|
if (res.IsFailure() || (size!=512)){
|
|
drawText(8,100,"write Fail");
|
|
fout.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
sprintf(str,"position %d",pos);
|
|
s_RenderSystem.Clear();
|
|
drawText(10,80,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
pos += 1024;//512飛ばす
|
|
if (pos >= SIZE_TEST5)break;
|
|
}
|
|
fout.Finalize();
|
|
nn::fs::CommitSaveData();
|
|
nn::fs::Unmount("data:");
|
|
drawText(10,100,"end");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
return true;
|
|
}
|
|
|
|
|
|
bool Test5_V()
|
|
{
|
|
int i,pos;
|
|
|
|
res = fin.TryInitialize(L"data:/test5.bin");
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open Fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
pos =0;
|
|
while(1){
|
|
fin.SetPosition(pos);
|
|
res = fin.TryRead( &size,&get_buff[pos],512);
|
|
if (res.IsFailure() || (size!=512)){
|
|
drawText(8,100,"read Fail");
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
sprintf(str,"position %d",pos);
|
|
s_RenderSystem.Clear();
|
|
drawText(10,80,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
|
|
for (i=0;i<512;i++) if (src_buff[pos+i] != get_buff[pos+i])
|
|
{
|
|
drawText(8,100,"verifi Fail at %d",i);
|
|
return false;
|
|
}
|
|
pos += 1024;//512飛ばす
|
|
if (pos >= SIZE_TEST5)break;
|
|
}
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
drawText(10,100,"end");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
return true;
|
|
}
|
|
|
|
const char kinsi[] = {0x22,'<','>','?','*','|',0x5c,':',' ','/',0};//0x22 = "",0x5c = 円マーク
|
|
const char *kinsi2[] = { "CON","PRN","NUL","AUX","LPT1","LPT2","LPT3","LPT4","COM1","COM2","COM3","COM4"
|
|
,"con","prn","nul","aux","lpt1","lpt2","lpt3","lpt4","com1","com2","com3","com4",""};
|
|
|
|
|
|
//FAT違反の名前
|
|
bool Test6_W()
|
|
{
|
|
|
|
res = nn::fs::FormatSaveData(100,100,true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"format Fail");
|
|
return false;
|
|
}
|
|
res =nn::fs::MountSaveData();
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Mount Fail");
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
//禁止文字
|
|
char *base = "test6";
|
|
char dname[128],fname[128];
|
|
int ofst=0;
|
|
|
|
//頭に付ける
|
|
strcpy(dname,"data:/");
|
|
int pos = strlen(dname);
|
|
strcat(dname,"_");
|
|
strcat(dname,base);//data:/_base
|
|
int pos2 = strlen(dname)+1;
|
|
strcpy(fname,dname);
|
|
strcat(fname,"/_");
|
|
strcat(fname,base);
|
|
strcat(fname,".bin");//data:/_base/_base.bin
|
|
|
|
int i =0;
|
|
char c;
|
|
while(kinsi[i] != 0)
|
|
{
|
|
c = kinsi[i];
|
|
dname[pos] = c;
|
|
res = nn::fs::TryCreateDirectory(dname);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Dir fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fname[pos] = c;
|
|
fname[pos2] = c;
|
|
res = fout.TryInitialize(fname,true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fout.TryWrite( &size,&src_buff[ofst],512);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"write fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fout.Finalize();
|
|
i++;
|
|
ofst+=512;
|
|
}
|
|
|
|
//末尾
|
|
strcpy(dname,"data:/");
|
|
strcat(dname,base);//data:/base
|
|
pos = strlen(dname);
|
|
strcat(dname,"_");//data:/base_
|
|
strcpy(fname,dname);
|
|
strcat(fname,"/");
|
|
strcat(fname,base);//data:/base_/base
|
|
pos2 = strlen(fname);
|
|
strcat(fname,"_.bin");//data:/base_/base_.bin
|
|
|
|
i =0;
|
|
while(kinsi[i] != '/')//末尾スラッシュは名無しでエラー
|
|
{
|
|
c = kinsi[i];
|
|
dname[pos] = c;
|
|
res = nn::fs::TryCreateDirectory(dname);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"dir fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fname[pos] = c;
|
|
fname[pos2] = c;
|
|
res = fout.TryInitialize(fname,true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fout.TryWrite( &size,&src_buff[ofst],512);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"write fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fout.Finalize();
|
|
i++;
|
|
ofst+=512;
|
|
}
|
|
|
|
|
|
//禁止名
|
|
i=0;
|
|
while(kinsi2[i][0] != 0)
|
|
{
|
|
strcpy(dname,"data:/");
|
|
strcat(dname,kinsi2[i]);
|
|
res = nn::fs::TryCreateDirectory(dname);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"dir fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
strcpy(fname,dname);
|
|
strcat(fname,"/");
|
|
strcat(fname,kinsi2[i]);
|
|
res = fout.TryInitialize(fname,true);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fout.TryWrite( &size,&src_buff[ofst],512);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"write fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fout.Finalize();
|
|
i++;
|
|
ofst+=512;
|
|
}
|
|
|
|
nn::fs::CommitSaveData();
|
|
nn::fs::Unmount("data:");
|
|
|
|
drawText(10,100,"end");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
return true;
|
|
}
|
|
|
|
|
|
bool Test6_V()
|
|
{
|
|
|
|
//禁止文字
|
|
char *base = "test6";
|
|
char fname[128];
|
|
int ofst=0;
|
|
|
|
//頭に付ける
|
|
strcpy(fname,"data:/");
|
|
int pos = strlen(fname);
|
|
strcat(fname,"_");
|
|
strcat(fname,base);//data:/_base
|
|
int pos2 = strlen(fname)+1;
|
|
strcat(fname,"/_");
|
|
strcat(fname,base);
|
|
strcat(fname,".bin");//data:/_base/_base.bin
|
|
|
|
int i =0;
|
|
int j;
|
|
char c;
|
|
while(kinsi[i] != 0)
|
|
{
|
|
c = kinsi[i];
|
|
fname[pos] = c;
|
|
fname[pos2] = c;
|
|
res = fin.TryInitialize(fname);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fin.TryRead( &size,&get_buff[ofst],512);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"read fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fin.Finalize();
|
|
|
|
for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[ofst+i]){
|
|
drawText(8,100,"verifi fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
|
|
i++;
|
|
ofst+=512;
|
|
}
|
|
|
|
//末尾
|
|
strcpy(fname,"data:/");
|
|
strcat(fname,base);//data:/base
|
|
pos = strlen(fname);
|
|
strcat(fname,"_/");//data:/base_/
|
|
strcat(fname,base);//data:/base_/base
|
|
pos2 = strlen(fname);
|
|
strcat(fname,"_.bin");//data:/base_/base_.bin
|
|
|
|
i =0;
|
|
while(kinsi[i] != '/')//末尾スラッシュは名無しでエラー
|
|
{
|
|
c = kinsi[i];
|
|
fname[pos] = c;
|
|
fname[pos2] = c;
|
|
res = fin.TryInitialize(fname);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fin.TryRead( &size,&get_buff[ofst],512);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"write fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fout.Finalize();
|
|
|
|
for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[ofst+i]){
|
|
drawText(8,100,"verifi fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
|
|
i++;
|
|
ofst+=512;
|
|
}
|
|
|
|
|
|
//禁止名
|
|
i=0;
|
|
while(kinsi2[i][0] != 0)
|
|
{
|
|
strcpy(fname,"data:/");
|
|
strcat(fname,kinsi2[i]);
|
|
strcat(fname,"/");
|
|
strcat(fname,kinsi2[i]);
|
|
res = fin.TryInitialize(fname);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"open fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
res = fin.TryRead( &size,&get_buff[ofst],512);
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"read fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
fin.Finalize();
|
|
|
|
for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[ofst+i]){
|
|
drawText(8,100,"verifi fail");
|
|
nn::fs::Unmount("data:");
|
|
return false;
|
|
}
|
|
i++;
|
|
ofst+=512;
|
|
}
|
|
|
|
fin.Finalize();
|
|
nn::fs::Unmount("data:");
|
|
drawText(10,100,"end");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
return true;
|
|
}
|
|
|
|
#define menu_ct 7
|
|
#define menu_max (menu_ct-1)
|
|
char* menu_str[menu_ct] = {"Casual check","Large size","many files","Deep directry","max size name","data < create size","fat error name"};
|
|
|
|
#define menu_top_Y 80
|
|
#define menu_top_X 60
|
|
#define menu_spc 14
|
|
|
|
//---------------------------------------------------------------- main
|
|
void TestMain()
|
|
{
|
|
u32 value;
|
|
int curs = 0;
|
|
int i;
|
|
bool sccs;
|
|
|
|
//Render
|
|
setColor(1.0f,1.0f,1.0f,1.0f);
|
|
|
|
//TEST PATTERN
|
|
make_pattern();
|
|
|
|
while(1){
|
|
|
|
//menu 表示
|
|
s_RenderSystem.Clear();
|
|
drawText(8,20," Backup Verifi for SaveDataMover Test ");
|
|
drawText(8,40," for 512KB Backup");
|
|
for (i=0;i<menu_ct;i++)drawText(menu_top_X,menu_top_Y+menu_spc*i,menu_str[i]);
|
|
drawText(menu_top_X-30,menu_top_Y+menu_spc*curs,"->");
|
|
drawText(menu_top_X,menu_top_Y+menu_spc*(menu_max+2),"push A:Write ,X:Verifi");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
|
|
//ボタン待ち
|
|
value = WaitKey(nn::hid::BUTTON_A | nn::hid::BUTTON_X |nn::hid::BUTTON_UP |nn::hid::BUTTON_DOWN);
|
|
if (value & nn::hid::BUTTON_A){//ライト
|
|
sccs = false;
|
|
s_RenderSystem.Clear();
|
|
drawText(10,70,"writing");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
switch(curs){
|
|
case 0:sccs = Test2_W(10);break;
|
|
case 1:sccs = Test1_W();break;
|
|
case 2:sccs = Test2_W(680);break;
|
|
case 3:sccs = Test3_W();break;
|
|
case 4:sccs = Test4_W();break;
|
|
case 5:sccs = Test5_W();break;
|
|
case 6:sccs = Test6_W();break;
|
|
default:break;
|
|
}
|
|
}else if (value & nn::hid::BUTTON_X)
|
|
{//ベリファイ
|
|
sccs = false;
|
|
s_RenderSystem.Clear();
|
|
drawText(10,70,"verifi");
|
|
s_RenderSystem.SwapBuffers();
|
|
nngxWaitVSync(NN_GX_DISPLAY0);
|
|
res =nn::fs::MountSaveData();
|
|
if (res.IsFailure()){
|
|
drawText(8,100,"Mount Fail");
|
|
}else
|
|
switch(curs){
|
|
case 0:sccs = Test2_V(10);break;
|
|
case 1:sccs = Test1_V();break;
|
|
case 2:sccs = Test2_V(680);break;
|
|
case 3:sccs = Test3_V();break;
|
|
case 4:sccs = Test4_V();break;
|
|
case 5:sccs = Test5_V();break;
|
|
case 6:sccs = Test6_V();break;
|
|
default:break;
|
|
}
|
|
}else if (value & nn::hid::BUTTON_UP){
|
|
if(curs > 0)curs--;
|
|
}else if(curs < menu_max)curs++;
|
|
|
|
if (value & (nn::hid::BUTTON_A | nn::hid::BUTTON_X)){
|
|
if (sccs == false)drawText(8,120,"Failed");
|
|
sprintf(str,"desc %d",res.GetDescription());
|
|
drawText(10,140,str);
|
|
s_RenderSystem.SwapBuffers();
|
|
NN_LOG("desc %d",res.GetDescription());
|
|
WaitKey(nn::hid::BUTTON_B);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
End of file
|
|
*---------------------------------------------------------------------------*/
|
|
|