summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2018-09-28 20:22:01 +0800
committerIru Cai <mytbk920423@gmail.com>2018-09-28 20:22:37 +0800
commit7c4575d0b1669e50fa45bd715320b99281ae34d7 (patch)
treeb483ab56963e0857c8be181f1fe4d7f416268690
parent39b06f01d327c55664307f2ba767ea5d2f40bb66 (diff)
downloadrich4-7c4575d0b1669e50fa45bd715320b99281ae34d7.tar.xz
macro MKF_INFO to show the number of chunks in mkf
- also add an mkf parser
-rw-r--r--csrc/mkf.c12
-rw-r--r--csrc/test/parse_mkf.c36
2 files changed, 48 insertions, 0 deletions
diff --git a/csrc/mkf.c b/csrc/mkf.c
index f7ee4a4..e0e1375 100644
--- a/csrc/mkf.c
+++ b/csrc/mkf.c
@@ -20,6 +20,15 @@ struct mkf
};
struct mkf mkf_stdata[16] = { { NULL_HND, NULL } }; // 0x4762f4
+#ifdef MKF_INFO
+static int mkfc[16];
+
+int mkf_nchunks(int i)
+{
+ return mkfc[i];
+}
+#endif
+
int load_mkf(const char *fn)
{
int i;
@@ -44,6 +53,9 @@ int load_mkf(const char *fn)
fseek(fp, x, SEEK_SET);
mkf_stdata[i].data = malloc(t);
fread(mkf_stdata[i].data, 1, t, fp);
+#ifdef MKF_INFO
+ mkfc[i] = t / 4;
+#endif
return i;
}
diff --git a/csrc/test/parse_mkf.c b/csrc/test/parse_mkf.c
new file mode 100644
index 0000000..1ff8130
--- /dev/null
+++ b/csrc/test/parse_mkf.c
@@ -0,0 +1,36 @@
+/* gcc -m32 -I.. -DMKF_INFO=1 parse_mkf.c ../mkf.c ../mkf_00455040.c -o parse_mkf */
+
+#include <stdio.h>
+#include <stdint.h>
+#include "mkf.h"
+
+struct mkf
+{
+ FILE *handle;
+ void *data;
+};
+int pixel_fmt = 1;
+extern struct mkf mkf_stdata[];
+int mkf_nchunks(int idx);
+
+int main(int argc, char *argv[])
+{
+ if (argc < 2)
+ return 1;
+
+ int mkf = load_mkf(argv[1]);
+ FILE *fp = mkf_stdata[mkf].handle;
+ int nchunks = mkf_nchunks(mkf);
+ uint32_t *data = mkf_stdata[mkf].data;
+
+ for (int i = 0; i < nchunks; i++) {
+ printf("chunk %d: offset = 0x%08x\n", i, data[i]);
+ fseek(fp, data[i], SEEK_SET);
+ uint32_t meta[4];
+ fread(meta, 4, 4, fp);
+ printf("real size = %d, original size = %d, gdata offset = 0x%08x, gsize = %d\n",
+ meta[0], meta[1], meta[2], meta[3]);
+ }
+
+ unload_mkf(mkf);
+}