aboutsummaryrefslogtreecommitdiff
path: root/src/ARCodeFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ARCodeFile.cpp')
-rw-r--r--src/ARCodeFile.cpp61
1 files changed, 38 insertions, 23 deletions
diff --git a/src/ARCodeFile.cpp b/src/ARCodeFile.cpp
index d2f47ff..57c710d 100644
--- a/src/ARCodeFile.cpp
+++ b/src/ARCodeFile.cpp
@@ -35,8 +35,21 @@ ARCodeFile::ARCodeFile(const char* filename)
Categories.clear();
+ if (!Load())
+ Error = true;
+}
+
+ARCodeFile::~ARCodeFile()
+{
+ Categories.clear();
+}
+
+bool ARCodeFile::Load()
+{
FILE* f = Platform::OpenFile(Filename, "r");
- if (!f) return;
+ if (!f) return true;
+
+ Categories.clear();
bool isincat = false;
ARCodeCat curcat;
@@ -60,15 +73,14 @@ ARCodeFile::ARCodeFile(const char* filename)
if (!strncasecmp(start, "CAT", 3))
{
char catname[128];
- int ret = sscanf(start, "CAT %127[^\n]", catname);
+ int ret = sscanf(start, "CAT %127[^\r\n]", catname);
catname[127] = '\0';
if (ret < 1)
{
printf("AR: malformed CAT line: %s\n", start);
fclose(f);
- Error = true;
- return;
+ return false;
}
if (isincode) curcat.Codes.push_back(curcode);
@@ -84,23 +96,21 @@ ARCodeFile::ARCodeFile(const char* filename)
{
int enable;
char codename[128];
- int ret = sscanf(start, "CODE %d %127[^\n]", &enable, codename);
+ int ret = sscanf(start, "CODE %d %127[^\r\n]", &enable, codename);
codename[127] = '\0';
if (ret < 2)
{
printf("AR: malformed CODE line: %s\n", start);
fclose(f);
- Error = true;
- return;
+ return false;
}
if (!isincat)
{
printf("AR: encountered CODE line with no category started\n");
fclose(f);
- Error = true;
- return;
+ return false;
}
if (isincode) curcat.Codes.push_back(curcode);
@@ -119,24 +129,21 @@ ARCodeFile::ARCodeFile(const char* filename)
{
printf("AR: malformed data line: %s\n", start);
fclose(f);
- Error = true;
- return;
+ return false;
}
if (!isincode)
{
printf("AR: encountered data line with no code started\n");
fclose(f);
- Error = true;
- return;
+ return false;
}
if (curcode.CodeLen >= 2*64)
{
printf("AR: code too long!\n");
fclose(f);
- Error = true;
- return;
+ return false;
}
u32 idx = curcode.CodeLen;
@@ -150,27 +157,35 @@ ARCodeFile::ARCodeFile(const char* filename)
if (isincat) Categories.push_back(curcat);
fclose(f);
+ return true;
+}
+
+bool ARCodeFile::Save()
+{
+ FILE* f = Platform::OpenFile(Filename, "w");
+ if (!f) return false;
- printf("PARSED OUTPUT\n");
for (ARCodeCatList::iterator it = Categories.begin(); it != Categories.end(); it++)
{
ARCodeCat& cat = *it;
- printf("CAT %s\n", cat.Name);
+
+ if (it != Categories.begin()) fprintf(f, "\n");
+ fprintf(f, "CAT %s\n\n", cat.Name);
for (ARCodeList::iterator jt = cat.Codes.begin(); jt != cat.Codes.end(); jt++)
{
ARCode& code = *jt;
- printf("CODE %d %s\n", code.Enabled, code.Name);
+ fprintf(f, "CODE %d %s\n", code.Enabled, code.Name);
for (u32 i = 0; i < code.CodeLen; i+=2)
{
- printf("%08X %08X\n", code.Code[i], code.Code[i+1]);
+ fprintf(f, "%08X %08X\n", code.Code[i], code.Code[i+1]);
}
+
+ fprintf(f, "\n");
}
}
-}
-ARCodeFile::~ARCodeFile()
-{
- //
+ fclose(f);
+ return true;
}