From 7ef1a1e6eb6368c9ab572c976c3dfc0a4c805042 Mon Sep 17 00:00:00 2001 From: mizu Date: Fri, 21 Sep 2012 05:35:56 +0000 Subject: [PATCH] git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@712 385bec56-5757-e545-9c3a-d8741f4650f1 --- trunk/CardSaveData/Mover/body/OMakefile | 4 +- trunk/CardSaveData/Mover/body/body_card2.rsf | 6 +- trunk/CardSaveData/Mover/body/source/main.cpp | 2245 ++++++----------- trunk/CardSaveData/Mover/body/source/main.h | 15 +- .../Mover/body/source/screen/screen.cpp | 605 ++--- .../Mover/body/source/screen/screen.h | 42 +- trunk/CardSaveData/Mover/body/source/sub.cpp | 462 ++++ trunk/CardSaveData/Mover/body/source/sub.h | 75 + trunk/CardSaveData/Mover/body/ver.h | 3 +- trunk/CardSaveData/Mover/card2注æ„.txt | 16 + trunk/CardSaveData/Mover/release.txt | 9 +- trunk/CardSaveData/common/common.cpp | 59 +- trunk/CardSaveData/common/gui/gui.cpp | 53 +- trunk/CardSaveData/common/gui/gui.h | 3 + trunk/CardSaveData/common/icon.icn | Bin 0 -> 14016 bytes trunk/CardSaveData/common/my_defs.h | 3 + .../CardSaveData/common/savefile/savefile.cpp | 47 +- trunk/CardSaveData/common/savefile/savefile.h | 8 +- trunk/CardSaveData/common/shfnt.cpp | 39 +- trunk/CardSaveData/common/test_data.cpp | 367 ++- 20 files changed, 2063 insertions(+), 1998 deletions(-) create mode 100644 trunk/CardSaveData/Mover/body/source/sub.cpp create mode 100644 trunk/CardSaveData/Mover/body/source/sub.h create mode 100644 trunk/CardSaveData/Mover/card2注æ„.txt create mode 100644 trunk/CardSaveData/common/icon.icn diff --git a/trunk/CardSaveData/Mover/body/OMakefile b/trunk/CardSaveData/Mover/body/OMakefile index d0c22ec..b06b205 100644 --- a/trunk/CardSaveData/Mover/body/OMakefile +++ b/trunk/CardSaveData/Mover/body/OMakefile @@ -28,6 +28,7 @@ CTR_APPTYPE = BOTH #SD‚ɃZ[ƒu‚·‚éꇂÍmembak -> exsave •ÏX SOURCES[] = ./source/main.cpp + ./source/sub.cpp ./source/screen/screen.cpp ../../common/savefile/savedata.cpp ../../common/savefile/membak.cpp @@ -70,7 +71,8 @@ CTR_BANNER_SPEC = banner_null_icon.bsf #Cia ƒo[ƒWƒ‡ƒ“:ƒ}ƒXƒ^ƒŠƒ“ƒO–ˆ‚ÉXV‚·‚邱‚Æ #ƒƒWƒƒ[‚Írsf‚ÅŽw’è(Remasterversion) #micro ‚ÌãŒÀ‚Í15(4bit) -MAKECIAFLAGS = -minor 1 -micro 1 +#latest release 2.1.3 :2012/9/21 ver 2.0 +MAKECIAFLAGS = -minor 1 -micro 3 include $(ROOT_OMAKE)/modulerules diff --git a/trunk/CardSaveData/Mover/body/body_card2.rsf b/trunk/CardSaveData/Mover/body/body_card2.rsf index 130ce4c..052094c 100644 --- a/trunk/CardSaveData/Mover/body/body_card2.rsf +++ b/trunk/CardSaveData/Mover/body/body_card2.rsf @@ -5,7 +5,7 @@ BasicInfo: Logo : Nintendo # CompanyCode: "00" ProductCode : "CTR-N-22NA" - MediaSize : 512MB +# MediaSize : 2G TitleInfo: # Category: 0x0010 @@ -15,10 +15,10 @@ TitleInfo: Rom: HostRoot : romfiles - SaveDataSize: 256MB + SaveDataSize: 20MB CardInfo: - CardDevice: None +# CardDevice: None MediaType: Card2 AccessControlInfo: diff --git a/trunk/CardSaveData/Mover/body/source/main.cpp b/trunk/CardSaveData/Mover/body/source/main.cpp index 9071a20..dff485b 100644 --- a/trunk/CardSaveData/Mover/body/source/main.cpp +++ b/trunk/CardSaveData/Mover/body/source/main.cpp @@ -18,75 +18,61 @@ #include //#include #include +#include #include #include +#include //#include #include #include #include //#include -#include "../../../common/savefile/savefile.h" -#include "../../../common/savefile/savedata.h" -#include "../../../common/savefile/membak.h" #include "./screen/screen.h" +#include "../ver.h" #include "../../../common/common.h" -//ヘッダã«ãƒ•ラグã®ã¿ã€ã‚³ãƒ¡ãƒ³ãƒˆã‚¢ã‚¦ãƒˆã§æ—§ç‰ˆç›¸å½“(SDéžå¯¾å¿œ) +#include "sub.h" #include "main.h" -#ifdef CSM_FLAG_USE_SD -#include "../../../common/savefile/exsave.h" -#endif nn::fnd::ExpHeap appHeap; uptr heapForGx; -//Gui gui; myResult errRes; - -//char strBuff[128]; -//bool exist; - -SaveData savedata; -nn::os::LightEvent ejectEvnt(false); -nn::os::LightEvent insEvnt(false); -#ifdef CSM_FLAG_USE_SD -ExSave exsave; -nn::os::LightEvent ejectEvntSd(false); -nn::os::LightEvent insEvntSd(false); -bool BkupSd = false;//ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—å…ˆãŒSDã‹(ファイルサイズåˆè¨ˆã§é¸æŠž) -#endif -MemBak memsave; +bool alive_Sd;//SD有効フラグ +TgtDev BkupDev = TGT_MEM;//ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—å…ˆ(MEM or SD) +bool forceSD = false;//強制ã§SD使用 //ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®çŠ¶æ…‹ -bool Active,Formatted; -bool exActive,exFormatted; +bool Active,Formatted;//カードã‚りã€ã‚»ãƒ¼ãƒ–ã‚り +bool Effective = false;//リード済㿠tArcInfo arcInfo,arcInfo2;//アーカイブ情報 tDcList dcList,dcList2;//ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªæ ¼ç´ +//動作モード +bool CopyMode=false; -//プロダクトコードã®ä¸€è‡´ -bool isAgreePCode; -//SDã‚り起動 -bool alive_Sd; +//セーブデータを扱ã†ã‚¯ãƒ©ã‚¹ +CsmSaveFile save; -//Topç”»é¢ã‚¨ãƒ©ãƒ¼è¡¨ç¤º -int tmerr; +//Topç”»é¢è¡¨ç¤º +int tm_err,tm_mode; //çµæžœ typedef enum { SUCCESS ,ERROR ,CANCEL - ,INSEXIT + ,INSEJECT }RetCode; //挿抜イベント時ã«è¨­å®š -typedef enum { - InEx_None - ,InEx_InsCard - ,InEx_EjcCard - ,InEx_InsSd - ,InEx_EjcSd -}tIsInsEject; +#define InEj_None 0 +#define InEj_InsCard 1 +#define InEj_EjcCard 2 +#define InEj_InsSd 4 +#define InEj_EjcSd 8 + +#define InEj_Sd (InEj_InsSd + InEj_EjcSd) +#define InEj_Card (InEj_InsCard + InEj_EjcCard) //メッセージ用タグ enum eMesTag{ @@ -100,28 +86,33 @@ MT_Complate,//終了 MT_CardFormat,//ユーザセーブã®ãƒ•ォーマット時 MT_FormatOnly,//フォーマットã®ã¿è¡Œã£ãŸã¨ã(ファイルãªã—時) MT_Writing,//ライト中 -MT_CrtDir1,//ディレクトリ作æˆä¸­ãã®1 -MT_CrtDir2,//ãã®ï¼’(1,2を交互表示) -MT_Copy1,// ファイルコピー -MT_Copy2,//ファイルコピー +MT_CrtDir,//ディレクトリ作æˆä¸­ +MT_Copy,// ファイルコピー MT_Failed,//失敗 MT_Break,//中断 MT_Success,//æˆåŠŸ +MT_ExIcn1,//"ï¼" 実行中アイコン1 +MT_ExIcn2,//" | " åŒï¼’(1,2 交互ã«è¡¨ç¤º) MT_END }; tChar* MES_NULL = L""; +//メモリ or SD 判定用 +#define MEM_BKUP_LIMIT (MEM_BKUP_SIZE - 1024*1024) + //文字数(終端込) #define MESS_SIZE 32 //ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æ ¼ç´ wchar_t Mess[MT_END*MESS_SIZE]; +wchar_t MessWork[MESS_SIZE]; +wchar_t MessWork2[MESS_SIZE]; //メッセージä½ç½® int MessPos[MT_END]; #define MessTxt(i) (wchar_t*)&Mess[MessPos[i]] -tIsInsEject isInsEject; +int isInsEject; extern u8 scr_evnt; s64 sSize; @@ -131,54 +122,138 @@ int rename_n =0;//リãƒãƒ¼ãƒ ç•ªå· wchar_t file_pathw[MAX_PATH_LENGTH]; wchar_t file_pathw2[MAX_PATH_LENGTH]; char file_path[MAX_PATH_LENGTH]; -//ドライãƒã®ä»•様ã§é€Ÿåº¦çš„ã«ï¼”ãƒã‚¤ãƒˆã‚¢ãƒ©ã‚¤ãƒ³ã—ãŸæ–¹ãŒã„ã„(SDK 0.14.23 時点) -char fileBuffer[512] NN_ATTRIBUTE_ALIGN(4);//検証ãŒ512å˜ä½ãªã®ã§ -char fileBuffer_ex[512] NN_ATTRIBUTE_ALIGN(4); -#define FILEBUFF_SIZE sizeof(fileBuffer) -void WaitUI(); +u8 WaitUI(); void PutError(TgtDev dev,int cd=0); -RetCode Card2Sd(); -RetCode Sd2Card(); -void CheckSaveDataState(); -void CheckExSaveState(); +void failstop(); +myResult OpenWork(TgtDev dev); +void Delete(); +void InsEjcErrPut(); +void Evt_SdInEx(); +void DeleteWork(); //------------------------------------------------------------ 挿抜ãƒã‚§ãƒƒã‚¯ -bool CheckInsExit() -{ +//イベント +nn::os::LightEvent ejectEvnt(false); +nn::os::LightEvent insEvnt(false); +#ifndef CSM_FLAG_DEBUG +nn::os::LightEvent ejectEvntSd(true);//SDã¯è‡ªå‹•クリアãªã— +nn::os::LightEvent insEvntSd(true); +#else +nn::os::LightEvent ejectEvntSd(false);//挿抜ã‚り +nn::os::LightEvent insEvntSd(false); +#endif +void InitInsEject() +{ + //挿抜イベント + //クラス関数内ã ã¨ç™»éŒ²ãŒä¸Šæ‰‹ãã„ã‹ãªã„(謎) + isInsEject = InEj_None; + ejectEvnt.ClearSignal(); + insEvnt.ClearSignal(); + ejectEvntSd.ClearSignal(); + insEvntSd.ClearSignal(); + nn::fs::RegisterCardEjectedEvent(&ejectEvnt); + nn::fs::RegisterCardInsertedEvent(&insEvnt); + nn::fs::RegisterSdmcEjectedEvent(&ejectEvntSd); + nn::fs::RegisterSdmcInsertedEvent(&insEvntSd); +} + +bool CheckInsEjectCard() +{ if (ejectEvnt.TryWait()){ - //CARD抜㑠- CheckSaveDataState(); - isInsEject = InEx_EjcCard; + isInsEject |= InEj_EjcCard; return true; } if (insEvnt.TryWait()){ - //CARD挿入 - CheckSaveDataState(); - isInsEject = InEx_InsCard; + isInsEject |= InEj_InsCard; return true; } -#ifdef CSM_FLAG_USE_SD - if(alive_Sd){ + return false; +} + + +bool CheckInsEjectSD() +{ + //if(alive_Sd){ if (ejectEvntSd.TryWait()){ - //SD抜㑠- CheckExSaveState(); - isInsEject = InEx_EjcSd; + isInsEject |= InEj_EjcSd; return true; } if (insEvntSd.TryWait()){ - //SD挿入 - CheckExSaveState(); - isInsEject = InEx_InsSd; + isInsEject |= InEj_InsSd; return true; } - } -#endif - return false; + // } + return false; } +bool CheckInsEject() +{ + CheckInsEjectSD(); + CheckInsEjectCard(); + return (isInsEject != InEj_None); +} + + +//--------------------- 表示更新 +void UpdateStatus(){ + + CheckInsEject();//挿抜ãƒã‚§ãƒƒã‚¯ + if (isInsEject & InEj_Sd) Evt_SdInEx();//SD挿抜 + Active = save.stsActive(TGT_CARD);//内部ã§GetPrdCode + if (Active)Formatted = save.stsFormatted(TGT_CARD); + else Formatted = false; + if (Effective==false ) arcInfo.Pcode[0] = 0;//プロダクト(ワークå´)表示を消㙠+ + if(Active){//カードã‚り + if (Effective) + {//リードã‚り + if (strcmp(save.PrdCode,arcInfo.Pcode)==0) + {//プロダクトコード一致 + tm_mode = SCR_MENU_WRITE;//ライトメニュー + tm_err = SCR_ERRPUT_NONE; + }else + { + tm_mode = SCR_MENU_NONE; + tm_err = SCR_ERRPUT_PCODE;//プロダクトコードãŒé•ㆠ+ } + }else + {//ãªã— + if (Formatted){//セーブ存在 + tm_mode = SCR_MENU_READ;//リードメニュー + tm_err = SCR_ERRPUT_NONE; + }else{ + tm_mode = SCR_MENU_NONE; + tm_err = SCR_ERRPUT_MEDIA;//セーブãŒèª­ã‚ãªã„ + } + } + }else{ + tm_mode = SCR_MENU_NONE; + tm_err = SCR_ERRPUT_CARD;//カードãŒå…¥ã£ã¦ãªã„ + } + isInsEject = InEj_None;//フラグクリア + + scr_PrdCode(save.PrdCode);//プロダクトコード表示 + scr_PrdCodeEx(arcInfo.Pcode);//プロダクトコード表示 +} + + +//SD挿抜 +void Evt_SdInEx() +{ +#ifdef CSM_FLAG_DEBUG + save.Unmount(TGT_SD);//å†ãƒžã‚¦ãƒ³ãƒˆ + save.Mount(TGT_SD); +#else + ScrClr(); + scr_InsEjectSD(); + failstop();//åœæ­¢ +#endif +} + + //---------------------------------------------------------------- çµ‚äº†å‡¦ç† void endfunc() @@ -189,17 +264,13 @@ void endfunc() ejectEvnt.Finalize(); insEvnt.Finalize(); -#ifdef CSM_FLAG_USE_SD - if (alive_Sd){ - nn::fs::UnregisterSdmcEjectedEvent(); - nn::fs::UnregisterSdmcInsertedEvent(); - ejectEvntSd.Finalize(); - insEvntSd.Finalize(); - } -#endif - savedata.Finalize(); - memsave.Finalize(); + nn::fs::UnregisterSdmcEjectedEvent(); + nn::fs::UnregisterSdmcInsertedEvent(); + ejectEvntSd.Finalize(); + insEvntSd.Finalize(); + save.Finalize(); + save.Unmount(); ScrFinalize(); } @@ -208,30 +279,22 @@ void endfunc() void failstop() { NN_LOG("fail %d,stop\n",errRes); - + save.Finalize(); while(1){ CheckSysBreak(); } } + //エラー表示 tChar sts[64]; void PutError(TgtDev dev,int cd) { - nn::Result res; - switch (dev) - { - case TGT_CARD: res = savedata.LastNnResult;break; - case TGT_MEM: res = memsave.LastNnResult;break; -#ifdef CSM_FLAG_USE_SD - case TGT_SD: res = exsave.LastNnResult;break; -#endif - default: dev = TGT_NONE;//GetDescriptエラー対策 - } - GetErrorStr(dev,res,cd,sts); + GetErrorStr(dev,save.LastNnResult(dev),cd,sts); scr_Status(sts,COLOR_RED); } + //表示テキストã®èª­è¾¼(eMessTagã®é †) //テキストã¯SJISã‚„ASCIIä¸å¯ã€U-16ã§ä¿å­˜ã—æ–‡å­—åˆ—ã¯æ”¹è¡Œ(0a0d)ã§çµ‚ãˆã‚‹ //BOM(先頭2ãƒã‚¤ãƒˆã®ã‚´ãƒŸ ^^; )ã¯ä»˜ã‘ãªã„事 @@ -302,168 +365,189 @@ void LoadMessText(wchar_t* path) nn::fs::Unmount("rom:"); } -//ユーザセーブã®ãƒ–ロックリード -//中身ã®ãƒ‡ãƒ¼ã‚¿ãŒä½œæˆã‚µã‚¤ã‚ºã«æº€ãŸãªã„å ´åˆã« -//未書込ã¿é ˜åŸŸã§æ¤œè¨¼ã‚¨ãƒ©ãƒ¼(desc=329)ã¨ãªã‚‹å ´åˆãŒã‚ã‚‹ -//読ã‚ãªã„ブロックã¯ï¼ã§ç½®ãæ›ãˆã‚‹(SDKツールã®SaveFilerã¨åŒã˜æ–¹æ³•..ロンãƒå½“時) -//size = サイズ -// 検証ã¯512å˜ä½ã€èª­ã‚ã¦ã‚‹ã¨ã“ã¾ã§ç½®ãæ›ãˆãªã„よã†512ä»¥ä¸‹ã§æŒ‡å®š -// å°šã€ãƒ¦ãƒ¼ã‚¶ã‚»ãƒ¼ãƒ–ä»¥å¤–ã®æ¤œè¨¼ã¯4096ã”㨠-//pos = ä½ç½®æŒ‡å®š -// SDK3.1(より?)エラー時ã«ãƒ•ァイルãƒã‚¤ãƒ³ã‚¿æ›´æ–°ã—ãªã„ã®ã§2.0より -bool ReadBlock(s64 pos,int size) +//動作中アイコン +//ã‚らã‹ã˜ã‚MessWorkã«å…¥ã£ã¦ã‚‹æ–‡å­—列ã«ä»˜ã‘ã‚‹ +int IconCt=0; +void Icon(eColor col){ + wcscpy(MessWork2,MessWork); + if(++IconCt & 1) wcscat(MessWork2,MessTxt(MT_ExIcn1));//"-" + else wcscat(MessWork2,MessTxt(MT_ExIcn2));//"|" + scr_Status(MessWork2,col); +} + + +//ワークã¯ãƒ«ãƒ¼ãƒˆã«ç½®ã +//起動時リードã™ã‚‹ã«ã¯ +// アーカイブ情報や空ディレクトリもå«ã‚ãªã„ã¨ãƒ€ãƒ¡ +wchar_t WorkPath[] = L"/work.bin"; +u32 WorkNumber=0,WorkNumberBkup=0; +#define WORK_HEADER_SIZE 4 + +struct tWorkInfo { - if ((size > 512) || (size < 0))return false; - savedata.SetPos(pos); - if(savedata.Read(fileBuffer,size) != size ) - { - NN_LOG("%d\n",savedata.LastNnResult.GetDescription()); - if(nn::fs::ResultVerificationFailed::Includes(savedata.LastNnResult)) - {//検証エラー - for (int i = 0; i < size; i++) fileBuffer[i] = 0;//0埋゠- }else return false; + wchar_t path[MAX_PATH_LENGTH]; + u32 size;//max 4Gbyte +}; + +tWorkInfo work_info; +#define WORK_INFO_SIZE sizeof(tWorkInfo) + +//ãƒ¯ãƒ¼ã‚¯ãƒ•ã‚¡ã‚¤ãƒ«ä½œæˆ +bool CreateWork(TgtDev dev,tArcInfo *ai) +{ + s64 size; + bool res; + //int n; + + if (Effective || (dev == TGT_CARD))return false;//無効 + DeleteWork();//ワーク削除 + //n = save.LastNnResult(dev).GetDescription(); + //NN_LOG("%d\n",n); + size = ai->total + WORK_HEADER_SIZE + (WORK_INFO_SIZE * ai->FileCount); + if (dev == TGT_SD){ + res = save.CreateFile(dev,WorkPath,size);//拡張セーブã¯Openå‰ã«Createå¿…è¦ã€MEMã¯OpenWã«å« + //NN_LOG("%d\n",save.LastNnResult(dev).GetDescription()); + }else{ + res = (save.Create(dev,1,1) == RESULT_OK);//MEMã¯ãƒ•ァイルå˜ä½æ¶ˆåŽ»ç„¡ã„ã®ã§ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã”㨠} - return true; + if (res) + if (save.OpenW(dev,WorkPath,size)){ + while(1){ //先頭ã«ä¹±æ•°ã‚»ãƒƒãƒˆ + nn::crypto::GenerateRandomBytes( (char*)&WorkNumber,WORK_HEADER_SIZE ); + //ï¼ã€FFFFFFFFã€å‰å›žã¨åŒã˜å€¤ã€€ã¯ä½¿ã‚ãªã„ + if ( (WorkNumber != 0) && (WorkNumber != 0xffffffff) + && (WorkNumber != WorkNumberBkup))break; + } + WorkNumberBkup = WorkNumber; + NN_LOG("create work,number = %4x\n",WorkNumber); + if (save.Write(dev,(char*)&WorkNumber,WORK_HEADER_SIZE) + == WORK_HEADER_SIZE) Effective = true; + else save.CloseW(dev); + } + return Effective; +} + +//ワーク開ã +myResult OpenWork(TgtDev dev) +{ + int num; + if(CheckInsEject())return RESULT_INSEJECT;//挿抜検出 + if (save.Open(dev,WorkPath )){ + if(save.Read(dev,(char*)&num,WORK_HEADER_SIZE) == WORK_HEADER_SIZE) + { + //記録時ã®ãƒ˜ãƒƒãƒ€ã¨ä¸€è‡´ã™ã‚‹ã‹ + if (num==WorkNumber)return RESULT_OK; + } + save.Close(dev); + } + NN_LOG("%d\n",save.LastNnResult(dev).GetDescription()); + return RESULT_FAIL_WORK; +} + +//ワーク削除 +void DeleteWork(){ + //SD,MEM両方消㙠+ if(alive_Sd){ + save.Close(TGT_SD);//オープンã—ãŸã¾ã¾ã ã¨å‰Šé™¤ã§ããªã„ + save.CloseW(TGT_SD); + save.DeleteFile(TGT_SD,WorkPath);//SDã¯ãƒ•ァイルã®ã¿ + } + save.Delete(TGT_MEM);//メモリã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã”㨠+ Effective = false; } //-------------------------------------------------- Verifi -bool Verifi(bool flg) +myResult Verifi(TgtDev dest,TgtDev src) { myResult res; - int ct,i,msize,rsize; - s64 total=0,pos; + int ct,i; + s64 total=0; + TgtDev dev;//ワークã®ãƒ‡ãƒã‚¤ã‚¹ - //セーブデータã®ãƒžã‚¦ãƒ³ãƒˆ - res = savedata.Mount(); - if(res != RESULT_OK){ - //PutError(TGT_CARD); - return false; - } + if (dest == src)return RESULT_FAIL;//デãƒã‚¤ã‚¹ãŒåŒã˜ + if (dest == TGT_CARD)dev = src; + else if(src == TGT_CARD)dev = dest; + else return RESULT_FAIL; //片方ã¯å¿…ãšCARDã§ãªã„ã¨ãƒ€ãƒ¡ + + wcscpy(MessWork,MessTxt(MT_Compair));//"Verifi"メッセージ + Icon(COLOR_YELLO); + scr_Vsnc(); - - //ãƒãƒƒãƒ•ァデãƒã‚¤ã‚¹ã®ãƒžã‚¦ãƒ³ãƒˆ - res = memsave.Mount(); - if(res != RESULT_OK){ - //PutError(TGT_MEM); - return false; - } - - //ディレクトリã®ç¢ºèª - //空ディレクトリãƒã‚§ãƒƒã‚¯ã™ã‚‹ã‚¢ãƒ—リã‚り(マリカ7) + //セーブデータã®ãƒžã‚¦ãƒ³ãƒˆ + res = save.Mount(TGT_CARD); + if(res != RESULT_OK)return res; + + //カード上ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªç¢ºèª + //空ディレクトリもãƒã‚§ãƒƒã‚¯ã™ã‚‹ã‚¢ãƒ—リ対策(マリカ7) //ファイルãªã—状態ã‚りãˆã‚‹ã®ã§å…ˆã«ç¢ºèª if( dcList.num >0 ) { nn::fs::Directory dc; for(i=0;i=arcInfo.FileCount) - {//カウンタ壊れã€ãƒ¡ãƒ¢ãƒªãƒ•ローã®å¯èƒ½æ€§ - res = RESULT_FAIL; - break; - } - scr_CountPerMax(ct,arcInfo.FileCount); - if (savedata.Open(file_pathw)==false) - { - res = RESULT_FAIL_OPEN; - break; - } - fsize = savedata.FileSize; - total += fsize; - if (memsave.Open(file_pathw)==false) - { - res = RESULT_FAIL_OPENW; - //savedata.Close(); - break; - } - if (fsize != memsave.FileSize)//file size - { - res = RESULT_FAIL; - break; - } - msize=fsize; - if(msize <= FILEBUFF_SIZE ){//一回ã§èª­ã‚るサイズãªã‚‰ã‚²ãƒ¼ã‚¸ã¯å‡ºã•ãªã„ - scr_CountPerMax2(0,0,-1); - } - pos = 0; - while(fsize) - { - if(msize > FILEBUFF_SIZE ){ - scr_CountPerMax2(msize-fsize,msize,0); - } - if (fsize > FILEBUFF_SIZE) - { - rsize = FILEBUFF_SIZE; - fsize -= FILEBUFF_SIZE; + if(CheckInsEject())res = RESULT_INSEJECT;//挿抜ãƒã‚§ãƒƒã‚¯ + else{ + i = save.Read(dev,(char*)&work_info,WORK_INFO_SIZE);//ファイル情報 + if (i != WORK_INFO_SIZE){ + if (i) res = RESULT_FAIL_WORK;//リードエラー + else break;//終端 or 読ã‚ãªã‹ã£ãŸ }else{ - rsize = fsize; - fsize = 0; - } - if (ReadBlock(pos,rsize)==false) - { - res = RESULT_FAIL_READ; - break; - } - pos += rsize; - if(memsave.Read(fileBuffer_ex,rsize) != rsize ) - {//メモリãªã®ã§å®Ÿè¡Œæ™‚ãƒã‚° - res = RESULT_FAIL; - break; - } - //verifi - for (i = 0;i= arcInfo.FileCount)res = RESULT_FAIL;//ファイル数オーム+ else{//Open + if (save.Open(TGT_CARD,work_info.path)==false)res = RESULT_FAIL_OPEN; + else{ + if (work_info.size != save.FileSize(TGT_CARD))res = RESULT_FAIL_VERIFI; + else{ + scr_CountPerMax(ct,arcInfo.FileCount);//ファイルカウンタ + res = save.OpnCmp(dest,src,work_info.size);//比較 + if (res == RESULT_OK){ + total += work_info.size; + ct++; + } + } + } + save.Close(TGT_CARD); + } } } - savedata.Close(); - memsave.Close(); - if (res != RESULT_OK)break; - ct++; } - savedata.Close(); - memsave.Close(); + if((res==RESULT_OK) && ct != arcInfo.FileCount)res=RESULT_FAIL;//異常ãªãƒ«ãƒ¼ãƒ—抜㑠} - + save.Close(dev); + scr_Status(MessTxt(MT_ChkCard),COLOR_YELLO);//ユーザセーブã®ç¢ºèª + scr_Vsnc();//ç”»é¢æ›´æ–°å¾…ã¡ + //セーブå‰å¾Œã§æ§‹æˆãŒä¸€è‡´ã™ã‚‹ã‹ - if(flg){//読ã¿è¾¼ã¿æ™‚ã¯ç„¡é§„ãªã®ã§ãƒ•ラグã§ã‚­ãƒ£ãƒ³ã‚»ãƒ« - if(savedata.GetInfo(&arcInfo2,&dcList2)==false)res = RESULT_FAIL_VERIFI; + if((res == RESULT_OK) && (dest == TGT_CARD)){//読ã¿è¾¼ã¿æ™‚ã¯ä¸è¦ + if(save.GetInfo(&arcInfo2,&dcList2)==false)res = RESULT_FAIL_VERIFI; else if (arcInfo.total != arcInfo2.total)res = RESULT_FAIL_VERIFI; else if (arcInfo.DirEntry != arcInfo2.DirEntry)res = RESULT_FAIL_VERIFI; else if (arcInfo.DirCount != arcInfo2.DirCount)res = RESULT_FAIL_VERIFI; @@ -484,292 +568,262 @@ bool Verifi(bool flg) } } } - savedata.Unmount(); - memsave.Unmount(); + + save.Unmount(TGT_CARD); + scr_Total(total); scr_CountPerMax(ct,arcInfo.FileCount); - scr_CountPerMax2(0,0,total); - - - if (res != RESULT_OK){ - //PutError(TGT_CARD,ERC_VERIFI); - return false; - } - - - return true; + + return res; } -//---------------------------------------------------------------------- from CARD -RetCode Card2Ctr() + +//çµæžœã‹ã‚‰ã‚¨ãƒ©ãƒ¼è¡¨ç¤º +RetCode PutResltErr(myResult res,TgtDev rdev,TgtDev wdev) { - myResult res; - int ct=0,msize,rsize; - s64 total=0,pos; - - scr_BackupYesNo();//å®Ÿè¡Œç¢ºèª - WaitUI();//入力待㡠- if(isInsEject != InEx_None ) - {//挿抜? - //isInsEject = InEx_None; - return INSEXIT;//挿抜ã«ã‚ˆã‚‹ä¸­æ–­ - } - if (scr_evnt != EVNT_YES)return CANCEL;//キャンセル - scr_Backup();//ç”»é¢è¡¨ç¤º - scr_Status(MessTxt(MT_ChkCard),COLOR_YELLO); - //セーブデータã®ãƒžã‚¦ãƒ³ãƒˆ - res = savedata.Mount(); - if(res != RESULT_OK){ - PutError(TGT_CARD); - return ERROR; - } - - //ã‚»ãƒ¼ãƒ–ãƒ‡ãƒ¼ã‚¿ã®æƒ…å ± - //arcInfo <- フォーマット情報ã€ãƒ•ァイルã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªæ•° - //scList <- ディレクトリパス - if(savedata.GetInfo(&arcInfo,&dcList)==false) - { - savedata.Unmount(); - PutError(TGT_CARD); - return ERROR; - } - - //strcpy(arcInfo.Pcode,savedata.PrdCode); - - //カウント異常ãªã‚‰å®Ÿè¡Œã‚¨ãƒ©ãƒ¼ - if (arcInfo.FileCount > arcInfo.FileEntry) - { - savedata.Unmount(); - PutError(TGT_NONE,ERC_EXEC); - return ERROR; - } - if (arcInfo.DirCount > arcInfo.DirEntry) - { - savedata.Unmount(); - PutError(TGT_NONE,ERC_EXEC); - return ERROR; - } - - if(arcInfo.DirCount >= MAX_DCLIST) - {//ディレクトリ数ãŒå¤šã™ãŽ - savedata.Unmount(); - PutError(TGT_MEM,ERC_EXEC); - return ERROR; - } - - //メモリFSã®äºˆæƒ³å æœ‰ã‚µã‚¤ã‚º - sSize = arcInfo.total+arcInfo.FileCount*512; - -#ifdef CSM_FLAG_FORCE_SD - return Card2Sd();//デãƒã‚°ç”¨ã€å¼·åˆ¶ã§SD㸠- //警告抑制 unreachable -#pragma diag_suppress 111 -#endif - - //簡易サイズãƒã‚§ãƒƒã‚¯ - if (sSize > MEM_BKUP_SIZE) - { -#ifdef CSM_FLAG_USE_SD - if (alive_Sd)return Card2Sd();//SD使用 -#endif - savedata.Unmount(); - PutError(TGT_MEM,ERC_NOSPACE);//容é‡ã‚ªãƒ¼ãƒ - return ERROR; - } -#ifdef CSM_FLAG_USE_SD - //本体メモリ使用 - BkupSd = false; -#endif - - //一時ä¿å­˜ãŒå­˜åœ¨ã—ãŸã‚‰æ¶ˆã™ - scr_Status(MessTxt(MT_ChkBkup),COLOR_YELLO); - if(memsave.IsExist()){ - if(memsave.Delete()==false) - { - savedata.Unmount(); - PutError(TGT_MEM); - return ERROR; - } - } - - //一時ä¿å­˜å…ˆã®ä½œæˆ - scr_Status(MessTxt(MT_CrtBkup),COLOR_YELLO); - res = memsave.Create(arcInfo.DirEntry+1,arcInfo.FileEntry+1); - if (res != RESULT_OK){ - savedata.Unmount(); - PutError(TGT_MEM); - return ERROR; - } - - if (arcInfo.FileCount == 0)//ファイルãŒç„¡ã„ - { - scr_Status(MessTxt(MT_FileNot),COLOR_YELLO); - savedata.Unmount(); - memsave.Unmount(); - strcpy(arcInfo.Pcode,savedata.PrdCode); - return SUCCESS;//フォーマットã®ã¿ - }else{ - scr_Status(MessTxt(MT_Reading),COLOR_SKY); - savedata.ResetPath(); - s64 fsize; - res = RESULT_OK; - while(res==RESULT_OK){ - res = savedata.GetPath(file_pathw); - if (res != RESULT_OK) - { - if (res == RESULT_DIR_LEVEL_OVER){ - //PutError(ERC_DEV_CARD,ERC_DIRDEPTH); - PutError(TGT_NONE,ERC_WORK); - break; - } - if (res == RESULT_PATH_LENGTH_OVER){ - //PutError(ERC_DEV_CARD,ERC_PATH); - PutError(TGT_NONE,ERC_WORK); - break; - } - res = RESULT_FAIL_OPEN; - break; - } - if (file_pathw[0] == 0)break;//root then end - if (ct>=arcInfo.FileCount) - {//カウンタ壊れã€ãƒ¡ãƒ¢ãƒªãƒ•ローã®å¯èƒ½æ€§ - res = RESULT_FAIL; - break; - } - - scr_CountPerMax(ct,arcInfo.FileCount); - if (savedata.Open(file_pathw)==false) - { - res = RESULT_FAIL_OPEN; - break; - } - fsize = savedata.FileSize; - total += fsize; - if (memsave.OpenW(file_pathw,fsize)==false) - { - res = RESULT_FAIL_OPENW; - //savedata.Close(); - break; - } - - - //検証å˜ä½ã®512ãšã¤ - msize=fsize; - pos = 0; - while(fsize) - { - if(msize > FILEBUFF_SIZE * 2){ - scr_CountPerMax2(msize-fsize,msize,0); - } - if (fsize>FILEBUFF_SIZE) - { - rsize = FILEBUFF_SIZE; - fsize -= FILEBUFF_SIZE; - }else{ - rsize = fsize; - fsize = 0; - } - if (ReadBlock(pos,rsize)==false) - { - res = RESULT_FAIL_READ; - break; - } - pos += rsize; - if(memsave.Write(fileBuffer,rsize) != rsize ) - { - res = RESULT_FAIL_WRITE; - break; - } - } - - savedata.Close(); - memsave.CloseW(); - //todo: ゲージ表示 - ct++; - } - savedata.Close(); - memsave.CloseW(); - } - - if (res == RESULT_OK){ - if (ct != arcInfo.FileCount)//ãƒ•ã‚¡ã‚¤ãƒ«æ•°ã«æº€ãŸãªã„パス検索終了 - {//ディレクトリ情報ã‹ãƒ‘スå–å¾—ã§å¤±æ•—ã—ã¦ã‚‹ã¨æ€ã‚れる - PutError(TGT_NONE,ERC_EXEC); - return ERROR; - } - } - savedata.Unmount(); - //memsave.Commit(); Nand,SDã¯ã‚³ãƒŸãƒƒãƒˆå…¥ã‚Œã‚‹ - memsave.Unmount(); - scr_CountPerMax(ct,arcInfo.FileCount); - if(total>0)scr_CountPerMax2(0,0,total); - -//çµæžœ + int err_code; + TgtDev err_tgt; switch(res) { case RESULT_OK: - if (Verifi(false)) - { - scr_Status(MessTxt(MT_Complate),COLOR_WHITE); - strcpy(arcInfo.Pcode,savedata.PrdCode); - return SUCCESS; - } - PutError(TGT_CARD,ERC_VERIFI); - break; + scr_Status(MessTxt(MT_Complate),COLOR_WHITE); + return SUCCESS; + case RESULT_INSEJECT: + return INSEJECT; case RESULT_FAIL_WRITE: case RESULT_FAIL_OPENW: - PutError(TGT_MEM,ERC_WRITE); + err_tgt = wdev;err_code = ERC_WRITE; break; case RESULT_FAIL_READ: case RESULT_FAIL_OPEN: - PutError(TGT_CARD,ERC_READ); + err_tgt = rdev;err_code = ERC_READ; break; - default: - PutError(TGT_NONE,ERC_EXEC); + case RESULT_WORK_OVER: + err_tgt = TGT_CTR;err_code = ERC_WORK; + break; + case RESULT_FAIL_WORK: + if (rdev != TGT_CARD)err_tgt = rdev; + else err_tgt = wdev; + err_code = ERC_WORK; break; + default: + err_tgt = TGT_CTR;err_code= ERC_EXEC; + break; } - memsave.Delete();//ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除 + PutError(err_tgt,err_code); return ERROR; } - -bool mkdir; -//---------------------------------------------------------------- to CARD -RetCode Ctr2Card() +//---------------------------------------------------------------------- save to Work file +//Cardマウントã€ãƒ¯ãƒ¼ã‚¯ãƒ•ァイルオープンã—ã¦å‘¼ã¶ +myResult Save2Work(TgtDev dev,u32 num) { - myResult res; - int ct=0; - int msize,rsize; s64 total = 0; + int ct=0; + myResult res; - scr_RestoreYesNo();//å®Ÿè¡Œç¢ºèª - WaitUI();//入力待㡠- if(isInsEject != InEx_None ){//挿抜? - //isInsEject = InEx_None; - return INSEXIT;//挿抜ã«ã‚ˆã‚‹ä¸­æ–­ + if (num == 0)return RESULT_FAIL;//パラメータエラー + res = RESULT_OK; + save.ResetPath(TGT_CARD); + while(res==RESULT_OK){ + CheckSysBreak();//Home,é›»æºãƒœã‚¿ãƒ³ã«ã‚ˆã‚‹ä¸­æ–­å‡¦ç† + if(CheckInsEject())res = RESULT_INSEJECT;//挿抜ãƒã‚§ãƒƒã‚¯ + else{ + res = save.GetPath(TGT_CARD,work_info.path);//パスåå–å¾— + if (res != RESULT_OK) + { + if ((res == RESULT_DIR_LEVEL_OVER) + || (res == RESULT_PATH_LENGTH_OVER)) res = RESULT_WORK_OVER; + else res = RESULT_FAIL_OPEN; + }else{ + if (work_info.path[0] == 0)break;//root then end + if (ct >= num)res = RESULT_FAIL;//ファイル数オーム+ else{ + //コピー元オープン + if (save.Open(TGT_CARD,work_info.path)==false)res = RESULT_FAIL_OPEN; + else{ + //ãƒ•ã‚¡ã‚¤ãƒ«æƒ…å ±ã‚’æ ¼ç´ + work_info.size = save.FileSize(TGT_CARD); + if(save.Write(dev,(char*)&work_info,WORK_INFO_SIZE) == WORK_INFO_SIZE) + {//ãƒ‡ãƒ¼ã‚¿æ ¼ç´ + scr_CountPerMax(ct,num);//カウンタ表示 + res = save.OpnCpy(dev,TGT_CARD,work_info.size);//ãƒ¯ãƒ¼ã‚¯ã¸æ›¸ã出㙠+ if (res == RESULT_OK){ + total += work_info.size; + ct++; + } + }else res= RESULT_FAIL_WRITE; + save.Close(TGT_CARD); + } + } + } + } + } + save.CloseW(dev);//Close & Flush + save.Unmount(TGT_CARD); + scr_Total(total);//サイズ表示 + scr_CountPerMax(ct,num);//カウンタ表示 + + + if ((res == RESULT_OK) && (ct != num))res = RESULT_FAIL;//指定ã—ãŸãƒ•ァイル数ã¨ä¸€è‡´ã—ãªã„ + return res; +} + +//---------------------------------------------------------------------- restore from Work file +//ワークã®ãƒ•ァイル情報ãƒã‚§ãƒƒã‚¯ +//  サイズãƒã‚§ãƒƒã‚¯ã«ä½¿ã†ã®ã§ä¿å­˜æ™‚ã®tArcInfoã‚’å‚ç…§ +bool InfoChk(tWorkInfo *wi) +{ + int i; + if (wi->path[0]==0)return false;//空文字 + //ãƒãƒƒãƒ•ァオーãƒäºˆé˜²ã€çµ‚ç«¯ç¢ºèª + for (i = 1;ipath[i]==0)break; + if (i==MAX_PATH_LENGTH)return false; + if((wi->size < arcInfo.min) || (wi->size > arcInfo.max))return false; + return true; +} + +//--------------------------------------------------------- make save by work file +//Cardマウントã€ãƒ¯ãƒ¼ã‚¯ãƒ•ァイルオープンã—ã¦å‘¼ã¶ +//ファイル無(num=0) -> コミットã®ã¿ +myResult Work2Save(TgtDev dev,u32 num) +{ + s64 total = 0; + int ct=0; + myResult res; + + res = RESULT_OK; + while((res==RESULT_OK) && (ct < num)){ + CheckSysBreak();//Home,é›»æºãƒœã‚¿ãƒ³ã«ã‚ˆã‚‹ä¸­æ–­å‡¦ç† + if(CheckInsEject())res = RESULT_INSEJECT;//挿抜ãƒã‚§ãƒƒã‚¯ + else{ + if(save.Read(dev,(char*)&work_info,WORK_INFO_SIZE) != WORK_INFO_SIZE) + { + res= RESULT_FAIL_READ; + }else{ + if (InfoChk(&work_info)==false)res = RESULT_FAIL_READ;//無効ãªãƒ•ァイル情報 + else{ + //作æˆä»˜ã‚ªãƒ¼ãƒ—ン + //if (save.OpenW(TGT_CARD,work_info.path)==false)res = RESULT_FAIL_OPENW; + //大容é‡ã§ã¯å…ˆã«Createã—ã¨ãæ–¹ãŒæ–­ç„¶é€Ÿã終ã‚ã‚‹(2012.9月ç¾åœ¨ã€SDK4.2.3ã«ã¦) + if (save.CreateFile(TGT_CARD,work_info.path,work_info.size)==false)res = RESULT_FAIL_OPENW; + if (save.OpenW(TGT_CARD,work_info.path)==false)res = RESULT_FAIL_OPENW; + else{ + scr_CountPerMax(ct,arcInfo.FileCount);//カウンタ表示 + res = save.OpnCpy(TGT_CARD,dev,work_info.size);//dev -> Card + if (res == RESULT_OK){ + total += save.FileSize(TGT_CARD); + ct++; + if (ct == num)break;//終了 + } + save.CloseW(TGT_CARD);//Close & flush + } + } + } + } + } + save.Close(dev);//Close + if (res==RESULT_OK){ + if(ct != num)res = RESULT_FAIL;//異常ãªãƒ«ãƒ¼ãƒ—抜㑠+ else if(save.Commit()==false)res = RESULT_FAIL_WRITE; + } + save.Unmount(TGT_CARD); + scr_Total(total);//サイズ表示 + scr_CountPerMax(ct,num);//カウンタ表示 + return res; +} + + + +//------------------------------------------------------- Card -> CTR +RetCode Card2Ctr() +{ + BkupDev = TGT_MEM;//デフォã¯ãƒ¡ãƒ¢ãƒª + + //å®Ÿè¡Œç¢ºèª + scr_BackupYesNo(); + u8 evt = WaitUI();//入力待㡠+ if (evt == EVNT_INEX)return INSEJECT;//挿抜ã«ã‚ˆã‚‹ä¸­æ–­ + if (evt != EVNT_YES)return CANCEL;//キャンセル + //ç”»é¢è¡¨ç¤º + scr_Backup(); + + scr_Status(MessTxt(MT_ChkCard),COLOR_YELLO);//"カード確èªä¸­"表示 + scr_Vsnc();//ç”»é¢æ›´æ–°å¾…ã¡ + //マウント&ディレクトリ情報å–å¾— + if( save.Mount(TGT_CARD) != RESULT_OK ){PutError(TGT_CARD);return ERROR;} + if(save.GetInfo(&arcInfo,&dcList)==false){PutError(TGT_CARD);save.Unmount(TGT_CARD);return ERROR;} + if ((arcInfo.FileCount > arcInfo.FileEntry) + || (arcInfo.DirCount > arcInfo.DirEntry)){PutError(TGT_CTR,ERC_EXEC);save.Unmount(TGT_CARD);return ERROR;} + if(arcInfo.DirCount >= MAX_DCLIST){PutError(TGT_MEM,ERC_EXEC);save.Unmount(TGT_CARD);return ERROR;} + + + //ワーク作æˆå…ˆã®åˆ¤å®š + if (forceSD && alive_Sd) BkupDev = TGT_SD;//強制SD + else{//ç·ã‚µã‚¤ã‚ºãŒãƒ¡ãƒ¢ãƒªã«åŽã¾ã‚‹ã‹ï¼Ÿ + if (arcInfo.total > MEM_BKUP_LIMIT) + { + if (alive_Sd)BkupDev = TGT_SD;//SD + else {//メモリオーム+ PutError(TGT_MEM,ERC_NOSPACE); + save.Unmount(TGT_CARD); + return ERROR; + } + } } - if (scr_evnt != EVNT_YES)return CANCEL;//キャンセル - scr_Restore();//ç”»é¢è¡¨ç¤º - scr_Status(MessTxt(MT_ChkBkup),COLOR_YELLO); - -#ifdef CSM_FLAG_USE_SD - if (BkupSd)return Sd2Card();//SD使用 -#endif - - //一時ä¿å­˜ã®ãƒžã‚¦ãƒ³ãƒˆ - res = memsave.Mount(); - if(res != RESULT_OK){ - PutError(TGT_MEM); + //ãƒ¯ãƒ¼ã‚¯ãƒ•ã‚¡ã‚¤ãƒ«ä½œæˆ + scr_Status(MessTxt(MT_CrtBkup),COLOR_YELLO); + scr_Vsnc(); + if (CreateWork(BkupDev,&arcInfo)==false) + { + PutError(BkupDev); + save.Unmount(TGT_CARD); return ERROR; } - //セーブデータã®ãƒ•ォーマット&マウント + if (arcInfo.FileCount == 0) + {//ファイルãªã—(ディレクトリ作æˆã¯å¿…è¦ãªã®ã§æ›¸æˆ»ã—ã§å¿˜ã‚Œãªã„ï¼ï¼) + scr_Status(MessTxt(MT_FileNot),COLOR_YELLO);//"ファイルãªã—"警告 + save.CloseW(TGT_SD); + save.Unmount(TGT_CARD); + strcpy(arcInfo.Pcode,save.PrdCode); + return SUCCESS; + } + + wcscpy(MessWork,MessTxt(MT_Reading));//"Reading"メッセージ + //if (BkupDev == TGT_SD)wcscat(MessWork,L"(to SD)"); + myResult res = Save2Work(BkupDev,arcInfo.FileCount);//Card -> Work + if (res == RESULT_OK){ + res = Verifi(BkupDev,TGT_CARD); + if (res == RESULT_OK){ + strcpy(arcInfo.Pcode,save.PrdCode); + } + } + return PutResltErr(res,TGT_CARD,BkupDev);//çµæžœè¡¨ç¤º&リターン + +} + +//------------------------------------------------------- CTR -> Card +RetCode Ctr2Card() +{ +//Card2Ctrã§BkupDevã«ãƒ¯ãƒ¼ã‚¯ãƒ•ã‚¡ã‚¤ãƒ«ä½œæˆæ¸ˆã¿å‰æ + + //å®Ÿè¡Œç¢ºèª + scr_RestoreYesNo(); + u8 evt = WaitUI();//入力待㡠+ if (evt == EVNT_INEX)return INSEJECT;//挿抜ã«ã‚ˆã‚‹ä¸­æ–­ + if (evt != EVNT_YES)return CANCEL;//キャンセル + //ç”»é¢è¡¨ç¤º + scr_Restore(); + + //セーブデータã®ãƒ•ォーマット(マウント込) scr_Status(MessTxt(MT_CardFormat),COLOR_YELLO); - res = savedata.Format(&arcInfo); - if(res != RESULT_OK){ - memsave.Unmount(); + scr_Vsnc(); + if(save.Format(&arcInfo) != RESULT_OK) + { PutError(TGT_CARD); + save.Unmount(TGT_CARD); return ERROR; } @@ -778,901 +832,57 @@ RetCode Ctr2Card() //ファイルã®å­˜åœ¨ã¨é–¢ä¿‚ãªãä½œæˆ if(dcList.num >0) { - int i,rev=0; + int i; + bool mkdir,err = false; + wcscpy(MessWork,MessTxt(MT_CrtDir)); + for (i=0;i=arcInfo.FileCount) - {//カウンタ壊れã€ãƒ¡ãƒ¢ãƒªãƒ•ローã®å¯èƒ½æ€§ - res = RESULT_FAIL; - break; - } - - scr_CountPerMax(ct,arcInfo.FileCount); - if (memsave.Open(file_pathw)==false) - { - res = RESULT_FAIL_OPEN; - break; - } - fsize = memsave.FileSize; - total += fsize; - - if (savedata.OpenC(file_pathw,fsize,&mkdir)==false) - { - //ディレクトリã¯ä½œæˆæ¸ˆã¿ãªã®ã§ä½œæˆã•れãŸã‚‰ã‚¨ãƒ©ãƒ¼ - res = RESULT_FAIL_OPENW; - break; - } - /* - int rev = 0; - while(1){ - if (savedata.OpenC(file_pathw,fsize,&mkdir)==false) - { - if(mkdir)//ディレクトリã®ã¿ä½œæˆ - {//æ·±ã„å ´åˆã«ä½œæˆãŒå¤šã„ã¨ç”»é¢ãŒæ­¢ã¾ã‚‹ã®ã§ - rev++; - if (rev & 1)scr_MessOnCount2(MessTxt(MT_CrtDir1)); - else scr_MessOnCount2(MessTxt(MT_CrtDir2)); - - }else{ - res = RESULT_FAIL_OPENW; - //memsave.Close(); - break; - } - }else break; - } - if (res != RESULT_OK)break; - */ - - //ãƒ¡ãƒ¢ãƒªãƒ•ã‚¡ã‚¤ãƒ«ã§æ¤œè¨¼ã‚¨ãƒ©ãƒ¼ã¯ãªã„ã®ã§512ã”ã¨ã§ã‚ã‚‹å¿…è¦ã¯ç„¡ã„㌠- //メモリ節約ã®ãŸã‚åŒã˜æ–¹æ³•ã‚’ã¨ã‚‹ - msize = fsize; - int itvl = 0; - while(fsize) - { - if(msize > FILEBUFF_SIZE * 2){ - scr_CountPerMax2(msize-fsize,msize,0); - if (++itvl & 1)scr_Status(MessTxt(MT_Copy1),COLOR_PARPL); - else scr_Status(MessTxt(MT_Copy2),COLOR_PARPL); - }else scr_MessOnCount2(MES_NULL); - - if (fsize>FILEBUFF_SIZE) - { - rsize = FILEBUFF_SIZE; - fsize -= FILEBUFF_SIZE; - }else{ - rsize = fsize; - fsize = 0; - } - if(memsave.Read(fileBuffer,rsize) != rsize ) - { - res = RESULT_FAIL_READ; - break; - } - if(savedata.Write(fileBuffer,rsize) != rsize ) - { - res = RESULT_FAIL_WRITE; - break; - } - } - savedata.CloseW(); - memsave.Close(); - ct++; + //ワーク開ã + if(OpenWork(BkupDev) != RESULT_OK){ + PutError(BkupDev); + save.Unmount(TGT_CARD); + return ERROR; + } + + wcscpy(MessWork,MessTxt(MT_Writing));//"Writing" + //if (BkupDev == TGT_SD)wcscat(MessWork,L"(from SD)"); + myResult res = Work2Save(BkupDev,arcInfo.FileCount);// Work -> CARD + if (res == RESULT_OK){ + res = Verifi(TGT_CARD,BkupDev);//ベリファイ + if(res != RESULT_OK){ + //表示ã®éƒ½åˆã§Verifiã®ã‚¨ãƒ©ãƒ¼ã¯rdevã‚’CARDã«ã™ã‚‹ + return PutResltErr(res,TGT_CARD,BkupDev); } - savedata.Close(); - memsave.CloseW(); } - - savedata.Commit(); - savedata.Unmount(); - memsave.Unmount(); - scr_CountPerMax(ct,arcInfo.FileCount); - scr_CountPerMax2(0,0,total); - -//çµæžœ - switch(res){ - case RESULT_OK: - if (Verifi(true)){ - if(memsave.Delete()){//ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除 - scr_Status(MessTxt(MT_Complate),COLOR_WHITE); - return SUCCESS; - } - } - PutError(TGT_CARD,ERC_VERIFI); - break; - - case RESULT_FAIL_WRITE: - case RESULT_FAIL_OPENW: - PutError(TGT_CARD,ERC_WRITE); - break; - case RESULT_FAIL_READ: - case RESULT_FAIL_OPEN: - PutError(TGT_MEM,ERC_READ); - break; - default: - PutError(TGT_NONE,ERC_EXEC); - break; - } - return ERROR; + return PutResltErr(res,BkupDev,TGT_CARD);//çµæžœè¡¨ç¤º&リターン } -//******************************************** for SD -//パス長オーãƒã®ãƒ•ァイルã¯ãƒ¡ãƒ¢ãƒªä¸Šã«è¨˜éŒ² -//mem:/å…ƒãƒãƒ¼ãƒ  <- リãƒãƒ¼ãƒ åæ ¼ç´ -//sd:/ワーク/リãƒãƒ¼ãƒ å <-ãƒ‡ãƒ¼ã‚¿æ ¼ç´ -//20000ファイル程度ã¾ã§ - -#ifdef CSM_FLAG_USE_SD -bool VerifiSd() -{ - myResult res; - int ct,i,msize,rsize; - s64 total=0,pos; - wchar_t ws[20];//"/"+16文字+"\0" - - - //セーブデータã®ãƒžã‚¦ãƒ³ãƒˆ - res = savedata.Mount(); - if(res != RESULT_OK){ - //PutError(TGT_CARD); - return false; - } - - //出力デãƒã‚¤ã‚¹ã®ãƒžã‚¦ãƒ³ãƒˆ - res = exsave.Mount(); - if(res != RESULT_OK){ - //PutError(TGT_SD); - return false; - } - memsave.Mount(); - - ct =0; - if (arcInfo.FileCount == 0)//ファイルãŒç„¡ã„ - { - savedata.Unmount(); - exsave.Unmount(); - return true;//フォーマット一致ã®ã¿ - }else{ - scr_Status(MessTxt(MT_Compair),COLOR_YELLO); - savedata.ResetPath(); - exsave.ResetPath(); - s64 fsize; - res = RESULT_OK; - while(res==RESULT_OK){ - if(CheckInsExit())break;//挿抜ã«ã‚ˆã‚‹ä¸­æ–­ - res = savedata.GetPath(file_pathw); - if (res != RESULT_OK) - { - if (res == RESULT_DIR_LEVEL_OVER){ - break; - } - if (res == RESULT_PATH_LENGTH_OVER){ - break; - } - res = RESULT_FAIL_OPEN; - break; - } - if (file_pathw[0] == 0)break;//root then end - if (ct>=arcInfo.FileCount) - {//カウンタ壊れã€ãƒ¡ãƒ¢ãƒªãƒ•ローã®å¯èƒ½æ€§ - res = RESULT_FAIL; - break; - } - if(CheckInsExit())break;//挿抜ã«ã‚ˆã‚‹ä¸­æ–­ - scr_CountPerMax(ct,arcInfo.FileCount); - if (savedata.Open(file_pathw)==false) - { - res = RESULT_FAIL_OPEN; - break; - } - fsize = savedata.FileSize; - total += fsize; - - if (memsave.Open(file_pathw)) - {//リãƒãƒ¼ãƒ å¯¾è±¡ - memsave.Read((char*)ws,18);//リãƒãƒ¼ãƒ å - ws[9]=0;ws[10]=0; - wcscpy(file_pathw,wk_dir);//æ ¼ç´å…ˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª - wcscat(file_pathw,ws);//ãƒ‘ã‚¹å¤‰æ› - memsave.Close(); - } - if(CheckInsExit())break;//挿抜ã«ã‚ˆã‚‹ä¸­æ–­ - if (exsave.Open(file_pathw)==false) - { - res = RESULT_FAIL_OPENW; - //savedata.Close(); - break; - } - if (fsize != exsave.FileSize)//file size - { - res = RESULT_FAIL; - break; - } - - msize=fsize; - if(msize <= FILEBUFF_SIZE ){//一回ã§èª­ã‚るサイズãªã‚‰ã‚²ãƒ¼ã‚¸ã¯å‡ºã•ãªã„ - scr_CountPerMax2(0,0,-1); - } - pos = 0; - while(fsize) - { - if(msize > FILEBUFF_SIZE ){ - scr_CountPerMax2(msize-fsize,msize,0); - } - if (fsize > FILEBUFF_SIZE) - { - rsize = FILEBUFF_SIZE; - fsize -= FILEBUFF_SIZE; - }else{ - rsize = fsize; - fsize = 0; - } - if(CheckInsExit())break;//挿抜ã«ã‚ˆã‚‹ä¸­æ–­ - if (ReadBlock(pos,rsize)==false) - { - res = RESULT_FAIL_READ; - break; - } - pos += rsize; - if(CheckInsExit())break;//挿抜ã«ã‚ˆã‚‹ä¸­æ–­ - if(exsave.Read(fileBuffer_ex,rsize) != rsize ) - { - res = RESULT_FAIL; - break; - } - for (i = 0;i=arcInfo.FileCount) - {//カウンタ壊れã€ãƒ¡ãƒ¢ãƒªãƒ•ローã®å¯èƒ½æ€§ - res = RESULT_FAIL; - break; - } - - scr_CountPerMax(ct,arcInfo.FileCount);//カウンタ表示 - if (exsave.Open(file_pathw)==false) - { - res = RESULT_FAIL_OPEN; - break; - } - fsize = exsave.FileSize; - total += fsize; - - if (savedata.CheckPathBit & cpb_ex ) - {//é•åパスåã‚り? - if (CmpDirW(file_pathw,wk_dir)==1) - {//リãƒãƒ¼ãƒ ãƒ•ァイルãªã‚‰å…ƒã®ãƒ‘スåを探㙠- memsave.ResetPath(); - int i=0;bool b=false; - ws[9]=0;ws[10]=0; - while(i差替?? or メモリ破壊?? - res = RESULT_FAIL; - break; - } - } - } - - int rev = 0; - while(1){ - if (savedata.OpenC(file_pathw,fsize,&mkdir)==false) - { - if(mkdir)//ディレクトリã®ã¿ä½œæˆ - {//æ·±ã„å ´åˆã«ä½œæˆãŒå¤šã„ã¨ç”»é¢ãŒæ­¢ã¾ã‚‹ã®ã§ - rev++; - if (rev & 1)scr_MessOnCount2(MessTxt(MT_CrtDir1)); - else scr_MessOnCount2(MessTxt(MT_CrtDir2)); - }else{ - res = RESULT_FAIL_OPENW; - //exsave.Close(); - break; - } - }else break; - }//while - if (res != RESULT_OK)break; - - msize = fsize; - int itvl = 0; - while(fsize) - { - if(msize > FILEBUFF_SIZE * 2){ - scr_CountPerMax2(msize-fsize,msize,0); - if (++itvl & 1)scr_Status(MessTxt(MT_Copy1),COLOR_PARPL); - else scr_Status(MessTxt(MT_Copy2),COLOR_PARPL); - }else scr_MessOnCount2(MES_NULL); - - if (fsize>FILEBUFF_SIZE) - { - rsize = FILEBUFF_SIZE; - fsize -= FILEBUFF_SIZE; - }else{ - rsize = fsize; - fsize = 0; - } - if(exsave.Read(fileBuffer,rsize) != rsize ) - { - res = RESULT_FAIL_READ; - break; - } - if(savedata.Write(fileBuffer,rsize) != rsize ) - { - res = RESULT_FAIL_WRITE; - break; - } - }//while - savedata.CloseW(); - exsave.Close(); - ct++; - }//while - savedata.Close(); - exsave.CloseW(); - if(res == RESULT_OK)savedata.Commit(); - - savedata.Unmount(); - exsave.Unmount(); - memsave.Unmount(); - scr_CountPerMax(ct,arcInfo.FileCount); - scr_CountPerMax2(0,0,total); - -//çµæžœ - TgtDev ercd; - int ercc; - switch(res){ - case RESULT_OK: - if (VerifiSd()){ - memsave.Delete(); - if(exsave.Delete()){//ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除 - scr_Status(MessTxt(MT_Complate),COLOR_WHITE); - return SUCCESS; - } - } - ercd =TGT_CARD;ercc = ERC_VERIFI;//ベリファイエラー - break; - case RESULT_FAIL_WRITE: - case RESULT_FAIL_OPENW: - ercd = TGT_CARD;ercc = ERC_WRITE; - break; - case RESULT_FAIL_READ: - case RESULT_FAIL_OPEN: - ercd = TGT_SD;ercc = ERC_READ; - break; - default: - ercd = TGT_NONE;ercc = ERC_EXEC; - break; - } - return PutErrRetCode(ercd,ercc); -} - - - -//Crad2Ctrより呼ã°ã‚Œã‚‹ -RetCode Card2Sd() -{ - myResult res; - int ct=0,msize,rsize; - s64 total=0,fsize,pos; - - int i; - wchar_t ws[20];//"/"+16文字+"\0" - - BkupSd = true; - - //拡張セーブãŒå­˜åœ¨ã—ãŸã‚‰æ¶ˆã™ - scr_Status(MessTxt(MT_ChkBkup),COLOR_YELLO); - if(exsave.IsExist()){ - if(exsave.Delete()==false) return PutErrRetCode(TGT_SD); - } - if(CheckInsExit())return INSEXIT;//抜ã‘ã§"ãªã—"判定ã®å ´åˆ - - //一時ä¿å­˜å…ˆã®ä½œæˆ - scr_Status(MessTxt(MT_CrtBkup),COLOR_YELLO); - //拡張セーブã§é•åã«ãªã‚‹ãƒ‘スåã‚り? - if (savedata.CheckPathBit & cpb_ex ) - { - //該当ファイルを変åä¿å­˜ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªè¿½åŠ  - res = exsave.Create(arcInfo.DirEntry+1,arcInfo.FileEntry); - }else res = exsave.Create(arcInfo.DirEntry,arcInfo.FileEntry); - if (res != RESULT_OK) return PutErrRetCode(TGT_SD); - - if(CheckInsExit())return INSEXIT;//抜㑠- - //パラメータã¯ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—時 - //Topç”»é¢é–‹å§‹æ™‚ã€æŒ¿å…¥ã‚¤ãƒ™ãƒ³ãƒˆã§å–å¾— - if (arcInfo.FileCount == 0)//ファイルãŒç„¡ã„ - { - scr_Status(MessTxt(MT_FileNot),COLOR_YELLO); - strcpy(arcInfo.Pcode,savedata.PrdCode); - savedata.Unmount(); - return SUCCESS;//フォーマットã®ã¿ - } - - - //簡易サイズãƒã‚§ãƒƒã‚¯ - //SDã®ã‚¯ãƒ©ã‚¹ã‚¿ã‚µã‚¤ã‚ºã‚„ヘッダã§ãƒ¡ãƒ¢ãƒªFSより多ãå æœ‰ã™ã‚‹ - //セクタサイズ4K:2GBã€32K:4GB 余裕を見ã¦ãŠã(ファイル数上é™ã§ã®æœ€æ‚ª) - //4GBデãƒã‚¤ã‚¹ã®ç§»è¡Œãªã‚‰ã€8G以上ã®SDを使ㆠ- fsize = exsave.GetFreeSize();//å–å¾—APIãŒãƒžã‚¦ãƒ³ãƒˆå¿…é ˆãªã®ã§Create後ã§ãªã„ã¨ãƒ€ãƒ¡ - //ヘッダ16k+4K(ファイルå+アライメント) ..SDセクタサイズ4Kã®å‰æ - sSize = arcInfo.total + arcInfo.FileCount*20480; - if ((sSize > fsize) || (fsize ==0)) return PutErrRetCode(TGT_SD,ERC_NOSPACE); - - //メモリFS上ã«ä½œæˆ..ファイルåä¿å­˜ã®ãŸã‚ã€ä¸­èº«ã¯SD上ã®ãƒ•ァイルå - //æ‹¡å¼µã‚»ãƒ¼ãƒ–ã¯æœ€å¤§ãƒ‘ス長ãŒãƒ¦ãƒ¼ã‚¶ã‚»ãƒ¼ãƒ–より短ã„ãŸã‚è¶…ãˆã‚‹ã‚‚ã®ã¯å¤‰å - //オリジナルファイルåã§ä½œæˆã—ãŸãƒ•ァイルã«å¤‰æ›´å¾Œã®ãƒ•ァイルåã‚’æ ¼ç´ - //ワークã®10MByteã§1万ファイルãらㄠ- memsave.Delete(); - memsave.Create(1,arcInfo.FileCount); - memsave.Mount(); - - //read - scr_Status(MessTxt(MT_Reading),COLOR_PARPL); - savedata.ResetPath(); - total=0;ct=0;rename_n=0; - res = RESULT_OK; - while(res==RESULT_OK){ - res = savedata.GetPath(file_pathw); - if (res != RESULT_OK) - { - if ((res != RESULT_DIR_LEVEL_OVER) - && (res != RESULT_PATH_LENGTH_OVER)) res = RESULT_FAIL_OPEN; - break; - } - if (file_pathw[0] == 0)break;//root then end - if (ct>=arcInfo.FileCount) - {//カウンタ壊れã€ãƒ¡ãƒ¢ãƒªãƒ•ローã®å¯èƒ½æ€§ - res = RESULT_FAIL; - break; - } - - scr_CountPerMax(ct,arcInfo.FileCount); - if (savedata.Open(file_pathw)==false) - { - res = RESULT_FAIL_OPEN; - break; - } - fsize = savedata.FileSize; - total += fsize; - - //パスåãƒã‚§ãƒƒã‚¯ - if (CheckPathEx(file_pathw) == false) - {//メモリFS上ã«ãƒ•ァイル作æˆ(パスå記録ã®ã¿ç›®çš„) - savedata.Close(); - if (memsave.OpenW(file_pathw,512)==false) - { - res = RESULT_FAIL_OPENW; - break; - } - - //リãƒãƒ¼ãƒ åã®æ ¼ç´ - swprintf(ws,16,L"/%8x",rename_n);//リãƒãƒ¼ãƒ  - for (i=1;i<8;i++)if(ws[i]==L' ')ws[i]=L'0'; - rename_n++; - if(memsave.Write( (char*)ws,18) != 18)//wchar 9文字 - { - res = RESULT_WORK_OVER;//ワークä¸è¶³ - break; - } - memsave.CloseW(); - }else - { - int rev = 0; - while(1){ - if (exsave.OpenC(file_pathw,fsize,&mkdir)==false) - { - if(mkdir)//ディレクトリã®ã¿ä½œæˆ - {//æ·±ã„å ´åˆã«ä½œæˆãŒå¤šã„ã¨ç”»é¢ãŒæ­¢ã¾ã‚‹ã®ã§ - rev++; - if (rev & 1)scr_MessOnCount2(MessTxt(MT_CrtDir1)); - else scr_MessOnCount2(MessTxt(MT_CrtDir2)); - }else{ - res = RESULT_FAIL_OPENW; - //exsave.Close(); - break; - } - }else break; - } - if (res != RESULT_OK)break; - msize = fsize; - int itvl = 0; - pos =0; - while(fsize) - { - if(msize > FILEBUFF_SIZE * 2) - { - scr_CountPerMax2(msize-fsize,msize,0); - if (++itvl & 1)scr_Status(MessTxt(MT_Copy1),COLOR_PARPL); - else scr_Status(MessTxt(MT_Copy2),COLOR_PARPL); - }else scr_MessOnCount2(MES_NULL); - - if (fsize>FILEBUFF_SIZE) - { - rsize = FILEBUFF_SIZE; - fsize -= FILEBUFF_SIZE; - }else{ - rsize = fsize; - fsize = 0; - } - if (ReadBlock(pos,rsize)==false) - { - res = RESULT_FAIL_READ; - break; - } - pos += rsize; - if(exsave.Write(fileBuffer,rsize) != rsize ) - { - NN_LOG("desc = %d\n",savedata.LastNnResult.GetDescription()); - res = RESULT_FAIL_WRITE; - break; - } - }//fsize - ct++; - savedata.Close(); - exsave.CloseW(); - }//else - }//while - - if ((res == RESULT_OK) && (savedata.CheckPathBit & cpb_ex)) - {//é•åパスã‚りãªã‚‰ã€ãƒªãƒãƒ¼ãƒ ã—ã¦ä¿å­˜ - nn::Result result; - nn::fnd::DateTime tm; - //ディレクトリ作æˆ..既存åã‚’é¿ã‘ã‚‹ãŸã‚作æˆå¾Œã«è¡Œã† - i = 0; - while(i++ < 10 ){//試行回数(無駄?) - tm = nn::fnd::DateTime::GetNow(); - //退é¿å…ˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå作æˆ:SDK制é™ã§16文字ã¾ã§ - swprintf(file_pathw,3,L"%3d",tm.GetMilliSecond()); - if (file_pathw[0]==L' ')file_pathw[0] = L'0'; - if (file_pathw[1]==L' ')file_pathw[1] = L'0'; - wcscpy(wk_dir,L"/cSm_");//通常ã€ä½¿ã‚れãªã„ã§ã‚ã‚ã†åå‰ã«ã™ã‚‹ - wcscat(wk_dir,file_pathw); - wcscat(wk_dir,L"_zzz"); - exsave.GetRootPath(file_pathw); - wcscat(file_pathw,wk_dir); - result = nn::fs::TryCreateDirectory(file_pathw); - if (result.IsSuccess())break; - if(CheckInsExit())break; - } - if (result.IsFailure()){ - exsave.Unmount(); - memsave.Unmount(); - savedata.Unmount(); - exsave.Delete();//ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除 - memsave.Delete(); - if(isInsEject != InEx_None )return INSEXIT; - PutError(TGT_SD,ERC_WORK);//退é¿å…ˆãŒç¢ºä¿ã§ããªã„ - return ERROR; - } - - memsave.ResetPath(); - while(res==RESULT_OK){ - res = memsave.GetPath(file_pathw);//リãƒãƒ¼ãƒ å¯¾è±¡ãƒ•ァイルå - if (file_pathw[0] == 0)break;//root then end - if (ct>=arcInfo.FileCount) - { - res = RESULT_FAIL; - break; - } - - scr_CountPerMax(ct,arcInfo.FileCount); - - if (savedata.Open(file_pathw)==false)//ユーザセーブ開ã - { - res = RESULT_FAIL_OPEN; - break; - } - fsize = savedata.FileSize; - - //リãƒãƒ¼ãƒ åå–å¾— - if (memsave.Open(file_pathw)==false) - { - res = RESULT_FAIL;//メモリã‹ã‚‰ãªã®ã§é€šå¸¸ã‚りãˆãªã„ - break; - } - if(memsave.Read((char*)ws,18)!=18)//wchar 9文字 - { - res = RESULT_FAIL;//メモリã‹ã‚‰ãªã®ã§é€šå¸¸ã‚りãˆãªã„ - break; - } - memsave.Close(); - ws[9]=0;//終端 - ws[10]=0; - wcscpy(file_pathw2,wk_dir); - wcscat(file_pathw2,ws); - if (exsave.OpenC(file_pathw2,fsize,&mkdir)==false) - {//エラーもã—ãã¯ã€é€€é¿å…ˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãŒç„¡ã„ - res = RESULT_FAIL_OPENW; - break; - } - msize = fsize; - pos =0; - while(fsize) - { - if (fsize>FILEBUFF_SIZE) - { - rsize = FILEBUFF_SIZE; - fsize -= FILEBUFF_SIZE; - }else{ - rsize = fsize; - fsize = 0; - } - if (ReadBlock(pos,rsize)==false) - { - res = RESULT_FAIL_READ; - break; - } - pos += rsize; - if(exsave.Write(fileBuffer,rsize) != rsize ) - { - res = RESULT_FAIL_WRITE; - break; - } - }//while(fsize) - ct++; - savedata.Close(); - exsave.CloseW(); - memsave.Close(); - }//while - }//if - savedata.Unmount(); - exsave.Unmount(); - memsave.Unmount(); - scr_CountPerMax(ct,arcInfo.FileCount); - scr_CountPerMax2(0,0,total); - -//çµæžœ - TgtDev ercd; - int ercc; - switch(res) - { - case RESULT_OK: - if (VerifiSd()) - { - scr_Status(MessTxt(MT_Complate),COLOR_WHITE); - strcpy(arcInfo.Pcode,savedata.PrdCode); - return SUCCESS; - } - ercd = TGT_CARD;ercc = ERC_VERIFI; - break; - case RESULT_FAIL_WRITE: - case RESULT_FAIL_OPENW: - ercd = TGT_SD;ercc = ERC_WRITE;//ライト失敗 - break; - case RESULT_FAIL_READ: - case RESULT_FAIL_OPEN: - ercd = TGT_CARD;ercc = ERC_READ;//リード - break; - case RESULT_WORK_OVER: - ercd = TGT_NONE;ercc = ERC_NOSPACE;//ワークä¸è¶³..é•åフアイル多ã™ãŽ - break; - default: - ercd = TGT_NONE;ercc = ERC_EXEC; - break; - } - exsave.Delete();//ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除 - memsave.Delete(); - return PutErrRetCode(ercd,ercc); -} - -#endif - -//--------------------------------------------------------------- ã‚»ãƒ¼ãƒ–ãƒ‡ãƒ¼ã‚¿ã®æƒ…å ±å–å¾— -//呼ã¶å‰ã« tmerr ã®ã‚¯ãƒªã‚¢ã‚’忘れãªã„事 -void CheckSaveDataState() -{ - Formatted = false; - Active = false; - - if (savedata.GetPrdCode()) - { - //NN_LOG("%d",savedata.LastNnResult.GetDescription()); - Active = true;//カード - if (savedata.IsExist())//マウントã§ç¢ºèª - { - Formatted=true; - }else{ - tmerr |= SDATA_ERRPUT_MEDIA; - } - } - scr_PrdCode(savedata.PrdCode); - //プロダクトコードã®ãƒã‚§ãƒƒã‚¯ - isAgreePCode = strcmp(savedata.PrdCode,arcInfo.Pcode)==0; -} - -void CheckExSaveState() -{ -#ifdef CSM_FLAG_USE_SD - if (alive_Sd)exActive = nn::fs::IsSdmcWritable(); - else exActive = true; -#else - exActive = true; -#endif - if (exActive){ -#ifdef CSM_FLAG_USE_SD - if (BkupSd){ - exFormatted = exsave.IsExist(); - exsave.Unmount(); - }else{ -#endif - exFormatted = memsave.IsExist(); - memsave.Unmount(); -#ifdef CSM_FLAG_USE_SD - } -#endif - - }else{ - exFormatted = false; - } -//デãƒã‚°æ™‚ã¯æŠœã‘ã¦ã‚‚クリアã—ãªã„ -#ifndef CSM_FLAG_DEBUG - if (exFormatted==false) arcInfo.Pcode[0] = 0; -#endif - scr_PrdCodeEx(arcInfo.Pcode); - //プロダクトコードã®ãƒã‚§ãƒƒã‚¯ - isAgreePCode = strcmp(savedata.PrdCode,arcInfo.Pcode)==0; -} - -//SD挿抜 -void Evt_SdInEx() -{ -#ifndef CSM_FLAG_DEBUG - ScrClr(); - scr_TopMenu(Formatted,Active,exFormatted,exActive,tmerr); - scr_Draw(); - failstop();//åœæ­¢ -#else - CheckExSaveState();//状態更新 - scr_evnt = EVNT_INEX; -#endif -} //---------------------------------------------------------------- 入力待㡠-void WaitUI() +u8 WaitUI() { - tmerr = 0; scr_Draw();//ç”»é¢æ›´æ–° scr_evnt = EVNT_NONE; while(scr_evnt == EVNT_NONE) @@ -1680,82 +890,51 @@ void WaitUI() //nn::os::Thread::Yield();//スレッド実行 //scr_GetEvnt();//入力イベント - CheckSysBreak();//ä¸­æ–­å‡¦ç† + CheckSysBreak();//Home,é›»æºãƒœã‚¿ãƒ³ã«ã‚ˆã‚‹ä¸­æ–­å‡¦ç† -#ifdef CSM_FLAG_USE_SD - //挿抜を検知ã—ãŸã‚‰ã‚¢ãƒ—リ終了待ã¡ã™ã‚‹ã‚ˆã†ã™ã‚‹ - if (ejectEvntSd.TryWait()){ - isInsEject = InEx_EjcSd; - Evt_SdInEx(); - return; - } - if (insEvntSd.TryWait()){ - isInsEject = InEx_InsSd; - Evt_SdInEx(); - return; - } -#endif - //挿抜を検知ã—ãŸã‚‰ä¸­æ–­ã—ã¦æŠœã‘ã‚‹ - //トップ以外ã§ã¯ãƒˆãƒƒãƒ—ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¸æˆ»ã‚‹ã‚ˆã†ã™ã‚‹ - if (ejectEvnt.TryWait()){ - isInsEject = InEx_EjcCard; - CheckSaveDataState(); - scr_evnt = EVNT_INEX; - return; - } - if (insEvnt.TryWait()){ - isInsEject = InEx_InsCard; - CheckSaveDataState(); - scr_evnt = EVNT_INEX; - return; + //挿抜ãƒã‚§ãƒƒã‚¯ + //SD:åœæ­¢ + //Card:トップメニューã§ã¯ç„¡è¦–ã€ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆä¸­ã¯ãƒˆãƒƒãƒ—ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¸æˆ»ã‚‹ + if(CheckInsEject()){ + return EVNT_INEX; } nn::os::Thread::Yield();//スレッド実行..タッãƒï¼†ãƒœã‚¿ãƒ³å–å¾— } ScrClr();//ç”»é¢æ¶ˆåŽ» nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(500));//ãƒãƒ£ã‚¿å¯¾ç­– + return scr_evnt; } -void InsExtErrPut(tIsInsEject n) +void InsEjcErrPut() { - switch (n) - { - case InEx_EjcSd: - case InEx_InsSd://SD insert or exit - PutError(TGT_SD,ERC_PULLOUT); -#ifndef CSM_FLAG_DEBUG - failstop();//stop running -#endif - break; - case InEx_EjcCard: - PutError(TGT_CARD,ERC_DEVICE); - break; - case InEx_InsCard://ç´ æ—©ã„æŠœãå·®ã—ã§Ejectイベント消ãˆã‚‹? - PutError(TGT_CARD,ERC_PULLOUT); - break; - default://通常ã‚りãˆãªã„ .. 実行時エラー - PutError(TGT_NONE,ERC_EXEC); - failstop();//stop running - break; + if (isInsEject & InEj_Sd) Evt_SdInEx(); + else if (isInsEject & InEj_Card) PutError(TGT_CARD,ERC_PULLOUT); + else { + PutError(TGT_CTR,ERC_EXEC); + failstop();//stop running } } -//---------------------- main loop -------------------------- -void nnMain() +//起動時ã®ãƒ¢ãƒ¼ãƒ‰é¸æŠžãƒœã‚¿ãƒ³ +#ifndef CSM_FLAG_DEBUG +#define STUP_BTN_COPYMODE (nn::hid::BUTTON_X | nn::hid::BUTTON_B) +#define STUP_BTN_FSD (nn::hid::BUTTON_Y | nn::hid::BUTTON_B) +#else +#define STUP_BTN_COPYMODE nn::hid::BUTTON_UP +#define STUP_BTN_FSD nn::hid::BUTTON_Y +#endif + + +//åˆæœŸåŒ– +void Init() { - RetCode retc; - //tColStr *colstr[4]; - //colstr[2] = &mess_WhenExc; - //colstr[3] = &mess_PoffSys; - isInsEject = InEx_None; - //NN_LOG("Start\n"); - nn::os::Initialize(); + //nn::os::Initialize();//SDK4.2 よりä¸è¦ã€å…¥ã‚Œã‚‹ã¨æ­¢ã¾ã‚‹ nn::fs::Initialize(); //DEA-SUPã«ã¦æŽ¨å¥¨ã®ãƒ•ãƒªãƒ¼ã‚ºæš«å®šå¯¾ç­–ï¼šç„¡ç·šãƒ‡ãƒ¼ãƒ¢ãƒ³ã‚’åœæ­¢ (2011.3.1 ç¾åœ¨) - //ãŸã ã—ã€ã‚¹ãƒªãƒ¼ãƒ—æ™‚ã¯æ­¢ã¾ã‚‰ãªã„ - //心é…ãªã‚‰æœ¬ä½“スイッãƒã§åˆ‡ã£ã¨ã + //スリープ中ã¯ï¼ˆã„ã¤ã®ã¾ã«é€šä¿¡ï¼Ÿï¼‰æ­¢ã¾ã‚‰ãªã„ã®ã§æœ¬ä½“スイッãƒåˆ‡ã‚‹ã®ãŒç¢ºå®Ÿ nn::ndm::Initialize(); nn::ndm::SuspendScheduler(); @@ -1766,78 +945,118 @@ void nnMain() nn::applet::DisableSleep();//スリープéžå¯¾å¿œ -#ifdef CSM_FLAG_USE_SD - //起動時ã«ï¼³ï¼¤ç¢ºèª - alive_Sd = nn::fs::IsSdmcWritable(); -#else - alive_Sd = false; -#endif //Heap appHeap.Initialize(nn::os::GetDeviceMemoryAddress(), nn::os::GetDeviceMemorySize(), nn::os::ALLOCATE_OPTION_LINEAR); const u32 GxHeapSize = 0x800000; heapForGx = reinterpret_cast(appHeap.Allocate(GxHeapSize)); - //ç”»é¢åˆæœŸåŒ– - - //メッセージ用テキストã®èª­ã¿è¾¼ã¿ - bool jp; - // nn::cfg::CTR::Initialize(); - // if (nn::cfg::GetLanguage() == nn::cfg::CFG_LANGUAGE_JAPANESE) - // { - // jp = true; - // LoadMessText(L"rom:/lang_jp.mes"); - //} - //else{ - jp = false; - LoadMessText(L"rom:/lang_en.mes"); - // } - // nn::cfg::Finalize(); - -#ifdef CSM_FLAG_DEBUG - //リリースå“ã¨åŒºåˆ¥ã™ã‚‹ãŸã‚タイトルã«[debug]を付ã‘ã‚‹(éžã‚»ã‚­ãƒ¥ã‚¢å“ã®æµå‡ºäºˆé˜²) - if (ScrInitialize(heapForGx,GxHeapSize,jp,true) == false)finish(); -#else - if (ScrInitialize(heapForGx,GxHeapSize,jp,false) == false)finish(); -#endif - //挿抜イベント - ejectEvnt.ClearSignal(); - insEvnt.ClearSignal(); - nn::fs::RegisterCardEjectedEvent(&ejectEvnt); - nn::fs::RegisterCardInsertedEvent(&insEvnt); -#ifdef CSM_FLAG_USE_SD - if (alive_Sd){ - ejectEvntSd.ClearSignal(); - insEvntSd.ClearSignal(); - nn::fs::RegisterSdmcEjectedEvent(&ejectEvntSd); - nn::fs::RegisterSdmcInsertedEvent(&insEvntSd); - //拡張セーブãŒå­˜åœ¨ã—ãŸã‚‰æ¶ˆã™ - if(exsave.IsExist())exsave.Delete(); - } -#endif + InitInsEject(); - // ã‚¹ãƒªãƒ¼ãƒ—è¦æ±‚ã«å¯¾ã™ã‚‹è¿”答を有効ã«ã™ã‚‹ - // ã¾ãŸã€è“‹ã®çŠ¶æ…‹ãƒã‚§ãƒƒã‚¯ã‚’行ã„è“‹ãŒé–‰ã˜ã‚‰ã‚Œã¦ã„ã‚‹ãªã‚‰ã‚¹ãƒªãƒ¼ãƒ—è¦æ±‚ãŒç™ºç”Ÿã™ã‚‹ + //ï¼³ï¼¤ç¢ºèª + //終了ã¾ã§ãƒžã‚¦ãƒ³ãƒˆç¶™ç¶šã€å·®æ›¿ã‚¿ã‚¤ãƒŸãƒ³ã‚°å‡ºæ¥ã‚‹ã®ã§ãƒªãƒžã‚¦ãƒ³ãƒˆé¿ã‘ã‚‹ + alive_Sd = nn::fs::IsSdmcWritable(); + if (alive_Sd){ + if(save.Mount(TGT_SD) != RESULT_OK){ + if(save.Create(TGT_SD,1,1) != RESULT_OK)alive_Sd = false; + }//ã¨ã‚Šã‚ãˆãšæ™‚é–“å„ªå…ˆã§çœããŒã€ã™ã§ã«ã‚ã‚‹å ´åˆæ¶ˆã—ã¦å†ä½œæˆãŒã„ã„ã‹ã‚‚ + } + + //ボタン押ã—èµ·å‹•ãƒã‚§ãƒƒã‚¯ + { + nn::hid::Initialize(); + nn::hid::PadReader padR; + nn::hid::PadStatus padS; + while (padR.ReadLatest(&padS) == false){}; + NN_LOG("PAD = %x",padS.hold); + +#ifdef CSM_FLAG_FORCE_SD + forceSD = alive_Sd; +#else + forceSD = false; +#endif + CopyMode = false; + switch(padS.hold){ + case STUP_BTN_COPYMODE: + CopyMode = true; + break; + case STUP_BTN_FSD: + if (alive_Sd){ + forceSD = true; + }else NN_LOG("mode cancel,no detect SD"); + break; + case STUP_BTN_COPYMODE | STUP_BTN_FSD: + if (alive_Sd){ + CopyMode = true; + forceSD = true; + }else NN_LOG("mode cancel,no detect SD"); + break; + } + if (CopyMode) NN_LOG("Copy mode\n"); + if (forceSD) NN_LOG("force SD\n"); + + } + + + {//テキスト設定 +#ifdef CSM_FLAG_DEBUG + //リリースå“ã¨åŒºåˆ¥ã™ã‚‹ãŸã‚タイトルã«[debug]を付ã‘ã‚‹(éžã‚»ã‚­ãƒ¥ã‚¢å“ã®æµå‡ºäºˆé˜²) + u8 flg = SCR_FLG_DBG; +#else + u8 flg = 0; +#endif + if(forceSD)flg += SCR_FLG_FSD;//"強制SD" + else if(alive_Sd==false)flg += SCR_FLG_NOSD;//"SDãªã—" + if(CopyMode)flg += SCR_FLG_CP;//コピーモード + + //è¨€èªžã‚³ãƒ¼ãƒ‰ã§æ—¥è‹±ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸åˆ‡æ›¿ + nn::cfg::CTR::init::Initialize();//descã«cfg::u ãŒç„¡ã„ã®ã§ã€initã‹ã‚‰å‘¼ã¶ + nn::cfg::CTR::CfgLanguageCode lcd = nn::cfg::CTR::GetLanguage(); + nn::cfg::CTR::init::Finalize(); + //メッセージ用テキストã®èª­ã¿è¾¼ã¿ + if (lcd == nn::cfg::CFG_LANGUAGE_JAPANESE) + { + LoadMessText(L"rom:/lang_jp.mes"); + flg += SCR_FLG_JP; + } + else{ + LoadMessText(L"rom:/lang_en.mes"); + } + //ç”»é¢åˆæœŸåŒ– + if (ScrInitialize(heapForGx,GxHeapSize,flg) == false)finish(); + } +} + + + +//---------------------- main loop -------------------------- +void nnMain() +{ + u8 evt; + RetCode retc; + + Init();//åˆæœŸåŒ– + + // ã‚¹ãƒªãƒ¼ãƒ—è¦æ±‚有効 + // ファイルæ“作中ã®ã‚­ãƒ£ãƒ³ã‚»ãƒ«ãªã©è«¸ã€…é¢å€’ãªã®ã§éžå¯¾å¿œ //nn::applet::EnableSleep(true); - extern u8 scr_evnt; - u8 scr_evntbk; while(1) { - tmerr = 0; - CheckSaveDataState(); //セーブデータã®çŠ¶æ…‹å–å¾— - CheckExSaveState(); //åŒãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— - if (isAgreePCode==false) tmerr |= SDATA_ERRPUT_PCODE; - scr_TopMenu(Formatted,Active,exFormatted,exActive,tmerr); - - WaitUI();//入力待㡠- scr_evntbk = scr_evnt; - switch(scr_evnt) + UpdateStatus();//デãƒã‚¤ã‚¹çŠ¶æ…‹ã§è¡¨ç¤ºæ›´æ–° + scr_TopMenu(tm_mode,tm_err); + scr_Vsnc(); + evt = WaitUI();//入力待㡠+ switch(evt) { case EVNT_INEX: - isInsEject= InEx_None; - break; + //SDãªã‚‰å³åœæ­¢ã€ã“ã“æ¥ã‚‹ã®ã¯ã‚«ãƒ¼ãƒ‰æŒ¿æŠœ + //tm_mode =SCR_MENU_NONE; + //tm_err =SCR_ERRPUT_CARD2;//"Checking" + //scr_TopMenu(tm_mode,tm_err); + //scr_Vsnc(); + //break; case EVNT_PUSH_B: case EVNT_PUSH_R: case EVNT_PUSH_Y: @@ -1846,73 +1065,57 @@ void nnMain() case EVNT_SEL_READ://**************************** リード NN_LOG("select read\n"); retc = Card2Ctr(); - switch (retc){ - case SUCCESS: - //CheckExSaveState(); //çŠ¶æ…‹ã®æ›´æ–° - scr_ResultQuit(MessTxt(MT_Success),COLOR_GREEN);//æˆåŠŸã¨Quitボタン - break; - case INSEXIT: - //scr_InsExitQuit();//挿抜検知表示 & Quit - ScrClr();//ç”»é¢æ¶ˆåŽ» - scr_Backup(); - InsExtErrPut(isInsEject); - scr_ResultQuit(MessTxt(MT_Break),COLOR_RED);//エラーã¨Quitボタン - break; - case CANCEL: - break; - default://errors - if (CheckInsExit())InsExtErrPut(isInsEject);//抜差イベント? - scr_ResultQuit(MessTxt(MT_Failed),COLOR_RED);//エラーã¨Quitボタン - break; - } break; case EVNT_SEL_WRITE:// **************************** リストア NN_LOG("select write\n"); retc = Ctr2Card(); - switch (retc){ - case SUCCESS: - //CheckSaveDataState(); //çŠ¶æ…‹ã®æ›´æ–° - //CheckExSaveState(); - scr_ResultQuit(MessTxt(MT_Success),COLOR_GREEN);//æˆåŠŸã¨Quitボタン - break; - case INSEXIT: - //scr_InsExitQuit();//挿抜検知表示 & Quit - ScrClr();//ç”»é¢æ¶ˆåŽ» - scr_Restore(); - InsExtErrPut(isInsEject); - scr_ResultQuit(MessTxt(MT_Break),COLOR_RED);//エラーã¨Quitボタン - case CANCEL: - break; - default://errors - if (CheckInsExit())InsExtErrPut(isInsEject);//抜差イベント? - scr_ResultQuit(MessTxt(MT_Failed),COLOR_RED);//エラーã¨Quitボタン - break; - } break; case EVNT_PUSH_LEFT_X:// ------------------------------------- LEFT + X //ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—削除 scr_DelConf();//å®Ÿè¡Œç¢ºèª - WaitUI(); - if (scr_evnt != EVNT_YES)break; - memsave.Delete(); -#ifdef CSM_FLAG_USE_SD - if(alive_Sd)exsave.Delete(); -#endif + if (WaitUI() != EVNT_YES)break; + DeleteWork(); break; - default: + default://通常ã“ã“ã«ã¯æ¥ãªã„ + scr_TopMenu(SCR_MENU_NONE,SCR_ERRPUT_EXEC);//実行エラー failstop(); break; } - if (((scr_evntbk == EVNT_SEL_WRITE)||(scr_evntbk == EVNT_SEL_READ)) && (retc != CANCEL)) + //scr_PrdCode(save.PrdCode);//プロダクトコード表示 + //3tscr_PrdCodeEx(arcInfo.Pcode);//プロダクトコード表示 + if ( ((evt == EVNT_SEL_WRITE) || (evt == EVNT_SEL_READ)) + && (retc != CANCEL)) { + switch (retc){ + case SUCCESS: + scr_ResultQuit(MessTxt(MT_Success),COLOR_GREEN);//æˆåŠŸã¨Quitボタン + //コピーモードã§ãªã‘れã°ãƒ©ã‚¤ãƒˆæˆåŠŸæ™‚ã«ãƒ¯ãƒ¼ã‚¯æ¶ˆã™ + if ((evt == EVNT_SEL_WRITE) && (CopyMode == false))DeleteWork(); + break; + case INSEJECT: + ScrClr();//ç”»é¢æ¶ˆåŽ» + if(evt==EVNT_SEL_READ)scr_Backup(); + else scr_Restore(); + InsEjcErrPut(); + scr_ResultQuit(MessTxt(MT_Break),COLOR_RED);//エラーã¨Quitボタン + break; + default://error or else + if (isInsEject != InEj_None)InsEjcErrPut();//抜差イベント発生 + else if (CheckInsEject())InsEjcErrPut();//抜差ãƒã‚§ãƒƒã‚¯ + scr_ResultQuit(MessTxt(MT_Failed),COLOR_RED);//エラーã¨Quitボタン + break; + } + if ((retc != SUCCESS) && (evt == EVNT_SEL_READ))DeleteWork();//リード失敗ãªã‚‰ãƒ¯ãƒ¼ã‚¯å‰Šé™¤ + //戻るボタン待㡠while(1){ - WaitUI(); - if (scr_evnt == EVNT_INEX)isInsEject = InEx_None; - if ((scr_evnt==EVNT_QUIT) || (scr_evnt==EVNT_PUSH_B))break; + UpdateStatus(); + evt = WaitUI(); + if ((evt==EVNT_QUIT) || (evt==EVNT_PUSH_B))break; } } }//while() + } diff --git a/trunk/CardSaveData/Mover/body/source/main.h b/trunk/CardSaveData/Mover/body/source/main.h index dd20674..360178c 100644 --- a/trunk/CardSaveData/Mover/body/source/main.h +++ b/trunk/CardSaveData/Mover/body/source/main.h @@ -1,8 +1,13 @@ -//ƒfƒoƒO—p +#ifndef _MAIN_H_ +#define _MAIN_H_ + +//‹­§‚r‚c +//#define CSM_FLAG_FORCE_SD 1 + +//ƒfƒoƒOƒtƒ‰ƒO +//(—LŒøŽžj +// ‰æ–ʶã‚É"DEBUG"‚Ì•¶Žš +// SD”²‚¯ƒ`ƒFƒbƒN–³Œø .. Break‚µ‚ÄPCŠm”F‚·‚邯‚«–Ê“|‚Ȃ̂Š//#define CSM_FLAG_DEBUG 1 -//ˆêŽž•Û‘¶æ‚ÉSD‚àŽg‚¤F‘ƒTƒCƒY‚ªƒƒ‚ƒŠ‚É”[‚Ü‚ç‚È‚¢ê‡ .. Card2 -//#define CSM_FLAG_USE_SD 1 -#ifdef CSM_FLAG_USE_SD -#define CSM_FLAG_FORCE_SD 1 //‹­§‚r‚cŽg—p #endif diff --git a/trunk/CardSaveData/Mover/body/source/screen/screen.cpp b/trunk/CardSaveData/Mover/body/source/screen/screen.cpp index 324a413..45f062d 100644 --- a/trunk/CardSaveData/Mover/body/source/screen/screen.cpp +++ b/trunk/CardSaveData/Mover/body/source/screen/screen.cpp @@ -12,6 +12,11 @@ Gui gui; u8 scr_evnt; +//ƒ^ƒCƒgƒ‹—pƒ[ƒN +//ƒTƒCƒYƒI[ƒo’ˆÓ +tChar wS_Title[32]; +//eColor wC_Title; + enum{ //PANEL_END, PANEL_ERROR, @@ -27,7 +32,7 @@ PANEL_CONFIRM, PANEL_DELCONF, PANEL_MENU, PANEL_BKUP, -PANEL_INSEXIT, +PANEL_INSEJECT, PANEL_DBGLOG }; @@ -48,22 +53,16 @@ MESSAGE_DELCONF_TITLE, MESSAGE_DELCONF_MSG, MESSAGE_DELCONF_MSG2, MESSAGE_DELCONF_MSG3, -//MESSAGE_TOPMENU_HELP_TITLE, -MESSAGE_TOPMENU_HELP_READ, -MESSAGE_TOPMENU_HELP_WRITE, -MESSAGE_TOPMENU_HELP_END, -MESSAGE_TOPMENU_HELP_OPERATE, MESSAGE_TITLE, MESSAGE_MENU_READ, MESSAGE_MENU_WRITE, -//MESSAGE_MENU_END, MESSAGE_MENU_OPERATE, MESSAGE_MENU_CAUTION, MESSAGE_MENU_ERROR, MESSAGE_MENU_DEBUG, -MESSAGE_INSEXT_1, -MESSAGE_INSEXT_2, -MESSAGE_INSEXT_3, +MESSAGE_INSEJC_1, +MESSAGE_INSEJC_2, +MESSAGE_INSEJC_3, MESSAGE_OPERATE, MESSAGE_RESULT, MESSAGE_QUIT_OPERATE, @@ -165,121 +164,111 @@ void touchQuit(u32 pos NN_IS_UNUSED_VAR) #define LOG_MAX 10 // -------------------------------------------------- ƒRƒ“ƒ|[ƒlƒ“ƒgÝŒv -//‰º‰æ–Ê -#ifdef USE_WCHAR -/* -tChar* S_Backup = L"“Çž"; -tChar* S_Restore = L"‘ž"; -tChar* S_Yes = L"‚Í‚¢"; -tChar* S_No = L"‚¢‚¢‚¦"; -tChar* S_Quit = L"–ß‚é"; -tChar* S_Space = L"@"; -tChar* S_Execute = L"ŽÀs‚µ‚Ü‚·‚©H"; -tChar* S_HelpBackup = L"[“Çž] ƒJ[ƒh‚©‚ç“Ç‚Þ"; -tChar* S_HelpRestore = L"[‘ž] ƒJ[ƒh‚É‘‚­"; -tChar* S_Touch = L"ƒ^ƒbƒ`‚ÅŽÀs‚µ‚Ü‚·"; -tChar* S_Version = L"‚u‚…‚’"; -tChar* S_QuitB = L"ƒ^ƒbƒ`‚©‚aƒ{ƒ^ƒ“‚Å–ß‚è‚Ü‚·"; -tChar* S_Insexit = L"ƒfƒoƒCƒX‚Ì‘}”²‚ðŒŸ’m‚µ‚Ü‚µ‚½"; -tChar* S_RetTop = L"ŠJŽn‰æ–ʂɖ߂è‚Ü‚·"; -tChar* S_Del = L"@––@íœ@––@"; -tChar* S_Del2 = L"@@@@’ˆÓ"; -tChar* S_Del3 = L"“Ço‚µ‚½ƒf[ƒ^‚ð휂µ‚Ü‚·"; -tChar* S_Title = L"@ƒƒJ[ƒhƒZ[ƒuˆÚs„"; -tChar* S_InsertCard = L"ƒJ[ƒh‚ð‘}“ü‚µ‚ĉº‚³‚¢"; -tChar* S_TitleBkup = L"@||@ƒJ[ƒh‚©‚ç“Çž@||"; -tChar* S_TitleRestore = L"@||@ƒJ[ƒh‚Ö‘ž@||"; -*/ -tChar* S_Backup = L"Backup"; -tChar* S_Restore = L"Restore"; -tChar* S_Yes = L"YES"; -tChar* S_No = L"NO"; -tChar* S_Quit = L"Quit"; -tChar* S_Space = L" "; -tChar* S_Execute = L"Do you execute?"; -tChar* S_HelpBackup = L"[Backup] read from Card"; -tChar* S_HelpRestore = L"[Restore] write to Card"; -tChar* S_Touch = L"Touch below"; -tChar* S_Version = L"version"; -tChar* S_QuitB = L"touch [Quit] or push B"; -tChar* S_Insexit = L"device insert or pull out is detected"; -tChar* S_RetTop = L"return to top menu"; -tChar* S_Del = L" *** DELETE *** "; -tChar* S_Del2 = L" caution!"; -tChar* S_Del3 = L"this is delete backup"; -tChar* S_Title = L" < CTR Card Savedata Mover >"; -tChar* S_InsertCard = L"Please Insert Card"; -tChar* S_TitleBkup = L" --- Backup Card Savedata ---"; -tChar* S_TitleRestore = L"--- Restore Card Savedata ---"; +//•\ަ•¶Žš—ñ +enum {//index of message string + I_Backup, + I_Restore, + I_Yes, + I_No, + I_Quit, + I_Space, + I_Execute, + I_HelpBackup, + I_HelpRestore, + I_Touch, + I_Version, + I_QuitB, + I_Inseject, + I_RetTop, + I_InsejectSD, + I_Restart1, + I_Restart2, + I_Del, + I_Del2, + I_Del3, + I_Title, + I_TitleCp, + I_InsertCard, + I_TitleBkup, + I_TitleRestore, + I_CardChk, + I_EndNum +}; -#else -tChar* S_Backup = "Backup"; -tChar* S_Restore = "Restore"; -tChar* S_Yes = "YES"; -tChar* S_No = "NO"; -tChar* S_Quit = "Quit"; -tChar* S_Space = " "; -tChar* S_Execute = "Do you execute?"; -tChar* S_HelpBackup = "[Backup] read from Card"; -tChar* S_HelpRestore = "[Restore] write to Card"; -tChar* S_Touch = "Touch below"; -tChar* S_Version = "version"; -tChar* S_QuitB = "touch [Quit] or push B"; -tChar* S_Insexit = "device insert or pull out is detected"; -tChar* S_RetTop = "return to top menu"; -tChar* S_Del = " *** DELETE *** "; -tChar* S_Del2 = " caution!"; -tChar* S_Del3 = "this is delete backup"; -tChar* S_Title = " < CTR Card Savedata Mover >"; -tChar* S_InsertCard = "Please Insert Card"; -tChar* S_TitleBkup = " --- Backup Card Savedata ---"; -tChar* S_TitleRestore = "--- Restore Card Savedata ---"; -#endif +tChar* S_StringsJp[I_EndNum] = { + L"“Çž", + L"‘ž", + L"‚Í‚¢", + L"‚¢‚¢‚¦", + L"–ß‚é", + L"@", + L"ŽÀs‚µ‚Ü‚·‚©H", + L"[“Çž] ƒJ[ƒh‚©‚ç“Ç‚Þ", + L"[‘ž] ƒJ[ƒh‚É‘‚­", + L"ƒ^ƒbƒ`‚ÅŽÀs‚µ‚Ü‚·", + L"‚u‚…‚’", + L"ƒ^ƒbƒ`‚©‚aƒ{ƒ^ƒ“‚Å–ß‚è‚Ü‚·", + L"ƒJ[ƒh‚Ì‘}”²‚ðŒŸ’m‚µ‚Ü‚µ‚½", + L"ŠJŽn‰æ–ʂɖ߂è‚Ü‚·", + L"‚r‚c‚Ì‘}”²‚ðŒŸ’m‚µ‚Ü‚µ‚½", + L"“®ì’†‚͋֎~‚Å‚·", + L"“dŒ¹OFF‚©‚ç‚â‚è’¼‚µ‚Ä‚­‚¾‚³‚¢", + L"@––@íœ@––@", + L"@@@@’ˆÓ", + L"“Ço‚µ‚½ƒf[ƒ^‚ð휂µ‚Ü‚·", + L"@@@ƒƒJ[ƒhƒZ[ƒuˆÚs„", + L"@@@|@ƒRƒs[ƒ‚[ƒh@|", + L"ƒJ[ƒh‚ð‘}“ü‚µ‚ĉº‚³‚¢", + L"@||@ƒJ[ƒh‚©‚ç“Çž@||", + L"@||@ƒJ[ƒh‚Ö‘ž@||", + L"@Šm”F‚µ‚Ă܂·" +}; + +tChar* S_Strings[I_EndNum] = { + L"Backup", + L"Restore", + L"YES", + L"NO", + L"Quit", + L" ", + L"Do you execute?", + L"[Backup] read from Card", + L"[Restore] write to Card", + L"Touch below", + L"version", + L"touch [Quit] or push B", + L"CARD insert or pull out is detected", + L"return to top menu", + L"SD insert or pull out is ", + L"prohibited during operation", + L" turn off the power and restart", + L" *** DELETE *** ", + L" caution!", + L"this is delete backup", + L" < CTR Card Savedata Mover >", + L" - Copy mode -", + L"Please Insert Card", + L" --- Backup Card Savedata ---", + L"--- Restore Card Savedata ---", + L"Checking" +}; + +//•¶Žš—ñƒ|ƒCƒ“ƒ^Ši”[ +tChar* pS_Str[I_EndNum]; //Top Menu -const tPanel panel_Read = {(uptr)touchRead,S_Backup,80+20,30,160,80,PANEL_READ,SCREEN_LOWER}; -const tPanel panel_Write = {(uptr)touchWrite,S_Restore,80+20,130,160,80,PANEL_WRITE,SCREEN_LOWER}; +const tPanel panel_Read = {(uptr)touchRead,NULL_STR,80+20,30,160,80,PANEL_READ,SCREEN_LOWER}; +const tPanel panel_Write = {(uptr)touchWrite,NULL_STR,80+20,130,160,80,PANEL_WRITE,SCREEN_LOWER}; //const tPanel panel_End = {(uptr)touchEnd,"End",80,180,160,30,PANEL_END,SCREEN_LOWER}; //Yes No -const tPanel panel_Yes = {(uptr)touchYes,S_Yes,40+10,60,80,120,PANEL_YES,SCREEN_LOWER}; -const tPanel panel_No = {(uptr)touchNo,S_No,200+30,60,80,120,PANEL_NO,SCREEN_LOWER}; +const tPanel panel_Yes = {(uptr)touchYes,NULL_STR,40+10,60,80,120,PANEL_YES,SCREEN_LOWER}; +const tPanel panel_No = {(uptr)touchNo,NULL_STR,200+30,60,80,120,PANEL_NO,SCREEN_LOWER}; //Quit -const tPanel panel_Quit = {(uptr)touchQuit,S_Quit,80+20,60,160,120,PANEL_QUIT,SCREEN_LOWER}; +const tPanel panel_Quit = {(uptr)touchQuit,NULL_STR,80+20,60,160,120,PANEL_QUIT,SCREEN_LOWER}; -//ã‰æ–Ê -/* -//ƒfƒoƒO—p -//ƒGƒ‰[•\ަ -const tPanel panel_Error = {NULL_PTR,NULL_STR,LOC_CONF_X,LOC_CONF_Y,LOC_CONF_W,LOC_CONF_H,PANEL_ERROR,SCREEN_UPPER}; -const tMessage mess_Title_Err = {S_Space,10,10,COLOR_RED,8,MESSAGE_ERROR_TITLE,PANEL_ERROR}; -const tMessage mess_Info_Err = {S_Space,10,22,COLOR_RED,8,MESSAGE_ERROR_INFO,PANEL_ERROR}; -const tMessage mess_Info2_Err = {S_Space,10,40,COLOR_RED,8,MESSAGE_ERROR_INFO2,PANEL_ERROR}; -const tMessage mess_Info3_Err = {S_Space,10,50,COLOR_RED,8,MESSAGE_ERROR_INFO3,PANEL_ERROR}; - -//¬Œ÷ -const tPanel panel_Success = {NULL_PTR,NULL_STR,LOC_CONF_X,LOC_CONF_Y,LOC_CONF_W,LOC_CONF_H,PANEL_SUCCESS,SCREEN_UPPER}; -const tMessage mess_Title_Suc = {S_Space,10,10,COLOR_GREEN,8,MESSAGE_SUCCESS_TITLE,PANEL_SUCCESS}; -const tMessage mess_Info_Suc = {S_Space,10,40,COLOR_WHITE,8,MESSAGE_SUCCESS_INFO,PANEL_SUCCESS}; -const tMessage mess_Info2_Suc = {S_Space,10,50,COLOR_WHITE,8,MESSAGE_SUCCESS_INFO2,PANEL_SUCCESS}; - -//ŽÀsŠm”F -const tPanel panel_Confirm = {NULL_PTR,NULL_STR,LOC_CONF_X,LOC_CONF_Y,LOC_CONF_W,LOC_CONF_H,PANEL_CONFIRM,SCREEN_UPPER}; -const tMessage mess_conf_Title = {S_Space,10,10,COLOR_YELLO,8,MESSAGE_CONFIRM_TITLE,PANEL_CONFIRM}; -const tMessage mess_conf_Msg = {S_Execute,10,40,COLOR_WHITE,8,MESSAGE_CONFIRM_MSG,PANEL_CONFIRM}; - -//ƒgƒbƒvƒƒjƒ…[ -//const tPanel panel_topmenu_help = {NULL_PTR,NULL_STR,LOC_CONF_X,LOC_CONF_Y,LOC_CONF_W,LOC_CONF_H,PANEL_TOPMENU,SCREEN_UPPER}; -//const tMessage mess_topmenu_help_read = {S_HelpBackup,10,4,COLOR_WHITE,8,MESSAGE_TOPMENU_HELP_READ,PANEL_TOPMENU}; -//const tMessage mess_topmenu_help_write = {S_HelpRestore,10,16,COLOR_WHITE,8,MESSAGE_TOPMENU_HELP_WRITE,PANEL_TOPMENU}; -//const tMessage mess_topmenu_help_operate = {S_Touch,10,48,COLOR_GREEN,8,MESSAGE_TOPMENU_HELP_OPERATE,PANEL_TOPMENU}; - -//ƒƒO•\ަ -const tPanel panel_dbglog = {NULL_PTR,NULL_STR,LOC_LOG_X,LOC_LOG_Y,LOC_LOG_W,LOC_LOG_H,PANEL_DBGLOG,SCREEN_UPPER}; -const tMemo memo_dbglog = {LOG_MAX,10,10,COLOR_WHITE,8,MEMO_DBGLOG,PANEL_DBGLOG}; -*/ //’Ê펞 //ƒ^ƒCƒgƒ‹ @@ -290,10 +279,10 @@ const tMemo memo_dbglog = {LOG_MAX,10,10,COLOR_WHITE,8,MEMO_DBGLOG,PANEL_DBGLOG} #define LOC_TITL_H 50 #define FONT_SIZE_PRODUCT 10 const tPanel panel_title = {NULL_PTR,NULL_STR,LOC_TITL_X,LOC_TITL_Y,LOC_TITL_W,LOC_TITL_H,PANEL_TITLE,SCREEN_UPPER}; -const tMessage mess_title = {S_Space,0,0,COLOR_WHITE,FONT_SIZE_TITLE,MESSAGE_TITLE,PANEL_TITLE}; -const tMessage mess_product = {S_Space,0,LOC_TITL_H - 22,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT,PANEL_TITLE}; -const tMessage mess_product2 = {S_Space,0,LOC_TITL_H - 10,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT2,PANEL_TITLE}; -const tMessage mess_version = {S_Version,LOC_TITL_W-FONT_SIZE_PRODUCT*6,FONT_SIZE_TITLE+2,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_VERSION,PANEL_TITLE}; +const tMessage mess_title = {NULL_STR,0,0,COLOR_WHITE,FONT_SIZE_TITLE,MESSAGE_TITLE,PANEL_TITLE}; +const tMessage mess_product = {NULL_STR,0,LOC_TITL_H - 22,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT,PANEL_TITLE}; +const tMessage mess_product2 = {NULL_STR,0,LOC_TITL_H - 10,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT2,PANEL_TITLE}; +const tMessage mess_version = {NULL_STR,LOC_TITL_W-FONT_SIZE_PRODUCT*6,FONT_SIZE_TITLE+2,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_VERSION,PANEL_TITLE}; #define LOC_MESS_X 20 #define LOC_MESS_W (400 - LOC_MESS_X*2) @@ -303,119 +292,98 @@ const tMessage mess_version = {S_Version,LOC_TITL_W-FONT_SIZE_PRODUCT*6,FONT_SIZ #define FONT_SIZE 10 #define STR_LINE(ln) (FONT_SIZE + 2)*ln const tPanel panel_menu = {NULL_PTR,NULL_STR,LOC_MESS_X,LOC_MESS_Y,LOC_MESS_W,LOC_MESS_H,PANEL_MENU,SCREEN_UPPER}; -const tMessage mess_menu_read = {S_HelpBackup,10,STR_LINE(1),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_READ,PANEL_MENU}; -const tMessage mess_menu_write = {S_HelpRestore,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_WRITE,PANEL_MENU}; -const tMessage mess_menu_operate = {S_Touch,10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_MENU_OPERATE,PANEL_MENU}; -const tMessage mess_bkuperr = {S_Space,10,STR_LINE(6),COLOR_RED,FONT_SIZE,MESSAGE_MENU_ERROR,PANEL_MENU}; -const tMessage mess_carderr = {S_Space,10,STR_LINE(7),COLOR_YELLO,FONT_SIZE,MESSAGE_MENU_CAUTION,PANEL_MENU}; +const tMessage mess_menu_read = {NULL_STR,10,STR_LINE(1),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_READ,PANEL_MENU}; +const tMessage mess_menu_write = {NULL_STR,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_WRITE,PANEL_MENU}; +const tMessage mess_menu_operate = {NULL_STR,10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_MENU_OPERATE,PANEL_MENU}; +const tMessage mess_bkuperr = {NULL_STR,10,STR_LINE(6),COLOR_RED,FONT_SIZE,MESSAGE_MENU_ERROR,PANEL_MENU}; +const tMessage mess_carderr = {NULL_STR,10,STR_LINE(7),COLOR_YELLO,FONT_SIZE,MESSAGE_MENU_CAUTION,PANEL_MENU}; //Backup const tPanel panel_bkup = {NULL_PTR,NULL_STR,LOC_MESS_X,LOC_MESS_Y,LOC_MESS_W,LOC_MESS_H,PANEL_BKUP,SCREEN_UPPER}; -const tMessage mess_quit_operate = {S_QuitB,10,STR_LINE(4),COLOR_SKY,FONT_SIZE,MESSAGE_QUIT_OPERATE,PANEL_BKUP}; -const tMessage mess_conf = {S_Execute,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_CONF,PANEL_BKUP}; -const tMessage mess_result = {S_Space,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_RESULT,PANEL_BKUP}; -const tMessage mess_operate = {S_Touch,10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_OPERATE,PANEL_BKUP}; -const tMessage mess_status = {S_Space,10,STR_LINE(7),COLOR_WHITE,FONT_SIZE,MESSAGE_STATUS,PANEL_BKUP}; -const tMessage mess_count = {S_Space,10,STR_LINE(8),COLOR_WHITE,FONT_SIZE,MESSAGE_COUNT,PANEL_BKUP}; -const tMessage mess_count2 = {S_Space,10,STR_LINE(9),COLOR_GREEN,FONT_SIZE,MESSAGE_COUNT2,PANEL_BKUP}; +const tMessage mess_quit_operate = {NULL_STR,10,STR_LINE(4),COLOR_SKY,FONT_SIZE,MESSAGE_QUIT_OPERATE,PANEL_BKUP}; +const tMessage mess_conf = {NULL_STR,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_CONF,PANEL_BKUP}; +const tMessage mess_result = {NULL_STR,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_RESULT,PANEL_BKUP}; +const tMessage mess_operate = {NULL_STR,10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_OPERATE,PANEL_BKUP}; +const tMessage mess_status = {NULL_STR,10,STR_LINE(7),COLOR_WHITE,FONT_SIZE,MESSAGE_STATUS,PANEL_BKUP}; +const tMessage mess_count = {NULL_STR,10,STR_LINE(8),COLOR_WHITE,FONT_SIZE,MESSAGE_COUNT,PANEL_BKUP}; +const tMessage mess_count2 = {NULL_STR,10,STR_LINE(9),COLOR_GREEN,FONT_SIZE,MESSAGE_COUNT2,PANEL_BKUP}; //‘}”²”­¶Žž -const tPanel panel_insexit = {NULL_PTR,NULL_STR,LOC_MESS_X,LOC_MESS_Y,LOC_MESS_W,LOC_MESS_H,PANEL_INSEXIT,SCREEN_UPPER}; -const tMessage mess_insexit = {S_Insexit,10,STR_LINE(3),COLOR_RED,8,MESSAGE_INSEXT_1,PANEL_INSEXIT}; -const tMessage mess_insexit2 = {S_RetTop,10,STR_LINE(5),COLOR_WHITE,8,MESSAGE_INSEXT_2,PANEL_INSEXIT}; -const tMessage mess_insexit3 = {S_QuitB,10,STR_LINE(6),COLOR_WHITE,8,MESSAGE_INSEXT_3,PANEL_INSEXIT}; +const tPanel panel_inseject = {NULL_PTR,NULL_STR,LOC_MESS_X,LOC_MESS_Y,LOC_MESS_W,LOC_MESS_H,PANEL_INSEJECT,SCREEN_UPPER}; +const tMessage mess_inseject = {NULL_STR,10,STR_LINE(3),COLOR_RED,10,MESSAGE_INSEJC_1,PANEL_INSEJECT}; +const tMessage mess_inseject2 = {NULL_STR,10,STR_LINE(5),COLOR_WHITE,10,MESSAGE_INSEJC_2,PANEL_INSEJECT}; +const tMessage mess_inseject3 = {NULL_STR,10,STR_LINE(6),COLOR_WHITE,10,MESSAGE_INSEJC_3,PANEL_INSEJECT}; //휊m”F const tPanel panel_delconf = {NULL_PTR,NULL_STR,LOC_MESS_X,LOC_MESS_Y-36,LOC_MESS_W,LOC_MESS_H,PANEL_DELCONF,SCREEN_UPPER}; -const tMessage mess_delconf_Title = {S_Del,10,10,COLOR_YELLO,16,MESSAGE_DELCONF_TITLE,PANEL_DELCONF}; -const tMessage mess_delconf_Msg = {S_Del2,10,50,COLOR_YELLO,12,MESSAGE_DELCONF_MSG,PANEL_DELCONF}; -const tMessage mess_delconf_Msg2 = {S_Del3,10,70,COLOR_YELLO,12,MESSAGE_DELCONF_MSG2,PANEL_DELCONF}; -const tMessage mess_delconf_Msg3 = {S_Execute,10,90,COLOR_YELLO,12,MESSAGE_DELCONF_MSG3,PANEL_DELCONF}; - +const tMessage mess_delconf_Title = {NULL_STR,10,10,COLOR_YELLO,16,MESSAGE_DELCONF_TITLE,PANEL_DELCONF}; +const tMessage mess_delconf_Msg = {NULL_STR,10,50,COLOR_YELLO,12,MESSAGE_DELCONF_MSG,PANEL_DELCONF}; +const tMessage mess_delconf_Msg2 = {NULL_STR,10,70,COLOR_YELLO,12,MESSAGE_DELCONF_MSG2,PANEL_DELCONF}; +const tMessage mess_delconf_Msg3 = {NULL_STR,10,90,COLOR_YELLO,12,MESSAGE_DELCONF_MSG3,PANEL_DELCONF}; nn::os::LightEvent stopEvnt(true); tChar scr_ver[16]; tChar scr_err[32]; -tChar scr_debug[32]; -//menu -bool ScrInitialize(uptr heap,u32 size,bool jp,bool deb) + +bool ScrInitialize(uptr heap,u32 size,u8 flag) { + int i; scr_evnt = EVNT_NONE; holdVal = 0; holdTck = nn::fnd::TimeSpan(0); if (gui.Initialize(heap,size,&stopEvnt)==false)return false; + //“ú–{Œê or ‰pŒê + if (flag & SCR_FLG_JP)for (i =0;i'; - while ( i < 25 )str_Counter2[i++] = L'|'; - str_Counter2[i] = 0; - } -#else - sprintf(str_Counter2,"total size %d",total); - }else{ -// gui.MessCol(MESSAGE_COUNT2,COLOR_YELLO); - lv = ct/(max/25); - for (i =0;i'; - while ( i < 25 )str_Counter2[i++] = '|'; - str_Counter2[i] = 0; - } -#endif + lv = ct/(max/25); + for (i =0;i'; + while ( i < 25 )str_Counter2[i++] = L'|'; + str_Counter2[i] = 0; //sprintf(str_Counter2,"%d / %d",ct,max); gui.MessStr(MESSAGE_COUNT2,str_Counter2); gui.MessEffective(MESSAGE_COUNT2); - gui.Draw(); - + //gui.Draw(); } +//total +void scr_Total(int total) +{ + swprintf(str_Counter2,30,L"total size %d",total); + gui.MessStr(MESSAGE_COUNT2,str_Counter2); + gui.MessEffective(MESSAGE_COUNT2); + //gui.Draw(); +} + + + void scr_MessOnCount2(tChar *str) { // gui.MessCol(MESSAGE_COUNT2,COLOR_YELLO); @@ -860,6 +785,12 @@ void scr_Draw() gui.Draw(); } + +void scr_Vsnc() +{ + gui.WaitVsnc(); +} + void scr_GetEvnt() { // gui.thUpdate(); diff --git a/trunk/CardSaveData/Mover/body/source/screen/screen.h b/trunk/CardSaveData/Mover/body/source/screen/screen.h index 43b892e..ed11e5b 100644 --- a/trunk/CardSaveData/Mover/body/source/screen/screen.h +++ b/trunk/CardSaveData/Mover/body/source/screen/screen.h @@ -34,21 +34,42 @@ typedef struct{ }tColStr; -//Topƒƒjƒ…[‚ł̃Gƒ‰[•\ަ—p‚̃tƒ‰ƒO -//bitˆÊ’u‚Ì‚n‚q -#define SDATA_ERRPUT_PCODE (1 << 0) -#define SDATA_ERRPUT_MEDIA (1 << 1) -#define SDATA_ERRPUT_VERIFI (1 << 2) +//Topƒƒjƒ…[‚ł̃Gƒ‰[&ó‘Ô•\ަƒtƒ‰ƒO +enum{ +SCR_ERRPUT_NONE, +SCR_ERRPUT_PCODE, +SCR_ERRPUT_MEDIA, +SCR_ERRPUT_EXEC, +SCR_ERRPUT_CARD, +SCR_ERRPUT_CARD2 +}; + //ƒfƒoƒOƒ‚[ƒh‚Ì•\ަ //#define SDATA_ERRPUT_DEBUG (1>>3) -bool ScrInitialize(uptr heap,u32 size,bool jp,bool deb); +//Initialize—pƒtƒ‰ƒO +//“ú–{ŒêAƒRƒs[ƒ‚[ƒhA‹­§SDASD‚È‚µAƒfƒoƒO +#define SCR_FLG_JP 1 +#define SCR_FLG_CP 2 +#define SCR_FLG_FSD 4 +#define SCR_FLG_NOSD 8 +#define SCR_FLG_DBG 0x80 + +//ƒƒjƒ…[•\ަ +enum{ +SCR_MENU_NONE, +SCR_MENU_READ, +SCR_MENU_WRITE +}; + + +bool ScrInitialize(uptr heap,u32 size,u8 flag); void ScrFinalize(); void ScrClr(); int ScrDbgLogGetMax(); void ScrStep(); void scr_TopMenuDbg(bool formatted,bool insertted); -void scr_TopMenu(bool formatted,bool inserted,bool exfm,bool sdins,int err); +void scr_TopMenu(int mode,int err); void scr_ErrorQuitDbg(tColStr **s); void scr_SuccessQuitDbg(tColStr **s); void scr_ConfirmDbg(char *str); @@ -56,17 +77,20 @@ void scr_BackupYesNo(); void scr_Backup(); void scr_RestoreYesNo(); void scr_Restore(); -void scr_InsExitQuit(); +void scr_InsEjectQuit(); +void scr_InsEjectSD(); void scr_Status(tChar *s,eColor col); void scr_ResultQuit(tChar *s,eColor col); void scr_CountPerMax(int ct,int max); -void scr_CountPerMax2(int ct,int max,int total); +void scr_Gage(int ct,int max); +void scr_Total(int total); void scr_PrdCode(char *s); void scr_PrdCodeEx(char *s); void scr_DelConf(); void scr_MessOnCount2(tChar *str); void scr_Draw(); void scr_GetEvnt(); +void scr_Vsnc(); #endif diff --git a/trunk/CardSaveData/Mover/body/source/sub.cpp b/trunk/CardSaveData/Mover/body/source/sub.cpp new file mode 100644 index 0000000..244b9f7 --- /dev/null +++ b/trunk/CardSaveData/Mover/body/source/sub.cpp @@ -0,0 +1,462 @@ +//#include +#include "sub.h" +#include "./screen/screen.h" + +//何故ã‹ã‚¯ãƒ©ã‚¹é–¢æ•°ã§ã‚¤ãƒ™ãƒ³ãƒˆç™»éŒ²å‡ºæ¥ãªã„ã®ã§å¤–部å‚ç…§ +extern bool CheckInsEject();//挿抜ãƒã‚§ãƒƒã‚¯ + + +//------------------------------------------------------- メンãƒé–¢æ•° +//**** ラッピング *** +//コンストラクタ +CsmSaveFile::CsmSaveFile() +{ + finalized = false; + pos_card = 0; +} + + +//終了 +void CsmSaveFile::Finalize() +{ + + if (finalized)return; + + savedata.Finalize(); + exsave.Finalize(); + memsave.Finalize(); + finalized = true; +} + +//デストラクタ +CsmSaveFile:: ~CsmSaveFile() +{ + Finalize(); +} + +//存在ãƒã‚§ãƒƒã‚¯ +bool CsmSaveFile::IsExist(TgtDev dev) +{ + if(dev == TGT_CARD)return savedata.IsExist(); + if(dev == TGT_SD)return exsave.IsExist(); + if(dev == TGT_MEM)return memsave.IsExist(); + return false; +} + +//削除 +bool CsmSaveFile::Delete(TgtDev dev) +{ + //if(dev == TGT_CARD)return false; + if(dev == TGT_SD)return exsave.Delete(); + if(dev == TGT_MEM)return memsave.Delete(); + return false; +} + + +//Result +nn::Result CsmSaveFile::LastNnResult(TgtDev dev) +{ + nn::Result res; + if(dev == TGT_CARD)res = savedata.LastNnResult; + else if(dev == TGT_SD)res = exsave.LastNnResult; + else if(dev == TGT_MEM)res = memsave.LastNnResult; + return res; +} + +//Mount +myResult CsmSaveFile::Mount(TgtDev dev) +{ + myResult res; + if(dev == TGT_CARD)res = savedata.Mount(); + else if(dev == TGT_SD)res = exsave.Mount(); + else if(dev == TGT_MEM)res = memsave.Mount(); + return res; +} + +//Unmoun +void CsmSaveFile::Unmount(TgtDev dev) +{ + if(dev == TGT_CARD)savedata.Unmount(); + else if(dev == TGT_SD)exsave.Unmount(); + else if(dev == TGT_MEM)memsave.Unmount(); +} + +void CsmSaveFile::Unmount() +{ + savedata.Unmount(); + exsave.Unmount(); + memsave.Unmount(); +} + +//ワークã®ä½œæˆ +myResult CsmSaveFile::Create(TgtDev dev,u32 entryDir,u32 entryFile) +{ + if(dev == TGT_SD)return exsave.Create(entryDir,entryFile); + else if(dev == TGT_MEM)return memsave.Create(entryDir,entryFile); + return RESULT_FAIL; + +} + +//パスå–å¾—ä½ç½®ãƒªã‚»ãƒƒãƒˆ +void CsmSaveFile::ResetPath(TgtDev dev) +{ + if(dev == TGT_CARD)savedata.ResetPath(); + else if(dev == TGT_SD)exsave.ResetPath(); + else if(dev == TGT_MEM)memsave.ResetPath(); +} + +//パスå–å¾— +myResult CsmSaveFile::GetPath(TgtDev dev,wchar_t *path) +{ + if(dev == TGT_CARD)return savedata.GetPath(path); + if(dev == TGT_SD)return exsave.GetPath(path); + if(dev == TGT_MEM)return memsave.GetPath(path); + return RESULT_FAIL; + +} + +//フラッシュ +bool CsmSaveFile::Flush(TgtDev dev) +{ + if(dev == TGT_CARD)return savedata.Flush(); + if(dev == TGT_SD)return exsave.Flush(); + if(dev == TGT_MEM)return true; + return false; + +} + + + +//オープンファイル +bool CsmSaveFile::Open(TgtDev dev,wchar_t *path) +{ + if(dev == TGT_CARD){ + pos_card = 0; + return savedata.Open(path); + }else if(dev == TGT_SD)return exsave.Open(path); + else if(dev == TGT_MEM)return memsave.Open(path); + return false; +} + + +bool CsmSaveFile::OpenW(TgtDev dev,wchar_t *path,s64 size) +{ + if(dev == TGT_CARD)return savedata.OpenW(path,true);//作æˆã‚り + else if(dev == TGT_SD)return exsave.OpenW(path,false);//拡張セーブã¯å…ˆã«Createã—ã¨ã + else if(dev == TGT_MEM)if(size>0)return memsave.OpenW(path,size); + return false; +} + +bool CsmSaveFile::CreateFile(TgtDev dev,wchar_t *path,s64 size) +{ + if(dev == TGT_CARD)return savedata.CreateFile(path,size); + else if(dev == TGT_SD)return exsave.CreateFile(path,size); + return false; +} + + +//クローズ +void CsmSaveFile::Close(TgtDev dev) +{ + if(dev == TGT_CARD)savedata.Close(); + else if(dev == TGT_SD)exsave.Close(); + else if(dev == TGT_MEM)memsave.Close(); +} + +void CsmSaveFile::Close() +{ + savedata.Close(); + exsave.Close(); + memsave.Close(); +} + +void CsmSaveFile::CloseW(TgtDev dev) +{ + if(dev == TGT_CARD)savedata.CloseW(); + else if(dev == TGT_SD)exsave.CloseW(); + else if(dev == TGT_MEM)memsave.CloseW(); +} + +//ファイルサイズå–å¾— +s64 CsmSaveFile::FileSize(TgtDev dev) +{ + if(dev == TGT_CARD)return savedata.FileSize; + else if(dev == TGT_SD)return exsave.FileSize; + else if(dev == TGT_MEM)return memsave.FileSize; + return 0; +} + +//ライト +s32 CsmSaveFile::Write(TgtDev dev,char *buffer,size_t size) +{ + if(dev == TGT_CARD)return savedata.Write(buffer,size); + else if(dev == TGT_SD)return exsave.Write(buffer,size); + else if(dev == TGT_MEM)return memsave.Write(buffer,size); + return 0; +} + +//リード +s32 CsmSaveFile::Read(TgtDev dev,char *buffer,size_t size) +{ + if(dev == TGT_CARD)return savedata.Read(buffer,size); + else if(dev == TGT_SD)return exsave.Read(buffer,size); + else if(dev == TGT_MEM)return memsave.Read(buffer,size); + return 0; +} + + +//**** カード専用 *** +//プロダクトコードå–å¾— +bool CsmSaveFile::GetPrdCode() +{ + PrdCode[0] = 0;//Clear + if (savedata.GetPrdCode()){ + strcpy(PrdCode,savedata.PrdCode); + return true; + } + return false; +} + +//ã‚»ãƒ¼ãƒ–ãƒ‡ãƒ¼ã‚¿ã®æƒ…å ± +//arcInfo <- フォーマット情報ã€ãƒ•ァイルã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªæ•° +//scList <- ディレクトリパス +bool CsmSaveFile::GetInfo(tArcInfo *pinfo,tDcList *pDcList,size_t clsz) +{ + return savedata.GetInfo(pinfo,pDcList,clsz); +} + +//ユーザセーブã®ãƒ–ロックリード +//中身ã®ãƒ‡ãƒ¼ã‚¿ãŒä½œæˆã‚µã‚¤ã‚ºã«æº€ãŸãªã„å ´åˆã« +//未書込ã¿é ˜åŸŸã§æ¤œè¨¼ã‚¨ãƒ©ãƒ¼(desc=329)ã¨ãªã‚‹å ´åˆãŒã‚ã‚‹ +//読ã‚ãªã„ブロックã¯ï¼ã§ç½®ãæ›ãˆã‚‹(SDKツールã®SaveFilerã¨åŒã˜æ–¹æ³•..ロンãƒå½“時) +//size = サイズ +// 検証ã¯512å˜ä½ã€èª­ã‚ã¦ã‚‹ã¨ã“ã¾ã§ç½®ãæ›ãˆãªã„よã†512ä»¥ä¸‹ã§æŒ‡å®š +// å°šã€ãƒ¦ãƒ¼ã‚¶ã‚»ãƒ¼ãƒ–ä»¥å¤–ã®æ¤œè¨¼ã¯4096ã”㨠+//pos = ä½ç½®æŒ‡å®š +// SDK3.1(より?)エラー時ã«ãƒ•ァイルãƒã‚¤ãƒ³ã‚¿æ›´æ–°ã—ãªã„ã®ã§2.0より +bool CsmSaveFile::ReadBlock(char* buffer,size_t size) +{ + if ((size > 512) || (size < 0))return false; + savedata.SetPos(pos_card); + if(savedata.Read(buffer,size) != size ) + { + NN_LOG("%d\n",LastNnResult(TGT_CARD).GetDescription()); + if(nn::fs::ResultVerificationFailed::Includes(LastNnResult(TGT_CARD))) + {//検証エラー + for (int i = 0; i < size; i++) buffer[i] = 0;//0埋゠+ }else return false; + } + pos_card += size; + return true; +} + +//*** 状態å–å¾— *** +bool CsmSaveFile::stsActive(TgtDev dev) +{ + if (dev == TGT_CARD)return GetPrdCode(); + if (dev == TGT_MEM)return true; + if (dev == TGT_SD)return nn::fs::IsSdmcWritable(); + return false; +} + +bool CsmSaveFile::stsFormatted(TgtDev dev) +{ + return IsExist(dev); +} + +extern void Icon(eColor col); + +//*** ファイルコピー *** +myResult CsmSaveFile::Copy(TgtDev dest,TgtDev src,wchar_t *path,wchar_t *pathw) +{ + myResult res; + int rsize; + s64 fsize,msize; + + if (Open(src,path)==false)return RESULT_FAIL_OPEN; + fsize = FileSize(src); + if (pathw == 0)pathw = path; + if (OpenW(dest,pathw,fsize)==false)return RESULT_FAIL_OPENW; + + //ã‚«ãƒ¼ãƒ‰ã¯æ¤œè¨¼å˜ä½ã®512ãšã¤èª­ã‚€ã¹ã— + msize=fsize; + res = RESULT_OK; + while(fsize) + { + if(CheckInsEject()){ + res = RESULT_INSEJECT; + break; + } + + if(dest == TGT_CARD)Icon(COLOR_PARPL);//動作中アイコン"-","|" + else Icon(COLOR_SKY); + if(msize > FILEBUFF_SIZE * 2){ + scr_Gage(msize-fsize,msize); + } + + if (fsize>FILEBUFF_SIZE) + { + rsize = FILEBUFF_SIZE; + fsize -= FILEBUFF_SIZE; + }else{ + rsize = fsize; + fsize = 0; + } + if (src == TGT_CARD){//カードã¯ç©ºã領域補正ã¤ãリード + if(ReadBlock(fileBuffer,rsize)==false){ + res = RESULT_FAIL_READ; + break; + } + }else{ + if(Read(src,fileBuffer,rsize)!=rsize){ + res = RESULT_FAIL_READ; + break; + } + } + if(Write(dest,fileBuffer,rsize) != rsize ){ + res= RESULT_FAIL_WRITE; + break; + } + } + Close(src); + CloseW(dest); + if (res != RESULT_OK)return res; + else if (fsize != 0)res = RESULT_FAIL;//想定外ã®ãƒ«ãƒ¼ãƒ—抜㑠+ return res; +} + +//*** オープン済ファイル間ã®ã‚³ãƒ”ー *** +myResult CsmSaveFile::OpnCpy(TgtDev dest,TgtDev src,size_t size) +{ + myResult res; + int rsize; + s64 msize; + + //ã‚«ãƒ¼ãƒ‰ã¯æ¤œè¨¼å˜ä½ã®512ãšã¤èª­ã‚€ã¹ã— + msize=size; + res = RESULT_OK; + while(size) + { + if(CheckInsEject()){ + res = RESULT_INSEJECT; + break; + } + + if(msize > FILEBUFF_SIZE * 2){ + scr_Gage(msize-size,msize);//ゲージ + } + if(dest == TGT_CARD)Icon(COLOR_PARPL);//動作中アイコン"-","|" + else Icon(COLOR_SKY); + + if (size>FILEBUFF_SIZE) + { + rsize = FILEBUFF_SIZE; + size -= FILEBUFF_SIZE; + }else{ + rsize = size; + size = 0; + } + + if (src == TGT_CARD){//カードã¯ç©ºã領域補正ã¤ãリード + if(ReadBlock(fileBuffer,rsize)==false){ + res = RESULT_FAIL_READ; + break; + } + }else{ + if(Read(src,fileBuffer,rsize)!=rsize){ + res = RESULT_FAIL_READ; + break; + } + } + if(Write(dest,fileBuffer,rsize) != rsize ){ + res= RESULT_FAIL_WRITE; + break; + } + } + if ((res == RESULT_OK) && (size != 0))res = RESULT_FAIL;//想定外ã®ãƒ«ãƒ¼ãƒ—抜㑠+ return res; + +} + + +//*** オープン済ファイル間ã®ã‚³ãƒ³ãƒšã‚¢ *** +myResult CsmSaveFile::OpnCmp(TgtDev dest,TgtDev src,size_t size) +{ + myResult res; + int rsize; + s64 msize; + + //ã‚«ãƒ¼ãƒ‰ã¯æ¤œè¨¼å˜ä½ã®512ãšã¤èª­ã‚€ã¹ã— + msize=size; + res = RESULT_OK; + while(size) + { + if(CheckInsEject()){ + res = RESULT_INSEJECT; + break; + } + + if(msize > FILEBUFF_SIZE * 2){ + scr_Gage(msize-size,msize);//ゲージ + } + Icon(COLOR_YELLO);//動作中アイコン"-","|" + + if (size>FILEBUFF_SIZE) + { + rsize = FILEBUFF_SIZE; + size -= FILEBUFF_SIZE; + }else{ + rsize = size; + size = 0; + } + + if (src == TGT_CARD){//カードã¯ç©ºã領域補正ã¤ãリード + if(ReadBlock(fileBuffer,rsize)==false){ + res = RESULT_FAIL_READ; + break; + } + }else{ + if(Read(src,fileBuffer,rsize)!=rsize){ + res = RESULT_FAIL_READ; + break; + } + } + //destã«ã‚«ãƒ¼ãƒ‰æŒ‡å®šã®ã¨ãã¯ãƒ©ã‚¤ãƒˆå¾Œã¨ã¿ãªã—通常リード + if(Read(dest,fileBuffer2,rsize)!=rsize){ + res = RESULT_FAIL_READ; + break; + } + //比較 + if(memcmp(fileBuffer,fileBuffer2,rsize)!=0){ + res = RESULT_FAIL_VERIFI; + break; + } + } + if ((res == RESULT_OK) && (size != 0))res = RESULT_FAIL;//想定外ã®ãƒ«ãƒ¼ãƒ—抜㑠+ return res; + +} + +//ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªä½œæˆ +bool CsmSaveFile::MakeDir(TgtDev dev,wchar_t *path,bool *mkdir) +{ + if(dev == TGT_CARD)return savedata.MakeDir(path,mkdir); + if(dev == TGT_SD)return exsave.MakeDir(path,mkdir); + //if(dev == TGT_MEM)return memsave.MakeDir(path,mkdir); + return false; +} + +//ファイル削除 +bool CsmSaveFile::DeleteFile(TgtDev dev,wchar_t *path) +{ + if(dev == TGT_CARD)return savedata.DeleteFile(path); + if(dev == TGT_SD)return exsave.DeleteFile(path); + //if(dev == TGT_MEM)return memsave.MakeDir(path,mkdir); + return false; + + +} +/*---------------------------------------------------------------------------* + End of file + *---------------------------------------------------------------------------*/ + diff --git a/trunk/CardSaveData/Mover/body/source/sub.h b/trunk/CardSaveData/Mover/body/source/sub.h new file mode 100644 index 0000000..f2ea1c1 --- /dev/null +++ b/trunk/CardSaveData/Mover/body/source/sub.h @@ -0,0 +1,75 @@ +#ifndef _SUB_H_ +#define _SUB_H_ + + +#include +#include "../../../common/savefile/membak.h" +#include "../../../common/savefile/exsave.h" +#include "../../../common/savefile/savefile.h" +#include "../../../common/savefile/savedata.h" +#include "../../../common/my_defs.h" + +//ƒZ[ƒuƒf[ƒ^‚ÌŒŸØƒf[ƒ^‚ª512’PˆÊ‚Ȃ̂Š+#define FILEBUFF_SIZE 512 + +//ƒNƒ‰ƒX錾 +class CsmSaveFile +{ + public: + char PrdCode[20]; + private: + bool finalized; + s64 pos_card;//ƒJ[ƒh‚̃Š[ƒhˆÊ’u + //ƒhƒ‰ƒCƒo‚ÌŽd—l‚Å‘¬“x“I‚É‚SƒoƒCƒgƒAƒ‰ƒCƒ“‚µ‚½•û‚ª‚¢‚¢(SDK 0.14.23 Žž“_) + char fileBuffer[FILEBUFF_SIZE] NN_ATTRIBUTE_ALIGN(4); + char fileBuffer2[FILEBUFF_SIZE] NN_ATTRIBUTE_ALIGN(4); + private: + SaveData savedata; + ExSave exsave; + MemBak memsave; + + public: + CsmSaveFile(); + ~CsmSaveFile(); + //void Initialize(); + bool IsExist(TgtDev dev); + bool Delete(TgtDev dev); + void Finalize(); + nn::Result LastNnResult(TgtDev dev); + myResult Mount(TgtDev dev); + void Unmount(TgtDev dev); + void Unmount(); + myResult Create(TgtDev dev,u32 entryDir,u32 entryFile); + void ResetPath(TgtDev dev); + myResult GetPath(TgtDev dev,wchar_t *path); + bool Open(TgtDev dev,wchar_t *path); + bool OpenW(TgtDev dev,wchar_t *path,s64 size=0); + bool CreateFile(TgtDev dev,wchar_t *path,s64 size); + void Close(TgtDev dev); + void Close(); + void CloseW(TgtDev dev); + s64 FileSize(TgtDev dev); + s32 Write(TgtDev dev,char *buffer,size_t size); + s32 Read(TgtDev dev,char *buffer,size_t size); + myResult Copy(TgtDev dest,TgtDev src,wchar_t *path,wchar_t *pathw = 0); + myResult OpnCpy(TgtDev dest,TgtDev src,size_t size); + myResult OpnCmp(TgtDev dest,TgtDev src,size_t size); + bool stsActive(TgtDev dev); + bool stsFormatted(TgtDev dev); + bool MakeDir(TgtDev dev,wchar_t *path,bool *mkdir); + bool DeleteFile(TgtDev dev,wchar_t *path); + bool Flush(TgtDev dev); + //Card + bool GetPrdCode(); + bool GetInfo(tArcInfo *pinfo,tDcList *pDcList,size_t clsz = 0); + bool ReadBlock(char* buffer,size_t size); + myResult Format(tArcInfo *pinfo){return savedata.Format(pinfo);}; + bool Commit(){return savedata.Commit();}; + //SD + bool SetPos(s64 pos){return exsave.SetPosW(pos);}; + +}; + + +#endif + diff --git a/trunk/CardSaveData/Mover/body/ver.h b/trunk/CardSaveData/Mover/body/ver.h index 9c6064f..56891a5 100644 --- a/trunk/CardSaveData/Mover/body/ver.h +++ b/trunk/CardSaveData/Mover/body/ver.h @@ -16,10 +16,11 @@ #ifndef VER_H_ #define VER_H_ -#define VERSION 1.2 +#define VERSION 2.0 // ver = 0 ãªã‚‰ãƒ†ã‚­ã‚¹ãƒˆã®æ–¹ã‚’表示 //#define VERSION 0.0 #define VERSION_TXT "TEST ONLY" #define VERSION_TXT_W L"TEST ONLY" + #endif diff --git a/trunk/CardSaveData/Mover/card2注æ„.txt b/trunk/CardSaveData/Mover/card2注æ„.txt new file mode 100644 index 0000000..65e9632 --- /dev/null +++ b/trunk/CardSaveData/Mover/card2注æ„.txt @@ -0,0 +1,16 @@ +Eimp‚̃eƒXƒgƒf[ƒ^ì¬ +‘ÎÛƒfƒoƒCƒX‚ɇ‚킹‚Ä +rsf‚ÌCARD2Žw’è‚·‚é +ƒfƒoƒK‚ÅMover–{‘Ì‚ðƒJ[ƒhƒAƒvƒŠŽÀs‚·‚éê‡ +rsf‚̃TƒCƒY‚ðimp쬎ž‚ƈê’v‚³‚¹‚é + +E”’” ƒfƒoƒO +ƒGƒ~ƒ…ƒŒ[ƒVƒ‡ƒ“ƒƒ‚ƒŠ‚©‚ç‘‚«–ß‚³‚È‚¢‚Æ +ƒJ[ƒhã‚̃Z[ƒuƒGƒŠƒA‚É”½‰f‚µ‚È‚¢ +’ˆÓ) rsf‚̃TƒCƒY•ÏX‚µ‚½‚çROMÄ‚«‚µ‚Ä +ƒZ[ƒuÝ’è‚ðˆê’v‚³‚¹‚Æ‚­ + +ƒJ[ƒh‚Ƀf[ƒ^‚ª‚ ‚Á‚Ä‚àAƒfƒoƒO‚Å‚Í +ƒGƒ~ƒ…ƒƒ‚ƒŠ‚ðŒ©‚És‚­‚Ì‚ÅAƒ[ƒh‚·‚邩쬂µ‚È‚¢‚Æ +”Fޝ‚µ‚È‚¢ + diff --git a/trunk/CardSaveData/Mover/release.txt b/trunk/CardSaveData/Mover/release.txt index affd3ac..f5a9493 100644 --- a/trunk/CardSaveData/Mover/release.txt +++ b/trunk/CardSaveData/Mover/release.txt @@ -29,7 +29,14 @@ CUP [Histry] #•\ަver@ƒ}ƒXƒ^ƒŠƒ“ƒOŽž‚Ìver # •ÏX“à—e -v1.20 - body:‹ó‚̃fƒBƒŒƒNƒgƒŠ‚ªì¬‚³‚ê‚È‚¢•s‹ï‡‚ðC³ +v2.00 - Remaster 2.1.3 + CARD2‘ΉžA‘å—e—ʂ̂Ƃ«SDŽg—p(Šg’£ƒZ[ƒu) + +v1.30 - Remaster 2.1.2 + ƒRƒs[ƒ‚[ƒh’ljÁAƒ†[ƒUî•ñ‚ŃƒbƒZ[ƒW‚̉p/“úØ‚è‘Ö‚¦ +@@@@ +v1.20 - Remaster 2.1.0 + body:‹ó‚̃fƒBƒŒƒNƒgƒŠ‚ªì¬‚³‚ê‚È‚¢•s‹ï‡‚ðC³ ƒƒbƒZ[ƒW‚ð“ú–{Œê•\ަ v1.10‰ü impFNOA‚ŃCƒ“ƒ|[ƒgo—ˆ‚È‚©‚Á‚½‚̂Ō…ƒ`ƒFƒbƒNíœ diff --git a/trunk/CardSaveData/common/common.cpp b/trunk/CardSaveData/common/common.cpp index 815d735..b40cf91 100644 --- a/trunk/CardSaveData/common/common.cpp +++ b/trunk/CardSaveData/common/common.cpp @@ -51,20 +51,22 @@ void GetErrorStr(TgtDev dev,nn::Result res,int cd,tChar* s) bool prohibitHome = false;// HOME ƒ{ƒ^ƒ“‹ÖŽ~ -// ƒtƒ@ƒCƒ‹ƒVƒXƒeƒ€ˆ—‚Æ‘JˆÚ‚âƒXƒŠ[ƒvˆ—‚Ƃ̔r‘¼§Œä‚É—˜—p -//nn::os::CriticalSection g_SleepCS; // HOME ƒ{ƒ^ƒ“‘JˆÚ‚ƃtƒ@ƒCƒ‹ƒVƒXƒeƒ€ˆ—‚Ì”r‘¼§Œä‚É—˜—piŽè“®ƒŠƒZƒbƒgj -nn::os::LightEvent g_TransitionEvent; +//nn::os::LightEvent g_TransitionEvent; // ƒXƒŠ[ƒv‚ƃtƒ@ƒCƒ‹ƒVƒXƒeƒ€ˆ—‚Ì”r‘¼§Œä‚É—˜—piŽè“®ƒŠƒZƒbƒgj nn::os::LightEvent g_AwakeEvent; +nn::os::CriticalSection g_CriticalSection; +nn::os::CriticalSection g_CriticalSectionForSleep; void restoreGraphicSetting() { // GPU ƒŒƒWƒXƒ^Ý’è‚Ì•œ‹A // ‚½‚¾‚µA‰º‹L‚Í DMPGL API ‚ðŽg—p‚µ‚Äݒ肵‚½ó‘Ô‚Ì•œ‹A‚Ì‚Ý - // ƒŒƒWƒXƒ^Ý’èƒRƒ}ƒ“ƒh‚Í‘S‚ÄÄ”­s‚·‚é‚ׂ« + // ‘¼‚̃‰ƒCƒuƒ‰ƒŠ‚ð—˜—p‚·‚éꇂÍA‚»‚ꂼ‚ê‚Ì•û–@‚ŃŒƒWƒXƒ^Ý’èƒRƒ}ƒ“ƒh‚ð‘S‚ÄÄ”­s‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B + // iŽQljGD ƒ‰ƒCƒuƒ‰ƒŠ‚É‚æ‚éÝ’è‚𕜌³‚·‚é + // nn::gd::System::ForceDirty(nn::gd::MODULE_ALL); nngxUpdateState(NN_GX_STATE_ALL); - nngxValidateState(NN_GX_STATE_ALL,GL_TRUE); + //nngxValidateState(NN_GX_STATE_ALL,GL_TRUE); //delete 2012.8.22, cause error SDK4.x firm } FUNCP end_func; @@ -73,13 +75,14 @@ void InitSysBreak(uptr adrs){ SleepHandler::Initialize(); - //g_SleepCS.Initialize(); g_AwakeEvent.Initialize(true); - g_TransitionEvent.Initialize(true); +// g_TransitionEvent.Initialize(true); + g_CriticalSection.Initialize(); + g_CriticalSectionForSleep.Initialize(); // ‹N°’†‚Íí‚É Signal ó‘Ô‚É‚µ‚Ä‚¨‚­ g_AwakeEvent.Signal(); - g_TransitionEvent.Signal(); + // g_TransitionEvent.Signal(); // ƒAƒvƒŒƒbƒgƒ‰ƒCƒuƒ‰ƒŠ‚ÉŠÖ‚·‚é‹@”\‚ð—LŒø‚É‚·‚é nn::applet::Enable(false); @@ -89,9 +92,12 @@ void InitSysBreak(uptr adrs){ // ƒƒS•\Ž¦Žž‚É“dŒ¹ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽ‚È‚ÇAŠù‚ÉI—¹ðŒ‚ª—§‚Á‚Ä‚¢‚½ê‡A‚±‚±‚ŃAƒvƒŠ‚ðI—¹‚³‚¹‚é if ( nn::applet::IsExpectedToCloseApplication() ) { + g_AwakeEvent.Finalize(); + g_CriticalSection.Finalize(); + g_CriticalSectionForSleep.Finalize(); SleepHandler::Finalize(); - nn::Result result = nn::applet::PrepareToCloseApplication(); - NN_UTIL_PANIC_IF_FAILED( result ); + // nn::Result result = nn::applet::PrepareToCloseApplication(); + // NN_UTIL_PANIC_IF_FAILED( result ); nn::applet::CloseApplication(); } // ƒOƒ‰ƒtƒBƒbƒNƒXƒ‰ƒCƒuƒ‰ƒŠ‚̉Šú‰»‚ÍAˆÈ~‚Ås‚í‚È‚¯‚ê‚΂Ȃç‚È‚¢ @@ -103,14 +109,16 @@ void InitSysBreak(uptr adrs){ //I—¹ˆ— void finish() { - - SleepHandler::Finalize();//SLEEP - //g_SleepCS.Finalize(); +// SleepHandler::Finalize();//SLEEP (*end_func)(); g_AwakeEvent.Finalize(); - g_TransitionEvent.Finalize(); + //g_TransitionEvent.Finalize(); + g_CriticalSection.Finalize(); + g_CriticalSectionForSleep.Finalize(); + + SleepHandler::Finalize();//SLEEP //nn::fs::Finalize(); @@ -119,15 +127,16 @@ void finish() appHeap.Finalize(); nn::os::SetDeviceMemorySize(0); - nn::os::SetHeapSize(0); +// nn::os::SetHeapSize(0); NN_LOG("End\n"); - nn::applet::PrepareToCloseApplication(); + //nn::applet::PrepareToCloseApplication(); nn::applet::CloseApplication(); } void CheckSysBreak(){ + // ƒXƒŠ[ƒv‚©‚ç‚Ì‹N°Žž‚ÍA1ƒtƒŒ[ƒ€•ª‚Ì•`‰æŠ®—¹‚ð‘Ò‚Á‚Ä‚©‚ç LCD ‚ð—LŒø‚É‚·‚é if ( SleepHandler::s_IsAfterWakeUp ) { nn::gx::StartLcdDisplay(); @@ -158,7 +167,7 @@ void CheckSysBreak(){ nn::applet::ClearHomeButtonState();//HOME ƒ{ƒ^ƒ“ƒtƒ‰ƒOíœ }else { - g_TransitionEvent.ClearSignal(); + //g_TransitionEvent.ClearSignal(); // ƒtƒ@ƒCƒ‹ƒVƒXƒeƒ€ˆ—’†‚Í‘JˆÚ‚ð‘Ò‚Â //if ( g_SleepCS.TryEnter() ) @@ -171,8 +180,7 @@ void CheckSysBreak(){ nn::applet::AppletWakeupState wState = nn::applet::WaitForStarting(); NN_UNUSED_VAR(wState); - //g_SleepCS.Leave(); - g_TransitionEvent.Signal(); + //g_TransitionEvent.Signal(); // HOME ƒƒjƒ…[‚©‚ç‚Ì’†’f‚âƒoƒbƒeƒŠ[•s‘«‚Ì—vˆö‚É‚æ‚è // ƒAƒvƒŠI—¹‚Æ”»’f‚³‚ꂽê‡AƒAƒvƒŠ‚̃ƒCƒ“ƒ‹[ƒv‚𔲂¯‚ÄI—¹ˆ—‚Ö @@ -195,20 +203,19 @@ void CheckSysBreak(){ // “dŒ¹ƒ{ƒ^ƒ“ˆ—iƒOƒ‰ƒtƒBƒbƒNƒXƒ‰ƒCƒuƒ‰ƒŠ‚ª‰Šú‰»Ï‚݂łȂ¯‚ê‚΂Ȃç‚È‚¢j if ( nn::applet::IsExpectedToProcessPowerButton() ) { - g_TransitionEvent.ClearSignal(); + //g_TransitionEvent.ClearSignal(); // ƒtƒ@ƒCƒ‹ƒVƒXƒeƒ€ˆ—’†‚Í‘JˆÚ‚ð‘Ò‚Â //if ( g_SleepCS.TryEnter() ) { nn::applet::DisableSleep(); - //nngxWaitCmdlistDone(); + nngxWaitCmdlistDone(); nn::applet::ProcessPowerButton(); - nn::applet::AppletWakeupState wState = nn::applet::WaitForStarting(); - - NN_UNUSED_VAR(wState); + //nn::applet::AppletWakeupState wState = nn::applet::WaitForStarting(); + //NN_UNUSED_VAR(wState); + nn::applet::WaitForStarting(); - //g_SleepCS.Leave(); - g_TransitionEvent.Signal(); + //g_TransitionEvent.Signal(); // ƒAƒvƒŠI—¹‚Æ”»’f‚³‚ꂽê‡AƒAƒvƒŠ‚̃ƒCƒ“ƒ‹[ƒv‚𔲂¯‚ÄI—¹ˆ—‚Ö if ( nn::applet::IsExpectedToCloseApplication() ) diff --git a/trunk/CardSaveData/common/gui/gui.cpp b/trunk/CardSaveData/common/gui/gui.cpp index 27a4077..87e9301 100644 --- a/trunk/CardSaveData/common/gui/gui.cpp +++ b/trunk/CardSaveData/common/gui/gui.cpp @@ -247,14 +247,13 @@ void drawDisp() setText(s_Panel[s_Message[si].parent].pos.x+s_Message[si].pos.x, s_Panel[s_Message[si].parent].pos.y+s_Message[si].pos.y,s_Message[si].caption); - //NN_LOG(s_Message[i].caption); //NN_LOG(" %d\n",i); } } s_RenderSystem.SwapBuffers(); - nngxWaitVSync(NN_GX_DISPLAY0); +// nngxWaitVSync(NN_GX_DISPLAY0); //下 tCol col; @@ -279,10 +278,41 @@ void drawDisp() } s_RenderSystem.SwapBuffers(); - nngxWaitVSync(NN_GX_DISPLAY1); +// nngxWaitVSync(NN_GX_DISPLAY1); } +//上ã®ã¿ +void drawDisp_U() +{ + //NN_LOG("draw\n"); + //上 + s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0); + s_RenderSystem.Clear(); + int i; + + for (i=0;i= PANEL_MAX)return RESULT_BAD_PARAM; + s_Panel[id].caption = str; + return RESULT_OK; +} + myResult Gui::PanelEffective(u8 id,bool enable,bool visible) { if (id >= PANEL_MAX)return RESULT_BAD_PARAM; @@ -541,6 +578,16 @@ void Gui::Draw() drawDisp(); } +void Gui::Draw_U() +{ + drawDisp_U(); +} + +void Gui::WaitVsnc() +{ + nngxWaitVSync(NN_GX_DISPLAY0); + nngxWaitVSync(NN_GX_DISPLAY1); +} void Gui::DisableAll() { diff --git a/trunk/CardSaveData/common/gui/gui.h b/trunk/CardSaveData/common/gui/gui.h index 5e9c06e..52fb497 100644 --- a/trunk/CardSaveData/common/gui/gui.h +++ b/trunk/CardSaveData/common/gui/gui.h @@ -80,14 +80,17 @@ public: myResult MessSet(const tMessage *mes); // myResult MemoSet(const tMemo *m); void Draw(); + void Draw_U(); void DisableAll(); myResult PanelEffective(u8 id,bool enable=true,bool visible=true); + myResult PanelCaption(u8 id,tChar *str); myResult MessEffective(u8 id,bool enable=true,bool visible=true); // myResult MemoEffective(u8 id,bool enable=true,bool visible=true); myResult MessStr(u8 id,tChar *str); myResult MessCol(u8 id,eColor col); // myResult MemoStr(u8 id,tChar *str,u16 ln); myResult PanelLineStyle(u8 id,eColor col=COLOR_WHITE,u8 width = 2); + void WaitVsnc(); //void thUpdate(); }; diff --git a/trunk/CardSaveData/common/icon.icn b/trunk/CardSaveData/common/icon.icn new file mode 100644 index 0000000000000000000000000000000000000000..b41a5f69eaf25eee2c09985e550848e21bc86f0c GIT binary patch literal 14016 zcmeHKO;VdN3^ltfv&=ELLV^C$&XDE=?UZSmDQ$fEhDdeb!YB7 z+%~q-`Ct3&U);xyWqugINA8Dv?>RqlW6$@o=X<-WoByYt`I7TT{yP6{+=TA=KlAsn zf9e10mz+QH*ZG&5|ETcyKjg3TFE{`F!r%Xpzs|qh z{15$auackt$Y1AQZvF@US82)lBY&NLx%nRze*YtXoqxIczb*X!NB%nhZOp&ss0>sF zDg%{)%0OkHGEf=#zZkf;;QiZ%XU;~qbX}qH^B)A4oq3vJYV}|Ta z=P92#U3S_^O4hkqsT_bIWl8L-<_3Sj=;D!fO6vprs!Q{SHAts9Y+Fw$opmxlbxLce zPMPvc*%?<_vc9ym_tom@NI9|ou`d0~y@9`+DkjdwE>cfqH|rl_rD7CQ@h$T5`h76r z`w$kpWi8OLPuc1B*d_Z*OSxg}Q*LO?O*%GzLflXy3OZ$Y7TWXZc@M>w&J;f%`*=K* zOYKrRUq=thnX<_p@N?&@)}Z*3OL9x6Ic(OsSs8K=*R_tkA;-2~;OEX)twHf6m(+lL z9@*AAtH(IPp5o5>Tg&`-L7G1wAi_^_6Q8&#D`R5+5KFsIbhX8}M6uHPTiyCwUHwzL zxQ4v zT31& m_info.max )m_info.max = dcEntryl.entrySize; }else{//ƒNƒ‰ƒXƒ^ƒTƒCƒY‚Å’²® .. SDè—L—e—Ê sn = dcEntryl.entrySize / clsz; if ((dcEntryl.entrySize % clsz) > 0 )sn++; diff --git a/trunk/CardSaveData/common/savefile/savefile.h b/trunk/CardSaveData/common/savefile/savefile.h index 57db5fc..58fb781 100644 --- a/trunk/CardSaveData/common/savefile/savefile.h +++ b/trunk/CardSaveData/common/savefile/savefile.h @@ -59,6 +59,7 @@ bool CmpPathW(wchar_t *s,wchar_t *s2); #define INFO_VERSION 0 struct tArcInfo{ s64 total;//ƒtƒ@ƒCƒ‹ƒTƒCƒY‘Œv + u32 min,max;//Å­AÅ‘å u32 DirEntry,FileEntry;//ƒtƒH[ƒ}ƒbƒg u32 DirCount,FileCount;//Dir,ƒtƒ@ƒCƒ‹” char Pcode[20];//product code SDK‚̃TƒCƒY‚ð‰º‰ñ‚ç‚È‚¢‚±‚Æ @@ -135,13 +136,16 @@ public: ~SaveFileWrite(){}; bool DeleteDir(const wchar_t *dir); bool MakeDir(wchar_t *path,bool *mkdir); - bool DeleteFile(const wchar_t *path); - bool OpenW(const wchar_t *path); + bool DeleteFile(wchar_t *path); + bool OpenW(const wchar_t *path,bool make); bool OpenC(wchar_t *path,s64 size,bool *mkdir); bool OpenAdd(wchar_t *path); void CloseW(); + bool SetPosW(s64 pos); + bool CreateFile(wchar_t *path,s64 size); s32 Write(char *buffer,size_t size); bool CreateDir(const wchar_t *dir); + bool Flush(); }; //ƒŠ[ƒh diff --git a/trunk/CardSaveData/common/shfnt.cpp b/trunk/CardSaveData/common/shfnt.cpp index 3f471bd..dbb9c1b 100644 --- a/trunk/CardSaveData/common/shfnt.cpp +++ b/trunk/CardSaveData/common/shfnt.cpp @@ -395,6 +395,7 @@ void shf_SetColorW(f32 r,f32 g,f32 b,f32 a) } +#define STD_FONT_ONLY 1 //åˆæœŸåŒ– //AppHeap確ä¿ã€RenderSystem.Inititã®å¾Œã«å‘¼ã¶ @@ -402,11 +403,12 @@ void SharedFontInit() { InitGX(); - - // 共有フォントã®åˆæœŸåŒ– + +#ifndef STD_FONT_ONLY + // 本体リージョンã®ãƒ•ォントロード NN_UTIL_PANIC_IF_FAILED(nn::pl::InitializeSharedFont()); - // 共有フォントã®ãƒ­ãƒ¼ãƒ‰ãŒå®Œäº†ã™ã‚‹ã¾ã§å¾…機 + // ロードãŒå®Œäº†ã™ã‚‹ã¾ã§å¾…機 while (nn::pl::GetSharedFontLoadState() != nn::pl::SHARED_FONT_LOAD_STATE_LOADED) { // 共有フォントã®ãƒ­ãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¦ã„ãªã„ã‹ç¢ºèª @@ -417,11 +419,31 @@ void SharedFontInit() nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(1)); } - // 共有フォントã®ç¨®é¡žã‚’å–å¾— + // フォントã®ç¨®é¡žã‚’å–å¾— //nn::pl::SharedFontType sharedFontType = nn::pl::GetSharedFontType(); - // 共有フォントデータã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–å¾— + // フォントデータã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–å¾— void* pFontBuffer = nn::pl::GetSharedFontAddress(); +#else +//日英フォントロード + const size_t ROMFS_BUFFER_SIZE = 1024 * 64; + static char buffer[ROMFS_BUFFER_SIZE]; + + nn::pl::MountSharedFont("font:",nn::pl::SHARED_FONT_TYPE_STD, + 16, 16, buffer, ROMFS_BUFFER_SIZE); + nn::fs::FileReader fontReader("font:/cbf_std.bcfnt.lz"); + + const u32 fileSize = (u32)fontReader.GetSize(); + + void* fontBinary = appHeap.Allocate(fileSize); + NN_NULL_ASSERT(fontBinary); + + fontReader.Read(fontBinary, fileSize); + const u32 fontsize = nn::cx::GetUncompressedSize(fontBinary); + void* pFontBuffer = appHeap.Allocate(fontsize,128); + NN_NULL_ASSERT(pFontBuffer); + nn::cx::UncompressAny(fontBinary,pFontBuffer); +#endif InitFont(&font, pFontBuffer); @@ -440,6 +462,13 @@ void SharedFontInit() SetupTextCamera(&drawer, NN_GX_DISPLAY0_WIDTH, NN_GX_DISPLAY0_HEIGHT); +#ifdef STD_FONT_ONLY + appHeap.Free(pFontBuffer); + appHeap.Free(fontBinary); + fontReader.Finalize(); + nn::pl::UnmountSharedFont("font:"); +#endif + } diff --git a/trunk/CardSaveData/common/test_data.cpp b/trunk/CardSaveData/common/test_data.cpp index a40eebd..0d88f8a 100644 --- a/trunk/CardSaveData/common/test_data.cpp +++ b/trunk/CardSaveData/common/test_data.cpp @@ -31,8 +31,8 @@ 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]; +char get_buff[1024*1024];//リード指定サイズよりå°ã•ããªã‚‰ãªã„ã‚ˆã†æ³¨æ„ +char str[1024]; extern demo::RenderSystemDrawing s_RenderSystem; @@ -63,11 +63,13 @@ void make_pattern() //TEST ライト s32 size; -#define SIZE_TEST1 421888 +s64 lsize; +//#define SIZE_TEST1 421888 //#define SIZE_TEST1 244736 //dup #define DMX_TEST0 100 #define FMX_TEST0 100 #define DUP_TEST0 true +#define SIZE_TEST0 500 bool Test0_W(int n)//Casual { @@ -82,7 +84,9 @@ bool Test0_W(int n)//Casual return false; } - int num = 0,total=0,size=512; + + s32 wsize= SIZE_TEST0; + int num = 0,total=0; while(1){ /* swprintf(file_pathw,512,L"data:/空ディレクトリ%d",num); @@ -100,14 +104,14 @@ bool Test0_W(int n)//Casual nn::fs::Unmount("data:"); return false; } - sprintf(file_path,"data:/null%d",num); + sprintf(file_path,"data:/test0dir%d",num); res = nn::fs::TryCreateDirectory(file_path); if (res.IsFailure()){ drawText(8,100,"Dir create Fail"); nn::fs::Unmount("data:"); return false; } - sprintf(file_path,"data:/null%d/nulldir",num); + sprintf(file_path,"data:/test0dir%d/nulldir",num); res = nn::fs::TryCreateDirectory(file_path); if (res.IsFailure()){ drawText(8,100,"Dir create Fail"); @@ -125,6 +129,7 @@ bool Test0_W(int n)//Casual //sprintf(file_path,"data:/test%d/test%d.bin",num,num); //res = fout.TryInitialize(file_path,true); //swprintf(file_pathw,512,L"data:/テスト%d/テスト%d.bin",num,num); + swprintf(file_pathw,512,L"data:/test%d/test%d.bin",num,num); res = fout.TryInitialize(file_pathw,true); if (res.IsFailure()){ @@ -132,7 +137,7 @@ bool Test0_W(int n)//Casual nn::fs::Unmount("data:"); return false; } - res = fout.TryWrite( &size,&src_buff[total],size); + res = fout.TryWrite( &size,&src_buff[total],wsize,true); if (res.IsFailure()){ drawText(8,100,"write Fail"); fout.Finalize(); @@ -141,7 +146,18 @@ bool Test0_W(int n)//Casual } fout.Finalize(); total += size; - size += size; + wsize += SIZE_TEST0; + + swprintf(file_pathw,512,L"data:/test%d/null%d.bin",num,num); + res = fout.TryInitialize(file_pathw,true); + if (res.IsFailure()){ + drawText(8,100,"open Fail"); + nn::fs::Unmount("data:"); + return false; + } + fout.TryFlush(); + fout.Finalize(); + num++; sprintf(str,"size %d , num %d",total,num); s_RenderSystem.Clear(); @@ -163,7 +179,8 @@ bool Test0_W(int n)//Casual bool Test0_V(int n)//Casual { - int num = 0,total=0,size = 512; + int num = 0,total=0; + s32 rsize=SIZE_TEST0; size_t maxF,maxD; bool isDup; @@ -181,8 +198,6 @@ bool Test0_V(int n)//Casual return false; } - - while(1){ sprintf(file_path,"data:/nulldir%d",num);//ディレクトリ res = dc.TryInitialize(file_path); @@ -193,7 +208,7 @@ bool Test0_V(int n)//Casual return false; } dc.Finalize(); - sprintf(file_path,"data:/null%d/nulldir",num);//ディレクトリ + sprintf(file_path,"data:/test0dir%d/nulldir",num);//ディレクトリ res = dc.TryInitialize(file_path); if (res.IsFailure()){ drawText(8,100,"open Dir"); @@ -214,6 +229,7 @@ bool Test0_V(int n)//Casual dc.Finalize(); */ //swprintf(file_pathw,512,L"data:/テスト%d/テスト%d.bin",num,num); + swprintf(file_pathw,512,L"data:/test%d/test%d.bin",num,num); res = fin.TryInitialize(file_pathw); if (res.IsFailure()){ @@ -221,17 +237,43 @@ bool Test0_V(int n)//Casual nn::fs::Unmount("data:"); return false; } - res = fin.TryRead( &size,&get_buff[total],size); + res = fin.TryRead( &size,get_buff,rsize); if (res.IsFailure()){ drawText(8,100,"read Fail"); fin.Finalize(); nn::fs::Unmount("data:"); return false; } - for(int i=0;i> sft; + +// res = nn::fs::TryCreateFile(L"data:/test1.bin",SIZE_TEST1); + res = nn::fs::TryCreateFile(L"data:/test1.bin",test1_sz); if (res.IsFailure()){ drawText(8,100,"Create Fail"); nn::fs::Unmount("data:"); @@ -278,12 +331,10 @@ bool Test1_W() nn::fs::Unmount("data:"); return false; } - total =0; + total =0;idx =0; size2 = 512; - //size2 = 4096; - //size2 = SIZE_TEST1; while(1){ - res = fout.TryWrite( &size,&src_buff[total],size2); + res = fout.TryWrite( &size,&src_buff[idx],size2,false); if (res.IsFailure()){ drawText(8,100,"write Fail"); fout.Finalize(); @@ -291,15 +342,24 @@ bool Test1_W() return false; } total += size; - sprintf(str,"size %d",total); + sprintf(str,"size %d / %d",total,(s32)test1_sz); 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 ; + if (size<512)break; + idx += size; + if (idx >= sizeof(src_buff))idx = 0; + //if ((SIZE_TEST1 - total) < 512)size2 = SIZE_TEST1 - total ; + if ((test1_sz - total) < 512)size2 = test1_sz - total ; + if (size2 ==0)break; } + res = fout.TryFlush(); fout.Finalize(); + if (res.IsFailure()){ + drawText(8,100,"flush Fail"); + nn::fs::Unmount("data:"); + return false; + } nn::fs::CommitSaveData(); nn::fs::Unmount("data:"); NN_LOG("total %d",total); @@ -310,9 +370,16 @@ bool Test1_W() } //ベリファイ -bool Test1_V() +bool Test1_V(int sft) { - int i,total; + int i,total,idx; + + res = nn::fs::GetArchiveFreeBytes(&test1_sz,"data:"); + if (res.IsFailure()){ + drawText(8,100,"GetSize Fail"); + return false; + } + test1_sz = test1_sz >> sft; res = fin.TryInitialize(L"data:/test1.bin"); if (res.IsFailure()) @@ -322,9 +389,20 @@ bool Test1_V() nn::fs::Unmount("data:"); return false; } - total =0; + + res = fin.TryGetSize(&test1_sz); + if (res.IsFailure()) + { + //NN_LOG("%d\n",res.GetDescription()); + drawText(8,100,"GetSize Fail"); + fin.Finalize(); + nn::fs::Unmount("data:"); + return false; + } + + total =0;idx=0; while(1){ - res = fin.TryRead( &size,&get_buff[total],512); + res = fin.TryRead( &size,get_buff,512); if (res.IsFailure()){ drawText(8,100,"read Fail"); fin.Finalize(); @@ -332,7 +410,7 @@ bool Test1_V() return false; } //if (size == 0)break; - for (i=0;i= SIZE_TEST1)break; + idx += size; + if (idx >= sizeof(src_buff))idx=0; total += size; + if (total >= test1_sz)break; s_RenderSystem.Clear(); sprintf(str,"now %d",total); drawText(10,80,str); s_RenderSystem.SwapBuffers(); if (size<512)break; } - fout.Finalize(); + fin.Finalize(); nn::fs::Unmount("data:"); drawText(10,100,"end"); s_RenderSystem.SwapBuffers(); @@ -357,7 +437,8 @@ bool Test1_V() return true; } -#define test2_max 680 +//#define test2_max 680 +#define test2_max 100 #define test2_ct test2_max //#define test2_max 10 //#define test2_ct 5 @@ -396,7 +477,7 @@ bool Test2_W(int n) nn::fs::Unmount("data:"); return false; } - res = fout.TryWrite( &size,&src_buff[total],size2); + res = fout.TryWrite( &size,&src_buff[total],size2,true); if (res.IsFailure()){ drawText(8,100,"write Fail"); fout.Finalize(); @@ -438,14 +519,14 @@ bool Test2_V(int n) nn::fs::Unmount("data:"); return false; } - res = fin.TryRead( &size,&get_buff[total],size2); + res = fin.TryRead( &size,get_buff,size2); if (res.IsFailure()){ drawText(8,100,"read Fail"); fin.Finalize(); nn::fs::Unmount("data:"); return false; } - for (i=0;i= SIZE_TEST5)break; } - + res = fout.TryFlush(); fout.Finalize(); + if (res.IsFailure()){ + drawText(8,100,"flush Fail"); + nn::fs::Unmount("data:"); + return false; + } nn::fs::CommitSaveData(); nn::fs::Unmount("data:"); drawText(10,100,"end"); @@ -849,7 +936,7 @@ bool Test5_V() pos = SIZE_TEST5_START; while(1){ fin.SetPosition(pos); - res = fin.TryRead( &size,&get_buff[pos],512); + res = fin.TryRead( &size,get_buff,512); if (res.IsFailure() || (size!=512)){ drawText(8,100,"read Fail"); fin.Finalize(); @@ -861,7 +948,7 @@ bool Test5_V() drawText(10,80,str); s_RenderSystem.SwapBuffers(); - for (i=0;i<512;i++) if (src_buff[pos+i] != get_buff[pos+i]) + for (i=0;i<512;i++) if (src_buff[pos+i] != get_buff[i]) { drawText(8,100,"verifi Fail at %d",i); return false; @@ -936,7 +1023,7 @@ bool Test6_W() nn::fs::Unmount("data:"); return false; } - res = fout.TryWrite( &size,&src_buff[ofst],512); + res = fout.TryWrite( &size,&src_buff[ofst],512,true); if (res.IsFailure()){ drawText(8,100,"write fail"); nn::fs::Unmount("data:"); @@ -977,7 +1064,7 @@ bool Test6_W() nn::fs::Unmount("data:"); return false; } - res = fout.TryWrite( &size,&src_buff[ofst],512); + res = fout.TryWrite( &size,&src_buff[ofst],512,true); if (res.IsFailure()){ drawText(8,100,"write fail"); nn::fs::Unmount("data:"); @@ -1010,7 +1097,7 @@ bool Test6_W() nn::fs::Unmount("data:"); return false; } - res = fout.TryWrite( &size,&src_buff[ofst],512); + res = fout.TryWrite( &size,&src_buff[ofst],512,true); if (res.IsFailure()){ drawText(8,100,"write fail"); nn::fs::Unmount("data:"); @@ -1063,7 +1150,7 @@ bool Test6_V() nn::fs::Unmount("data:"); return false; } - res = fin.TryRead( &size,&get_buff[ofst],512); + res = fin.TryRead( &size,get_buff,512); if (res.IsFailure()){ drawText(8,100,"read fail"); nn::fs::Unmount("data:"); @@ -1071,7 +1158,7 @@ bool Test6_V() } fin.Finalize(); - for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[ofst+i]){ + for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[i]){ drawText(8,100,"verifi fail"); nn::fs::Unmount("data:"); return false; @@ -1102,7 +1189,7 @@ bool Test6_V() nn::fs::Unmount("data:"); return false; } - res = fin.TryRead( &size,&get_buff[ofst],512); + res = fin.TryRead( &size,get_buff,512); if (res.IsFailure()){ drawText(8,100,"write fail"); nn::fs::Unmount("data:"); @@ -1110,7 +1197,7 @@ bool Test6_V() } fout.Finalize(); - for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[ofst+i]){ + for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[i]){ drawText(8,100,"verifi fail"); nn::fs::Unmount("data:"); return false; @@ -1135,7 +1222,7 @@ bool Test6_V() nn::fs::Unmount("data:"); return false; } - res = fin.TryRead( &size,&get_buff[ofst],512); + res = fin.TryRead( &size,get_buff,512); if (res.IsFailure()){ drawText(8,100,"read fail"); nn::fs::Unmount("data:"); @@ -1143,7 +1230,7 @@ bool Test6_V() } fin.Finalize(); - for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[ofst+i]){ + for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[i]){ drawText(8,100,"verifi fail"); nn::fs::Unmount("data:"); return false; @@ -1160,11 +1247,129 @@ bool Test6_V() 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 +//ディレクトリã®ã¿ +bool Test7_W(int n) +{ + + res = nn::fs::FormatSaveData(DMX_TEST0,FMX_TEST0,DUP_TEST0); + 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; + while(1){ + sprintf(file_path,"data:/nulldir%d",num); + res = nn::fs::TryCreateDirectory(file_path); + if (res.IsFailure()){ + drawText(8,100,"Dir create Fail"); + nn::fs::Unmount("data:"); + return false; + } + + sprintf(file_path,"data:/test7dir%d",num); + res = nn::fs::TryCreateDirectory(file_path); + if (res.IsFailure()){ + drawText(8,100,"Dir create Fail"); + nn::fs::Unmount("data:"); + return false; + } + + sprintf(file_path,"data:/test7dir%d/nulldir",num); + res = nn::fs::TryCreateDirectory(file_path); + if (res.IsFailure()){ + drawText(8,100,"Dir create Fail"); + nn::fs::Unmount("data:"); + return false; + } + + num++; + sprintf(str,"num %d",num*3); + s_RenderSystem.Clear(); + drawText(10,80,str); + s_RenderSystem.SwapBuffers(); + //if (size<512)break; + if (num == n)break; + } + nn::fs::CommitSaveData(); + nn::fs::Unmount("data:"); + drawText(10,100,"end"); + s_RenderSystem.SwapBuffers(); + nngxWaitVSync(NN_GX_DISPLAY0); + return true; +} + +bool Test7_V(int n) +{ + int num = 0; + size_t maxF,maxD; + bool isDup; + + nn::fs::Directory dc; + + res = nn::fs::GetSaveDataFormatInfo(&maxF,&maxD,&isDup); + if (res.IsFailure()){ + drawText(8,100,"fail to get formatinfo"); + nn::fs::Unmount("data:"); + return false; + } + if ((maxF != FMX_TEST0)||(maxD!=DMX_TEST0)||(isDup != DUP_TEST0)){ + drawText(8,100,"wrong format"); + nn::fs::Unmount("data:"); + return false; + } + + while(1){ + sprintf(file_path,"data:/nulldir%d",num);//ディレクトリ + res = dc.TryInitialize(file_path); + if (res.IsFailure()){ + drawText(8,100,"open Dir"); + dc.Finalize(); + nn::fs::Unmount("data:"); + return false; + } + dc.Finalize(); + sprintf(file_path,"data:/test7dir%d/nulldir",num);//ディレクトリ + res = dc.TryInitialize(file_path); + if (res.IsFailure()){ + drawText(8,100,"open Dir"); + dc.Finalize(); + nn::fs::Unmount("data:"); + return false; + } + dc.Finalize(); + + num++; + sprintf(str," num %d",num*3); + s_RenderSystem.Clear(); + drawText(10,80,str); + s_RenderSystem.SwapBuffers(); + if (num == n)break; + + } + nn::fs::Unmount("data:"); + drawText(10,100,"end"); + s_RenderSystem.SwapBuffers(); + nngxWaitVSync(NN_GX_DISPLAY0); + return true; +} + + + + + +#define menu_ct 9 +#define menu_max (menu_ct-1) +char* menu_str[menu_ct] = {"Casual check","Max size","Max/32 size","many files","Deep directry" +,"max size name","data < create size","fat error name","Dir Only"}; + +#define menu_top_Y 70 #define menu_top_X 60 #define menu_spc 14 @@ -1181,18 +1386,18 @@ void TestMain() //TEST PATTERN make_pattern(); - + while(1){ - - //menu 表示 + //menu 表示 s_RenderSystem.Clear(); drawText(8,20," Backup Verifi for SaveDataMover Test "); - drawText(8,40," for 512KB Backup"); + //drawText(8,40," for 512KB Backup"); for (i=0;i"); 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); @@ -1203,17 +1408,21 @@ void TestMain() s_RenderSystem.SwapBuffers(); nngxWaitVSync(NN_GX_DISPLAY0); switch(curs){ - case 0:sccs = Test0_W(5);break; - case 1:sccs = Test1_W();break; - case 2:sccs = Test2_W(test2_ct);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; + case 0:sccs = Test0_W(5);break;//5file + case 1:sccs = Test1_W(0);break; + case 2:sccs = Test1_W(5);break;//max >> 5 + case 3:sccs = Test2_W(test2_ct);break; + case 4:sccs = Test3_W();break; + case 5:sccs = Test4_W();break; + case 6:sccs = Test5_W();break; + case 7:sccs = Test6_W();break; + case 8:sccs = Test7_W(5);break; default:break; } }else if (value & nn::hid::BUTTON_X) {//ベリファイ + //書ã„ãŸåˆ†ã®ãƒã‚§ãƒƒã‚¯ã€ä½™åˆ†ã«ã‚ã‚‹ã‹ã¾ã§ã¯è¦‹ã¦ãªã„ + //ツールå´ã§æ§‹æˆãƒã‚§ãƒƒã‚¯ã‚’ã™ã‚‹ã“㨠sccs = false; s_RenderSystem.Clear(); drawText(10,70,"verifi"); @@ -1225,12 +1434,14 @@ void TestMain() }else switch(curs){ case 0:sccs = Test0_V(5);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; + case 1:sccs = Test1_V(0);break; + case 2:sccs = Test1_V(5);break; + case 3:sccs = Test2_V(test2_ct);break; + case 4:sccs = Test3_V();break; + case 5:sccs = Test4_V();break; + case 6:sccs = Test5_V();break; + case 7:sccs = Test6_V();break; + case 8:sccs = Test7_V(5);break; default:break; } }else if (value & nn::hid::BUTTON_UP){