aboutsummaryrefslogtreecommitdiff
path: root/utils/dumpmiles
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2017-10-20 04:28:53 +0300
committerWohlstand <admin@wohlnet.ru>2017-10-20 04:28:53 +0300
commiteb45a7913d83fe2a3dc03033230950e78fb9755d (patch)
treed7318e79b08404f293fb99bb22e0ed202e07d890 /utils/dumpmiles
parente95cde9fea4f9daf3e19492021b8a153acae0404 (diff)
downloadlibADLMIDI-eb45a7913d83fe2a3dc03033230950e78fb9755d.tar.gz
libADLMIDI-eb45a7913d83fe2a3dc03033230950e78fb9755d.tar.bz2
libADLMIDI-eb45a7913d83fe2a3dc03033230950e78fb9755d.zip
Added CMake support
Diffstat (limited to 'utils/dumpmiles')
-rw-r--r--utils/dumpmiles/dumpmiles.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/utils/dumpmiles/dumpmiles.cpp b/utils/dumpmiles/dumpmiles.cpp
new file mode 100644
index 0000000..832da93
--- /dev/null
+++ b/utils/dumpmiles/dumpmiles.cpp
@@ -0,0 +1,52 @@
+//#ifdef __MINGW32__
+//typedef struct vswprintf {} swprintf;
+//#endif
+#include <cstdio>
+#include <vector>
+
+static void LoadMiles(const char* fn)
+{
+ FILE* fp = fopen(fn, "rb");
+ if(!fp)
+ {
+ std::fprintf(stderr, "ERROR: Can't open %s file!", fn);
+ return;
+ }
+
+ std::fseek(fp, 0, SEEK_END);
+ std::vector<unsigned char> data(ftell(fp));
+ std::rewind(fp);
+ size_t got = std::fread(&data[0], 1, data.size(), fp);
+ std::fclose(fp);
+
+ if(got == 0)
+ {
+ std::fprintf(stderr, "ERROR: Can't read %s file!", fn);
+ return;
+ }
+
+ for(unsigned a=0; a<500; ++a)
+ {
+ unsigned gmnumber = data[a*6+0];
+ unsigned gmnumber2 = data[a*6+1];
+ unsigned offset = *(unsigned*)&data[a*6+2];
+
+ if(gmnumber == 0xFF) break;
+ int gmno = gmnumber2==0x7F ? gmnumber+0x80 : gmnumber;
+ unsigned length = data[offset] + data[offset+1]*256;
+ signed char notenum = data[offset+2];
+
+ std::printf("%02X %02X ", gmnumber,gmnumber2); //, offset);
+ for(unsigned b=0; b<length; ++b)
+ {
+ if(b > 3 && (b-3)%11 == 0) printf("\n ");
+ std::printf("%02X ", data[offset+b]);
+ }
+ std::printf("\n");
+ }
+}
+
+int main(int argc, const char* const* argv)
+{
+ LoadMiles(argv[1]);
+}