diff --git a/Makefile b/Makefile index e4bdf60..3cd0639 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ include $(DEVKITARM)/base_rules IPL_LOAD_ADDR := 0x40003000 LPVERSION_MAJOR := 2 -LPVERSION_MINOR := 1 +LPVERSION_MINOR := 2 LPVERSION_BUGFX := 0 ################################################################################ diff --git a/source/tegraexplorer/fs.c b/source/tegraexplorer/fs.c index 99f5fde..4cd5c5d 100644 --- a/source/tegraexplorer/fs.c +++ b/source/tegraexplorer/fs.c @@ -18,10 +18,11 @@ u8 clipboardhelper = 0; extern const char sizevalues[4][3]; extern int launch_payload(char *path); -menu_item explfilemenu[9] = { +menu_item explfilemenu[10] = { {"-- File Menu --", COLOR_BLUE, -1, 0}, {"FILE", COLOR_GREEN, -1, 0}, {"\nSIZE", COLOR_VIOLET, -1, 0}, + {"ATTRIB", COLOR_VIOLET, -1, 0}, {"\n\n\nBack", COLOR_WHITE, -1, 1}, {"\nCopy to clipboard", COLOR_BLUE, COPY, 1}, {"Move to clipboard", COLOR_BLUE, MOVE, 1}, @@ -30,9 +31,10 @@ menu_item explfilemenu[9] = { {"View Hex", COLOR_GREEN, HEXVIEW, 1} }; -menu_item explfoldermenu[5] = { +menu_item explfoldermenu[6] = { {"-- Folder Menu --\n", COLOR_BLUE, -1, 0}, - {"Back", COLOR_WHITE, -1, 1}, + {"ATTRIB", COLOR_VIOLET, -1, 0}, + {"\n\nBack", COLOR_WHITE, -1, 1}, {"Return to main menu\n", COLOR_BLUE, EXITFOLDER, 1}, {"Copy to clipboard", COLOR_VIOLET, COPYFOLDER, 1}, {"Delete folder", COLOR_RED, DELETEFOLDER, 1} @@ -70,7 +72,7 @@ void writeclipboard(const char *in, bool move, bool folder){ strcpy(clipboard, in); } -char *getnextloc(char *current, char *add){ +char *getnextloc(const char *current, const char *add){ static char *ret; if (ret != NULL){ @@ -125,25 +127,23 @@ fs_entry getfileobj(int spot){ } void copyfile(const char *path, const char *outfolder){ - char *filename = strrchr(path, '/'); + char *filename = strrchr(path, '/') + 1; char *outstring; - size_t outstringsize = strlen(filename) + strlen(outfolder) + 2; int res; clearscreen(); - - outstring = (char*) malloc (outstringsize); - - if (strcmp(rootpath, outfolder)) - sprintf(outstring, "%s/%s", outfolder, filename + 1); - else - sprintf(outstring, "%s%s", outfolder, filename + 1); + makestring(getnextloc(outfolder, filename), &outstring); gfx_printf("Note:\nTo stop the transfer hold Vol-\n\n%s\nProgress: ", outstring); - if (clipboardhelper & OPERATIONMOVE){ - if (strcmp(rootpath, "emmc:/")) + if (!strcmp(path, outstring)){ + message(COLOR_RED, "\nIn and out are the same!"); + } + else if (clipboardhelper & OPERATIONMOVE){ + if (strcmp(rootpath, "emmc:/")){ f_rename(path, outstring); + readfolder(currentpath); + } else message(COLOR_RED, "\nMoving in emummc is not allowed!"); } @@ -283,6 +283,7 @@ void copyfolder(char *in, char *out){ int filemenu(fs_entry file){ int temp; + FILINFO attribs; strlcpy(explfilemenu[1].name, file.name, 43); for (temp = 4; temp < 8; temp++) @@ -291,13 +292,24 @@ int filemenu(fs_entry file){ sprintf(explfilemenu[2].name, "\nSize: %d %s", file.size, sizevalues[temp - 4]); + if (f_stat(getnextloc(currentpath, file.name), &attribs)) + explfilemenu[3].property = -1; + else { + explfilemenu[3].property = 0; + sprintf(explfilemenu[3].name, "Attribs: %c%c%c%c", + (attribs.fattrib & AM_RDO) ? 'R' : '-', + (attribs.fattrib & AM_SYS) ? 'S' : '-', + (attribs.fattrib & AM_HID) ? 'H' : '-', + (attribs.fattrib & AM_ARC) ? 'A' : '-'); + } + if (strstr(file.name, ".bin") != NULL && file.size & ISKB){ - explfilemenu[7].property = 1; + explfilemenu[8].property = 1; } else - explfilemenu[7].property = -1; + explfilemenu[8].property = -1; - temp = makemenu(explfilemenu, 9); + temp = makemenu(explfilemenu, 10); switch (temp){ case COPY: @@ -322,8 +334,29 @@ int filemenu(fs_entry file){ int foldermenu(){ int res; + FILINFO attribs; - res = makemenu(explfoldermenu, 5); + if (!strcmp(rootpath, currentpath)){ + explfoldermenu[4].property = -1; + explfoldermenu[5].property = -1; + } + else { + explfoldermenu[4].property = 1; + explfoldermenu[5].property = 1; + } + + if (f_stat(currentpath, &attribs)) + explfoldermenu[1].property = -1; + else { + explfoldermenu[1].property = 0; + sprintf(explfoldermenu[1].name, "Attribs: %c%c%c%c", + (attribs.fattrib & AM_RDO) ? 'R' : '-', + (attribs.fattrib & AM_SYS) ? 'S' : '-', + (attribs.fattrib & AM_HID) ? 'H' : '-', + (attribs.fattrib & AM_ARC) ? 'A' : '-'); + } + + res = makemenu(explfoldermenu, 6); switch (res){ case EXITFOLDER: @@ -359,9 +392,9 @@ void fileexplorer(const char *startpath){ readfolder(currentpath); if (strcmp(rootpath, "emmc:/")) - explfilemenu[5].property = 1; + explfilemenu[6].property = 1; else - explfilemenu[5].property = -1; + explfilemenu[6].property = -1; while (1){ res = makefilemenu(fileobjects, getfileobjamount(), currentpath); diff --git a/source/tegraexplorer/fs.h b/source/tegraexplorer/fs.h index 00e16ac..11f6467 100644 --- a/source/tegraexplorer/fs.h +++ b/source/tegraexplorer/fs.h @@ -45,4 +45,4 @@ enum foldermenuoptions { int readfolder(const char *path); void fileexplorer(const char *startpath); -char *getnextloc(char *current, char *add); \ No newline at end of file +char *getnextloc(const char *current, const char *add); \ No newline at end of file diff --git a/source/tegraexplorer/gfx.c b/source/tegraexplorer/gfx.c index 2d9a5e6..643c85d 100644 --- a/source/tegraexplorer/gfx.c +++ b/source/tegraexplorer/gfx.c @@ -27,7 +27,7 @@ void clearscreen(){ gfx_clear_grey(0x1B); gfx_box(0, 0, 719, 15, COLOR_WHITE); gfx_con_setpos(0, 0); - gfx_printf("%k%KTegraexplorer v1.1.1%k%K\n", COLOR_DEFAULT, COLOR_WHITE, COLOR_WHITE, COLOR_DEFAULT); + gfx_printf("%k%KTegraexplorer v1.2.0%k%K\n", COLOR_DEFAULT, COLOR_WHITE, COLOR_WHITE, COLOR_DEFAULT); } int message(u32 color, const char* message, ...){ diff --git a/source/tegraexplorer/io.c b/source/tegraexplorer/io.c index f3a6835..400739e 100644 --- a/source/tegraexplorer/io.c +++ b/source/tegraexplorer/io.c @@ -86,9 +86,6 @@ int copy(const char *locin, const char *locout, bool print, bool canCancel){ return 23; } - if ((res = f_chmod(locout, in_info.fattrib, 0x3F))) - return res; - buff = malloc (BUFSIZE); sizeoffile = f_size(&in); totalsize = sizeoffile; @@ -123,6 +120,9 @@ int copy(const char *locin, const char *locout, bool print, bool canCancel){ f_close(&out); free(buff); + if ((res = f_chmod(locout, in_info.fattrib, 0x3A))) + return res; + return 0; } @@ -216,9 +216,6 @@ int copy_recursive(char *path, char *dstpath){ if (f_stat(startpath, &fno)) return 22; - if ((res = f_chmod(destpath, fno.fattrib, 0x3F))) - return res; - while (!f_readdir(&dir, &fno) && fno.fname[0]){ if (fno.fattrib & AM_DIR){ copy_recursive(getnextloc(startpath, fno.fname), destpath); @@ -244,5 +241,8 @@ int copy_recursive(char *path, char *dstpath){ free(destpath); free(destfoldername); + if ((res = f_chmod(destpath, fno.fattrib, 0x3A))) + return res; + return 0; } \ No newline at end of file