summaryrefslogtreecommitdiff
path: root/tools/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/utils.c')
-rw-r--r--tools/utils.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/tools/utils.c b/tools/utils.c
new file mode 100644
index 0000000..c544f20
--- /dev/null
+++ b/tools/utils.c
@@ -0,0 +1,76 @@
+#include <string>
+#include <sstream>
+#include <iomanip>
+//#include <stdlib.h> /* for abs() */
+#include <cmath>
+#include <ctype.h> /* for isalnum() */
+
+// strip off the directory part of a path, leaving just
+// the basic filename
+std::string basename(const std::string path){
+ size_t where = path.rfind("/");
+ if (where != std::string::npos) return path.substr(1+where);
+ return path;
+}
+
+////////////////
+// little utility to help with argument parsing:
+//
+int prefix(const std::string shorter, const std::string longer){
+ return shorter == longer.substr(0, shorter.length());
+}
+
+///////////////
+// print a time as (-)hh:mm:ss
+//
+std::string time_out(const int _ttt){
+using namespace std;
+ int ttt(abs(_ttt));
+ int sec(ttt % 60);
+ int min((ttt / 60) % 60);
+ int hr(ttt / 3600);
+ stringstream foo;
+ int didsome(0);
+ if (_ttt < 0) foo << "-";
+ if (hr) {
+ foo << hr << ":";
+ didsome++;
+ }
+ if (didsome || min){
+ foo << setw(didsome?2:1) << setfill('0') << min << ":";
+ didsome++;
+ }
+ foo << setw(didsome?2:1) << setfill('0') << sec;
+ return foo.str();
+}
+
+std::string toLower(const std::string a){
+ std::string rslt = a;
+ std::string::iterator rr;
+ for (rr = rslt.begin(); rr != rslt.end(); rr++){
+ *rr = tolower(*rr);
+ }
+ return rslt;
+}
+
+////////////////
+std::string ltrim(const std::string foo){
+ size_t where = foo.find_first_not_of(" \t\r\n");
+ if (where == foo.npos) return foo;
+ return foo.substr(where);
+}
+
+static const std::string Pure_Enough("+-_.,@%~");
+
+std::string purify(const std::string arg){
+ using namespace std;
+ string rslt(arg);
+ for (string::iterator ptr = rslt.begin();
+ ptr != rslt.end(); ptr++){
+ char ch = *ptr;
+ if (isalnum(ch)) continue;
+ if (Pure_Enough.find(ch) != string::npos) continue;
+ *ptr = '~';
+ }
+ return rslt;
+}