GBA-Exploader/arm9/source/GBA_ini.cpp
ApacheThunder 11ea610150 Fix fifo ...
* FIFO on arm7 appears to now work as intended.
* GBA mode switch funcition remains broken.
* Default GBA_Exploader.ini file now created if one is not present.
* Moved GBA_File struct to ctrl_tble and removed duplicate from main.c.
This was causing issues where I would forget to update both when I
removed the now unused Alias char array. All code now shares the single
instance which will prevent this issue should this struct need to be
updated in the future.
2024-05-08 15:24:51 -05:00

139 lines
2.5 KiB
C++

#include <nds.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fat.h>
#include <sys/iosupport.h>
#include "GBA_ini.h"
struct ini_file ini;
extern u8 *rwbuf;
extern u8 defaultSettings[];
extern u8 defaultSettingsEnd[];
void GBA_ini() {
FILE *fini;
int len, p, s;
char key[20];
ini.multi = 1;
strcpy(ini.save_dir, "/GBA_SAVE");
strcpy(ini.sign_dir, "/GBA_SIGN");
if(access("/GBA_ExpLoader.ini", F_OK) == 0) {
fini = fopen("/GBA_ExpLoader.ini", "rb");
if(access(ini.save_dir, F_OK) != 0)mkdir(ini.save_dir, 0777);
if(access(ini.sign_dir, F_OK) != 0)mkdir(ini.sign_dir, 0777);
} else {
fini = fopen("/GBA_ExpLoader.ini", "wb");
if (fini) {
fwrite(defaultSettings, (defaultSettingsEnd - defaultSettings), 1, fini);
fclose(fini);
}
if(access(ini.save_dir, F_OK) != 0)mkdir(ini.save_dir, 0777);
if(access(ini.sign_dir, F_OK) != 0)mkdir(ini.sign_dir, 0777);
return;
}
len = fread(rwbuf, 1, 0x1000, fini);
p = 0;
while(p < len) {
if(rwbuf[p] == '#' || rwbuf[p] == '!') {
while(p < len) {
if(rwbuf[p] == 0x0A)break;
p++;
}
p++;
}
s = 0;
while(rwbuf[p] >= 0x20 && rwbuf[p] < 0x7F) {
key[s] = rwbuf[p];
s++;
p++;
}
key[s] = 0;
if(strcmp(key, "SaveDir") == 0) {
s = 0;
while(p < len) {
if(rwbuf[p] == 0x20 || rwbuf[p] == '\t')
p++;
else break;
}
if(rwbuf[p] == 0x22) {
p++;
while((p < len) && (rwbuf[p] != 0x22)) {
if(s < 63)
ini.save_dir[s] = rwbuf[p];
s++;
p++;
}
} else {
while(p < len) {
if(rwbuf[p] <= 0x20 || rwbuf[p] >= 0x7F)
break;
if(s < 63)
ini.save_dir[s] = rwbuf[p];
s++;
p++;
}
}
ini.save_dir[s] = 0;
}
if(strcmp(key, "SignDir") == 0) {
s = 0;
while(p < len) {
if(rwbuf[p] == 0x20 || rwbuf[p] == '\t')
p++;
else break;
}
if(rwbuf[p] == 0x22) {
p++;
while((p < len) && (rwbuf[p] != 0x22)) {
if(s < 63)
ini.sign_dir[s] = rwbuf[p];
s++;
p++;
}
} else {
while(p < len) {
if(rwbuf[p] <= 0x20 || rwbuf[p] >= 0x7F)
break;
if(s < 63)
ini.sign_dir[s] = rwbuf[p];
s++;
p++;
}
}
ini.sign_dir[s] = 0;
}
if(strcmp(key, "No_MultiSave") == 0) {
ini.multi = 0;
}
while(p < len) {
p++;
if(rwbuf[p - 1] == 0x0A)
break;
}
}
fclose(fini);
if(ini.save_dir[0] != '/')
strcpy(ini.save_dir, "/GBA_SAVE");
if(ini.sign_dir[0] != '/')
strcpy(ini.sign_dir, "/GBA_SIGN");
mkdir(ini.save_dir, 0777);
mkdir(ini.sign_dir, 0777);
}