summaryrefslogtreecommitdiff
path: root/src/tool
diff options
context:
space:
mode:
Diffstat (limited to 'src/tool')
-rw-r--r--src/tool/dir.cpp91
-rw-r--r--src/tool/dir.h60
-rw-r--r--src/tool/tool.cpp323
-rw-r--r--src/tool/tool.h57
4 files changed, 531 insertions, 0 deletions
diff --git a/src/tool/dir.cpp b/src/tool/dir.cpp
new file mode 100644
index 0000000..b3ee204
--- /dev/null
+++ b/src/tool/dir.cpp
@@ -0,0 +1,91 @@
+/*:*
+ *: File: ./src/tool/dir.cpp
+ *:
+ *: yChat; Homepage: ychat.buetow.org; Version 0.9.0-CURRENT
+ *:
+ *: Copyright (C) 2003 Paul C. Buetow, Volker Richter
+ *: Copyright (C) 2004 Paul C. Buetow
+ *: Copyright (C) 2005 EXA Digital Solutions GbR
+ *: Copyright (C) 2006, 2007 Paul C. Buetow
+ *:
+ *: This program is free software; you can redistribute it and/or
+ *: modify it under the terms of the GNU General Public License
+ *: as published by the Free Software Foundation; either version 2
+ *: of the License, or (at your option) any later version.
+ *:
+ *: This program is distributed in the hope that it will be useful,
+ *: but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *: GNU General Public License for more details.
+ *:
+ *: You should have received a copy of the GNU General Public License
+ *: along with this program; if not, write to the Free Software
+ *: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *:*/
+
+#ifndef DIR_CPP
+#define DIR_CPP
+
+#include "dir.h"
+
+using namespace std;
+
+dir::dir()
+{
+ b_open = false;
+}
+
+dir::~dir()
+{
+ vec_dir.clear();
+ close_dir();
+}
+
+bool
+dir::open_dir( char *c_dir )
+{
+ string s_dir( c_dir );
+ return open_dir( s_dir );
+}
+
+bool
+dir::open_dir( string &s_dir )
+{
+ if ( b_open )
+ return false;
+
+ p_d = opendir( s_dir.c_str() );
+
+ if ( p_d == NULL )
+ return false; // Could not open dir.
+
+ b_open = true;
+
+ return true; // Could open dir with success.
+}
+
+void
+dir::close_dir()
+{
+ if ( b_open && p_d != NULL )
+ {
+ closedir( p_d );
+ b_open = false;
+ }
+}
+
+void
+dir::read_dir()
+{
+ if ( p_d != NULL )
+ while ( p_ep = readdir( p_d ) )
+ vec_dir.push_back( string( p_ep->d_name ) );
+}
+
+vector<string>
+dir::get_dir_vec()
+{
+ return vec_dir;
+}
+
+#endif
diff --git a/src/tool/dir.h b/src/tool/dir.h
new file mode 100644
index 0000000..39cb5c8
--- /dev/null
+++ b/src/tool/dir.h
@@ -0,0 +1,60 @@
+/*:*
+ *: File: ./src/tool/dir.h
+ *:
+ *: yChat; Homepage: ychat.buetow.org; Version 0.9.0-CURRENT
+ *:
+ *: Copyright (C) 2003 Paul C. Buetow, Volker Richter
+ *: Copyright (C) 2004 Paul C. Buetow
+ *: Copyright (C) 2005 EXA Digital Solutions GbR
+ *: Copyright (C) 2006, 2007 Paul C. Buetow
+ *:
+ *: This program is free software; you can redistribute it and/or
+ *: modify it under the terms of the GNU General Public License
+ *: as published by the Free Software Foundation; either version 2
+ *: of the License, or (at your option) any later version.
+ *:
+ *: This program is distributed in the hope that it will be useful,
+ *: but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *: GNU General Public License for more details.
+ *:
+ *: You should have received a copy of the GNU General Public License
+ *: along with this program; if not, write to the Free Software
+ *: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *:*/
+
+
+#ifndef DIR_H
+#define DIR_H
+
+#include <stddef.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <dirent.h>
+
+#include <vector>
+
+#include "../incl.h"
+
+using namespace std;
+
+class dir
+{
+private:
+ bool b_open;
+ DIR *p_d;
+ struct dirent *p_ep;
+ vector<string> vec_dir;
+
+public:
+ dir();
+ ~dir();
+
+ bool open_dir( char *c_dir );
+ bool open_dir( string &s_dir );
+ void close_dir();
+ void read_dir();
+ vector<string> get_dir_vec();
+};
+
+#endif
diff --git a/src/tool/tool.cpp b/src/tool/tool.cpp
new file mode 100644
index 0000000..8a012b8
--- /dev/null
+++ b/src/tool/tool.cpp
@@ -0,0 +1,323 @@
+/*:*
+ *: File: ./src/tool/tool.cpp
+ *:
+ *: yChat; Homepage: ychat.buetow.org; Version 0.9.0-CURRENT
+ *:
+ *: Copyright (C) 2003 Paul C. Buetow, Volker Richter
+ *: Copyright (C) 2004 Paul C. Buetow
+ *: Copyright (C) 2005 EXA Digital Solutions GbR
+ *: Copyright (C) 2006, 2007 Paul C. Buetow
+ *:
+ *: This program is free software; you can redistribute it and/or
+ *: modify it under the terms of the GNU General Public License
+ *: as published by the Free Software Foundation; either version 2
+ *: of the License, or (at your option) any later version.
+ *:
+ *: This program is distributed in the hope that it will be useful,
+ *: but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *: GNU General Public License for more details.
+ *:
+ *: You should have received a copy of the GNU General Public License
+ *: along with this program; if not, write to the Free Software
+ *: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *:*/
+
+#ifndef TOOL_CPP
+#define TOOL_CPP
+
+#include <ctype.h>
+#include <time.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <fcntl.h>
+
+#include "tool.h"
+
+bool
+tool::is_alpha_numeric( string &s_digit )
+{
+ const char *p_digit = s_digit.c_str();
+ int i_len = strlen( p_digit );
+
+ for ( int i=0; i<i_len; i++ )
+ {
+ if ( ! isalnum( *p_digit ) )
+ return false;
+ p_digit++;
+ }
+
+ return true;
+}
+
+string
+tool::int2string( int i_int )
+{
+ char buf[64];
+ sprintf(buf, "%d", i_int);
+ return buf;
+}
+
+string
+tool::long2string( long l_long )
+{
+ char buf[64];
+ sprintf(buf, "%d", l_long);
+ return buf;
+}
+
+long
+tool::unixtime()
+{
+ time_t clock;
+ return (long) time( &clock );
+}
+
+int
+tool::string2int( string s_digit )
+{
+ const char *p_digit = s_digit.c_str();
+ int i_res = 0;
+
+ // Convert each digit char and add into result.
+ while (*p_digit >= '0' && *p_digit <='9')
+ {
+ i_res = (i_res * 10) + (*p_digit - '0');
+ p_digit++;
+ }
+
+ // Check that there were no non-digits at end.
+ if (*p_digit != 0)
+ {
+ return -1;
+ }
+
+ return i_res;
+}
+
+string
+tool::to_lower( string s_str )
+{
+ string s_tmp("");
+
+ for ( int i = 0; i < s_str.size() ;i++ )
+ s_tmp = s_tmp + (char) tolower( s_str.at(i) );
+
+ return s_tmp;
+}
+
+void
+tool::strip_html( string *p_str)
+{
+ int i_pos;
+
+ if ( (i_pos=p_str->find("<", 0)) == string::npos )
+ return;
+
+ while (true)
+ {
+ p_str->replace(i_pos, 1, "&lt;");
+
+ if ( (i_pos = p_str->find("<", 0)) == string::npos )
+ return;
+ }
+}
+
+string
+tool::ychat_version()
+{
+ return "yChat " + string(VERSION)
+ + "-" + string(BRANCH)
+ + " Build " + int2string(BUILDNR);
+}
+
+list<string>
+tool::split_string(string s_string, string s_split)
+{
+ list<string> list_ret;
+ unsigned i_pos, i_len = s_split.length();
+
+ while ( (i_pos = s_string.find(s_split)) != (unsigned) string::npos )
+ {
+ list_ret.push_back( s_string.substr(0, i_pos) );
+ s_string = s_string.substr( i_pos + i_len );
+ }
+
+ list_ret.push_back( s_string );
+
+ return list_ret;
+}
+
+string
+tool::trim( string s_str )
+{
+ if ( s_str.empty() )
+ return s_str;
+
+ char c_cur = s_str[0];
+ int i_pos = 0;
+
+ // left trim
+ while ( c_cur == ' '|| c_cur == '\n' || c_cur == '\r' )
+ {
+ s_str.erase(i_pos,1);
+ c_cur = s_str[++i_pos];
+ }
+
+ // right trim
+ i_pos = s_str.size();
+ c_cur = s_str[s_str.size()];
+
+ while ( c_cur == ' ' || c_cur == '\n' || c_cur == '\0' || c_cur == '\r' )
+ {
+ s_str.erase(i_pos, 1);
+ c_cur = s_str[--i_pos];
+ }
+
+ return s_str;
+}
+
+char*
+tool::clean_char( char* c_str )
+{
+ // Ralf:
+ for ( char* c_pos = c_str; *c_pos != '\0'; ++c_pos )
+ if ( iscntrl(*c_pos) )
+ *c_pos = ' ';
+
+ return c_str;
+}
+
+string
+tool::replace( string s_string, string s_search, string s_replace )
+{
+ unsigned i_pos[2];
+
+ for ( i_pos[0] = s_string.find( s_search );
+ i_pos[0] != (unsigned) string::npos;
+ i_pos[0] = s_string.find( s_search, i_pos[1] ) )
+ {
+ s_string.replace( i_pos[0], s_search.length(), s_replace );
+ i_pos[1] = i_pos[0] + s_replace.length();
+ }
+
+ return s_string;
+}
+
+string
+tool::get_extension( string s_file )
+{
+ int i_pos = s_file.find_last_of(".");
+
+ if ( i_pos != string::npos )
+ {
+ string s_ext = s_file.substr(i_pos+1, s_file.size()-i_pos-1 );
+ for ( int i = 0; i < s_ext.size(); ++i )
+ s_ext[i] = tolower(s_ext[i]);
+
+ return to_lower(s_ext);
+ }
+
+ return "";
+}
+
+char*
+tool::int2char( int i_int )
+{
+ char *buf = new char[64];
+ sprintf(buf, "%d", i_int);
+ return buf;
+}
+
+string
+tool::shell_command( string s_command, method m_method )
+{
+ FILE *file;
+ char buf[READBUF];
+ char *c_pos;
+ string s_ret = "";
+
+ wrap::system_message(SHELLEX);
+ wrap::system_message(s_command);
+
+ if ( (file=popen(s_command.c_str(), "r")) == NULL )
+ {
+ wrap::system_message( SHELLER );
+ }
+ else
+ {
+ while (true)
+ {
+ if (fgets(buf, READBUF, file) == NULL)
+ break;
+
+ switch (m_method)
+ {
+ default:
+ s_ret.append("\n" + string(buf));
+ } // switch
+ }
+
+ pclose(file);
+ }
+
+ return s_ret;
+}
+
+string
+tool::url_decode( string s_url )
+{
+ string s_dest = "";
+ int i_len = s_url.size();
+ int i_prv = i_len - 2;
+
+ char c;
+ for ( int i = 0; i < i_len; ++i)
+ {
+ c = s_url.at(i);
+ if ( c == '+' )
+ {
+ s_dest += " ";
+ }
+ else if (c == '%' && i < i_prv)
+ {
+ string s_tmp = s_url.substr(i+1, 2);
+ c = (char) htoi(s_tmp);
+ s_dest += c;
+ i += 2;
+ }
+ else
+ {
+ s_dest += c;
+ }
+ }
+
+ return s_dest;
+}
+
+int
+tool::htoi(string &s_str)
+{
+ int value, c;
+ c = s_str.at(0);
+
+ if ( isupper(c) )
+ c = tolower(c);
+
+ value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16;
+
+ c = s_str.at(1);
+
+ if ( isupper(c) )
+ c = tolower(c);
+
+ value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;
+
+ return value;
+}
+
+
+#endif
+
diff --git a/src/tool/tool.h b/src/tool/tool.h
new file mode 100644
index 0000000..c1ad616
--- /dev/null
+++ b/src/tool/tool.h
@@ -0,0 +1,57 @@
+/*:*
+ *: File: ./src/tool/tool.h
+ *:
+ *: yChat; Homepage: ychat.buetow.org; Version 0.9.0-CURRENT
+ *:
+ *: Copyright (C) 2003 Paul C. Buetow, Volker Richter
+ *: Copyright (C) 2004 Paul C. Buetow
+ *: Copyright (C) 2005 EXA Digital Solutions GbR
+ *: Copyright (C) 2006, 2007 Paul C. Buetow
+ *:
+ *: This program is free software; you can redistribute it and/or
+ *: modify it under the terms of the GNU General Public License
+ *: as published by the Free Software Foundation; either version 2
+ *: of the License, or (at your option) any later version.
+ *:
+ *: This program is distributed in the hope that it will be useful,
+ *: but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *: GNU General Public License for more details.
+ *:
+ *: You should have received a copy of the GNU General Public License
+ *: along with this program; if not, write to the Free Software
+ *: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *:*/
+
+#ifndef TOOL_H
+#define TOOL_H
+
+#include "../incl.h"
+
+#include <list>
+
+using namespace std;
+
+class tool
+{
+public:
+ static list<string> split_string(string s_string, string s_split);
+ static bool is_alpha_numeric( string &s_digit );
+ static char* int2char( int i_int );
+ static char* clean_char( char* c_str);
+ static string trim( string s_str );
+ static string replace( string s_string, string s_search, string s_replace );
+ static string int2string( int i_int );
+ static string long2string( long l_long );
+ static long unixtime();
+ static int string2int( string s_digit );
+ static string get_extension( string s_file );
+ static string to_lower( string s_str );
+ static void strip_html( string *p_str );
+ static string shell_command( string s_command, method m_method );
+ static string ychat_version();
+ static string url_decode(string s_url);
+ static int htoi(string &s_str);
+};
+
+#endif