diff --git a/arm9/source/fileOperations.cpp b/arm9/source/fileOperations.cpp index 0eb46a4..0d7c377 100644 --- a/arm9/source/fileOperations.cpp +++ b/arm9/source/fileOperations.cpp @@ -150,36 +150,47 @@ int fcopy(const char *sourcePath, const char *destinationPath) void changeFileAttribs(DirEntry* entry) { consoleClear(); int pressed = 0; + int cursorScreenPos = 0; uint8_t currentAttribs = FAT_getAttr(entry->name.c_str()); uint8_t newAttribs = currentAttribs; + // Position cursor, depending on how long the file name is + for (int i = 0; i < 256; i++) { + if (i == 33 || i == 65 || i == 97 || i == 129 || i == 161 || i == 193 || i == 225) { + cursorScreenPos++; + } + if (entry->name.c_str()[i] == '\0') { + break; + } + } + printf ("\x1b[0;0H"); printf (entry->name.c_str()); if (!entry->isDirectory) { - printf ("\x1b[3;0H"); + printf ("\x1b[%i;0H", 3+cursorScreenPos); printf ("filesize: "); printBytes(entry->size); } - printf ("\x1b[5;0H"); + printf ("\x1b[%i;0H", 5+cursorScreenPos); printf ("[ ] U read-only [ ] D hidden"); - printf ("\x1b[6;0H"); + printf ("\x1b[%i;0H", 6+cursorScreenPos); printf ("[ ] R system [ ] L archive"); - printf ("\x1b[7;0H"); + printf ("\x1b[%i;0H", 7+cursorScreenPos); printf ("[ ] virtual"); - printf ("\x1b[7;1H"); + printf ("\x1b[%i;1H", 7+cursorScreenPos); printf ((newAttribs & ATTR_VOLUME) ? "X" : " "); - printf ("\x1b[9;0H"); + printf ("\x1b[%i;0H", 9+cursorScreenPos); printf ("(UDRL to change attributes)"); while (1) { - printf ("\x1b[5;1H"); + printf ("\x1b[%i;1H", 5+cursorScreenPos); printf ((newAttribs & ATTR_READONLY) ? "X" : " "); - printf ("\x1b[5;18H"); + printf ("\x1b[%i;18H", 5+cursorScreenPos); printf ((newAttribs & ATTR_HIDDEN) ? "X" : " "); - printf ("\x1b[6;1H"); + printf ("\x1b[%i;1H", 6+cursorScreenPos); printf ((newAttribs & ATTR_SYSTEM) ? "X" : " "); - printf ("\x1b[6;18H"); + printf ("\x1b[%i;18H", 6+cursorScreenPos); printf ((newAttribs & ATTR_ARCHIVE) ? "X" : " "); - printf ("\x1b[11;0H"); + printf ("\x1b[%i;0H", 11+cursorScreenPos); printf ((currentAttribs==newAttribs) ? "( to continue) " : "( to apply, to cancel)"); // Power saving loop. Only poll the keys once per frame and sleep the CPU if there is nothing else to do