diff --git a/Cart_Reader/COLV.ino b/Cart_Reader/COLV.ino index 652bbb8..01f7197 100644 --- a/Cart_Reader/COLV.ino +++ b/Cart_Reader/COLV.ino @@ -377,24 +377,7 @@ void setCart_COL() { // Open database if (myFile.open("colv.txt", O_READ)) { - // Skip ahead to selected starting letter - if ((myLetter > 0) && (myLetter <= 26)) { - while (myFile.available()) { - // Read current name - get_line(gamename, &myFile, 96); - - // Compare selected letter with first letter of current name until match - while (gamename[0] != 64 + myLetter) { - skip_line(&myFile); - skip_line(&myFile); - get_line(gamename, &myFile, 96); - } - break; - } - - // Rewind one line - rewind_line(myFile); - } + seek_first_letter_in_database(myFile, myLetter); // Display database while (myFile.available()) { diff --git a/Cart_Reader/Cart_Reader.ino b/Cart_Reader/Cart_Reader.ino index cb156f6..4c62851 100644 --- a/Cart_Reader/Cart_Reader.ino +++ b/Cart_Reader/Cart_Reader.ino @@ -660,7 +660,7 @@ boolean compareCRC(const char* database, uint32_t crc32sum, boolean renamerom, i myFile.close(); } } else { - println_Msg("OK"); + println_Msg(FS(FSTRING_OK)); } return 1; break; @@ -678,6 +678,35 @@ boolean compareCRC(const char* database, uint32_t crc32sum, boolean renamerom, i return 0; } +// move file pointer to first game line with matching letter. If no match is found the last database entry is selected +void seek_first_letter_in_database(FsFile& database, byte myLetter) { + char gamename_str[3]; +#ifdef ENABLE_GLOBAL_LOG + // Disable log to prevent unnecessary logging + println_Log(F("Select Mapping from List")); + dont_log = true; +#endif + database.rewind(); + // Skip ahead to selected starting letter + if ((myLetter > 0) && (myLetter <= 26)) { + myLetter += 'A' - 1; + do { + // Read current name + get_line(gamename_str, &database, 2); + // Skip data line + skip_line(&database); + // Skip empty line + skip_line(&database); + + } while (database.available() && gamename_str[0] != myLetter); + rewind_line(database, 3); + } +#ifdef ENABLE_GLOBAL_LOG + // Enable log again + dont_log = false; +#endif +} + void starting_letter__subDraw(byte selection, byte line) { display.setDrawColor(0); for (uint8_t i = 0; i < 4; i++) display.drawLine(0, 10 + i * 16, 128, 10 + i * 16); diff --git a/Cart_Reader/Config.h b/Cart_Reader/Config.h index d75d4e0..c261b49 100644 --- a/Cart_Reader/Config.h +++ b/Cart_Reader/Config.h @@ -226,7 +226,7 @@ /* [ Super Famicom Sufami Turbo ----------------------------------- ] */ -// #define ENABLE_ST +//#define ENABLE_ST /****/ diff --git a/Cart_Reader/INTV.ino b/Cart_Reader/INTV.ino index 119957a..6d1f763 100644 --- a/Cart_Reader/INTV.ino +++ b/Cart_Reader/INTV.ino @@ -770,24 +770,7 @@ void setCart_INTV() { // Open database if (myFile.open("intv.txt", O_READ)) { - // Skip ahead to selected starting letter - if ((myLetter > 0) && (myLetter <= 26)) { - while (myFile.available()) { - // Read current name - get_line(gamename, &myFile, 96); - - // Compare selected letter with first letter of current name until match - while (gamename[0] != 64 + myLetter) { - skip_line(&myFile); - skip_line(&myFile); - get_line(gamename, &myFile, 96); - } - break; - } - - // Rewind one line - rewind_line(myFile); - } + seek_first_letter_in_database(myFile, myLetter); // Display database while (myFile.available()) { diff --git a/Cart_Reader/NES.ino b/Cart_Reader/NES.ino index 5fb27f9..c39a60e 100644 --- a/Cart_Reader/NES.ino +++ b/Cart_Reader/NES.ino @@ -755,7 +755,7 @@ static void readDatabaseEntry(FsFile& database, struct database_entry* entry) { bool selectMapping(FsFile& database) { // Select starting letter - uint8_t myLetter = starting_letter(); + byte myLetter = starting_letter(); if (myLetter == 27) { // Change Mapper @@ -766,26 +766,7 @@ bool selectMapping(FsFile& database) { setRAMSize(); return 0; } else { -#ifdef ENABLE_GLOBAL_LOG - // Disable log to prevent unnecessary logging - println_Log(F("Select Mapping from List")); - dont_log = true; -#endif - database.rewind(); - // Skip ahead to selected starting letter - if ((myLetter > 0) && (myLetter <= 26)) { - myLetter += 'A' - 1; - struct database_entry entry; - // Read current name - do { - readDatabaseEntry(database, &entry); - } while (database.available() && entry.filename[0] != myLetter); - rewind_line(database, 3); - } -#ifdef ENABLE_GLOBAL_LOG - // Enable log again - dont_log = false; -#endif + seek_first_letter_in_database(database, myLetter); } return 1; } diff --git a/Cart_Reader/WSV.ino b/Cart_Reader/WSV.ino index 2bbeba8..db75c2b 100644 --- a/Cart_Reader/WSV.ino +++ b/Cart_Reader/WSV.ino @@ -391,24 +391,7 @@ void setCart_WSV() { // Open database if (myFile.open("wsv.txt", O_READ)) { - // Skip ahead to selected starting letter - if ((myLetter > 0) && (myLetter <= 26)) { - while (myFile.available()) { - // Read current name - get_line(gamename, &myFile, 96); - - // Compare selected letter with first letter of current name until match - while (gamename[0] != 64 + myLetter) { - skip_line(&myFile); - skip_line(&myFile); - get_line(gamename, &myFile, 96); - } - break; - } - - // Rewind one line - rewind_line(myFile); - } + seek_first_letter_in_database(myFile, myLetter); // Display database while (myFile.available()) {