Skip to content

Commit

Permalink
Ability to setup a default font
Browse files Browse the repository at this point in the history
  • Loading branch information
d0k3 committed Aug 1, 2018
1 parent 03d1255 commit 9a227b9
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 1 deletion.
1 change: 1 addition & 0 deletions arm9/source/filesys/filetype.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
#define FTYPE_SCRIPT(tp) (tp&(TXT_SCRIPT))
#define FTYPE_FONT(tp) (tp&(FONT_PBM))
#define FTYPE_GFX(tp) (tp&(GFX_PNG))
#define FTYPE_SETABLE(tp) (tp&(FONT_PBM))
#define FTYPE_BOOTABLE(tp) (tp&(SYS_FIRM))
#define FTYPE_INSTALLABLE(tp) (tp&(SYS_FIRM))
#define FTYPE_AGBSAVE(tp) (tp&(SYS_AGBSAVE))
Expand Down
45 changes: 45 additions & 0 deletions arm9/source/filesys/support.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,51 @@ size_t LoadSupportFile(const char* fname, void* buffer, size_t max_len)
return 0;
}

bool SaveSupportFile(const char* fname, void* buffer, size_t len)
{
const char* base_paths[] = { SUPPORT_FILE_PATHS };
int idx = -1;

// check for existing support file path
for (u32 i = 0; (idx < 0) && (i < countof(base_paths)); i++) {
if (fvx_stat(base_paths[i], NULL) == FR_OK)
idx = i;
}

// create path if required
for (u32 i = 0; (idx < 0) && (i < countof(base_paths)); i++) {
if (fvx_rmkdir(base_paths[i]) == FR_OK)
idx = i;
}

// write support file
if (idx >= 0) {
char path[256];
snprintf(path, 256, "%s/%s", base_paths[idx], fname);
fvx_unlink(path);
if (fvx_qwrite(path, buffer, 0, len, NULL) == FR_OK)
return true;
}

return false;
}

bool SetAsSupportFile(const char* fname, const char* source)
{
u32 len = fvx_qsize(source);
if (!len) return false;

void* buffer = malloc(len);
if (!buffer) return false;

bool res = false;
if (fvx_qread(source, buffer, 0, len, NULL) == FR_OK)
res = SaveSupportFile(fname, buffer, len);
free(buffer);

return res;
}

bool GetSupportDir(char* path, const char* dname)
{
const char* base_paths[] = { SUPPORT_DIR_PATHS };
Expand Down
2 changes: 2 additions & 0 deletions arm9/source/filesys/support.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

bool CheckSupportFile(const char* fname);
size_t LoadSupportFile(const char* fname, void* buffer, size_t max_len);
bool SaveSupportFile(const char* fname, void* buffer, size_t len);
bool SetAsSupportFile(const char* fname, const char* source);

bool CheckSupportDir(const char* fpath);
bool FileSelectorSupport(char* result, const char* text, const char* dname, const char* pattern);
12 changes: 11 additions & 1 deletion arm9/source/godmode.c
Original file line number Diff line number Diff line change
Expand Up @@ -1044,6 +1044,7 @@ u32 FileHandlerMenu(char* current_path, u32* cursor, u32* scroll, PaneData** pan
bool scriptable = (FTYPE_SCRIPT(filetype));
bool fontable = (FTYPE_FONT(filetype));
bool viewable = (FTYPE_GFX(filetype));
bool setable = (FTYPE_SETABLE(filetype));
bool bootable = (FTYPE_BOOTABLE(filetype));
bool installable = (FTYPE_INSTALLABLE(filetype));
bool agbexportable = (FTYPE_AGBSAVE(filetype) && (drvtype & DRV_VIRTUAL) && (drvtype & DRV_SYSNAND));
Expand Down Expand Up @@ -1109,7 +1110,7 @@ u32 FileHandlerMenu(char* current_path, u32* cursor, u32* scroll, PaneData** pan
(filetype & BIN_LEGKEY) ? "Build " KEYDB_NAME :
(filetype & BIN_NCCHNFO)? "NCCHinfo options..." :
(filetype & TXT_SCRIPT) ? "Execute GM9 script" :
(filetype & FONT_PBM) ? "Set as active font" :
(filetype & FONT_PBM) ? "Font options..." :
(filetype & GFX_PNG) ? "View PNG file" :
(filetype & HDR_NAND) ? "Rebuild NCSD header" :
(filetype & NOIMG_NAND) ? "Rebuild NCSD header" : "???";
Expand Down Expand Up @@ -1259,6 +1260,7 @@ u32 FileHandlerMenu(char* current_path, u32* cursor, u32* scroll, PaneData** pan
int view = (viewable) ? ++n_opt : -1;
int agbexport = (agbexportable) ? ++n_opt : -1;
int agbimport = (agbimportable) ? ++n_opt : -1;
int setup = (setable) ? ++n_opt : -1;
if (mount > 0) optionstr[mount-1] = (filetype & GAME_TMD) ? "Mount CXI/NDS to drive" : "Mount image to drive";
if (restore > 0) optionstr[restore-1] = "Restore SysNAND (safe)";
if (ebackup > 0) optionstr[ebackup-1] = "Update embedded backup";
Expand Down Expand Up @@ -1290,6 +1292,7 @@ u32 FileHandlerMenu(char* current_path, u32* cursor, u32* scroll, PaneData** pan
if (font > 0) optionstr[font-1] = "Set as active font";
if (agbexport > 0) optionstr[agbexport-1] = "Dump GBA VC save";
if (agbimport > 0) optionstr[agbimport-1] = "Inject GBA VC save";
if (setup > 0) optionstr[setup-1] = "Set as default";

// auto select when there is only one option
user_select = (n_opt <= 1) ? n_opt : (int) ShowSelectPrompt(n_opt, optionstr, (n_marked > 1) ?
Expand Down Expand Up @@ -1831,6 +1834,13 @@ u32 FileHandlerMenu(char* current_path, u32* cursor, u32* scroll, PaneData** pan
}
return 0;
}
else if (user_select == setup) { // set as default (font)
if (filetype & FONT_PBM) {
if (SetAsSupportFile("font.pbm", file_path))
ShowPrompt(false, "%s\nFont will be active on next boot", pathstr);
}
return 0;
}

return FileHandlerMenu(current_path, cursor, scroll, pane);
}
Expand Down

0 comments on commit 9a227b9

Please sign in to comment.