diff options
Diffstat (limited to 'utilities/addgb.cpp')
-rw-r--r-- | utilities/addgb.cpp | 303 |
1 files changed, 155 insertions, 148 deletions
diff --git a/utilities/addgb.cpp b/utilities/addgb.cpp index 5925ae0..034dc5e 100644 --- a/utilities/addgb.cpp +++ b/utilities/addgb.cpp @@ -1,148 +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 <entriesblk.h>
-#include <iostream.h>
-#include <string>
-#include <stdio.h>
-#include <treekeyidx.h>
-#include <rawgenbook.h>
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-void printTree(TreeKeyIdx treeKey, TreeKeyIdx *target = 0, int level = 1) {
- if (!target)
- target = &treeKey;
-
- unsigned long currentOffset = target->getOffset();
- cout << ((currentOffset == treeKey.getOffset()) ? "==>" : "");
- for (int i = 0; i < level; i++) cout << "\t";
- cout << treeKey.getLocalName() << "/\n";
- if (treeKey.firstChild()) {
- printTree(treeKey, target, level+1);
- treeKey.parent();
- }
- if (treeKey.nextSibling())
- printTree(treeKey, target, level);
-
-}
-
-
-int main(int argc, char **argv) {
-
- const char * helptext ="addgb 1.0 General Book module creation tool for the SWORD Project\nUse -a to add a new leaf entry from standard input or a file\n usage:\n %s -a <filename> <key> [</path/to/file/with/entry>]\n";
-
- // const char * helptext ="addgb 1.0 General Book module creation tool for the SWORD Project\nUse -a to add a new leaf entry from standard input or a file, -d to delete an\nentry, -l to link two leaf entries.\n usage:\n %s -a <filename> <key> [</path/to/file/with/entry>]\n %s -d <filename> <key>\n %s -l <filename> <first key (already assigned)> <second key>\n";
-
- char mode;
- unsigned long entrysize;
-
- if (argc < 3) {
- fprintf(stderr, helptext, argv[0]);
- exit(-1);
- }
-
- mode = argv[1][1];
-
- // Do some initialization stuff
- TreeKeyIdx *treeKey = new TreeKeyIdx(argv[2]);
- if (treeKey->Error()) {
- treeKey->create(argv[2]);
- delete treeKey;
- treeKey = new TreeKeyIdx(argv[2]);
- RawGenBook::createModule(argv[2]);
- }
- delete treeKey;
- RawGenBook *book = new RawGenBook(argv[2]);
- TreeKeyIdx root = *((TreeKeyIdx *)((SWKey *)(*book)));
- treeKey = (TreeKeyIdx *)(SWKey *)(*book);
-
- if ((mode == 'a') && (argc == 4 || argc == 5)) {
- char buffer[1048576]; //this is the max size of any entry
-
- char* tok = strtok(argv[3], "/");
- while (tok) {
- bool foundkey = false;
- if (treeKey->hasChildren()) {
- treeKey->firstChild();
- if (!strcmp(treeKey->getLocalName(), tok)) {
- foundkey = true;
- } else {
- while (treeKey->nextSibling()) {
- if (treeKey->getLocalName()) {
- if (!strcmp(treeKey->getLocalName(), tok)) {
- foundkey = true;
- }
- }
- }
- }
- if (!foundkey) {
- treeKey->append();
- treeKey->setLocalName(tok);
- treeKey->save();
- }
- }
- else {
- treeKey->appendChild();
- treeKey->setLocalName(tok);
- treeKey->save();
- }
-
- //DEBUG cout << treeKey->getLocalName() << " : " << tok << endl;
-
- tok = strtok(NULL, "/");
-
- }
-
- FILE *infile;
- // case: add from text file
- //Open our data file and read its contents into the buffer
- if (argc == 5) infile = fopen(argv[4], "r");
- // case: add from stdin
- else infile = stdin;
-
- entrysize = fread(buffer, sizeof(char), sizeof(buffer), infile);
- book->setentry(buffer, entrysize); // save text to module at current position
- }
-
- /*
- // let's pretend these don't exist for the time being
-
- // Link 2 verses
- else if ((mode == 'l') && argc == 5) {
- *key = argv[3];
- mod.SetKey(*key);
-
- SWKey tmpkey = argv[4];
- mod << &(tmpkey);
- }
-
- // Delete an entry
- else if ((mode == 'd') && argc == 4) {
- mod.SetKey(argv[3]);
- mod.deleteEntry();
- }
- */
- // Bad arguments, print usage
- else {
- fprintf(stderr, helptext, argv[0]);
- exit(-1);
- }
-
- //DEBUG printTree(root, treeKey);
-
- delete treeKey;
- delete book;
- return 0;
-}
+#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 <entriesblk.h> +#include <iostream> +#include <string> +#include <stdio.h> +#include <treekeyidx.h> +#include <rawgenbook.h> + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +#ifndef NO_SWORD_NAMESPACE +using sword::TreeKeyIdx; +using sword::RawGenBook; +using sword::SWKey; +#endif + + +void printTree(TreeKeyIdx treeKey, TreeKeyIdx *target = 0, int level = 1) { + if (!target) + target = &treeKey; + + unsigned long currentOffset = target->getOffset(); + std::cout << ((currentOffset == treeKey.getOffset()) ? "==>" : ""); + for (int i = 0; i < level; i++) std::cout << "\t"; + std::cout << treeKey.getLocalName() << "/\n"; + if (treeKey.firstChild()) { + printTree(treeKey, target, level+1); + treeKey.parent(); + } + if (treeKey.nextSibling()) + printTree(treeKey, target, level); + +} + + +int main(int argc, char **argv) { + + const char * helptext ="addgb 1.0 General Book module creation tool for the SWORD Project\nUse -a to add a new leaf entry from standard input or a file\n usage:\n %s -a <filename> <key> [</path/to/file/with/entry>]\n"; + + // const char * helptext ="addgb 1.0 General Book module creation tool for the SWORD Project\nUse -a to add a new leaf entry from standard input or a file, -d to delete an\nentry, -l to link two leaf entries.\n usage:\n %s -a <filename> <key> [</path/to/file/with/entry>]\n %s -d <filename> <key>\n %s -l <filename> <first key (already assigned)> <second key>\n"; + + char mode; + unsigned long entrysize; + + if (argc < 3) { + fprintf(stderr, helptext, argv[0]); + exit(-1); + } + + mode = argv[1][1]; + + // Do some initialization stuff + TreeKeyIdx *treeKey = new TreeKeyIdx(argv[2]); + if (treeKey->Error()) { + treeKey->create(argv[2]); + delete treeKey; + treeKey = new TreeKeyIdx(argv[2]); + RawGenBook::createModule(argv[2]); + } + delete treeKey; + RawGenBook *book = new RawGenBook(argv[2]); + TreeKeyIdx root = *((TreeKeyIdx *)((SWKey *)(*book))); + treeKey = (TreeKeyIdx *)(SWKey *)(*book); + + if ((mode == 'a') && (argc == 4 || argc == 5)) { + char buffer[1048576]; //this is the max size of any entry + + char* tok = strtok(argv[3], "/"); + while (tok) { + bool foundkey = false; + if (treeKey->hasChildren()) { + treeKey->firstChild(); + if (!strcmp(treeKey->getLocalName(), tok)) { + foundkey = true; + } else { + while (treeKey->nextSibling()) { + if (treeKey->getLocalName()) { + if (!strcmp(treeKey->getLocalName(), tok)) { + foundkey = true; + } + } + } + } + if (!foundkey) { + treeKey->append(); + treeKey->setLocalName(tok); + treeKey->save(); + } + } + else { + treeKey->appendChild(); + treeKey->setLocalName(tok); + treeKey->save(); + } + + //DEBUG std::cout << treeKey->getLocalName() << " : " << tok << endl; + + tok = strtok(NULL, "/"); + + } + + FILE *infile; + // case: add from text file + //Open our data file and read its contents into the buffer + if (argc == 5) infile = fopen(argv[4], "r"); + // case: add from stdin + else infile = stdin; + + entrysize = fread(buffer, sizeof(char), sizeof(buffer), infile); + book->setEntry(buffer, entrysize); // save text to module at current position + } + + /* + // let's pretend these don't exist for the time being + + // Link 2 verses + else if ((mode == 'l') && argc == 5) { + *key = argv[3]; + mod.setKey(*key); + + SWKey tmpkey = argv[4]; + mod << &(tmpkey); + } + + // Delete an entry + else if ((mode == 'd') && argc == 4) { + mod.setKey(argv[3]); + mod.deleteEntry(); + } + */ + // Bad arguments, print usage + else { + fprintf(stderr, helptext, argv[0]); + exit(-1); + } + + //DEBUG printTree(root, treeKey); + + delete treeKey; + delete book; + return 0; +} |