Example #1
0
int LPP_UtilsSavedataUpdate(void)
{
    int res = -1;

    switch(sceUtilitySavedataGetStatus())
    {
    case PSP_UTILITY_DIALOG_NONE:
        break;
    case PSP_UTILITY_DIALOG_VISIBLE:
        sceUtilitySavedataUpdate(1);
        break;
    case PSP_UTILITY_DIALOG_QUIT:
        sceUtilitySavedataShutdownStart();
        strcpy(lpp_UtilsSavedataSaveName, lpp_UtilsSavedataParams.saveName);

        if(lpp_UtilsSavedataParams.mode == LPP_UTILS_SAVEDATA_TYPE_AUTOLOAD || lpp_UtilsSavedataParams.mode == LPP_UTILS_SAVEDATA_TYPE_LISTLOAD)
        {
            kuKernelMemcpy(lpp_UtilsSaveDataData, lpp_UtilsSavedataParams.dataBuf, lpp_UtilsSavedataParams.dataBufSize);
        }

        if(lpp_UtilsSavedataParams.pic1FileData.buf != null)
        {
            free(lpp_UtilsSavedataParams.pic1FileData.buf);
        }

        if(lpp_UtilsSavedataParams.icon0FileData.buf != null)
        {
            free(lpp_UtilsSavedataParams.icon0FileData.buf);
        }

        if(lpp_UtilsSavedataParams.snd0FileData.buf != null)
        {
            free(lpp_UtilsSavedataParams.snd0FileData.buf);
        }

        if(lpp_UtilsSavedataParams.dataBuf != null)
        {
            free(lpp_UtilsSavedataParams.dataBuf);
        }

        res = lpp_UtilsSavedataParams.base.result;
        break;
    default:
        break;
    }

    return(res);
}
void mainImpl()
{
	int result, previousResult;
	SceUtilitySavedataParamNew savedata;

	// read info file
	int fd = sceIoOpen("ms0:/savename.txt", O_RDONLY, 0);
	if (!fd) {
		print("ms0:/savename.txt not found");
		return;
	}
	char file[1000];
	int len = sceIoRead(fd, file, 1000);
	sceIoClose(fd);
	file[len] = 0;
	
	// extract first 3 lines
	char *ptr = file;

	g_gameName = ptr;
	while (*ptr != 10 && *ptr != 13 && *ptr != 0) ptr++;
	if (*ptr == 13) *ptr++ = 0;
	if (*ptr == 10) *ptr++ = 0;

	g_saveName = ptr;
	while (*ptr != 10 && *ptr != 13 && *ptr != 0) ptr++;
	if (*ptr == 13) *ptr++ = 0;
	if (*ptr == 10) *ptr++ = 0;

	g_dataName = ptr;
	while (*ptr != 10 && *ptr != 13 && *ptr != 0) ptr++;
	if (*ptr == 13) *ptr++ = 0;
	if (*ptr == 10) *ptr++ = 0;

	// ask for load or update
	pgPrint2(0, 0, 0xffff, "Shine's SavedataTool");
	char buf[100];
	strcpy(buf, "game name: ");
	print(strcat(buf, g_gameName));
	strcpy(buf, "save name: ");
	print(strcat(buf, g_saveName));
	strcpy(buf, "data name: ");
	print(strcat(buf, g_dataName));
	y++;
	print("Press Cross    for savedata mode 0  (AUTOLOAD)");
    print("Press Circle   for savedata mode 1  (AUTOSAVE)");
	print("Press Triangle for savedata mode 8  (SIZES)");
	print("Press Square   for savedata mode 11 (LIST)");
	print("Press Left     for savedata mode 12 (FILES)");
	print("Press Up       for savedata mode 15 (READSECURE)");
	print("Press Down     for savedata mode 22 (GETSIZE)");
	y++;

	sceCtrlSetSamplingCycle(0); 
	sceCtrlSetSamplingMode(0); 
	SceCtrlData ctrl;
	int mode = -1;
	while (mode < 0) { 
		sceCtrlReadBufferPositive(&ctrl, 1); 
		if (ctrl.Buttons & CTRL_CROSS) { 
			mode = 0; // AUTOLOAD
		} else if (ctrl.Buttons & CTRL_CIRCLE) { 
			mode = 1; // AUTOSAVE
		} else if (ctrl.Buttons & CTRL_TRIANGLE) {
			mode = 8; // SIZES
		} else if (ctrl.Buttons & CTRL_SQUARE) {
			mode = 11; // LIST
		} else if (ctrl.Buttons & CTRL_UP) {
			mode = 15; // READSECURE
		} else if (ctrl.Buttons & CTRL_DOWN) {
			mode = 22; // GETSIZE
		} else if (ctrl.Buttons & CTRL_LEFT) {
			mode = 12; // FILES
		}
		sceDisplayWaitVblankStart();
	}

	if (mode == 0) {
		print("Loading savedata with mode 0 (AUTOLOAD)...");
		initSavedata(&savedata, mode);
		result = sceUtilitySavedataInitStart((SceUtilitySavedataParam *) &savedata);
		if (result) {
			print("sceUtilitySavedataInitStart failed");
			printHex(result);
			return;
		}
		previousResult = -1;
		while (1) {
			result = sceUtilitySavedataGetStatus();
			if (result != previousResult) {
				print("sceUtilitySavedataGetStatus result:");
				printHex(result);
				previousResult = result;
			}
			if (result == 3) break;
			sceUtilitySavedataUpdate(1);
			sceDisplayWaitVblankStart();
		}

		// write data	
		print("writing extracted savedata...");
		fd = sceIoOpen("ms0:/params.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/params.bin");
			return;
		}
		sceIoWrite(fd, &savedata.paramsSfoTitle, PARAMS_LEN);
		sceIoClose(fd);
		fd = sceIoOpen("ms0:/data.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/data.bin");
			return;
		}
		sceIoWrite(fd, g_dataBuf, savedata.sizeOfData);	
		sceIoClose(fd);
		fd = sceIoOpen("ms0:/savedata.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/savedata.bin");
			return;
		}
		sceIoWrite(fd, &savedata, sizeof(savedata));
		sceIoClose(fd);
	} else if (mode == 1) {
		print("Loading savedata with mode 1 (AUTOSAVE)...");
		initSavedata(&savedata, mode);
		savedata.readIcon0Buf = 0;
		savedata.sizeOfReadIcon0Buf = 0;
		savedata.readIcon1Buf = 0;
		savedata.sizeOfReadIcon1Buf = 0;
		savedata.readPic1Buf = 0;
		savedata.sizeOfReadPic1Buf = 0;

		// load extracted data
		print("loading extracted savedata...");
		fd = sceIoOpen("ms0:/params.bin", O_RDONLY, 0);
		if (!fd) {
			print("can't open ms0:/params.bin");
			return;
		}
		sceIoRead(fd, &savedata.paramsSfoTitle, PARAMS_LEN);
		sceIoClose(fd);
		fd = sceIoOpen("ms0:/data.bin", O_RDONLY, 0);
		if (!fd) {
			print("can't open ms0:/data.bin");
			return;
		}
		int len = sceIoRead(fd, g_dataBuf, 0x100000);
		sceIoClose(fd);
		
		// update gamedata
		print("updating savedata...");
		savedata.sizeOfData = len;
		result = sceUtilitySavedataInitStart((SceUtilitySavedataParam *) &savedata);
		if (result) {
			print("sceUtilitySavedataInitStart failed");
			printHex(result);
			return;
		}
		previousResult = -1;
		while (1) {
			result = sceUtilitySavedataGetStatus();
			if (result != previousResult) {
				print("sceUtilitySavedataGetStatus result:");
				printHex(result);
				previousResult = result;
			}
			if (result == 3) break;
			sceUtilitySavedataUpdate(1);
			sceDisplayWaitVblankStart();
		}
	} else if (mode == 8) {
		print("loading savedata with mode 8 (SIZES)...");
		initSavedata(&savedata, mode);
		/* savedata.sizeOfDataBuf = 0x1000; */
		savedata.sizeOfData = savedata.sizeOfDataBuf;
		result = sceUtilitySavedataInitStart((SceUtilitySavedataParam *) &savedata);
		if (result) {
			print("sceUtilitySavedataInitStart failed");
			printHex(result);
			return;
		}
		previousResult = -1;
		while (1) {
			result = sceUtilitySavedataGetStatus();
			if (result != previousResult) {
				print("sceUtilitySavedataGetStatus result:");
				printHex(result);
				previousResult = result;
			}
			if (result == 3) break;
			sceUtilitySavedataUpdate(1);
			sceDisplayWaitVblankStart();
		}

		// write data
		print("writing savedata structure...");
		fd = sceIoOpen("ms0:/savedata.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/savedata.bin");
			return;
		}
		sceIoWrite(fd, &savedata, sizeof(savedata));
		sceIoClose(fd);
