From 7c4575d0b1669e50fa45bd715320b99281ae34d7 Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Fri, 28 Sep 2018 20:22:01 +0800 Subject: macro MKF_INFO to show the number of chunks in mkf - also add an mkf parser --- csrc/mkf.c | 12 ++++++++++++ csrc/test/parse_mkf.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 csrc/test/parse_mkf.c 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 +#include +#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); +} -- cgit v1.2.3