mirror of
https://github.com/rvtr/GodMode9i.git
synced 2025-11-02 00:11:07 -04:00
Do not clear time, except for GBA ROM dumping
This commit is contained in:
parent
e60993ec3e
commit
35583045b2
@ -6,6 +6,7 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
#include "auxspi.h"
|
#include "auxspi.h"
|
||||||
|
#include "date.h"
|
||||||
#include "driveOperations.h"
|
#include "driveOperations.h"
|
||||||
#include "ndsheaderbanner.h"
|
#include "ndsheaderbanner.h"
|
||||||
#include "read_card.h"
|
#include "read_card.h"
|
||||||
@ -48,208 +49,225 @@ void ndsCardSaveDump(const char* filename) {
|
|||||||
void ndsCardDump(void) {
|
void ndsCardDump(void) {
|
||||||
int pressed = 0;
|
int pressed = 0;
|
||||||
|
|
||||||
printf ("\x1b[0;27H");
|
|
||||||
printf ("\x1B[42m"); // Print green color
|
|
||||||
printf ("_____"); // Clear time
|
|
||||||
consoleSelect(&bottomConsole);
|
consoleSelect(&bottomConsole);
|
||||||
consoleClear();
|
consoleClear();
|
||||||
printf ("\x1B[47m"); // Print foreground white color
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
printf("Dump NDS card ROM to\n");
|
printf("Dump NDS card ROM to\n");
|
||||||
printf("\"%s:/gm9i/out\"?\n", (sdMounted ? "sd" : "fat"));
|
printf("\"%s:/gm9i/out\"?\n", (sdMounted ? "sd" : "fat"));
|
||||||
printf("(<A> yes, <Y> trim, <B> no)");
|
printf("(<A> yes, <Y> trim, <B> no)");
|
||||||
while (true) {
|
|
||||||
// Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do
|
|
||||||
do {
|
|
||||||
scanKeys();
|
|
||||||
pressed = keysDownRepeat();
|
|
||||||
swiWaitForVBlank();
|
|
||||||
} while (!(pressed & KEY_A) && !(pressed & KEY_Y) && !(pressed & KEY_B));
|
|
||||||
|
|
||||||
if ((pressed & KEY_A) || (pressed & KEY_Y)) {
|
consoleSelect(&topConsole);
|
||||||
consoleClear();
|
printf ("\x1B[42m"); // Print green color
|
||||||
char folderPath[2][256];
|
// Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do
|
||||||
sprintf(folderPath[0], "%s:/gm9i", (sdMounted ? "sd" : "fat"));
|
do {
|
||||||
sprintf(folderPath[1], "%s:/gm9i/out", (sdMounted ? "sd" : "fat"));
|
// Move to right side of screen
|
||||||
if (access(folderPath[0], F_OK) != 0) {
|
printf ("\x1b[0;26H");
|
||||||
printf("Creating directory...");
|
// Print time
|
||||||
mkdir(folderPath[0], 0777);
|
printf ("_%s" ,RetTime().c_str());
|
||||||
|
|
||||||
|
scanKeys();
|
||||||
|
pressed = keysDownRepeat();
|
||||||
|
swiWaitForVBlank();
|
||||||
|
} while (!(pressed & KEY_A) && !(pressed & KEY_Y) && !(pressed & KEY_B));
|
||||||
|
|
||||||
|
consoleSelect(&bottomConsole);
|
||||||
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
|
|
||||||
|
if ((pressed & KEY_A) || (pressed & KEY_Y)) {
|
||||||
|
consoleClear();
|
||||||
|
char folderPath[2][256];
|
||||||
|
sprintf(folderPath[0], "%s:/gm9i", (sdMounted ? "sd" : "fat"));
|
||||||
|
sprintf(folderPath[1], "%s:/gm9i/out", (sdMounted ? "sd" : "fat"));
|
||||||
|
if (access(folderPath[0], F_OK) != 0) {
|
||||||
|
printf("Creating directory...");
|
||||||
|
mkdir(folderPath[0], 0777);
|
||||||
|
}
|
||||||
|
if (access(folderPath[1], F_OK) != 0) {
|
||||||
|
printf ("\x1b[0;0H");
|
||||||
|
printf("Creating directory...");
|
||||||
|
mkdir(folderPath[1], 0777);
|
||||||
|
}
|
||||||
|
consoleClear();
|
||||||
|
// Read header
|
||||||
|
sNDSHeaderExt* ndsCardHeader = (sNDSHeaderExt*)malloc(0x1000);
|
||||||
|
if (cardInit (ndsCardHeader) == 0) {
|
||||||
|
printf("Dumping...\n");
|
||||||
|
printf("Do not remove the NDS card.\n");
|
||||||
|
} else {
|
||||||
|
printf("Unable to dump the ROM.\n");
|
||||||
|
for (int i = 0; i < 60*2; i++) {
|
||||||
|
swiWaitForVBlank();
|
||||||
}
|
}
|
||||||
if (access(folderPath[1], F_OK) != 0) {
|
|
||||||
printf ("\x1b[0;0H");
|
|
||||||
printf("Creating directory...");
|
|
||||||
mkdir(folderPath[1], 0777);
|
|
||||||
}
|
|
||||||
consoleClear();
|
|
||||||
// Read header
|
|
||||||
sNDSHeaderExt* ndsCardHeader = (sNDSHeaderExt*)malloc(0x1000);
|
|
||||||
if (cardInit (ndsCardHeader) == 0) {
|
|
||||||
printf("Dumping...\n");
|
|
||||||
printf("Do not remove the NDS card.\n");
|
|
||||||
} else {
|
|
||||||
printf("Unable to dump the ROM.\n");
|
|
||||||
for (int i = 0; i < 60*2; i++) {
|
|
||||||
swiWaitForVBlank();
|
|
||||||
}
|
|
||||||
free(ndsCardHeader);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
char gameTitle[13] = {0};
|
|
||||||
tonccpy(gameTitle, ndsCardHeader->gameTitle, 12);
|
|
||||||
char gameCode[7] = {0};
|
|
||||||
tonccpy(gameCode, ndsCardHeader->gameCode, 6);
|
|
||||||
bool trimRom = (pressed & KEY_Y);
|
|
||||||
char romBuffer[0x200];
|
|
||||||
char destPath[256];
|
|
||||||
sprintf(destPath, "%s:/gm9i/out/%s_%s_%x%s.nds", (sdMounted ? "sd" : "fat"), gameTitle, gameCode, ndsCardHeader->romversion, (trimRom ? "_trim" : ""));
|
|
||||||
char destSavPath[256];
|
|
||||||
sprintf(destSavPath, "%s:/gm9i/out/%s_%s_%x%s.sav", (sdMounted ? "sd" : "fat"), gameTitle, gameCode, ndsCardHeader->romversion, (trimRom ? "_trim" : ""));
|
|
||||||
// Determine ROM size
|
|
||||||
u32 romSize = 0;
|
|
||||||
if (trimRom) {
|
|
||||||
romSize = ((ndsCardHeader->unitCode != 0) && (ndsCardHeader->twlRomSize > 0))
|
|
||||||
? ndsCardHeader->twlRomSize : ndsCardHeader->romSize;
|
|
||||||
} else switch (ndsCardHeader->deviceSize) {
|
|
||||||
case 0x00:
|
|
||||||
romSize = 0x20000;
|
|
||||||
break;
|
|
||||||
case 0x01:
|
|
||||||
romSize = 0x40000;
|
|
||||||
break;
|
|
||||||
case 0x02:
|
|
||||||
romSize = 0x80000;
|
|
||||||
break;
|
|
||||||
case 0x03:
|
|
||||||
romSize = 0x100000;
|
|
||||||
break;
|
|
||||||
case 0x04:
|
|
||||||
romSize = 0x200000;
|
|
||||||
break;
|
|
||||||
case 0x05:
|
|
||||||
romSize = 0x400000;
|
|
||||||
break;
|
|
||||||
case 0x06:
|
|
||||||
romSize = 0x800000;
|
|
||||||
break;
|
|
||||||
case 0x07:
|
|
||||||
romSize = 0x1000000;
|
|
||||||
break;
|
|
||||||
case 0x08:
|
|
||||||
romSize = 0x2000000;
|
|
||||||
break;
|
|
||||||
case 0x09:
|
|
||||||
romSize = 0x4000000;
|
|
||||||
break;
|
|
||||||
case 0x0A:
|
|
||||||
romSize = 0x8000000;
|
|
||||||
break;
|
|
||||||
case 0x0B:
|
|
||||||
romSize = 0x10000000;
|
|
||||||
break;
|
|
||||||
case 0x0C:
|
|
||||||
romSize = 0x20000000;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// Dump!
|
|
||||||
remove(destPath);
|
|
||||||
FILE* destinationFile = fopen(destPath, "wb");
|
|
||||||
for (u32 src = 0; src < romSize; src += 0x200) {
|
|
||||||
printf ("\x1b[8;0H");
|
|
||||||
printf ("Progress:\n");
|
|
||||||
printf ("%i/%i Bytes ", (int)src, (int)romSize);
|
|
||||||
cardRead (src, romBuffer);
|
|
||||||
fwrite(romBuffer, 1, 0x200, destinationFile);
|
|
||||||
}
|
|
||||||
fclose(destinationFile);
|
|
||||||
ndsCardSaveDump(destSavPath);
|
|
||||||
free(ndsCardHeader);
|
free(ndsCardHeader);
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
if (pressed & KEY_B) {
|
char gameTitle[13] = {0};
|
||||||
break;
|
tonccpy(gameTitle, ndsCardHeader->gameTitle, 12);
|
||||||
|
char gameCode[7] = {0};
|
||||||
|
tonccpy(gameCode, ndsCardHeader->gameCode, 6);
|
||||||
|
bool trimRom = (pressed & KEY_Y);
|
||||||
|
char romBuffer[0x200];
|
||||||
|
char destPath[256];
|
||||||
|
sprintf(destPath, "%s:/gm9i/out/%s_%s_%x%s.nds", (sdMounted ? "sd" : "fat"), gameTitle, gameCode, ndsCardHeader->romversion, (trimRom ? "_trim" : ""));
|
||||||
|
char destSavPath[256];
|
||||||
|
sprintf(destSavPath, "%s:/gm9i/out/%s_%s_%x%s.sav", (sdMounted ? "sd" : "fat"), gameTitle, gameCode, ndsCardHeader->romversion, (trimRom ? "_trim" : ""));
|
||||||
|
// Determine ROM size
|
||||||
|
u32 romSize = 0;
|
||||||
|
if (trimRom) {
|
||||||
|
romSize = ((ndsCardHeader->unitCode != 0) && (ndsCardHeader->twlRomSize > 0))
|
||||||
|
? ndsCardHeader->twlRomSize : ndsCardHeader->romSize;
|
||||||
|
} else switch (ndsCardHeader->deviceSize) {
|
||||||
|
case 0x00:
|
||||||
|
romSize = 0x20000;
|
||||||
|
break;
|
||||||
|
case 0x01:
|
||||||
|
romSize = 0x40000;
|
||||||
|
break;
|
||||||
|
case 0x02:
|
||||||
|
romSize = 0x80000;
|
||||||
|
break;
|
||||||
|
case 0x03:
|
||||||
|
romSize = 0x100000;
|
||||||
|
break;
|
||||||
|
case 0x04:
|
||||||
|
romSize = 0x200000;
|
||||||
|
break;
|
||||||
|
case 0x05:
|
||||||
|
romSize = 0x400000;
|
||||||
|
break;
|
||||||
|
case 0x06:
|
||||||
|
romSize = 0x800000;
|
||||||
|
break;
|
||||||
|
case 0x07:
|
||||||
|
romSize = 0x1000000;
|
||||||
|
break;
|
||||||
|
case 0x08:
|
||||||
|
romSize = 0x2000000;
|
||||||
|
break;
|
||||||
|
case 0x09:
|
||||||
|
romSize = 0x4000000;
|
||||||
|
break;
|
||||||
|
case 0x0A:
|
||||||
|
romSize = 0x8000000;
|
||||||
|
break;
|
||||||
|
case 0x0B:
|
||||||
|
romSize = 0x10000000;
|
||||||
|
break;
|
||||||
|
case 0x0C:
|
||||||
|
romSize = 0x20000000;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
// Dump!
|
||||||
|
remove(destPath);
|
||||||
|
FILE* destinationFile = fopen(destPath, "wb");
|
||||||
|
for (u32 src = 0; src < romSize; src += 0x200) {
|
||||||
|
consoleSelect(&topConsole);
|
||||||
|
printf ("\x1B[42m"); // Print green color
|
||||||
|
// Move to right side of screen
|
||||||
|
printf ("\x1b[0;26H");
|
||||||
|
// Print time
|
||||||
|
printf ("_%s" ,RetTime().c_str());
|
||||||
|
|
||||||
|
printf ("\x1b[8;0H");
|
||||||
|
printf ("Progress:\n");
|
||||||
|
printf ("%i/%i Bytes ", (int)src, (int)romSize);
|
||||||
|
cardRead (src, romBuffer);
|
||||||
|
fwrite(romBuffer, 1, 0x200, destinationFile);
|
||||||
|
}
|
||||||
|
fclose(destinationFile);
|
||||||
|
ndsCardSaveDump(destSavPath);
|
||||||
|
free(ndsCardHeader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void gbaCartDump(void) {
|
void gbaCartDump(void) {
|
||||||
int pressed = 0;
|
int pressed = 0;
|
||||||
|
|
||||||
printf ("\x1b[0;27H");
|
|
||||||
printf ("\x1B[42m"); // Print green color
|
|
||||||
printf ("_____"); // Clear time
|
|
||||||
consoleSelect(&bottomConsole);
|
consoleSelect(&bottomConsole);
|
||||||
consoleClear();
|
consoleClear();
|
||||||
printf ("\x1B[47m"); // Print foreground white color
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
printf("Dump GBA cart ROM to\n");
|
printf("Dump GBA cart ROM to\n");
|
||||||
printf("\"fat:/gm9i/out\"?\n");
|
printf("\"fat:/gm9i/out\"?\n");
|
||||||
printf("(<A> yes, <B> no)");
|
printf("(<A> yes, <B> no)");
|
||||||
while (true) {
|
|
||||||
// Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do
|
|
||||||
do {
|
|
||||||
scanKeys();
|
|
||||||
pressed = keysDownRepeat();
|
|
||||||
swiWaitForVBlank();
|
|
||||||
} while (!(pressed & KEY_A) && !(pressed & KEY_B));
|
|
||||||
|
|
||||||
if (pressed & KEY_A) {
|
consoleSelect(&topConsole);
|
||||||
consoleClear();
|
printf ("\x1B[42m"); // Print green color
|
||||||
if (access("fat:/gm9i", F_OK) != 0) {
|
// Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do
|
||||||
printf("Creating directory...");
|
do {
|
||||||
mkdir("fat:/gm9i", 0777);
|
// Move to right side of screen
|
||||||
}
|
printf ("\x1b[0;26H");
|
||||||
if (access("fat:/gm9i/out", F_OK) != 0) {
|
// Print time
|
||||||
printf ("\x1b[0;0H");
|
printf ("_%s" ,RetTime().c_str());
|
||||||
printf("Creating directory...");
|
|
||||||
mkdir("fat:/gm9i/out", 0777);
|
scanKeys();
|
||||||
}
|
pressed = keysDownRepeat();
|
||||||
char gbaHeaderGameTitle[13] = "\0";
|
swiWaitForVBlank();
|
||||||
char gbaHeaderGameCode[5] = "\0";
|
} while (!(pressed & KEY_A) && !(pressed & KEY_B));
|
||||||
char gbaHeaderMakerCode[3] = "\0";
|
|
||||||
for (int i = 0; i < 12; i++) {
|
if (pressed & KEY_A) {
|
||||||
gbaHeaderGameTitle[i] = *(char*)(0x080000A0+i);
|
printf ("\x1b[0;27H");
|
||||||
if (*(u8*)(0x080000A0+i) == 0) {
|
printf ("\x1B[42m"); // Print green color
|
||||||
break;
|
printf ("_____"); // Clear time
|
||||||
}
|
}
|
||||||
}
|
|
||||||
for (int i = 0; i < 4; i++) {
|
consoleSelect(&bottomConsole);
|
||||||
gbaHeaderGameCode[i] = *(char*)(0x080000AC+i);
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
if (*(u8*)(0x080000AC+i) == 0) {
|
|
||||||
break;
|
if (pressed & KEY_A) {
|
||||||
}
|
consoleClear();
|
||||||
}
|
if (access("fat:/gm9i", F_OK) != 0) {
|
||||||
for (int i = 0; i < 2; i++) {
|
printf("Creating directory...");
|
||||||
gbaHeaderMakerCode[i] = *(char*)(0x080000B0+i);
|
mkdir("fat:/gm9i", 0777);
|
||||||
}
|
|
||||||
u8 gbaHeaderSoftwareVersion = *(u8*)(0x080000BC);
|
|
||||||
char destPath[256];
|
|
||||||
char destSavPath[256];
|
|
||||||
snprintf(destPath, sizeof(destPath), "fat:/gm9i/out/%s_%s%s_%x.gba", gbaHeaderGameTitle, gbaHeaderGameCode, gbaHeaderMakerCode, gbaHeaderSoftwareVersion);
|
|
||||||
snprintf(destSavPath, sizeof(destSavPath), "fat:/gm9i/out/%s_%s%s_%x.sav", gbaHeaderGameTitle, gbaHeaderGameCode, gbaHeaderMakerCode, gbaHeaderSoftwareVersion);
|
|
||||||
consoleClear();
|
|
||||||
printf("Dumping...\n");
|
|
||||||
printf("Do not remove the GBA cart.\n");
|
|
||||||
// Determine ROM size
|
|
||||||
u32 romSize = 0x02000000;
|
|
||||||
for (u32 i = 0x09FE0000; i > 0x08000000; i -= 0x20000) {
|
|
||||||
if (*(u32*)(i) == 0xFFFE0000) {
|
|
||||||
romSize -= 0x20000;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Dump!
|
|
||||||
remove(destPath);
|
|
||||||
FILE* destinationFile = fopen(destPath, "wb");
|
|
||||||
fwrite((void*)0x08000000, 1, romSize, destinationFile);
|
|
||||||
fclose(destinationFile);
|
|
||||||
// Save file
|
|
||||||
remove(destSavPath);
|
|
||||||
destinationFile = fopen(destSavPath, "wb");
|
|
||||||
fwrite((void*)0x0A000000, 1, 0x10000, destinationFile);
|
|
||||||
fclose(destinationFile);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if (pressed & KEY_B) {
|
if (access("fat:/gm9i/out", F_OK) != 0) {
|
||||||
break;
|
printf ("\x1b[0;0H");
|
||||||
|
printf("Creating directory...");
|
||||||
|
mkdir("fat:/gm9i/out", 0777);
|
||||||
}
|
}
|
||||||
|
char gbaHeaderGameTitle[13] = "\0";
|
||||||
|
char gbaHeaderGameCode[5] = "\0";
|
||||||
|
char gbaHeaderMakerCode[3] = "\0";
|
||||||
|
for (int i = 0; i < 12; i++) {
|
||||||
|
gbaHeaderGameTitle[i] = *(char*)(0x080000A0+i);
|
||||||
|
if (*(u8*)(0x080000A0+i) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
gbaHeaderGameCode[i] = *(char*)(0x080000AC+i);
|
||||||
|
if (*(u8*)(0x080000AC+i) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
gbaHeaderMakerCode[i] = *(char*)(0x080000B0+i);
|
||||||
|
}
|
||||||
|
u8 gbaHeaderSoftwareVersion = *(u8*)(0x080000BC);
|
||||||
|
char destPath[256];
|
||||||
|
char destSavPath[256];
|
||||||
|
snprintf(destPath, sizeof(destPath), "fat:/gm9i/out/%s_%s%s_%x.gba", gbaHeaderGameTitle, gbaHeaderGameCode, gbaHeaderMakerCode, gbaHeaderSoftwareVersion);
|
||||||
|
snprintf(destSavPath, sizeof(destSavPath), "fat:/gm9i/out/%s_%s%s_%x.sav", gbaHeaderGameTitle, gbaHeaderGameCode, gbaHeaderMakerCode, gbaHeaderSoftwareVersion);
|
||||||
|
consoleClear();
|
||||||
|
printf("Dumping...\n");
|
||||||
|
printf("Do not remove the GBA cart.\n");
|
||||||
|
// Determine ROM size
|
||||||
|
u32 romSize = 0x02000000;
|
||||||
|
for (u32 i = 0x09FE0000; i > 0x08000000; i -= 0x20000) {
|
||||||
|
if (*(u32*)(i) == 0xFFFE0000) {
|
||||||
|
romSize -= 0x20000;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Dump!
|
||||||
|
remove(destPath);
|
||||||
|
FILE* destinationFile = fopen(destPath, "wb");
|
||||||
|
fwrite((void*)0x08000000, 1, romSize, destinationFile);
|
||||||
|
fclose(destinationFile);
|
||||||
|
// Save file
|
||||||
|
remove(destSavPath);
|
||||||
|
destinationFile = fopen(destSavPath, "wb");
|
||||||
|
fwrite((void*)0x0A000000, 1, 0x10000, destinationFile);
|
||||||
|
fclose(destinationFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "date.h"
|
||||||
#include "file_browse.h"
|
#include "file_browse.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@ -13,6 +14,8 @@ using namespace std;
|
|||||||
|
|
||||||
u32 copyBuf[copyBufSize];
|
u32 copyBuf[copyBufSize];
|
||||||
|
|
||||||
|
extern PrintConsole topConsole, bottomConsole;
|
||||||
|
|
||||||
char clipboard[256];
|
char clipboard[256];
|
||||||
char clipboardFilename[256];
|
char clipboardFilename[256];
|
||||||
bool clipboardFolder = false;
|
bool clipboardFolder = false;
|
||||||
@ -121,6 +124,15 @@ int fcopy(const char *sourcePath, const char *destinationPath)
|
|||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
consoleSelect(&topConsole);
|
||||||
|
printf ("\x1B[42m"); // Print green color
|
||||||
|
// Move to right side of screen
|
||||||
|
printf ("\x1b[0;26H");
|
||||||
|
// Print time
|
||||||
|
printf ("_%s" ,RetTime().c_str());
|
||||||
|
|
||||||
|
consoleSelect(&bottomConsole);
|
||||||
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
printf ("\x1b[16;0H");
|
printf ("\x1b[16;0H");
|
||||||
printf ("Progress:\n");
|
printf ("Progress:\n");
|
||||||
printf ("%i/%i Bytes ", (int)offset, (int)fsize);
|
printf ("%i/%i Bytes ", (int)offset, (int)fsize);
|
||||||
@ -182,6 +194,8 @@ void changeFileAttribs(DirEntry* entry) {
|
|||||||
printf ("\x1b[%i;0H", 9+cursorScreenPos);
|
printf ("\x1b[%i;0H", 9+cursorScreenPos);
|
||||||
printf ("(UDRL to change attributes)");
|
printf ("(UDRL to change attributes)");
|
||||||
while (1) {
|
while (1) {
|
||||||
|
consoleSelect(&bottomConsole);
|
||||||
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
printf ("\x1b[%i;1H", 5+cursorScreenPos);
|
printf ("\x1b[%i;1H", 5+cursorScreenPos);
|
||||||
printf ((newAttribs & ATTR_READONLY) ? "X" : " ");
|
printf ((newAttribs & ATTR_READONLY) ? "X" : " ");
|
||||||
printf ("\x1b[%i;18H", 5+cursorScreenPos);
|
printf ("\x1b[%i;18H", 5+cursorScreenPos);
|
||||||
@ -193,8 +207,15 @@ void changeFileAttribs(DirEntry* entry) {
|
|||||||
printf ("\x1b[%i;0H", 11+cursorScreenPos);
|
printf ("\x1b[%i;0H", 11+cursorScreenPos);
|
||||||
printf ((currentAttribs==newAttribs) ? "(<A> to continue) " : "(<A> to apply, <B> to cancel)");
|
printf ((currentAttribs==newAttribs) ? "(<A> to continue) " : "(<A> to apply, <B> to cancel)");
|
||||||
|
|
||||||
|
consoleSelect(&topConsole);
|
||||||
|
printf ("\x1B[42m"); // Print green color
|
||||||
// Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do
|
// Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do
|
||||||
do {
|
do {
|
||||||
|
// Move to right side of screen
|
||||||
|
printf ("\x1b[0;26H");
|
||||||
|
// Print time
|
||||||
|
printf ("_%s" ,RetTime().c_str());
|
||||||
|
|
||||||
scanKeys();
|
scanKeys();
|
||||||
pressed = keysDown();
|
pressed = keysDown();
|
||||||
swiWaitForVBlank();
|
swiWaitForVBlank();
|
||||||
|
|||||||
@ -184,9 +184,6 @@ int fileBrowse_A(DirEntry* entry, char path[PATH_MAX]) {
|
|||||||
int cursorScreenPos = 0;
|
int cursorScreenPos = 0;
|
||||||
int maxCursors = -1;
|
int maxCursors = -1;
|
||||||
|
|
||||||
printf ("\x1b[0;27H");
|
|
||||||
printf ("\x1B[42m"); // Print green color
|
|
||||||
printf ("_____"); // Clear time
|
|
||||||
consoleSelect(&bottomConsole);
|
consoleSelect(&bottomConsole);
|
||||||
consoleClear();
|
consoleClear();
|
||||||
printf ("\x1B[47m"); // Print foreground white color
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
@ -232,6 +229,8 @@ int fileBrowse_A(DirEntry* entry, char path[PATH_MAX]) {
|
|||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("(<A> select, <B> cancel)");
|
printf("(<A> select, <B> cancel)");
|
||||||
|
consoleSelect(&bottomConsole);
|
||||||
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
while (true) {
|
while (true) {
|
||||||
// Clear old cursors
|
// Clear old cursors
|
||||||
for (int i = OPTIONS_ENTRIES_START_ROW+cursorScreenPos; i < (maxCursors+1) + OPTIONS_ENTRIES_START_ROW+cursorScreenPos; i++) {
|
for (int i = OPTIONS_ENTRIES_START_ROW+cursorScreenPos; i < (maxCursors+1) + OPTIONS_ENTRIES_START_ROW+cursorScreenPos; i++) {
|
||||||
@ -240,14 +239,24 @@ int fileBrowse_A(DirEntry* entry, char path[PATH_MAX]) {
|
|||||||
// Show cursor
|
// Show cursor
|
||||||
iprintf ("\x1b[%d;0H->", optionOffset + OPTIONS_ENTRIES_START_ROW+cursorScreenPos);
|
iprintf ("\x1b[%d;0H->", optionOffset + OPTIONS_ENTRIES_START_ROW+cursorScreenPos);
|
||||||
|
|
||||||
|
consoleSelect(&topConsole);
|
||||||
|
printf ("\x1B[42m"); // Print green color for time text
|
||||||
// Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do
|
// Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do
|
||||||
do {
|
do {
|
||||||
|
// Move to right side of screen
|
||||||
|
printf ("\x1b[0;26H");
|
||||||
|
// Print time
|
||||||
|
printf ("_%s" ,RetTime().c_str());
|
||||||
|
|
||||||
scanKeys();
|
scanKeys();
|
||||||
pressed = keysDownRepeat();
|
pressed = keysDownRepeat();
|
||||||
swiWaitForVBlank();
|
swiWaitForVBlank();
|
||||||
} while (!(pressed & KEY_UP) && !(pressed & KEY_DOWN)
|
} while (!(pressed & KEY_UP) && !(pressed & KEY_DOWN)
|
||||||
&& !(pressed & KEY_A) && !(pressed & KEY_B));
|
&& !(pressed & KEY_A) && !(pressed & KEY_B));
|
||||||
|
|
||||||
|
consoleSelect(&bottomConsole);
|
||||||
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
|
|
||||||
if (pressed & KEY_UP) optionOffset -= 1;
|
if (pressed & KEY_UP) optionOffset -= 1;
|
||||||
if (pressed & KEY_DOWN) optionOffset += 1;
|
if (pressed & KEY_DOWN) optionOffset += 1;
|
||||||
|
|
||||||
@ -317,9 +326,6 @@ bool fileBrowse_paste(char destPath[256]) {
|
|||||||
|
|
||||||
consoleClear();
|
consoleClear();
|
||||||
|
|
||||||
printf ("\x1b[0;27H");
|
|
||||||
printf ("\x1B[42m"); // Print green color
|
|
||||||
printf ("_____"); // Clear time
|
|
||||||
consoleSelect(&bottomConsole);
|
consoleSelect(&bottomConsole);
|
||||||
printf ("\x1B[47m"); // Print foreground white color
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
printf(clipboardFolder ? "Paste folder here?" : "Paste file here?");
|
printf(clipboardFolder ? "Paste folder here?" : "Paste file here?");
|
||||||
@ -333,6 +339,8 @@ bool fileBrowse_paste(char destPath[256]) {
|
|||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("(<A> select, <B> cancel)");
|
printf("(<A> select, <B> cancel)");
|
||||||
|
consoleSelect(&bottomConsole);
|
||||||
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
while (true) {
|
while (true) {
|
||||||
// Clear old cursors
|
// Clear old cursors
|
||||||
for (int i = OPTIONS_ENTRIES_START_ROW; i < (maxCursors+1) + OPTIONS_ENTRIES_START_ROW; i++) {
|
for (int i = OPTIONS_ENTRIES_START_ROW; i < (maxCursors+1) + OPTIONS_ENTRIES_START_ROW; i++) {
|
||||||
@ -341,14 +349,24 @@ bool fileBrowse_paste(char destPath[256]) {
|
|||||||
// Show cursor
|
// Show cursor
|
||||||
iprintf ("\x1b[%d;0H->", optionOffset + OPTIONS_ENTRIES_START_ROW);
|
iprintf ("\x1b[%d;0H->", optionOffset + OPTIONS_ENTRIES_START_ROW);
|
||||||
|
|
||||||
|
consoleSelect(&topConsole);
|
||||||
|
printf ("\x1B[42m"); // Print green color for time text
|
||||||
// Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do
|
// Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do
|
||||||
do {
|
do {
|
||||||
|
// Move to right side of screen
|
||||||
|
printf ("\x1b[0;26H");
|
||||||
|
// Print time
|
||||||
|
printf ("_%s" ,RetTime().c_str());
|
||||||
|
|
||||||
scanKeys();
|
scanKeys();
|
||||||
pressed = keysDownRepeat();
|
pressed = keysDownRepeat();
|
||||||
swiWaitForVBlank();
|
swiWaitForVBlank();
|
||||||
} while (!(pressed & KEY_UP) && !(pressed & KEY_DOWN)
|
} while (!(pressed & KEY_UP) && !(pressed & KEY_DOWN)
|
||||||
&& !(pressed & KEY_A) && !(pressed & KEY_B));
|
&& !(pressed & KEY_A) && !(pressed & KEY_B));
|
||||||
|
|
||||||
|
consoleSelect(&bottomConsole);
|
||||||
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
|
|
||||||
if (pressed & KEY_UP) optionOffset -= 1;
|
if (pressed & KEY_UP) optionOffset -= 1;
|
||||||
if (pressed & KEY_DOWN) optionOffset += 1;
|
if (pressed & KEY_DOWN) optionOffset += 1;
|
||||||
|
|
||||||
@ -461,7 +479,7 @@ string browseForFile (void) {
|
|||||||
printf ("\x1b[0;26H");
|
printf ("\x1b[0;26H");
|
||||||
// Print time
|
// Print time
|
||||||
printf ("_%s" ,RetTime().c_str());
|
printf ("_%s" ,RetTime().c_str());
|
||||||
|
|
||||||
scanKeys();
|
scanKeys();
|
||||||
pressed = keysDownRepeat();
|
pressed = keysDownRepeat();
|
||||||
held = keysHeld();
|
held = keysHeld();
|
||||||
@ -611,20 +629,26 @@ string browseForFile (void) {
|
|||||||
|
|
||||||
// Delete file/folder
|
// Delete file/folder
|
||||||
if ((pressed & KEY_X) && (strcmp (entry->name.c_str(), "..") != 0) && (strncmp (path, "nitro:/", 7) != 0)) {
|
if ((pressed & KEY_X) && (strcmp (entry->name.c_str(), "..") != 0) && (strncmp (path, "nitro:/", 7) != 0)) {
|
||||||
printf ("\x1b[0;27H");
|
|
||||||
printf ("\x1B[42m"); // Print green color
|
|
||||||
printf ("_____"); // Clear time
|
|
||||||
consoleSelect(&bottomConsole);
|
consoleSelect(&bottomConsole);
|
||||||
consoleClear();
|
consoleClear();
|
||||||
printf ("\x1B[47m"); // Print foreground white color
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
iprintf("Delete \"%s\"?\n", entry->name.c_str());
|
iprintf("Delete \"%s\"?\n", entry->name.c_str());
|
||||||
printf ("(<A> yes, <B> no)");
|
printf ("(<A> yes, <B> no)");
|
||||||
|
consoleSelect(&topConsole);
|
||||||
|
printf ("\x1B[42m"); // Print green color for time text
|
||||||
while (true) {
|
while (true) {
|
||||||
|
// Move to right side of screen
|
||||||
|
printf ("\x1b[0;26H");
|
||||||
|
// Print time
|
||||||
|
printf ("_%s" ,RetTime().c_str());
|
||||||
|
|
||||||
scanKeys();
|
scanKeys();
|
||||||
pressed = keysDownRepeat();
|
pressed = keysDownRepeat();
|
||||||
swiWaitForVBlank();
|
swiWaitForVBlank();
|
||||||
if (pressed & KEY_A) {
|
if (pressed & KEY_A) {
|
||||||
|
consoleSelect(&bottomConsole);
|
||||||
consoleClear();
|
consoleClear();
|
||||||
|
printf ("\x1B[47m"); // Print foreground white color
|
||||||
if (FAT_getAttr(entry->name.c_str()) & ATTR_READONLY) {
|
if (FAT_getAttr(entry->name.c_str()) & ATTR_READONLY) {
|
||||||
printf ("Failed deleting:\n");
|
printf ("Failed deleting:\n");
|
||||||
printf (entry->name.c_str());
|
printf (entry->name.c_str());
|
||||||
@ -632,7 +656,14 @@ string browseForFile (void) {
|
|||||||
printf ("\n");
|
printf ("\n");
|
||||||
printf ("(<A> to continue)");
|
printf ("(<A> to continue)");
|
||||||
pressed = 0;
|
pressed = 0;
|
||||||
|
consoleSelect(&topConsole);
|
||||||
|
printf ("\x1B[42m"); // Print green color for time text
|
||||||
while (!(pressed & KEY_A)) {
|
while (!(pressed & KEY_A)) {
|
||||||
|
// Move to right side of screen
|
||||||
|
printf ("\x1b[0;26H");
|
||||||
|
// Print time
|
||||||
|
printf ("_%s" ,RetTime().c_str());
|
||||||
|
|
||||||
scanKeys();
|
scanKeys();
|
||||||
pressed = keysDown();
|
pressed = keysDown();
|
||||||
swiWaitForVBlank();
|
swiWaitForVBlank();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user