summaryrefslogtreecommitdiff
path: root/utilities/lexdump.c
diff options
context:
space:
mode:
Diffstat (limited to 'utilities/lexdump.c')
-rw-r--r--utilities/lexdump.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/utilities/lexdump.c b/utilities/lexdump.c
new file mode 100644
index 0000000..25ff5d7
--- /dev/null
+++ b/utilities/lexdump.c
@@ -0,0 +1,52 @@
+#include <ctype.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef __GNUC__
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+int main(int argc, char **argv) {
+ char *tmpbuf;
+ int idxfd, datfd;
+ long offset;
+ unsigned int size;
+ char datbuf[255];
+
+ if (argc != 3) {
+ fprintf(stderr, "usage: %s <datapath/datafilebasename> <index>\n", argv[0]);
+ exit(1);
+ }
+
+ tmpbuf = calloc(strlen(argv[1]) + 11,1);
+ sprintf(tmpbuf, "%s.idx", argv[1]);
+ idxfd = open(tmpbuf, O_RDONLY|O_BINARY, S_IREAD|S_IWRITE|S_IRGRP|S_IROTH);
+ sprintf(tmpbuf, "%s.dat", argv[1]);
+ datfd = open(tmpbuf, O_RDONLY|O_BINARY, S_IREAD|S_IWRITE|S_IRGRP|S_IROTH);
+ free(tmpbuf);
+
+ offset = atoi(argv[2]) * 6;
+ lseek(idxfd, offset, SEEK_SET);
+ read(idxfd, &offset, 4);
+ read(idxfd, &size, 2);
+ printf("offset: %ld; size: %d\n", offset, size);
+ lseek(datfd, offset, SEEK_SET);
+ read(datfd, datbuf, 40);
+ datbuf[40] = 0;
+ printf("%s\n", datbuf);
+ close(datfd);
+ close(idxfd);
+ return 0;
+
+}