aboutsummaryrefslogtreecommitdiffstats
path: root/examples/cmdline/search.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/cmdline/search.cpp')
-rw-r--r--examples/cmdline/search.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/examples/cmdline/search.cpp b/examples/cmdline/search.cpp
new file mode 100644
index 0000000..ec55b14
--- /dev/null
+++ b/examples/cmdline/search.cpp
@@ -0,0 +1,63 @@
+#include <stdio.h>
+#include <rawtext.h>
+#include <swmgr.h>
+#include <regex.h> // GNU
+#include <iostream>
+
+void percentUpdate(char percent, void *userData) {
+ static char printed = 0;
+ char maxHashes = *((char *)userData);
+
+ while ((((float)percent)/100) * maxHashes > printed) {
+ std::cout << "=";
+ printed++;
+ std::cout.flush();
+ }
+/*
+ std::cout << (int)percent << "% ";
+*/
+ std::cout.flush();
+}
+
+
+int main(int argc, char **argv)
+{
+ SWMgr manager;
+ SWModule *target;
+ ListKey listkey;
+ VerseKey vk;
+ ModMap::iterator it;
+
+ if ((argc != 3) && (argc != 5)) {
+ fprintf(stderr, "usage: %s <modname> <\"search string\"> [\"min\" \"max\"]\n", argv[0]);
+ exit(-1);
+ }
+
+ it = manager.Modules.find(argv[1]);
+ if (it == manager.Modules.end()) {
+ fprintf(stderr, "Could not find module [%s]. Available modules:\n", argv[1]);
+ for (it = manager.Modules.begin(); it != manager.Modules.end(); it++) {
+ fprintf(stderr, "[%s]\t - %s\n", (*it).second->Name(), (*it).second->Description());
+ }
+ exit(-1);
+ }
+
+ target = (*it).second;
+
+ if (argc == 5) { // if min / max specified
+ vk.LowerBound(argv[3]);
+ vk.UpperBound(argv[4]);
+ vk.Persist(1);
+ target->SetKey(vk);
+ }
+
+ std::cout << "[0=================================50===============================100]\n ";
+ char lineLen = 70;
+ listkey = target->Search(argv[2], -2, 0/*REG_ICASE*/, 0, 0, &percentUpdate, &lineLen);
+ std::cout << "\n";
+ while (!listkey.Error()) {
+ std::cout << (const char *)listkey << std::endl;
+ listkey++;
+ }
+
+}