diff options
Diffstat (limited to 'utilities/imp2ld.cpp')
-rw-r--r-- | utilities/imp2ld.cpp | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/utilities/imp2ld.cpp b/utilities/imp2ld.cpp new file mode 100644 index 0000000..adcea56 --- /dev/null +++ b/utilities/imp2ld.cpp @@ -0,0 +1,155 @@ +#include <ctype.h> +#include <stdio.h> +#include <fcntl.h> +#include <errno.h> +#include <stdlib.h> + +#ifndef __GNUC__ +#include <io.h> +#else +#include <unistd.h> +#endif + +#include <iostream> +#include <string> +#include <rawld.h> +#include <rawld4.h> +#include <zld.h> +#include <zipcomprs.h> + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +int readline(FILE* infile, char* linebuffer) { + signed char c; + char* lbPtr = linebuffer; + while ((c = fgetc(infile)) != EOF) { + *lbPtr++ = c; + if (c == 10) { + *lbPtr = 0; + return (strlen(linebuffer)); + } + } + return 0; +} + +int main(int argc, char **argv) { + + const char * helptext ="imp2ld 1.0 Lexicon/Dictionary/Daily Devotional/Glossary module creation tool for the SWORD Project\n usage:\n %s <filename> [modname] [ 4 (default) | 2 | z - module driver]\n"; + + signed long i = 0; + char* keybuffer = new char[2048]; + char* entbuffer = new char[1048576]; + char* linebuffer = new char[1048576]; + char modname[16]; + + if (argc > 2) { + strcpy (modname, argv[2]); + } + else if (argc > 1) { + for (i = 0; (i < 16) && (argv[1][i]) && (argv[1][i] != '.'); i++) { + modname[i] = argv[1][i]; + } + modname[i] = 0; + } + else { + fprintf(stderr, helptext, argv[0]); + exit(-1); + } + + FILE *infile; + infile = fopen(argv[1], "r"); + + char mode = 1; + if (argc > 3) { + switch (*argv[3]) { + case 'z': + mode = 3; + break; + case '2': + mode = 2; + break; + default: + mode = 1; + } + } + + zLD* modZ; + RawLD* mod2; + RawLD4* mod4; + SWKey* key; + + if (mode == 3) { + zLD::createModule(modname); + modZ = new zLD(modname, 0, 0, 30, new ZipCompress()); + key = modZ->CreateKey(); + } + else if (mode == 2) { + RawLD::createModule(modname); + mod2 = new RawLD(modname); + key = mod2->CreateKey(); + } + else if (mode == 1) { + RawLD4::createModule(modname); + mod4 = new RawLD4(modname); + key = mod4->CreateKey(); + } + + key->Persist(1); + + while (readline(infile, linebuffer)) { + if (!strncmp(linebuffer, "$$$", 3)) { + if (strlen(keybuffer) && strlen(entbuffer)) { + std::cout << keybuffer << std::endl; + *key = keybuffer; + + if (mode == 3) { + modZ->SetKey(*key); + modZ->setEntry(entbuffer, strlen(entbuffer)); + } + else if (mode == 2) { + mod2->SetKey(*key); + mod2->setEntry(entbuffer, strlen(entbuffer)); + } + else if (mode == 1) { + mod4->SetKey(*key); + mod4->setEntry(entbuffer, strlen(entbuffer)); + } + } + linebuffer[strlen(linebuffer) - 1] = 0; + strcpy (keybuffer, linebuffer + 3); + *entbuffer = 0; + } + else { + strcat (entbuffer, linebuffer); + } + } + + //handle final entry + if (strlen(keybuffer) && strlen(entbuffer)) { + std::cout << keybuffer << std::endl; + *key = keybuffer; + + if (mode == 3) { + modZ->SetKey(*key); + modZ->setEntry(entbuffer, strlen(entbuffer)); + } + else if (mode == 2) { + mod2->SetKey(*key); + mod2->setEntry(entbuffer, strlen(entbuffer)); + } + else if (mode == 1) { + mod4->SetKey(*key); + mod4->setEntry(entbuffer, strlen(entbuffer)); + } + } + + //DEBUG printTree(root, treeKey); + + delete keybuffer; + delete entbuffer; + delete linebuffer; + + return 0; +} |