#if FW15
#else
		char buffer[100];
		sprintf(buffer, "Free space: %s", msFreeBuffer + 12);
		print(buffer);
		sprintf(buffer, "Required space1: %s", utilityDataBuffer + 8);
		print(buffer);
		sprintf(buffer, "Required space2: %s", utilityDataBuffer + 20);
		print(buffer);
		fd = sceIoOpen("ms0:/msFreeBuffer.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/msFreeBuffer.bin");
			return;
		}
		sceIoWrite(fd, msFreeBuffer, sizeof(msFreeBuffer));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/msDataBuffer.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/msDataBuffer.bin");
			return;
		}
		sceIoWrite(fd, msDataBuffer, sizeof(msDataBuffer));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/utilityDataBuffer.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/utilityDataBuffer.bin");
			return;
		}
		sceIoWrite(fd, utilityDataBuffer, sizeof(utilityDataBuffer));
		sceIoClose(fd);
#endif
	} else if (mode == 11) {
		print("Loading savedata with mode 11 (LIST)...");
		initSavedata(&savedata, mode);
		result = sceUtilitySavedataInitStart((SceUtilitySavedataParam *) &savedata);
		if (result) {
			print("sceUtilitySavedataInitStart failed");
			printHex(result);
			return;
		}
		previousResult = -1;
		while (1) {
			result = sceUtilitySavedataGetStatus();
			if (result != previousResult) {
				print("sceUtilitySavedataGetStatus result:");
				printHex(result);
				previousResult = result;
			}
			if (result == 3) break;
			sceUtilitySavedataUpdate(1);
			sceDisplayWaitVblankStart();
		}

		int numEntries = *((int *) (idListBuffer + 4));
		int i;
		char buffer[100];
		for (i = 0; i < numEntries; i++) {
			sprintf(buffer, "Name: %s", (char *) (idListDataBuffer + i * 72 + 52));
			print(buffer);
		}

		// write data
		print("writing savedata structure...");
		fd = sceIoOpen("ms0:/savedata.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/savedata.bin");
			return;
		}
		sceIoWrite(fd, &savedata, sizeof(savedata));
		sceIoClose(fd);
