diff options
Diffstat (limited to 'utilities/imp2ld.cpp')
-rw-r--r-- | utilities/imp2ld.cpp | 73 |
1 files changed, 58 insertions, 15 deletions
diff --git a/utilities/imp2ld.cpp b/utilities/imp2ld.cpp index a92bbc5..86c8394 100644 --- a/utilities/imp2ld.cpp +++ b/utilities/imp2ld.cpp @@ -35,15 +35,20 @@ int readline(FILE* infile, char* linebuffer) { } 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]; - + char links = 0; + char* linkbuffer[32]; + while (i < 32) { + linkbuffer[i] = new char[256]; + i++; + } if (argc > 2) { strcpy (modname, argv[2]); } @@ -57,7 +62,7 @@ int main(int argc, char **argv) { fprintf(stderr, helptext, argv[0]); exit(-1); } - + FILE *infile; infile = fopen(argv[1], "r"); @@ -74,7 +79,7 @@ int main(int argc, char **argv) { mode = 1; } } - + zLD* modZ; RawLD* mod2; RawLD4* mod4; @@ -95,9 +100,9 @@ int main(int argc, char **argv) { mod4 = new RawLD4(modname); key = mod4->CreateKey(); } - + key->Persist(1); - + while (readline(infile, linebuffer)) { if (!strncmp(linebuffer, "$$$", 3)) { if (strlen(keybuffer) && strlen(entbuffer)) { @@ -107,19 +112,40 @@ int main(int argc, char **argv) { if (mode == 3) { modZ->setKey(*key); modZ->setEntry(entbuffer, strlen(entbuffer)); + for (i = 0; i < links; i++) { + SWKey tmpkey = linkbuffer[i]; + modZ->linkEntry(&tmpkey); + std::cout << "Linking: " << linkbuffer[i] << std::endl; + } } else if (mode == 2) { mod2->setKey(*key); mod2->setEntry(entbuffer, strlen(entbuffer)); + for (i = 0; i < links; i++) { + SWKey tmpkey = linkbuffer[i]; + mod2->linkEntry(&tmpkey); + std::cout << "Linking: " << linkbuffer[i] << std::endl; + } } else if (mode == 1) { mod4->setKey(*key); mod4->setEntry(entbuffer, strlen(entbuffer)); + for (i = 0; i < links; i++) { + SWKey tmpkey = linkbuffer[i]; + mod4->linkEntry(&tmpkey); + std::cout << "Linking: " << linkbuffer[i] << std::endl; + } } } linebuffer[strlen(linebuffer) - 1] = 0; strcpy (keybuffer, linebuffer + 3); *entbuffer = 0; + links = 0; + } + else if (!strncmp(linebuffer, "%%%", 3)) { + strcpy (linkbuffer[links], linebuffer + 3); + linkbuffer[links][strlen(linkbuffer[links]) - 1] = 0; + links++; } else { strcat (entbuffer, linebuffer); @@ -132,24 +158,41 @@ int main(int argc, char **argv) { *key = keybuffer; if (mode == 3) { - modZ->setKey(*key); - modZ->setEntry(entbuffer, strlen(entbuffer)); + modZ->setKey(*key); + modZ->setEntry(entbuffer, strlen(entbuffer)); + for (i = 0; i < links; i++) { + SWKey tmpkey = linkbuffer[i]; + modZ->linkEntry(&tmpkey); + std::cout << "Linking: " << linkbuffer[i] << std::endl; + } } else if (mode == 2) { - mod2->setKey(*key); - mod2->setEntry(entbuffer, strlen(entbuffer)); + mod2->setKey(*key); + mod2->setEntry(entbuffer, strlen(entbuffer)); + for (i = 0; i < links; i++) { + SWKey tmpkey = linkbuffer[i]; + mod2->linkEntry(&tmpkey); + std::cout << "Linking: " << linkbuffer[i] << std::endl; + } + } else if (mode == 1) { - mod4->setKey(*key); - mod4->setEntry(entbuffer, strlen(entbuffer)); + mod4->setKey(*key); + mod4->setEntry(entbuffer, strlen(entbuffer)); + for (i = 0; i < links; i++) { + SWKey tmpkey = linkbuffer[i]; + mod4->linkEntry(&tmpkey); + std::cout << "Linking: " << linkbuffer[i] << std::endl; + } + } } - + //DEBUG printTree(root, treeKey); delete keybuffer; delete entbuffer; delete linebuffer; - + return 0; } |