#if FW15
#else
		fd = sceIoOpen("ms0:/idListBuffer.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/idListBuffer.bin");
			return;
		}
		sceIoWrite(fd, idListBuffer, sizeof(idListBuffer));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/idListDataBuffer.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/idListDataBuffer.bin");
			return;
		}
		sceIoWrite(fd, idListDataBuffer, sizeof(idListDataBuffer));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/fileListBuffer.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/fileListBuffer.bin");
			return;
		}
		sceIoWrite(fd, fileListBuffer, sizeof(fileListBuffer));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/sizeBuffer.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/sizeBuffer.bin");
			return;
		}
		sceIoWrite(fd, sizeBuffer, sizeof(sizeBuffer));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/saveFileSecureEntriesAddr.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/saveFileSecureEntriesAddr.bin");
			return;
		}
		sceIoWrite(fd, saveFileSecureEntriesAddr, sizeof(saveFileSecureEntriesAddr));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/saveFileSystemEntriesAddr.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/saveFileSystemEntriesAddr.bin");
			return;
		}
		sceIoWrite(fd, saveFileSystemEntriesAddr, sizeof(saveFileSystemEntriesAddr));
		sceIoClose(fd);
#endif
	} else if (mode == 15) {
		print("Loading savedata with mode 15 (READSECURE)...");
		initSavedata(&savedata, mode);
		result = sceUtilitySavedataInitStart((SceUtilitySavedataParam *) &savedata);
		if (result) {
			print("sceUtilitySavedataInitStart failed");
			printHex(result);
			return;
		}
		previousResult = -1;
		while (1) {
			result = sceUtilitySavedataGetStatus();
			if (result != previousResult) {
				print("sceUtilitySavedataGetStatus result:");
				printHex(result);
				previousResult = result;
			}
			if (result == 3) break;
			sceUtilitySavedataUpdate(1);
			sceDisplayWaitVblankStart();
		}

		// write data	
		print("writing extracted savedata...");
		fd = sceIoOpen("ms0:/params.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/params.bin");
			return;
		}
		sceIoWrite(fd, &savedata.paramsSfoTitle, PARAMS_LEN);
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/data.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/data.bin");
			return;
		}
		sceIoWrite(fd, g_dataBuf, savedata.sizeOfData);	
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/savedata.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/savedata.bin");
			return;
		}
		sceIoWrite(fd, &savedata, sizeof(savedata));
		sceIoClose(fd);
	} else if (mode == 22) {
		print("Loading savedata with mode 22...");
		initSavedata(&savedata, mode);

		result = sceUtilitySavedataInitStart((SceUtilitySavedataParam *) &savedata);
		if (result) {
			print("sceUtilitySavedataInitStart failed");
			printHex(result);
			return;
		}
		previousResult = -1;
		while (1) {
			result = sceUtilitySavedataGetStatus();
			if (result != previousResult) {
				print("sceUtilitySavedataGetStatus result:");
				printHex(result);
				previousResult = result;
			}
			if (result == 3) break;
			sceUtilitySavedataUpdate(1);
			sceDisplayWaitVblankStart();
		}

		// write data	
		print("writing extracted savedata...");
		fd = sceIoOpen("ms0:/params.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/params.bin");
			return;
		}
		sceIoWrite(fd, &savedata.paramsSfoTitle, PARAMS_LEN);
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/data.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/data.bin");
			return;
		}
		sceIoWrite(fd, g_dataBuf, savedata.sizeOfData);	
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/savedata.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/savedata.bin");
			return;
		}
		sceIoWrite(fd, &savedata, sizeof(savedata));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/sizeBuffer.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/sizeBuffer.bin");
			return;
		}
		sceIoWrite(fd, sizeBuffer, sizeof(sizeBuffer));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/saveFileSecureEntriesAddr.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/saveFileSecureEntriesAddr.bin");
			return;
		}
		sceIoWrite(fd, saveFileSecureEntriesAddr, sizeof(saveFileSecureEntriesAddr));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/saveFileSystemEntriesAddr.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/saveFileSystemEntriesAddr.bin");
			return;
		}
		sceIoWrite(fd, saveFileSystemEntriesAddr, sizeof(saveFileSystemEntriesAddr));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/saveFileEntriesAddr.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/saveFileEntriesAddr.bin");
			return;
		}
		sceIoWrite(fd, saveFileEntriesAddr, sizeof(saveFileEntriesAddr));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/saveFileSecureEntriesAddr.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/saveFileSecureEntriesAddr.bin");
			return;
		}
		sceIoWrite(fd, saveFileSecureEntriesAddr, sizeof(saveFileSecureEntriesAddr));
		sceIoClose(fd);
	} else if (mode == 12) {
		print("Loading savedata with mode 12 (FILES)...");
		initSavedata(&savedata, mode);
		result = sceUtilitySavedataInitStart((SceUtilitySavedataParam *) &savedata);
		if (result) {
			print("sceUtilitySavedataInitStart failed");
			printHex(result);
			return;
		}
		previousResult = -1;
		while (1) {
			result = sceUtilitySavedataGetStatus();
			if (result != previousResult) {
				print("sceUtilitySavedataGetStatus result:");
				printHex(result);
				previousResult = result;
			}
			if (result == 3) break;
			sceUtilitySavedataUpdate(1);
			sceDisplayWaitVblankStart();
		}

		int numSecureEntries = *((int *) (fileListBuffer + 12));
		int numEntries = *((int *) (fileListBuffer + 16));
		int numSystemEntries = *((int *) (fileListBuffer + 20));

		int i;
		char buffer[100];
		for (i = 0; i < numSecureEntries; i++) {
			sprintf(buffer, "Secure Entry Name: '%s'", (char *) (saveFileSecureEntriesAddr + i * 80 + 64));
			print(buffer);
		}
		for (i = 0; i < numEntries; i++) {
			sprintf(buffer, "Entry Name: '%s'", (char *) (saveFileEntriesAddr + i * 80 + 64));
			print(buffer);
		}
		for (i = 0; i < numSystemEntries; i++) {
			sprintf(buffer, "System Entry Name: '%s'", (char *) (saveFileSystemEntriesAddr + i * 80 + 64));
			print(buffer);
		}

		// write data
		print("writing savedata structure...");
		fd = sceIoOpen("ms0:/savedata.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/savedata.bin");
			return;
		}
		sceIoWrite(fd, &savedata, sizeof(savedata));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/fileListBuffer.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/fileListBuffer.bin");
			return;
		}
		sceIoWrite(fd, fileListBuffer, sizeof(fileListBuffer));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/saveFileEntriesAddr.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/saveFileEntriesAddr.bin");
			return;
		}
		sceIoWrite(fd, saveFileEntriesAddr, sizeof(saveFileEntriesAddr));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/saveFileSecureEntriesAddr.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/saveFileSecureEntriesAddr.bin");
			return;
		}
		sceIoWrite(fd, saveFileSecureEntriesAddr, sizeof(saveFileSecureEntriesAddr));
		sceIoClose(fd);

		fd = sceIoOpen("ms0:/saveFileSystemEntriesAddr.bin", O_CREAT | O_TRUNC | O_WRONLY, 0777);
		if (!fd) {
			print("can't open ms0:/saveFileSystemEntriesAddr.bin");
			return;
		}
		sceIoWrite(fd, saveFileSystemEntriesAddr, sizeof(saveFileSystemEntriesAddr));
		sceIoClose(fd);
	}

	sceUtilitySavedataShutdownStart();
	previousResult = -1;
	while (1) {
		result = sceUtilitySavedataGetStatus();
		if (result != previousResult) {
			print("sceUtilitySavedataGetStatus result:");
			printHex(result);
			previousResult = result;
		}
		if (result == 4) break;
		sceUtilitySavedataUpdate(1);
		sceDisplayWaitVblankStart();
	}
	y++;
	print("operation successful");

	print("savedata.result:");
	printHex(savedata.result);
}
Example #3
0
int ShowSaveDialog(
	/* セーブモード */
	int mode,
	/* セーブデータのバッファ */
	void * buf,
	/* bufのサイズ */
	unsigned int size,
	/* ms0:/PSP/SAVEDATA/GameName */
	const char * GameName,
	/* ゲームのタイトル、セーブデータのタイトル、セーブデータの詳細 */
	const char * GameTitle, const char * SaveTitle, const char * SaveDetail )
{
	if ( mode < 0 || mode > 6 ) return -1;

	//オートセーブモードでは0000にセーブする
	char NameList[][20] = {
		 "0000",
		 "0001",
		 "0002",
		 "0003",
		 "0004",
		 "0005",
		 "0006",
		 "0007",
		 "0008",
		 "0009",
		 ""
	};

	SceUtilitySavedataParam dialog;
	if ( dxpSaveDialogInit(&dialog, mode, buf, size, GameName, "0000", NameList, GameTitle, SaveTitle, SaveDetail) < 0 )
		return -1;

	if ( sceUtilitySavedataInitStart(&dialog) != 0 ) return -1;
	int done = 0;

	while( ProcessMessage() != -1 && !done )
	{
		if ( mode != PSP_UTILITY_SAVEDATA_AUTOSAVE ) {
			ClearDrawScreen();
			if ( dxpDialogDrawScene != NULL ) dxpDialogDrawScene();
		}
		GUFINISH
		switch( sceUtilitySavedataGetStatus() ) {
		case PSP_UTILITY_DIALOG_INIT:
			break;
		case PSP_UTILITY_DIALOG_VISIBLE:
			sceUtilitySavedataUpdate(1);
			break;
		case PSP_UTILITY_DIALOG_QUIT:
			sceUtilitySavedataShutdownStart();
			break;
		case PSP_UTILITY_DIALOG_FINISHED:
			done = 1;
			break;
		case PSP_UTILITY_DIALOG_NONE:
			done = 1;
		default:
			break;
		}

		if ( mode != PSP_UTILITY_SAVEDATA_AUTOSAVE ) ScreenFlip();
	}
	
	memset(dxp_save_resource, 0, sizeof(PspUtilitySavedataFileData) * 4);

	int ret;

	if ( mode == DXP_SAVE_MODE_LOAD ) {
		//正常に読み込んだ
		//if(dialog.unknown1 != 0)
		//if(dialog.unknown1 == 1021)
		if ( dialog.base.result == 0 ) {
			memcpy(buf, dialog.dataBuf, size);
			ret = 0;
		}
		//キャンセルされた
		else if ( dialog.base.result == 1 ) {
			memset(buf, 0x0, size);
			ret = -2;
		}
		//セーブデータが存在しなかった
		//else if(dialog.base.result == -2146368761)
		else {
			memset(buf, 0x0, size);
			ret = -3;
		}
	} else {
		ret = 0;
	}
	free(dialog.dataBuf);
	return ret;
}